0ecc16d963
The register form collected and validated an actual date of birth just to throw it away (backend never stored it beyond a nullable column). Per the roadmap note: don't collect/store DOB right now, just get a client-side "I am 18 or older" confirmation. RegisterRequest.date_of_birth (str) is now over_18 (bool); the endpoint rejects over_18=false with 400 same as before. calculate_age() is kept (unused by /register now) since real DOB collection is coming back in a future pass and deleting it broke test_auth_age_gate.py's import for no benefit. Frontend: DOBEdit LineEdit replaced with an Over18Check CheckBox; api_client.gd's register() now takes a bool instead of a date string. All Godot callers (smoke_test_auth/e2e/world_list/main_menu_ui/main_menu_full_flow) and backend test files updated to match. Full suite verified against a live backend: 61/61 pytest, 6/6 Godot smoke tests (33 individual assertions), all passing. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01M6rUEynmv2QmweocAQYARN
127 lines
3.9 KiB
GDScript
127 lines
3.9 KiB
GDScript
extends SceneTree
|
|
## Verifies the main menu's Login/Register buttons correctly open the auth
|
|
## panel and toggle between Login and Register modes via signal emission.
|
|
##
|
|
## Key tests:
|
|
## - AuthPanel starts hidden.
|
|
## - LoginButton press opens the panel in Login mode.
|
|
## - RegisterButton press opens the panel in Register mode.
|
|
## - Clicking Login while in Register mode switches back to Login mode.
|
|
## - Clicking Register while in Login mode switches to Register mode.
|
|
## - The ModeToggle CheckButton no longer exists in the scene.
|
|
|
|
|
|
func _initialize() -> void:
|
|
_run()
|
|
|
|
|
|
func _run() -> void:
|
|
await process_frame
|
|
|
|
var passed := 0
|
|
var failed := 0
|
|
|
|
var packed: PackedScene = load("res://scenes/main_menu.tscn")
|
|
var instance: Control = packed.instantiate()
|
|
root.add_child(instance)
|
|
await process_frame
|
|
|
|
var login_button: Button = instance.get_node("CenterContainer/VBoxContainer/AuthButtonsRow/LoginButton")
|
|
var register_button: Button = instance.get_node("CenterContainer/VBoxContainer/AuthButtonsRow/RegisterButton")
|
|
var auth_panel: PanelContainer = instance.get_node("CenterContainer/VBoxContainer/AuthPanel")
|
|
var auth_mode_label: Label = instance.get_node("CenterContainer/VBoxContainer/AuthPanel/MarginContainer/AuthVBox/AuthModeLabel")
|
|
var email_edit: LineEdit = instance.get_node("CenterContainer/VBoxContainer/AuthPanel/MarginContainer/AuthVBox/EmailEdit")
|
|
var over_18_check: CheckBox = instance.get_node("CenterContainer/VBoxContainer/AuthPanel/MarginContainer/AuthVBox/Over18Check")
|
|
|
|
# --- Test 1: auth panel starts hidden ---
|
|
if _check("auth panel starts hidden", not auth_panel.visible):
|
|
passed += 1
|
|
else:
|
|
failed += 1
|
|
|
|
# --- Test 2: LoginButton press opens panel in Login mode ---
|
|
login_button.pressed.emit()
|
|
await process_frame
|
|
|
|
if _check("auth panel visible after LoginButton press", auth_panel.visible):
|
|
passed += 1
|
|
else:
|
|
failed += 1
|
|
|
|
if _check("Login mode label after LoginButton press", auth_mode_label.text == "Login"):
|
|
passed += 1
|
|
else:
|
|
failed += 1
|
|
|
|
if _check("Email field hidden in Login mode", not email_edit.visible):
|
|
passed += 1
|
|
else:
|
|
failed += 1
|
|
|
|
if _check("Over18 checkbox hidden in Login mode", not over_18_check.visible):
|
|
passed += 1
|
|
else:
|
|
failed += 1
|
|
|
|
# --- Test 3: RegisterButton press switches to Register mode ---
|
|
register_button.pressed.emit()
|
|
await process_frame
|
|
|
|
if _check("auth panel still visible after RegisterButton press", auth_panel.visible):
|
|
passed += 1
|
|
else:
|
|
failed += 1
|
|
|
|
if _check("Register mode label after RegisterButton press", auth_mode_label.text == "Register"):
|
|
passed += 1
|
|
else:
|
|
failed += 1
|
|
|
|
if _check("Email field visible in Register mode", email_edit.visible):
|
|
passed += 1
|
|
else:
|
|
failed += 1
|
|
|
|
if _check("Over18 checkbox visible in Register mode", over_18_check.visible):
|
|
passed += 1
|
|
else:
|
|
failed += 1
|
|
|
|
# --- Test 4: LoginButton press switches back to Login mode ---
|
|
login_button.pressed.emit()
|
|
await process_frame
|
|
|
|
if _check("Login mode label after second LoginButton press", auth_mode_label.text == "Login"):
|
|
passed += 1
|
|
else:
|
|
failed += 1
|
|
|
|
if _check("Email field hidden after switching back to Login", not email_edit.visible):
|
|
passed += 1
|
|
else:
|
|
failed += 1
|
|
|
|
if _check("Over18 checkbox hidden after switching back to Login", not over_18_check.visible):
|
|
passed += 1
|
|
else:
|
|
failed += 1
|
|
|
|
# --- Test 5: ModeToggle CheckButton no longer exists ---
|
|
var mode_toggle_path = "CenterContainer/VBoxContainer/AuthPanel/MarginContainer/AuthVBox/ModeToggle"
|
|
var has_mode_toggle = instance.has_node(mode_toggle_path)
|
|
if _check("ModeToggle CheckButton removed from scene", not has_mode_toggle):
|
|
passed += 1
|
|
else:
|
|
failed += 1
|
|
|
|
print("\n=== SMOKE RESULT: %d/%d passed ===" % [passed, passed + failed])
|
|
quit(0 if failed == 0 else 1)
|
|
|
|
|
|
func _check(description: String, condition: bool) -> bool:
|
|
if condition:
|
|
print(" PASS: ", description)
|
|
else:
|
|
printerr(" FAIL: ", description)
|
|
return condition
|