goonscape/game/login_test.go

81 lines
2.2 KiB
Go

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
}