extends SceneTree const Guide = preload("res://scripts/ui/inn_opening_guide.gd") class Registry extends RefCounted: var definition := FacilityDefinition.new() func get_facility(_id): return definition class Staff extends RefCounted: var members: Array[StaffRuntime] = [] var shifts: Array[ShiftInstance] = [] var plans := {} var reads := 0 func get_staff_members(): return members func get_work_assignment(id): return plans.get(id, {}).duplicate(true) func get_shifts(): reads += 1 return shifts.duplicate() class Runtime extends RefCounted: var definition_registry := Registry.new() var staff_service := Staff.new() class Clock extends RefCounted: var absolute_minute := 60 var checks := 0 var failures := 0 func _initialize(): call_deferred("run") func expect(value: bool, label: String): checks += 1 if not value: failures += 1 push_error(label) func run(): var runtime := Runtime.new() var clock := Clock.new() var reception := FacilityInstance.new() reception.instance_id = &"desk" runtime.definition_registry.definition.required_roles = [&"receptionist"] var guide := Guide.new();guide._runtime=runtime;guide._clock=clock expect(not guide._has_reception_assignment(reception), "no employees cannot open reception") var staff := StaffRuntime.new();staff.staff_id=&"worker";staff.role_id=&"manager" runtime.staff_service.members.append(staff);reception.active_staff_ids.append(staff.staff_id) expect(not guide._has_reception_assignment(reception), "active manager is not a receptionist") staff.role_id=&"receptionist" expect(guide._has_reception_assignment(reception), "active receptionist qualifies") reception.active_staff_ids.clear() runtime.staff_service.plans[staff.staff_id]={&"facility_id":&"desk"} expect(guide._has_reception_assignment(reception), "off-duty repeating assignment qualifies") var shift := ShiftInstance.new();shift.staff_id=staff.staff_id;shift.end_at=61;shift.assigned_facility_id=&"desk" runtime.staff_service.shifts.append(shift) runtime.staff_service.plans[staff.staff_id]={&"facility_id":&"elsewhere"} expect(not guide._has_reception_assignment(reception), "current reassignment overrides old shifts") runtime.staff_service.plans.clear() expect(guide._has_reception_assignment(reception), "legacy future shift qualifies without repeating plan") shift.end_at=60 expect(not guide._has_reception_assignment(reception), "shift ending now is expired") shift.end_at=61;shift.cancelled=true expect(not guide._has_reception_assignment(reception), "cancelled future shift cannot qualify") shift.cancelled=false;shift.assigned_facility_id=&"elsewhere" expect(not guide._has_reception_assignment(reception), "other facility shift cannot qualify") shift.assigned_facility_id=&"desk";shift.staff_id=&"missing" expect(not guide._has_reception_assignment(reception), "shift for absent employee cannot qualify") for n in 49: var extra := StaffRuntime.new();extra.staff_id=StringName("extra%d"%n);extra.role_id=&"receptionist";runtime.staff_service.members.append(extra) runtime.staff_service.reads=0 expect(not guide._has_reception_assignment(reception), "unassigned team remains incomplete") expect(runtime.staff_service.reads==1, "historical shifts enumerated once for whole team") shift.staff_id=&"extra48" expect(guide._has_reception_assignment(reception), "last employee legacy assignment remains discoverable") guide.free() print("Opening assignment: %d checks, %d failures"%[checks,failures]);quit(failures)