extends GdUnitTestSuite ## NEO-122: quest HUD controller accept key + progress label render. const QuestHudController := preload("res://scripts/quest_hud_controller.gd") const QuestProgressClient := preload("res://scripts/quest_progress_client.gd") const QuestDefinitionsClient := preload("res://scripts/quest_definitions_client.gd") func _build_controller() -> Node: var controller: Node = QuestHudController.new() var progress: Node = QuestProgressClient.new() var defs: Node = QuestDefinitionsClient.new() var progress_label := Label.new() var accept_label := Label.new() add_child(controller) add_child(progress) add_child(defs) controller.call( "setup", progress, defs, progress_label, accept_label, Callable(self, "_noop_http_config") ) await get_tree().process_frame return controller func _noop_http_config(_client: Node) -> void: pass func test_try_accept_key_input_handles_q_key() -> void: # Arrange var controller := await _build_controller() var event := InputEventKey.new() event.pressed = true event.keycode = KEY_Q # Act var handled: bool = bool(controller.call("try_accept_key_input", event)) # Assert assert_bool(handled).is_true() func test_progress_label_shows_loading_before_snapshot() -> void: # Arrange var controller: Node = QuestHudController.new() var progress: Node = QuestProgressClient.new() var defs: Node = QuestDefinitionsClient.new() var progress_label := Label.new() add_child(controller) add_child(progress) add_child(defs) await get_tree().process_frame controller.call( "setup", progress, defs, progress_label, Label.new(), Callable(self, "_noop_http_config") ) await get_tree().process_frame # Act var text: String = progress_label.text # Assert assert_str(text).contains("Quests:") assert_str(text).contains("Loading") func test_shift_q_shows_progress_loading_before_snapshot() -> void: # Arrange var controller: Node = QuestHudController.new() var accept_label := Label.new() add_child(controller) controller.set("_progress_client", QuestProgressClient.new()) controller.set("_defs_client", QuestDefinitionsClient.new()) controller.set("_accept_label", accept_label) controller.set("_last_snapshot", {}) controller.set("_progress_error", "") # Act controller.call("_request_eligible_accept") # Assert assert_str(accept_label.text).contains("progress loading") func test_request_accept_shows_busy_feedback() -> void: # Arrange var controller := await _build_controller() var progress: Node = controller.get("_progress_client") progress.call("request_accept", QuestHudController.GATHER_QUEST_ID) var accept_label: Label = controller.get("_accept_label") # Act var started: bool = bool(controller.call("_request_accept", QuestHudController.GATHER_QUEST_ID)) # Assert assert_bool(started).is_false() assert_str(accept_label.text).contains("busy")