Files
TheTree_mock/tests/ui/test_upkeep_inspector.gd
T
Takeshi b84bade045 Save The Tree implementation and acceptance work in progress
Preserve production code, regression fixtures, audio assets and provenance, test infrastructure, and the original-completion plan and progress ledger. Final game and Windows acceptance remain pending; excluded local artifacts and native experiments are not part of this snapshot.
2026-10-11 15:58:00 +09:00

60 lines
3.1 KiB
GDScript

extends SceneTree
const FixtureCleanup := preload("res://tests/helpers/ui_audio_fixture_cleanup.gd")
var checks := 0
var failures := 0
func _initialize() -> void:
call_deferred("_run")
func expect(ok: bool, message: String) -> void:
checks += 1
if not ok:
failures += 1
push_error(message)
func _run() -> void:
var runtime: Variant = root.get_node("SimulationRuntime")
var clock: Variant = root.get_node("GameClock")
var state: Variant = root.get_node("GameState")
clock.reset(1, 6, 0)
state.reset()
runtime.initialize(clock, state, 424242)
clock.set_paused(true)
root.size = Vector2i(1440, 900)
var main: Control = load("res://scenes/main/main.tscn").instantiate()
main.set("manual_save_path", "user://tests/upkeep_inspector_%d" % OS.get_process_id())
root.add_child(main)
await process_frame
runtime.configure_save_policy({&"enabled": false, &"daily_checkpoint_enabled": false})
var definition: FacilityDefinition = runtime.definition_registry.get_facility(&"guest_corridor")
var old_rate := definition.maintenance_gold
definition.maintenance_gold = 1440
expect(runtime.submit_command(&"build_facility", {&"definition_id": &"guest_corridor", &"origin": Vector3i(4, 1, 0)}).is_success(), "public construction accepts infrastructure")
clock.advance_minutes(10)
var facilities: Array = runtime.construction_service.get_facilities()
expect(facilities.size() == 1, "one completed corridor")
if not facilities.is_empty():
var id: StringName = facilities[0][&"instance_id"]
clock.advance_minutes(3)
main.get("world_preview").facility_selected.emit(id)
var report: Dictionary = runtime.get_facility_upkeep_report(id)
expect(report[&"owned"] and report[&"daily_rate"] == 1440 and report[&"unsettled_units"] == 4320, "inspector projection preserves exact ownership accrual")
var text: String = main.get("selected_detail_label").text
expect("設備完成" in text and "1440G / 日" in text and "約3.00G" in text and "未払い 0G" in text, "infrastructure inspector displays daily pending and unpaid amounts")
expect("閉店・休止中" in text and "同期しています" not in text, "completed infrastructure explains ownership instead of a permanent sync placeholder")
var before: Dictionary = runtime.create_snapshot()
main.call("_refresh_selected_entity")
expect(runtime.create_snapshot() == before, "refresh is read only")
if DisplayServer.get_name() != "headless":
for frame in 6:
await process_frame
await RenderingServer.frame_post_draw
DirAccess.make_dir_recursive_absolute("res://artifacts/upkeep-2026-09-29")
expect(root.get_texture().get_image().save_png("res://artifacts/upkeep-2026-09-29/upkeep-inspector.png") == OK, "rendered inspector captured")
definition.maintenance_gold = old_rate
var _audio_cleanup_final: Dictionary = await FixtureCleanup.free_owner_and_wait(self, main)
if not bool(_audio_cleanup_final.get(&"passed", false)):
push_error("Ordinary fixture audio cleanup failed: %s" % str(_audio_cleanup_final))
quit(96)
return
await process_frame
print("%s: %d checks" % ["PASS" if failures == 0 else "FAIL", checks])
quit(failures)