add teams tests

This commit is contained in:
2025-06-14 23:18:05 +07:00
parent 54706f0aba
commit b6e3fb8596
6 changed files with 145 additions and 7 deletions
+6 -1
View File
@@ -4,6 +4,7 @@ import (
"evening_detective/internal/models"
"evening_detective/internal/services/story_service"
"evening_detective/proto"
"strings"
)
func mapTeamsToTeamAdvanced(team *models.Team) *proto.TeamAdvanced {
@@ -24,7 +25,7 @@ func mapTeamsToTeamFull(team *models.Team) *proto.TeamFull {
func mapProtoTeamsToTeam(team *proto.Team) *models.Team {
return &models.Team{
Name: team.Name,
Name: clearTeamName(team.Name),
}
}
@@ -85,3 +86,7 @@ func mapProtoApplicationToApplication(items *proto.Application) *models.Applicat
ID: items.Id,
}
}
func clearTeamName(code string) string {
return strings.TrimSpace(code)
}
+10 -1
View File
@@ -20,7 +20,7 @@ func NewRepository(filepath string) (*Repository, error) {
return nil, err
}
log.Printf("load db from: %s", filepath)
_, err = db.Exec("CREATE TABLE IF NOT EXISTS teams (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, password TEXT);")
_, err = db.Exec("CREATE TABLE IF NOT EXISTS teams (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT UNIQUE NOT NULL CHECK(length(trim(name)) > 0), password TEXT);")
if err != nil {
return nil, err
}
@@ -39,6 +39,10 @@ func NewRepository(filepath string) (*Repository, error) {
return &Repository{db: db}, nil
}
func (r *Repository) Close() {
r.db.Close()
}
func (r *Repository) GetTeams(ctx context.Context) ([]*models.Team, error) {
rows, err := r.db.Query("select id, name, password from teams")
if err != nil {
@@ -192,3 +196,8 @@ func (r *Repository) GameUpdateState(ctx context.Context, state string) error {
_, err := r.db.Exec("update games set state = $1", state)
return err
}
func (r *Repository) DeleteAllTeams(ctx context.Context) error {
_, err := r.db.Exec("delete from teams where 1")
return err
}
+34
View File
@@ -3,10 +3,14 @@ package tests
import (
"context"
"log"
"testing"
"time"
"evening_detective/internal/config"
"evening_detective/internal/services"
pb "evening_detective/proto"
"github.com/stretchr/testify/assert"
"google.golang.org/grpc"
)
@@ -21,3 +25,33 @@ func getClient() (pb.EveningDetectiveClient, func() error) {
func getContext() (context.Context, context.CancelFunc) {
return context.WithTimeout(context.Background(), time.Second)
}
func deleteTeams(t *testing.T) {
dbFilepath := config.GetDBFilepath()
repository, err := services.NewRepository(dbFilepath)
if err != nil {
assert.Nil(t, err, "подключение к базе")
}
defer repository.Close()
err = repository.DeleteAllTeams(context.Background())
assert.Nil(t, err, "команды удалены")
}
func createTeam(client pb.EveningDetectiveClient, name string) (*pb.AddTeamsRsp, error) {
ctx, cancel := getContext()
defer cancel()
req := &pb.AddTeamsReq{
Teams: []*pb.Team{
{Name: name},
},
}
return client.AddTeams(ctx, req)
}
func getTeams(client pb.EveningDetectiveClient) (*pb.GetTeamsRsp, error) {
ctx, cancel := getContext()
defer cancel()
req := &pb.GetTeamsReq{}
return client.GetTeams(ctx, req)
}
+79
View File
@@ -0,0 +1,79 @@
package tests
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestCreateTeam(t *testing.T) {
client, close := getClient()
defer close()
createTeamResp, err := createTeam(client, "Тестовая команда")
assert.Nil(t, err, "запрос отправлен успешно")
assert.Equal(t, len(createTeamResp.Teams), 1, "количество команд равно 1")
assert.Equal(t, createTeamResp.Teams[0].Name, "Тестовая команда")
getTeamsResp, err := getTeams(client)
assert.Nil(t, err, "запрос отправлен успешно")
assert.Equal(t, len(getTeamsResp.Teams), 1, "количество команд равно 1")
assert.Equal(t, getTeamsResp.Teams[0].Name, "Тестовая команда")
deleteTeams(t)
}
func TestCreateTeamWithEmptyName(t *testing.T) {
client, close := getClient()
defer close()
_, err := createTeam(client, "")
assert.NotNil(t, err, "запрос не удался")
deleteTeams(t)
}
func TestCreateTwoTeam(t *testing.T) {
client, close := getClient()
defer close()
_, err := createTeam(client, "Тестовая команда 1")
assert.Nil(t, err, "запрос отправлен успешно")
_, err = createTeam(client, "Тестовая команда 2")
assert.Nil(t, err, "запрос отправлен успешно")
getTeamsResp, err := getTeams(client)
assert.Nil(t, err, "запрос отправлен успешно")
assert.Equal(t, len(getTeamsResp.Teams), 2, "количество команд равно 2")
assert.Equal(t, getTeamsResp.Teams[0].Name, "Тестовая команда 1")
assert.Equal(t, getTeamsResp.Teams[1].Name, "Тестовая команда 2")
deleteTeams(t)
}
func TestCreateTwoEqTeam(t *testing.T) {
client, close := getClient()
defer close()
_, err := createTeam(client, "Тестовая команда")
assert.Nil(t, err, "запрос отправлен успешно")
_, err = createTeam(client, "Тестовая команда")
assert.NotNil(t, err, "запрос не удался")
deleteTeams(t)
}
func TestCreateTwoBadTeam(t *testing.T) {
client, close := getClient()
defer close()
_, err := createTeam(client, "Тестовая команда")
assert.Nil(t, err, "запрос отправлен успешно")
_, err = createTeam(client, "Тестовая команда ")
assert.NotNil(t, err, "запрос не удался")
deleteTeams(t)
}