294 lines
7.7 KiB
GDScript
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")
|