Files
gralias/repos/players_test.go
Grail Finder 130ed3763b Fix: unittests
2025-07-02 19:00:39 +03:00

105 lines
2.6 KiB
Go

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}
player := &models.Player{
RoomID: "test_room_player_1",
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}
player := &models.Player{
RoomID: "test_room_player_2",
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}
player := &models.Player{
RoomID: "test_room_player_3",
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)
}