extends "res://tests/test_case.gd" const AssignmentState = preload("res://scripts/assignment_state.gd") func test_assignment_projection_accepts_verified_enet_manifest() -> void: var assignment := AssignmentState.new() assert_true(assignment.apply({"match_id": "match_1234567890", "server_id": "server_123456789", "player_id": "player_123456789", "slot": 2, "expires_at": "2099-08-31T12:00:00Z", "protocol_version": 1, "transport": "enet", "endpoint": "127.0.0.1:30001", "join_authorisation": "signed"}, "player_123456789"), "valid assignment applies") assert_true(assignment.available, "assignment becomes available only after validation") assert_eq(assignment.transport, "enet", "transport is explicit") assert_eq(assignment.slot, 2, "slot is preserved") assert_eq(assignment.endpoint, "127.0.0.1:30001", "endpoint is preserved") func test_assignment_projection_rejects_wrong_shape_or_unsafe_transport() -> void: var assignment := AssignmentState.new() var valid := {"match_id": "match_1234567890", "server_id": "server_123456789", "player_id": "player_123456789", "slot": 0, "expires_at": "2099-08-31T12:00:00Z", "protocol_version": 1, "transport": "enet", "endpoint": "127.0.0.1:30001", "join_authorisation": "signed"} var out_of_range := valid.duplicate() out_of_range["slot"] = 6 assert_true(not assignment.apply(out_of_range), "out-of-range slot is rejected") var short_id := valid.duplicate() short_id["match_id"] = "match-1" assert_true(not assignment.apply(short_id), "short opaque assignment id is rejected") var fractional_slot := valid.duplicate() fractional_slot["slot"] = 1.5 assert_true(not assignment.apply(fractional_slot), "fractional slot is rejected") var fractional_protocol := valid.duplicate() fractional_protocol["protocol_version"] = 1.5 assert_true(not assignment.apply(fractional_protocol), "fractional protocol version is rejected") assert_true(not assignment.available, "invalid assignment is not exposed") assert_true(not assignment.apply({"match_id": "match-1", "server_id": "server-1", "player_id": "player-1", "slot": 0, "expires_at": "future", "protocol_version": 1, "transport": "udp", "join_authorisation": "signed"}), "unknown transport is rejected") assert_true(not assignment.apply({"match_id": "match-1", "server_id": "server-1", "player_id": "player-1", "slot": 0, "expires_at": "future", "protocol_version": 1, "transport": "steam_sdr", "join_authorisation": ""}), "empty authorisation is rejected") assert_true(not assignment.apply({"match_id": "match-1", "server_id": "server-1", "player_id": "player-2", "slot": 0, "expires_at": "2099-08-31T12:00:00Z", "protocol_version": 1, "transport": "steam_sdr", "join_authorisation": "signed"}, "player-1"), "wrong player assignment is rejected") assert_true(not assignment.apply({"match_id": "match-1", "server_id": "server-1", "player_id": "player-1", "slot": 0, "expires_at": "2000-08-31T12:00:00Z", "protocol_version": 1, "transport": "steam_sdr", "join_authorisation": "signed"}, "player-1"), "expired assignment is rejected") assert_true(not assignment.apply({"match_id": "match-1", "server_id": "server-1", "player_id": "player-1", "slot": 0, "expires_at": "2099-08-31T12:00:00Z", "protocol_version": 1, "transport": "steam_sdr", "endpoint": "127.0.0.1", "join_authorisation": "signed"}, "player-1"), "unsafe endpoint is rejected") assert_true(not assignment.apply({"match_id": "match-1", "server_id": "server-1", "player_id": "player-1", "slot": 0, "expires_at": "not-a-timestamp", "protocol_version": 1, "transport": "enet", "endpoint": "127.0.0.1:30001", "join_authorisation": "signed"}, "player-1"), "malformed assignment expiry is rejected")