extends "res://addons/gut/test.gd" const DmResponse = preload("res://scripts/net/dm_response.gd") const NarrateResult = preload("res://scripts/net/narrate_result.gd") const NpcResult = preload("res://scripts/net/npc_result.gd") const DmTransport = preload("res://scripts/net/dm_transport.gd") const ProxyConfig = preload("res://scripts/net/proxy_config.gd") func test_dm_response_ok(): var r = DmResponse.ok(200, {"prose": "hi"}) assert_eq(r.status, 200) assert_true(r.transport_ok) assert_eq(r.body, {"prose": "hi"}) assert_eq(r.error, "") func test_dm_response_failed(): var r = DmResponse.failed("boom") assert_false(r.transport_ok) assert_eq(r.status, 0) assert_eq(r.body, null) assert_eq(r.error, "boom") func test_narrate_result_basic(): var r = NarrateResult.new("text", ["a"], false) assert_eq(r.display_text, "text") assert_eq(r.facts, ["a"]) assert_false(r.degraded) func test_narrate_result_fallback(): var r = NarrateResult.fallback("cold chamber") assert_eq(r.display_text, "cold chamber") assert_eq(r.facts, []) assert_true(r.degraded) func test_transport_base_returns_not_implemented(): var t = DmTransport.new() var r = await t.post_json("/x", {}) assert_false(r.transport_ok) assert_eq(r.error, "transport not implemented") func test_proxy_config_default(): ProjectSettings.set_setting(ProxyConfig.SETTING, null) assert_eq(ProxyConfig.base_url(), ProxyConfig.DEFAULT) func test_proxy_config_override(): ProjectSettings.set_setting(ProxyConfig.SETTING, "http://example.test:9000") assert_eq(ProxyConfig.base_url(), "http://example.test:9000") ProjectSettings.set_setting(ProxyConfig.SETTING, null) func test_npc_result_fallback_is_degraded_with_no_moves(): var r = NpcResult.fallback("The figure says nothing.") assert_true(r.degraded) assert_eq(r.display_text, "The figure says nothing.") assert_eq(r.valid_moves, []) assert_eq(r.facts, []) assert_false(r.ends_conversation) func test_request_timeout_default(): if ProjectSettings.has_setting(ProxyConfig.TIMEOUT_SETTING): ProjectSettings.clear(ProxyConfig.TIMEOUT_SETTING) assert_eq(ProxyConfig.request_timeout_seconds(), ProxyConfig.TIMEOUT_DEFAULT) func test_request_timeout_override_and_reject_nonpositive(): var ProxyConfig = preload("res://scripts/net/proxy_config.gd") ProjectSettings.set_setting(ProxyConfig.TIMEOUT_SETTING, 12.5) assert_eq(ProxyConfig.request_timeout_seconds(), 12.5) # A non-positive override must NOT re-enable the hang — falls back to default. ProjectSettings.set_setting(ProxyConfig.TIMEOUT_SETTING, 0.0) assert_eq(ProxyConfig.request_timeout_seconds(), ProxyConfig.TIMEOUT_DEFAULT) ProjectSettings.clear(ProxyConfig.TIMEOUT_SETTING) func test_http_transport_sets_request_timeout(): var HttpTransport = preload("res://scripts/net/http_transport.gd") var ProxyConfig = preload("res://scripts/net/proxy_config.gd") var http := HTTPRequest.new() autofree(http) HttpTransport.new(http) assert_eq(http.timeout, ProxyConfig.request_timeout_seconds()) assert_gt(http.timeout, 0.0) # the whole point — no longer disabled