91 lines
3.0 KiB
GDScript
91 lines
3.0 KiB
GDScript
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
|