neon-sprawl/client/test/quest_hud_controller_test.gd

90 lines
2.8 KiB
GDScript

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")