package game import ( "testing" "gitea.boner.be/bdnugget/goonscape/game/testutils" rl "github.com/gen2brain/raylib-go/raylib" "github.com/stretchr/testify/assert" ) func TestLoginScreen_Update(t *testing.T) { login := NewLoginScreen() // Test field focus switching simulateMouseClick(400, 215) // Click username field assert.Equal(t, 0, login.focusedField) simulateMouseClick(400, 265) // Click password field assert.Equal(t, 1, login.focusedField) // Test input length limits login.focusedField = 0 for i := 0; i < 20; i++ { simulateCharInput('x') } assert.LessOrEqual(t, len(login.username), 12) login.focusedField = 1 for i := 0; i < 30; i++ { simulateCharInput('x') } assert.LessOrEqual(t, len(login.password), 20) // Test mode switching simulateMouseClick(600, 365) // Click switch mode button assert.True(t, login.isRegistering) simulateMouseClick(600, 365) // Click again assert.False(t, login.isRegistering) // Test submission login.username = "test" login.password = "password" testutils.SimulateMousePosition(400, 365) testutils.SimulateMouseButton(testutils.ToInt32(rl.MouseLeftButton), true) username, password, isRegistering, submitted := login.Update() assert.True(t, submitted) assert.Equal(t, "test", username) assert.Equal(t, "password", password) assert.False(t, isRegistering) } func TestLoginScreen_ErrorHandling(t *testing.T) { login := NewLoginScreen() // Test empty fields login.username = "" login.password = "test" testutils.SimulateMousePosition(400, 365) testutils.SimulateMouseButton(testutils.ToInt32(rl.MouseLeftButton), true) _, _, _, submitted := login.Update() assert.False(t, submitted) assert.Contains(t, login.errorMessage, "username") // Test special characters login.username = "test!@#" login.password = "password" testutils.SimulateMousePosition(400, 365) testutils.SimulateMouseButton(testutils.ToInt32(rl.MouseLeftButton), true) _, _, _, submitted = login.Update() assert.False(t, submitted) assert.Contains(t, login.errorMessage, "invalid characters") // Test error message display login.SetError("Test error") assert.Equal(t, "Test error", login.errorMessage) } func simulateMouseClick(x, y float32) { // Implementation would depend on how raylib is mocked }