extends SceneTree ## Boundary coverage for owned canonical unique employment reports. ## Current definitions supply values; synthetic identity/link cases are disclosed. var checks := 0 var failures := 0 var runtime: Variant var clock: Variant var state: Variant func _initialize() -> void: call_deferred("run") func expect(ok: bool, label: String) -> void: checks += 1 if not ok: failures += 1 push_error("UNIQUE_CONTRACT_REPORT: " + label) func row_for(staff_id: StringName) -> Dictionary: for row: Dictionary in runtime.get_staff_management_report()[&"staff"]: if row[&"staff_id"] == staff_id: return row return {} func effect_for(staff_id: StringName) -> Dictionary: var row := row_for(staff_id) var contract: Dictionary = row.get(&"unique_contract", {}) var effects: Array = contract.get(&"passive_effects", []) return effects[0] if effects.size() == 1 else {} func run() -> void: runtime = load("res://autoload/simulation_runtime.gd").new() clock = load("res://autoload/game_clock.gd").new() state = load("res://autoload/game_state.gd").new() clock.reset(1, 6, 0) state.reset() expect(runtime.initialize(clock, state, 42602)[&"valid"], "canonical content initializes") clock.set_paused(true) expect(runtime.submit_command(&"hire_staff_candidate", {&"candidate_id": &"heroine_anri"}).is_success(), "normal approved command joins canonical Anri") expect(runtime.submit_command(&"hire_staff_candidate", {&"candidate_id": &"staff_akane"}).is_success(), "normal paid candidate remains available") var unassigned := row_for(&"heroine_anri") var contract: Dictionary = unassigned.get(&"unique_contract", {}) expect(contract.get(&"canonical_id") == &"heroine_anri" and contract.get(&"free_employment") == true and contract.get(&"free_upkeep") == true and contract.get(&"permanent_removal_forbidden") == true, "report connects canonical free and protected employment") expect(row_for(&"staff_akane").get(&"unique_contract", {}).is_empty(), "ordinary paid actor receives no unique contract") expect(effect_for(&"heroine_anri").get(&"multiplier_bp") == 12000 and effect_for(&"heroine_anri").get(&"applied") == false and not effect_for(&"heroine_anri").has(&"floor_y"), "unassigned report preserves original effect but has no invented target") var panel := StaffManagementPanel.new() var unassigned_text: String = panel._unique_contract_text(unassigned) expect(unassigned_text.contains("雇用・維持費無料") and unassigned_text.contains("解雇・売却不可") and unassigned_text.contains("未適用(配属先なし・施設不在)"), "UI presents valid unassigned contract without a false active floor") expect(panel._unique_contract_text(row_for(&"staff_akane")).is_empty(), "ordinary UI does not infer unique identity from wages") identity_boundaries() for request: Array in [[&"reception", Vector3i(-6,0,0)], [&"warehouse", Vector3i(-6,0,1)], [&"premium_room", Vector3i(-6,2,0)], [&"warehouse", Vector3i(-6,2,1)], [&"service_stairs", Vector3i(-7,1,1)], [&"service_stairs", Vector3i(-7,2,1)]]: var built: CommandResult = runtime.submit_command(&"build_facility", {&"definition_id": request[0], &"origin": request[1]}) expect(built.is_success(), "normal construction provides accessible upper-floor fixtures") if not built.is_success(): finish(panel) return clock.advance_minutes(runtime.definition_registry.get_facility(request[0]).build_minutes) var workplace: FacilityInstance var room: FacilityInstance for facility: FacilityInstance in runtime.facility_service.get_instances(): if facility.definition_id == &"warehouse" and facility.origin.y == 2: workplace = facility if facility.definition_id == &"premium_room": room = facility expect(workplace != null and room != null, "real upper workplace and opposite-layer room exist") if workplace == null or room == null: finish(panel) return expect(runtime.submit_command(&"set_staff_work_assignment", {&"staff_id": &"heroine_anri", &"facility_id": workplace.instance_id, &"template_id": &"NIGHT"}).is_success(), "normal assignment uses existing path/role/capacity checks") var effect := effect_for(&"heroine_anri") expect(effect.get(&"applied") == true and effect.get(&"floor_y") == 2 and effect.get(&"assigned_facility_id") == workplace.instance_id and effect.get(&"scope") == &"ASSIGNED_FLOOR_ALL_LAYERS", "report exposes actual planned target floor across both layers") expect(runtime.get_floor_price_multiplier(2) == effect[&"multiplier_bp"] and runtime.get_floor_price_multiplier(0) == 10000 and runtime.get_facility_business_price(room) == 264, "presentation matches existing real pricing without changing its rounding") expect(panel._unique_contract_text(row_for(&"heroine_anri")).contains("対象:3F(表層・裏層の全施設)"), "UI converts saved target Y with the existing floor naming convention") var worker: StaffRuntime = runtime.staff_service.get_staff(&"heroine_anri") var old_state := worker.state worker.state = StaffRuntime.State.OFF_DUTY # Disclosed read-only applicability boundary fixture. expect(effect_for(&"heroine_anri").get(&"applied") == true and runtime.get_floor_price_multiplier(2) == 12000, "passive placement does not acquire an attendance condition") worker.state = old_state var old_operation := workplace.operation_state workplace.operation_state = FacilityInstance.OperationState.SUSPENDED # Presentation-only boundary fixture. expect(effect_for(&"heroine_anri").get(&"applied") == true and runtime.get_floor_price_multiplier(2) == 12000, "passive placement does not acquire a workplace-operation condition") workplace.operation_state = old_operation var before: Dictionary = runtime.create_snapshot() var before_bytes: PackedByteArray = var_to_bytes(before) var exposed := row_for(&"heroine_anri") exposed[&"unique_contract"][&"free_upkeep"] = false exposed[&"unique_contract"][&"passive_effects"][0][&"floor_y"] = -999 exposed[&"unique_contract"][&"passive_effects"].clear() expect(effect_for(&"heroine_anri").get(&"floor_y") == 2 and row_for(&"heroine_anri")[&"unique_contract"][&"free_upkeep"] == true, "report callers cannot mutate future contract/effect presentation") expect(runtime.create_snapshot() == before and var_to_bytes(runtime.create_snapshot()) == before_bytes, "report and text rendering leave every live field/event/RNG/ID/queue byte unchanged") var missing_plan: Dictionary = runtime.staff_service._work_assignments[&"heroine_anri"].duplicate(true) runtime.staff_service._work_assignments[&"heroine_anri"][&"facility_id"] = &"absent_contract_workplace" # Invalid-link observation fixture, never saved as valid data. expect(effect_for(&"heroine_anri").get(&"applied") == false and not effect_for(&"heroine_anri").has(&"floor_y") and runtime.get_floor_price_multiplier(2) == 10000, "missing facility neither invents a target nor keeps an active bonus") expect(panel._unique_contract_text(row_for(&"heroine_anri")).contains("未適用(配属先なし・施設不在)"), "missing target is actionable in the ordinary detail text") runtime.staff_service._work_assignments[&"heroine_anri"] = missing_plan expect(runtime.create_snapshot() == before and var_to_bytes(runtime.create_snapshot()) == before_bytes, "invalid-link fixture was fully restored before compatibility assertions") var report_before: Dictionary = runtime.get_staff_management_report() expect(runtime.restore_snapshot(before), "unchanged existing schema restores canonical hire and planned placement") expect(runtime.create_snapshot() == before and var_to_bytes(runtime.create_snapshot()) == before_bytes and runtime.get_staff_management_report() == report_before, "normal restore reconstructs report from persisted existing fields without new save values") expect(not runtime.staff_service.remove_staff(&"heroine_anri", &"SOLD").is_success() and not runtime.staff_service.retire_staff(&"heroine_anri").is_success() and runtime.create_snapshot() == before, "visible protection corresponds to existing atomic remove/retire rejection") finish(panel) func identity_boundaries() -> void: for options: Array in [[&"heroine_anri", &"innkeeper", &"FREE_HIRE"], [&"heroine_anri", &"cleaner", &"UNIQUE"], [&"unregistered_unique_fixture", &"innkeeper", &"UNIQUE"], [&"paid_zero_wage_fixture", &"receptionist", &"FREE_HIRE"]]: var staff := StaffRuntime.new().configure(options[0], options[1], {&"employment_kind": options[2], &"daily_wage": 0}) expect(runtime._staff_unique_contract_report(staff).is_empty(), "synthetic wrong identity/kind/role or zero salary is not promoted to canonical unique") var rai := StaffRuntime.new().configure(&"rival_rai", &"influencer", {&"employment_kind": &"UNIQUE"}) var contract: Dictionary = runtime._staff_unique_contract_report(rai) expect(contract.get(&"canonical_id") == &"rival_rai" and contract.get(&"permanent_removal_forbidden") == true and contract.get(&"passive_effects", []).is_empty(), "canonical Rai gets general protection but no invented Anri effect or normal joining") func finish(panel: StaffManagementPanel) -> void: panel.free() runtime.free() clock.free() state.free() print("STAFF_UNIQUE_CONTRACT_REPORT checks=%d failures=%d" % [checks, failures]) quit(failures)