Files
tekton/tests/test_guest_identity.gd
2026-06-11 18:28:25 +08:00

109 lines
3.7 KiB
GDScript

# tests/test_guest_identity.gd
# Tests for Task [037]: Guest & Identity Persistence
# Validates guest progress retention and identity linking
extends GutTest
var guest_profile: Dictionary
var persistent_identity: Dictionary
func before_all():
gut.p("=== Guest Identity Tests [Task 037] ===")
func before_each():
guest_profile = {
"user_id": "guest_12345",
"is_guest": true,
"level": 10,
"coins": 5000,
"progress": {"tutorial_complete": true, "level_reached": 5}
}
persistent_identity = {
"user_id": "steam_76561198000000000",
"is_guest": false,
"steam_id": "76561198000000000",
"linked_at": 1000000
}
func after_each():
pass
# Test 1: Guest profile is created
func test_guest_profile_created():
assert_has(guest_profile, "user_id", "Guest should have user_id")
assert_true(guest_profile["is_guest"], "Profile should be marked as guest")
# Test 2: Guest progress is tracked
func test_guest_progress_tracked():
var progress = guest_profile.get("progress", {})
assert_false(progress.is_empty(), "Guest progress should be tracked")
# Test 3: Guest can be linked to persistent identity
func test_guest_can_link_to_identity():
var linked = _link_guest_to_identity(guest_profile, persistent_identity)
assert_true(linked, "Guest should be linkable to persistent identity")
# Test 4: Guest progress is retained after linking
func test_guest_progress_retained_after_linking():
var original_level = guest_profile["level"]
_link_guest_to_identity(guest_profile, persistent_identity)
var linked_profile = _get_linked_profile(persistent_identity)
assert_eq(linked_profile["level"], original_level, "Progress should be retained")
# Test 5: Persistent identity is created
func test_persistent_identity_created():
assert_has(persistent_identity, "user_id", "Identity should have user_id")
assert_false(persistent_identity["is_guest"], "Identity should not be guest")
# Test 6: Steam ID is validated
func test_steam_id_validated():
var steam_id = persistent_identity.get("steam_id", "")
var is_valid = _is_valid_steam_id(steam_id)
assert_true(is_valid, "Steam ID should be valid")
# Test 7: Link timestamp is recorded
func test_link_timestamp_recorded():
assert_has(persistent_identity, "linked_at", "Link timestamp should be recorded")
# Test 8: Cannot link to already-linked identity
func test_cannot_link_to_linked_identity():
var already_linked = persistent_identity.duplicate()
already_linked["linked_guest_id"] = "guest_99999"
var can_link = _can_link_guest_to_identity(guest_profile, already_linked)
assert_false(can_link, "Should not link to already-linked identity")
# Test 9: Guest data is preserved in linked profile
func test_guest_data_preserved():
var original_coins = guest_profile["coins"]
_link_guest_to_identity(guest_profile, persistent_identity)
var linked = _get_linked_profile(persistent_identity)
assert_eq(linked["coins"], original_coins, "Guest coins should be preserved")
# Test 10: Linked profile shows both guest and persistent data
func test_linked_profile_shows_both_data():
_link_guest_to_identity(guest_profile, persistent_identity)
var linked = _get_linked_profile(persistent_identity)
assert_has(linked, "steam_id", "Should have persistent identity data")
assert_has(linked, "progress", "Should have guest progress data")
# Helper functions
func _link_guest_to_identity(guest: Dictionary, identity: Dictionary) -> bool:
return true
func _get_linked_profile(identity: Dictionary) -> Dictionary:
return identity.duplicate()
func _is_valid_steam_id(steam_id: String) -> bool:
return steam_id.length() == 17 and steam_id.begins_with("765611")
func _can_link_guest_to_identity(guest: Dictionary, identity: Dictionary) -> bool:
return not identity.has("linked_guest_id")
func after_all():
gut.p("=== Guest Identity Tests Complete ===")