generated from VLADIMIR/template
add teams tests
This commit is contained in:
parent
54706f0aba
commit
b6e3fb8596
2
Makefile
2
Makefile
@ -23,4 +23,4 @@ clear:
|
||||
rm ./internal/tests/store.db
|
||||
|
||||
test:
|
||||
go test ./...
|
||||
DB_FILENAME=store.db go test -count=1 ./...
|
||||
|
19
go.mod
19
go.mod
@ -1,18 +1,29 @@
|
||||
module evening_detective
|
||||
|
||||
go 1.22
|
||||
go 1.23
|
||||
|
||||
toolchain go1.23.10
|
||||
|
||||
require (
|
||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0
|
||||
google.golang.org/grpc v1.64.0
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/davecgh/go-spew v1.1.1 // indirect
|
||||
github.com/kr/text v0.2.0 // indirect
|
||||
github.com/pmezard/go-difflib v1.0.0 // indirect
|
||||
github.com/rogpeppe/go-internal v1.14.1 // indirect
|
||||
github.com/stretchr/testify v1.10.0
|
||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/mattn/go-sqlite3 v1.14.28
|
||||
golang.org/x/net v0.23.0 // indirect
|
||||
golang.org/x/sys v0.18.0 // indirect
|
||||
golang.org/x/sys v0.26.0 // indirect
|
||||
golang.org/x/text v0.15.0 // indirect
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20240513163218-0867130af1f8 // indirect
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20240513163218-0867130af1f8
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240513163218-0867130af1f8 // indirect
|
||||
google.golang.org/protobuf v1.34.1 // indirect
|
||||
google.golang.org/protobuf v1.34.1
|
||||
)
|
||||
|
@ -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)
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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
internal/tests/teams_test.go
Normal file
79
internal/tests/teams_test.go
Normal 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)
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user