105 lines
2.6 KiB
Go
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)
|
|
} |