Files
FFCardGame/tests/unit/test_network_signals.gd
2026-02-02 16:28:53 -05:00

294 lines
7.7 KiB
GDScript

extends GutTest
## Unit tests for NetworkManager signal emissions
## Tests signal behavior without requiring actual network connections
var network_manager: NetworkManager
var signal_received: bool = false
var last_signal_data: Variant = null
func before_each():
# Create a fresh NetworkManager instance for testing
network_manager = NetworkManager.new()
add_child_autoqfree(network_manager)
signal_received = false
last_signal_data = null
func after_each():
# Cleanup handled by autoqfree
pass
# ======= HELPER FUNCTIONS =======
func _connect_signal_and_track(signal_obj: Signal) -> void:
signal_obj.connect(_on_signal_received)
func _on_signal_received(data = null) -> void:
signal_received = true
last_signal_data = data
# ======= CONNECTION STATE SIGNAL TESTS =======
func test_connection_state_changed_signal_exists():
assert_has_signal(network_manager, "connection_state_changed")
func test_authenticated_signal_exists():
assert_has_signal(network_manager, "authenticated")
func test_authentication_failed_signal_exists():
assert_has_signal(network_manager, "authentication_failed")
func test_logged_out_signal_exists():
assert_has_signal(network_manager, "logged_out")
func test_network_error_signal_exists():
assert_has_signal(network_manager, "network_error")
# ======= MATCHMAKING SIGNAL TESTS =======
func test_queue_joined_signal_exists():
assert_has_signal(network_manager, "queue_joined")
func test_queue_left_signal_exists():
assert_has_signal(network_manager, "queue_left")
func test_match_found_signal_exists():
assert_has_signal(network_manager, "match_found")
func test_room_created_signal_exists():
assert_has_signal(network_manager, "room_created")
func test_room_joined_signal_exists():
assert_has_signal(network_manager, "room_joined")
func test_room_updated_signal_exists():
assert_has_signal(network_manager, "room_updated")
func test_matchmaking_update_signal_exists():
assert_has_signal(network_manager, "matchmaking_update")
# ======= GAME MESSAGE SIGNAL TESTS =======
func test_opponent_action_received_signal_exists():
assert_has_signal(network_manager, "opponent_action_received")
func test_turn_timer_update_signal_exists():
assert_has_signal(network_manager, "turn_timer_update")
func test_game_started_signal_exists():
assert_has_signal(network_manager, "game_started")
func test_game_ended_signal_exists():
assert_has_signal(network_manager, "game_ended")
func test_phase_changed_signal_exists():
assert_has_signal(network_manager, "phase_changed")
func test_action_confirmed_signal_exists():
assert_has_signal(network_manager, "action_confirmed")
func test_action_failed_signal_exists():
assert_has_signal(network_manager, "action_failed")
func test_opponent_disconnected_signal_exists():
assert_has_signal(network_manager, "opponent_disconnected")
func test_opponent_reconnected_signal_exists():
assert_has_signal(network_manager, "opponent_reconnected")
func test_game_state_sync_signal_exists():
assert_has_signal(network_manager, "game_state_sync")
# ======= CONNECTION STATE ENUM TESTS =======
func test_connection_state_disconnected_value():
assert_eq(NetworkManager.ConnectionState.DISCONNECTED, 0)
func test_connection_state_connecting_value():
assert_eq(NetworkManager.ConnectionState.CONNECTING, 1)
func test_connection_state_connected_value():
assert_eq(NetworkManager.ConnectionState.CONNECTED, 2)
func test_connection_state_authenticating_value():
assert_eq(NetworkManager.ConnectionState.AUTHENTICATING, 3)
func test_connection_state_authenticated_value():
assert_eq(NetworkManager.ConnectionState.AUTHENTICATED, 4)
func test_connection_state_in_queue_value():
assert_eq(NetworkManager.ConnectionState.IN_QUEUE, 5)
func test_connection_state_in_room_value():
assert_eq(NetworkManager.ConnectionState.IN_ROOM, 6)
func test_connection_state_in_game_value():
assert_eq(NetworkManager.ConnectionState.IN_GAME, 7)
# ======= INITIAL STATE TESTS =======
func test_initial_connection_state_is_disconnected():
assert_eq(network_manager.connection_state, NetworkManager.ConnectionState.DISCONNECTED)
func test_initial_auth_token_is_empty():
assert_eq(network_manager.auth_token, "")
func test_initial_is_authenticated_is_false():
assert_false(network_manager.is_authenticated)
func test_initial_current_game_id_is_empty():
assert_eq(network_manager.current_game_id, "")
func test_initial_current_room_code_is_empty():
assert_eq(network_manager.current_room_code, "")
func test_initial_local_player_index_is_zero():
assert_eq(network_manager.local_player_index, 0)
# ======= LOGOUT TESTS =======
func test_logout_clears_auth_token():
network_manager.auth_token = "test_token"
network_manager.logout()
assert_eq(network_manager.auth_token, "")
func test_logout_clears_current_user():
network_manager.current_user = { "id": "123", "username": "test" }
network_manager.logout()
assert_eq(network_manager.current_user, {})
func test_logout_sets_is_authenticated_false():
network_manager.is_authenticated = true
network_manager.logout()
assert_false(network_manager.is_authenticated)
func test_logout_emits_logged_out_signal():
watch_signals(network_manager)
network_manager.logout()
assert_signal_emitted(network_manager, "logged_out")
# ======= CONNECTION STATE NAME TESTS =======
func test_get_connection_state_name_disconnected():
network_manager.connection_state = NetworkManager.ConnectionState.DISCONNECTED
assert_eq(network_manager.get_connection_state_name(), "Disconnected")
func test_get_connection_state_name_connecting():
network_manager.connection_state = NetworkManager.ConnectionState.CONNECTING
assert_eq(network_manager.get_connection_state_name(), "Connecting")
func test_get_connection_state_name_connected():
network_manager.connection_state = NetworkManager.ConnectionState.CONNECTED
assert_eq(network_manager.get_connection_state_name(), "Connected")
func test_get_connection_state_name_authenticating():
network_manager.connection_state = NetworkManager.ConnectionState.AUTHENTICATING
assert_eq(network_manager.get_connection_state_name(), "Authenticating")
func test_get_connection_state_name_authenticated():
network_manager.connection_state = NetworkManager.ConnectionState.AUTHENTICATED
assert_eq(network_manager.get_connection_state_name(), "Online")
func test_get_connection_state_name_in_queue():
network_manager.connection_state = NetworkManager.ConnectionState.IN_QUEUE
assert_eq(network_manager.get_connection_state_name(), "In Queue")
func test_get_connection_state_name_in_room():
network_manager.connection_state = NetworkManager.ConnectionState.IN_ROOM
assert_eq(network_manager.get_connection_state_name(), "In Room")
func test_get_connection_state_name_in_game():
network_manager.connection_state = NetworkManager.ConnectionState.IN_GAME
assert_eq(network_manager.get_connection_state_name(), "In Game")
# ======= CONFIGURATION TESTS =======
func test_configure_sets_http_url():
network_manager.configure("http://test.com", "ws://test.com")
assert_eq(network_manager.http_base_url, "http://test.com")
func test_configure_sets_ws_url():
network_manager.configure("http://test.com", "ws://test.com:3001")
assert_eq(network_manager.ws_url, "ws://test.com:3001")
func test_default_http_url():
assert_eq(network_manager.http_base_url, "http://localhost:3000")
func test_default_ws_url():
assert_eq(network_manager.ws_url, "ws://localhost:3001")
# ======= CONSTANTS TESTS =======
func test_heartbeat_interval_constant():
assert_eq(NetworkManager.HEARTBEAT_INTERVAL, 10.0)
func test_reconnect_delay_constant():
assert_eq(NetworkManager.RECONNECT_DELAY, 5.0)
func test_max_reconnect_attempts_constant():
assert_eq(NetworkManager.MAX_RECONNECT_ATTEMPTS, 3)
func test_token_file_constant():
assert_eq(NetworkManager.TOKEN_FILE, "user://auth_token.dat")