neon-sprawl/client/test/craft_recipe_panel_test.gd

82 lines
2.4 KiB
GDScript

extends GdUnitTestSuite
## NEO-122 follow-up: craft recipe panel layout + scroll reset on populate.
const CraftRecipePanel := preload("res://scripts/craft_recipe_panel.gd")
static func _sample_recipes() -> Array:
return [
{
"id": "refine_scrap_standard",
"displayName": "Refine Scrap (Standard)",
"inputs": [{"itemId": "scrap_metal_bulk", "quantity": 5}],
},
{
"id": "refine_scrap_efficient",
"displayName": "Refine Scrap (Efficient)",
"inputs": [{"itemId": "scrap_metal_bulk", "quantity": 10}],
},
]
func _build_panel() -> Control:
var panel: Control = CraftRecipePanel.new()
panel.custom_minimum_size = Vector2(656, 360)
var scroll := ScrollContainer.new()
scroll.name = "ScrollContainer"
scroll.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT)
var vbox := VBoxContainer.new()
vbox.name = "VBoxContainer"
scroll.add_child(vbox)
panel.add_child(scroll)
auto_free(panel)
add_child(panel)
await get_tree().process_frame
return panel
func test_populate_builds_one_row_per_recipe() -> void:
# Arrange
var panel := await _build_panel()
# Act
panel.call("populate", _sample_recipes())
await get_tree().process_frame
# Assert
var vbox: VBoxContainer = panel.get_node("ScrollContainer/VBoxContainer")
assert_that(vbox.get_child_count()).is_equal(2)
func test_populate_resets_scroll_to_top() -> void:
# Arrange
var panel := await _build_panel()
var scroll: ScrollContainer = panel.get_node("ScrollContainer")
panel.call("populate", _sample_recipes())
await get_tree().process_frame
scroll.scroll_vertical = 999
# Act
panel.call("populate", _sample_recipes())
await get_tree().process_frame
# Assert
assert_that(scroll.scroll_vertical).is_equal(0)
func test_populate_emits_craft_requested_for_row() -> void:
# Arrange
var panel := await _build_panel()
var captured: Array = []
panel.connect(
"craft_requested", func(recipe_id: String) -> void: captured.append(recipe_id)
)
panel.call("populate", _sample_recipes())
await get_tree().process_frame
var vbox: VBoxContainer = panel.get_node("ScrollContainer/VBoxContainer")
var first_row: VBoxContainer = vbox.get_child(0) as VBoxContainer
var btn_row: HBoxContainer = first_row.get_child(1) as HBoxContainer
var craft_btn: Button = btn_row.get_child(0) as Button
# Act
craft_btn.pressed.emit()
# Assert
assert_that(captured.size()).is_equal(1)
assert_that(str(captured[0])).is_equal("refine_scrap_standard")