|
|
|
|
@ -7,20 +7,104 @@ const QuestProgressClient := preload("res://scripts/quest_progress_client.gd")
|
|
|
|
|
const QuestDefinitionsClient := preload("res://scripts/quest_definitions_client.gd")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func _build_controller() -> Node:
|
|
|
|
|
class MockHttpTransport:
|
|
|
|
|
extends Node
|
|
|
|
|
signal request_completed(
|
|
|
|
|
result: int, response_code: int, headers: PackedStringArray, body: PackedByteArray
|
|
|
|
|
)
|
|
|
|
|
var response_code: int = 200
|
|
|
|
|
var body_json: String = ""
|
|
|
|
|
|
|
|
|
|
func request(
|
|
|
|
|
_url: String,
|
|
|
|
|
_custom_headers: PackedStringArray = PackedStringArray(),
|
|
|
|
|
_method: HTTPClient.Method = HTTPClient.METHOD_GET,
|
|
|
|
|
_request_data: String = ""
|
|
|
|
|
) -> Error:
|
|
|
|
|
request_completed.emit(
|
|
|
|
|
HTTPRequest.RESULT_SUCCESS,
|
|
|
|
|
response_code,
|
|
|
|
|
PackedStringArray(),
|
|
|
|
|
body_json.to_utf8_buffer()
|
|
|
|
|
)
|
|
|
|
|
return OK
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class NoopHttpTransport:
|
|
|
|
|
extends Node
|
|
|
|
|
signal request_completed(
|
|
|
|
|
result: int, response_code: int, headers: PackedStringArray, body: PackedByteArray
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func request(
|
|
|
|
|
_url: String,
|
|
|
|
|
_custom_headers: PackedStringArray = PackedStringArray(),
|
|
|
|
|
_method: HTTPClient.Method = HTTPClient.METHOD_GET,
|
|
|
|
|
_request_data: String = ""
|
|
|
|
|
) -> Error:
|
|
|
|
|
return OK
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class PendingAcceptHttpTransport:
|
|
|
|
|
extends Node
|
|
|
|
|
signal request_completed(
|
|
|
|
|
result: int, response_code: int, headers: PackedStringArray, body: PackedByteArray
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func request(
|
|
|
|
|
_url: String,
|
|
|
|
|
_custom_headers: PackedStringArray = PackedStringArray(),
|
|
|
|
|
_method: HTTPClient.Method = HTTPClient.METHOD_POST,
|
|
|
|
|
_request_data: String = ""
|
|
|
|
|
) -> Error:
|
|
|
|
|
return OK
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func _make_progress_client(sync_transport: Node, accept_transport: Node = null) -> Node:
|
|
|
|
|
var c: Node = QuestProgressClient.new()
|
|
|
|
|
c.set("injected_sync_http", sync_transport)
|
|
|
|
|
var accept_http: Node = accept_transport if accept_transport != null else sync_transport
|
|
|
|
|
c.set("injected_accept_http", accept_http)
|
|
|
|
|
auto_free(sync_transport)
|
|
|
|
|
if accept_transport != null and accept_transport != sync_transport:
|
|
|
|
|
auto_free(accept_transport)
|
|
|
|
|
auto_free(c)
|
|
|
|
|
add_child(c)
|
|
|
|
|
return c
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func _make_defs_client(transport: Node) -> Node:
|
|
|
|
|
var c: Node = QuestDefinitionsClient.new()
|
|
|
|
|
c.set("injected_http", transport)
|
|
|
|
|
auto_free(transport)
|
|
|
|
|
auto_free(c)
|
|
|
|
|
add_child(c)
|
|
|
|
|
return c
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func _build_controller(
|
|
|
|
|
sync_transport: Node, accept_transport: Node, defs_transport: Node
|
|
|
|
|
) -> Dictionary:
|
|
|
|
|
var controller: Node = QuestHudController.new()
|
|
|
|
|
var progress: Node = QuestProgressClient.new()
|
|
|
|
|
var defs: Node = QuestDefinitionsClient.new()
|
|
|
|
|
var progress: Node = _make_progress_client(sync_transport, accept_transport)
|
|
|
|
|
var defs: Node = _make_defs_client(defs_transport)
|
|
|
|
|
var progress_label := Label.new()
|
|
|
|
|
var accept_label := Label.new()
|
|
|
|
|
auto_free(controller)
|
|
|
|
|
auto_free(progress_label)
|
|
|
|
|
auto_free(accept_label)
|
|
|
|
|
add_child(controller)
|
|
|
|
|
add_child(progress)
|
|
|
|
|
add_child(defs)
|
|
|
|
|
await get_tree().process_frame
|
|
|
|
|
controller.call(
|
|
|
|
|
"setup", progress, defs, progress_label, accept_label, Callable(self, "_noop_http_config")
|
|
|
|
|
)
|
|
|
|
|
await get_tree().process_frame
|
|
|
|
|
return controller
|
|
|
|
|
return {
|
|
|
|
|
"controller": controller,
|
|
|
|
|
"progress": progress,
|
|
|
|
|
"accept_label": accept_label,
|
|
|
|
|
"progress_label": progress_label,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func _noop_http_config(_client: Node) -> void:
|
|
|
|
|
@ -29,32 +113,25 @@ func _noop_http_config(_client: Node) -> void:
|
|
|
|
|
|
|
|
|
|
func test_try_accept_key_input_handles_q_key() -> void:
|
|
|
|
|
# Arrange
|
|
|
|
|
var controller := await _build_controller()
|
|
|
|
|
var built: Dictionary = await _build_controller(
|
|
|
|
|
NoopHttpTransport.new(), PendingAcceptHttpTransport.new(), NoopHttpTransport.new()
|
|
|
|
|
)
|
|
|
|
|
var event := InputEventKey.new()
|
|
|
|
|
event.pressed = true
|
|
|
|
|
event.keycode = KEY_Q
|
|
|
|
|
# Act
|
|
|
|
|
var handled: bool = bool(controller.call("try_accept_key_input", event))
|
|
|
|
|
var handled: bool = bool(built["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")
|
|
|
|
|
var built: Dictionary = await _build_controller(
|
|
|
|
|
NoopHttpTransport.new(), NoopHttpTransport.new(), NoopHttpTransport.new()
|
|
|
|
|
)
|
|
|
|
|
await get_tree().process_frame
|
|
|
|
|
# Act
|
|
|
|
|
var text: String = progress_label.text
|
|
|
|
|
var text: String = str(built["progress_label"].text)
|
|
|
|
|
# Assert
|
|
|
|
|
assert_str(text).contains("Quests:")
|
|
|
|
|
assert_str(text).contains("Loading")
|
|
|
|
|
@ -64,9 +141,15 @@ func test_shift_q_shows_progress_loading_before_snapshot() -> void:
|
|
|
|
|
# Arrange
|
|
|
|
|
var controller: Node = QuestHudController.new()
|
|
|
|
|
var accept_label := Label.new()
|
|
|
|
|
var progress_client: Node = QuestProgressClient.new()
|
|
|
|
|
var defs_client: Node = QuestDefinitionsClient.new()
|
|
|
|
|
auto_free(controller)
|
|
|
|
|
auto_free(accept_label)
|
|
|
|
|
auto_free(progress_client)
|
|
|
|
|
auto_free(defs_client)
|
|
|
|
|
add_child(controller)
|
|
|
|
|
controller.set("_progress_client", QuestProgressClient.new())
|
|
|
|
|
controller.set("_defs_client", QuestDefinitionsClient.new())
|
|
|
|
|
controller.set("_progress_client", progress_client)
|
|
|
|
|
controller.set("_defs_client", defs_client)
|
|
|
|
|
controller.set("_accept_label", accept_label)
|
|
|
|
|
controller.set("_last_snapshot", {})
|
|
|
|
|
controller.set("_progress_error", "")
|
|
|
|
|
@ -76,14 +159,40 @@ func test_shift_q_shows_progress_loading_before_snapshot() -> void:
|
|
|
|
|
assert_str(accept_label.text).contains("progress loading")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func test_shift_q_blocks_when_progress_sync_failed() -> void:
|
|
|
|
|
# Arrange
|
|
|
|
|
var controller: Node = QuestHudController.new()
|
|
|
|
|
var accept_label := Label.new()
|
|
|
|
|
var progress_client: Node = QuestProgressClient.new()
|
|
|
|
|
var defs_client: Node = QuestDefinitionsClient.new()
|
|
|
|
|
auto_free(controller)
|
|
|
|
|
auto_free(accept_label)
|
|
|
|
|
auto_free(progress_client)
|
|
|
|
|
auto_free(defs_client)
|
|
|
|
|
add_child(controller)
|
|
|
|
|
controller.set("_progress_client", progress_client)
|
|
|
|
|
controller.set("_defs_client", defs_client)
|
|
|
|
|
controller.set("_accept_label", accept_label)
|
|
|
|
|
controller.set("_last_snapshot", {})
|
|
|
|
|
controller.set("_progress_error", "HTTP 404 (player unknown)")
|
|
|
|
|
# Act
|
|
|
|
|
controller.call("_request_eligible_accept")
|
|
|
|
|
# Assert
|
|
|
|
|
assert_str(accept_label.text).contains("progress error")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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")
|
|
|
|
|
var built: Dictionary = await _build_controller(
|
|
|
|
|
NoopHttpTransport.new(), PendingAcceptHttpTransport.new(), NoopHttpTransport.new()
|
|
|
|
|
)
|
|
|
|
|
var controller: Node = built["controller"]
|
|
|
|
|
var accept_label: Label = built["accept_label"]
|
|
|
|
|
controller.call("_request_accept", QuestHudController.GATHER_QUEST_ID)
|
|
|
|
|
# Act
|
|
|
|
|
var started: bool = bool(controller.call("_request_accept", QuestHudController.GATHER_QUEST_ID))
|
|
|
|
|
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")
|
|
|
|
|
|