package repos import ( "context" "gralias/models" "testing" "github.com/jmoiron/sqlx" "github.com/stretchr/testify/assert" _ "github.com/mattn/go-sqlite3" ) func setupPlayersTestDB(t *testing.T) (*sqlx.DB, func()) { db, err := sqlx.Connect("sqlite3", ":memory:") assert.NoError(t, err) schema := ` CREATE TABLE IF NOT EXISTS players ( id INTEGER PRIMARY KEY AUTOINCREMENT, room_id TEXT, username TEXT, team TEXT, role TEXT, is_bot BOOLEAN ); ` _, err = db.Exec(schema) assert.NoError(t, err) return db, func() { db.Close() } } func TestPlayersRepo_AddPlayer(t *testing.T) { db, teardown := setupPlayersTestDB(t) defer teardown() repo := &RepoProvider{DB: db} roomID := "test_room_player_1" player := &models.Player{ RoomID: &roomID, Username: "test_player_1", Team: "blue", Role: "player", IsBot: false, } err := repo.PlayerAdd(context.Background(), player) assert.NoError(t, err) var retrievedPlayer models.Player err = db.Get(&retrievedPlayer, "SELECT * FROM players WHERE room_id = ? AND username = ?", player.RoomID, player.Username) assert.NoError(t, err) assert.Equal(t, player.Username, retrievedPlayer.Username) } func TestPlayersRepo_GetPlayer(t *testing.T) { db, teardown := setupPlayersTestDB(t) defer teardown() repo := &RepoProvider{DB: db} roomID := "test_room_player_2" player := &models.Player{ RoomID: &roomID, Username: "test_player_2", Team: "red", Role: "player", IsBot: false, } _, err := db.Exec(`INSERT INTO players (room_id, username, team, role, is_bot) VALUES (?, ?, ?, ?, ?)`, player.RoomID, player.Username, player.Team, player.Role, player.IsBot) assert.NoError(t, err) retrievedPlayer, err := repo.PlayerGetByName(context.Background(), player.Username) assert.NoError(t, err) assert.NotNil(t, retrievedPlayer) assert.Equal(t, player.Username, retrievedPlayer.Username) } func TestPlayersRepo_DeletePlayer(t *testing.T) { db, teardown := setupPlayersTestDB(t) defer teardown() repo := &RepoProvider{DB: db} roomID := "test_room_player_3" player := &models.Player{ RoomID: &roomID, Username: "test_player_3", Team: "blue", Role: "player", IsBot: false, } _, err := db.Exec(`INSERT INTO players (room_id, username, team, role, is_bot) VALUES (?, ?, ?, ?, ?)`, player.RoomID, player.Username, player.Team, player.Role, player.IsBot) assert.NoError(t, err) err = repo.PlayerDelete(context.Background(), *player.RoomID, player.Username) assert.NoError(t, err) var count int err = db.Get(&count, "SELECT COUNT(*) FROM players WHERE room_id = ? AND username = ?", player.RoomID, player.Username) assert.NoError(t, err) assert.Equal(t, 0, count) }