From 739e9276433d00776ef7790f084ffb1939b4a26e Mon Sep 17 00:00:00 2001 From: ras0q Date: Tue, 18 Jun 2024 16:09:02 +0900 Subject: [PATCH 1/6] :recycle: move repository test to infrastructure/repository --- .../repository/contest_test.go | 42 +++--- .../repository/event_test.go | 18 ++- .../repository/main_test.go | 54 ++++++-- .../repository/project_test.go | 22 ++- .../repository/user_test.go | 46 +++---- integration_tests/handler/0_utils_test.go | 44 +++++- integration_tests/handler/main_test.go | 17 ++- integration_tests/testutils/db.go | 129 ------------------ util/testutils/db.go | 81 +++++++++++ 9 files changed, 235 insertions(+), 218 deletions(-) rename {integration_tests => infrastructure}/repository/contest_test.go (91%) rename {integration_tests => infrastructure}/repository/event_test.go (87%) rename {integration_tests => infrastructure}/repository/main_test.go (86%) rename {integration_tests => infrastructure}/repository/project_test.go (91%) rename {integration_tests => infrastructure}/repository/user_test.go (89%) delete mode 100644 integration_tests/testutils/db.go create mode 100644 util/testutils/db.go diff --git a/integration_tests/repository/contest_test.go b/infrastructure/repository/contest_test.go similarity index 91% rename from integration_tests/repository/contest_test.go rename to infrastructure/repository/contest_test.go index ab7e407a..d758dbc6 100644 --- a/integration_tests/repository/contest_test.go +++ b/infrastructure/repository/contest_test.go @@ -9,9 +9,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/traPtitech/traPortfolio/domain" "github.com/traPtitech/traPortfolio/infrastructure/external/mock_external_e2e" - "github.com/traPtitech/traPortfolio/integration_tests/testutils" - irepository "github.com/traPtitech/traPortfolio/infrastructure/repository" urepository "github.com/traPtitech/traPortfolio/usecases/repository" "github.com/traPtitech/traPortfolio/util/mockdata" "github.com/traPtitech/traPortfolio/util/random" @@ -20,8 +18,8 @@ import ( func TestContestRepository_GetContests(t *testing.T) { t.Parallel() - db := testutils.SetupGormDB(t) - repo := irepository.NewContestRepository(db, mock_external_e2e.NewMockPortalAPI()) + db := SetupTestGormDB(t) + repo := NewContestRepository(db, mock_external_e2e.NewMockPortalAPI()) contest1 := mustMakeContest(t, repo, nil) contest2 := mustMakeContest(t, repo, nil) contests, err := repo.GetContests(context.Background()) @@ -35,8 +33,8 @@ func TestContestRepository_GetContests(t *testing.T) { func TestContestRepository_GetContest(t *testing.T) { t.Parallel() - db := testutils.SetupGormDB(t) - repo := irepository.NewContestRepository(db, mock_external_e2e.NewMockPortalAPI()) + db := SetupTestGormDB(t) + repo := NewContestRepository(db, mock_external_e2e.NewMockPortalAPI()) contest1 := mustMakeContest(t, repo, nil) contest2 := mustMakeContest(t, repo, nil) @@ -52,8 +50,8 @@ func TestContestRepository_GetContest(t *testing.T) { func TestContestRepository_UpdateContest(t *testing.T) { t.Parallel() - db := testutils.SetupGormDB(t) - repo := irepository.NewContestRepository(db, mock_external_e2e.NewMockPortalAPI()) + db := SetupTestGormDB(t) + repo := NewContestRepository(db, mock_external_e2e.NewMockPortalAPI()) tests := []struct { name string ctx context.Context @@ -109,8 +107,8 @@ func TestContestRepository_UpdateContest(t *testing.T) { func TestContestRepository_DeleteContest(t *testing.T) { t.Parallel() - db := testutils.SetupGormDB(t) - repo := irepository.NewContestRepository(db, mock_external_e2e.NewMockPortalAPI()) + db := SetupTestGormDB(t) + repo := NewContestRepository(db, mock_external_e2e.NewMockPortalAPI()) contest1 := mustMakeContest(t, repo, nil) contest2 := mustMakeContest(t, repo, nil) @@ -137,8 +135,8 @@ func TestContestRepository_DeleteContest(t *testing.T) { func TestContestRepository_GetContestTeams(t *testing.T) { t.Parallel() - db := testutils.SetupGormDB(t) - repo := irepository.NewContestRepository(db, mock_external_e2e.NewMockPortalAPI()) + db := SetupTestGormDB(t) + repo := NewContestRepository(db, mock_external_e2e.NewMockPortalAPI()) contest1 := mustMakeContest(t, repo, nil) contest2 := mustMakeContest(t, repo, nil) @@ -169,8 +167,8 @@ func TestContestRepository_GetContestTeams(t *testing.T) { func TestContestRepository_GetContestTeam(t *testing.T) { t.Parallel() - db := testutils.SetupGormDB(t) - repo := irepository.NewContestRepository(db, mock_external_e2e.NewMockPortalAPI()) + db := SetupTestGormDB(t) + repo := NewContestRepository(db, mock_external_e2e.NewMockPortalAPI()) contest1 := mustMakeContest(t, repo, nil) contest2 := mustMakeContest(t, repo, nil) @@ -202,8 +200,8 @@ func TestContestRepository_GetContestTeam(t *testing.T) { func TestContestRepository_UpdateContestTeam(t *testing.T) { t.Parallel() - db := testutils.SetupGormDB(t) - repo := irepository.NewContestRepository(db, mock_external_e2e.NewMockPortalAPI()) + db := SetupTestGormDB(t) + repo := NewContestRepository(db, mock_external_e2e.NewMockPortalAPI()) tests := []struct { name string @@ -251,8 +249,8 @@ func TestContestRepository_UpdateContestTeam(t *testing.T) { func TestContestRepository_DeleteContestTeam(t *testing.T) { t.Parallel() - db := testutils.SetupGormDB(t) - repo := irepository.NewContestRepository(db, mock_external_e2e.NewMockPortalAPI()) + db := SetupTestGormDB(t) + repo := NewContestRepository(db, mock_external_e2e.NewMockPortalAPI()) contest1 := mustMakeContest(t, repo, nil) contest2 := mustMakeContest(t, repo, nil) @@ -297,10 +295,10 @@ func TestContestRepository_DeleteContestTeam(t *testing.T) { func TestContestRepository_GetContestTeamMembers(t *testing.T) { t.Parallel() - db := testutils.SetupGormDB(t) + db := SetupTestGormDB(t) err := mockdata.InsertSampleDataToDB(db) assert.NoError(t, err) - repo := irepository.NewContestRepository(db, mock_external_e2e.NewMockPortalAPI()) + repo := NewContestRepository(db, mock_external_e2e.NewMockPortalAPI()) contest1 := mustMakeContest(t, repo, nil) contest2 := mustMakeContest(t, repo, nil) @@ -358,10 +356,10 @@ func TestContestRepository_GetContestTeamMembers(t *testing.T) { func TestContestRepository_EditContestTeamMembers(t *testing.T) { t.Parallel() - db := testutils.SetupGormDB(t) + db := SetupTestGormDB(t) err := mockdata.InsertSampleDataToDB(db) assert.NoError(t, err) - repo := irepository.NewContestRepository(db, mock_external_e2e.NewMockPortalAPI()) + repo := NewContestRepository(db, mock_external_e2e.NewMockPortalAPI()) contest1 := mustMakeContest(t, repo, nil) contest2 := mustMakeContest(t, repo, nil) diff --git a/integration_tests/repository/event_test.go b/infrastructure/repository/event_test.go similarity index 87% rename from integration_tests/repository/event_test.go rename to infrastructure/repository/event_test.go index 944abb15..2016b5df 100644 --- a/integration_tests/repository/event_test.go +++ b/infrastructure/repository/event_test.go @@ -9,8 +9,6 @@ import ( "github.com/stretchr/testify/assert" "github.com/traPtitech/traPortfolio/domain" "github.com/traPtitech/traPortfolio/infrastructure/external/mock_external_e2e" - irepository "github.com/traPtitech/traPortfolio/infrastructure/repository" - "github.com/traPtitech/traPortfolio/integration_tests/testutils" urepository "github.com/traPtitech/traPortfolio/usecases/repository" "github.com/traPtitech/traPortfolio/util/mockdata" "github.com/traPtitech/traPortfolio/util/optional" @@ -20,8 +18,8 @@ import ( func TestEventRepository_GetEvents(t *testing.T) { t.Parallel() - db := testutils.SetupGormDB(t) - repo := irepository.NewEventRepository(db, mock_external_e2e.NewMockKnoqAPI()) + db := SetupTestGormDB(t) + repo := NewEventRepository(db, mock_external_e2e.NewMockKnoqAPI()) expected := make([]*domain.Event, 0) for _, e := range mockdata.MockKnoqEvents { @@ -42,8 +40,8 @@ func TestEventRepository_GetEvents(t *testing.T) { func TestEventRepository_GetEvent(t *testing.T) { t.Parallel() - db := testutils.SetupGormDB(t) - repo := irepository.NewEventRepository(db, mock_external_e2e.NewMockKnoqAPI()) + db := SetupTestGormDB(t) + repo := NewEventRepository(db, mock_external_e2e.NewMockKnoqAPI()) levels := createRandomEventLevels(t, repo) selected := mockdata.MockKnoqEvents[rand.IntN(len(mockdata.MockKnoqEvents)-1)] @@ -100,8 +98,8 @@ func TestEventRepository_GetEvent(t *testing.T) { func TestEventRepository_UpdateEventLevel(t *testing.T) { t.Parallel() - db := testutils.SetupGormDB(t) - repo := irepository.NewEventRepository(db, mock_external_e2e.NewMockKnoqAPI()) + db := SetupTestGormDB(t) + repo := NewEventRepository(db, mock_external_e2e.NewMockKnoqAPI()) levels := createRandomEventLevels(t, repo) @@ -140,8 +138,8 @@ func TestEventRepository_UpdateEventLevel(t *testing.T) { func TestEventRepository_GetUserEvents(t *testing.T) { t.Parallel() - db := testutils.SetupGormDB(t) - repo := irepository.NewEventRepository(db, mock_external_e2e.NewMockKnoqAPI()) + db := SetupTestGormDB(t) + repo := NewEventRepository(db, mock_external_e2e.NewMockKnoqAPI()) expected := make([]*domain.Event, 0) for _, e := range mockdata.MockKnoqEvents { diff --git a/integration_tests/repository/main_test.go b/infrastructure/repository/main_test.go similarity index 86% rename from integration_tests/repository/main_test.go rename to infrastructure/repository/main_test.go index b54593f6..34788415 100644 --- a/integration_tests/repository/main_test.go +++ b/infrastructure/repository/main_test.go @@ -2,45 +2,71 @@ package repository import ( "context" + "database/sql" + "fmt" "io" "log" "math/rand/v2" + "strings" "testing" "github.com/go-sql-driver/mysql" "github.com/gofrs/uuid" "github.com/stretchr/testify/assert" "github.com/traPtitech/traPortfolio/domain" - "github.com/traPtitech/traPortfolio/integration_tests/testutils" "github.com/traPtitech/traPortfolio/usecases/repository" "github.com/traPtitech/traPortfolio/util/config" "github.com/traPtitech/traPortfolio/util/optional" "github.com/traPtitech/traPortfolio/util/random" + "github.com/traPtitech/traPortfolio/util/testutils" + "gorm.io/gorm" +) + +var ( + testDB *sql.DB + testSQLConfig config.SQLConfig ) func TestMain(m *testing.M) { - c, err := config.Load(config.LoadOpts{SkipReadFromFiles: true}) + // disable mysql driver logging + _ = mysql.SetLogger(mysql.Logger(log.New(io.Discard, "", 0))) + + user, pass, host := "root", "password", "localhost" + db, port, closeFunc, err := testutils.RunMySQLContainerOnDocker(user, pass, host) if err != nil { panic(err) } - // disable mysql driver logging - _ = mysql.SetLogger(mysql.Logger(log.New(io.Discard, "", 0))) - db, closeFunc, err := testutils.RunMySQLContainerOnDocker(c.DB) - if err != nil { + testDB = db + testSQLConfig = config.SQLConfig{ + User: user, + Pass: pass, + Host: host, + Name: "", + Port: port, + } + + m.Run() + + if err := closeFunc(); err != nil { panic(err) } +} - defer func() { - if err := closeFunc(); err != nil { - panic(err) - } - }() +func SetupTestGormDB(t *testing.T) *gorm.DB { + t.Helper() - testutils.Config = c - testutils.DB = db + dbName := fmt.Sprintf("portfolio_test_%s", strings.ToLower(t.Name())) + _, err := testDB.Exec(fmt.Sprintf("CREATE DATABASE IF NOT EXISTS `%s`", dbName)) + assert.NoError(t, err) - m.Run() + sqlConfig := testSQLConfig + sqlConfig.Name = dbName + + gormDB, err := NewGormDB(sqlConfig) + assert.NoError(t, err) + + return gormDB } func mustMakeContest(t *testing.T, repo repository.ContestRepository, args *repository.CreateContestArgs) *domain.ContestDetail { diff --git a/integration_tests/repository/project_test.go b/infrastructure/repository/project_test.go similarity index 91% rename from integration_tests/repository/project_test.go rename to infrastructure/repository/project_test.go index 6496bb0f..015a57f1 100644 --- a/integration_tests/repository/project_test.go +++ b/infrastructure/repository/project_test.go @@ -12,8 +12,6 @@ import ( "github.com/stretchr/testify/assert" "github.com/traPtitech/traPortfolio/domain" "github.com/traPtitech/traPortfolio/infrastructure/external/mock_external_e2e" - irepository "github.com/traPtitech/traPortfolio/infrastructure/repository" - "github.com/traPtitech/traPortfolio/integration_tests/testutils" "github.com/traPtitech/traPortfolio/util/mockdata" "github.com/traPtitech/traPortfolio/util/random" ) @@ -21,8 +19,8 @@ import ( func TestProjectRepository_GetProjects(t *testing.T) { t.Parallel() - db := testutils.SetupGormDB(t) - repo := irepository.NewProjectRepository(db, mock_external_e2e.NewMockPortalAPI()) + db := SetupTestGormDB(t) + repo := NewProjectRepository(db, mock_external_e2e.NewMockPortalAPI()) projectNum := 4 var projects []*domain.Project @@ -39,8 +37,8 @@ func TestProjectRepository_GetProjects(t *testing.T) { func TestProjectRepository_GetProject(t *testing.T) { t.Parallel() - db := testutils.SetupGormDB(t) - repo := irepository.NewProjectRepository(db, mock_external_e2e.NewMockPortalAPI()) + db := SetupTestGormDB(t) + repo := NewProjectRepository(db, mock_external_e2e.NewMockPortalAPI()) projectNum := 4 var projects []*domain.ProjectDetail @@ -65,8 +63,8 @@ func TestProjectRepository_GetProject(t *testing.T) { func TestProjectRepository_UpdateProject(t *testing.T) { t.Parallel() - db := testutils.SetupGormDB(t) - repo := irepository.NewProjectRepository(db, mock_external_e2e.NewMockPortalAPI()) + db := SetupTestGormDB(t) + repo := NewProjectRepository(db, mock_external_e2e.NewMockPortalAPI()) tests := []struct { name string @@ -124,10 +122,10 @@ func TestProjectRepository_UpdateProject(t *testing.T) { func TestProjectRepository_GetProjectMembers(t *testing.T) { t.Parallel() - db := testutils.SetupGormDB(t) + db := SetupTestGormDB(t) err := mockdata.InsertSampleDataToDB(db) assert.NoError(t, err) - repo := irepository.NewProjectRepository(db, mock_external_e2e.NewMockPortalAPI()) + repo := NewProjectRepository(db, mock_external_e2e.NewMockPortalAPI()) project1 := mustMakeProjectDetail(t, repo, nil) project2 := mustMakeProjectDetail(t, repo, nil) @@ -206,10 +204,10 @@ func TestProjectRepository_GetProjectMembers(t *testing.T) { func TestProjectRepository_DeleteProjectMembers(t *testing.T) { t.Parallel() - db := testutils.SetupGormDB(t) + db := SetupTestGormDB(t) err := mockdata.InsertSampleDataToDB(db) assert.NoError(t, err) - repo := irepository.NewProjectRepository(db, mock_external_e2e.NewMockPortalAPI()) + repo := NewProjectRepository(db, mock_external_e2e.NewMockPortalAPI()) project1 := mustMakeProjectDetail(t, repo, nil) project2 := mustMakeProjectDetail(t, repo, nil) diff --git a/integration_tests/repository/user_test.go b/infrastructure/repository/user_test.go similarity index 89% rename from integration_tests/repository/user_test.go rename to infrastructure/repository/user_test.go index cb2f219a..a697126c 100644 --- a/integration_tests/repository/user_test.go +++ b/infrastructure/repository/user_test.go @@ -8,8 +8,6 @@ import ( "github.com/stretchr/testify/assert" "github.com/traPtitech/traPortfolio/domain" "github.com/traPtitech/traPortfolio/infrastructure/external/mock_external_e2e" - irepository "github.com/traPtitech/traPortfolio/infrastructure/repository" - "github.com/traPtitech/traPortfolio/integration_tests/testutils" urepository "github.com/traPtitech/traPortfolio/usecases/repository" "github.com/traPtitech/traPortfolio/util/mockdata" @@ -20,10 +18,10 @@ import ( func TestUserRepository_GetUsers(t *testing.T) { t.Parallel() - db := testutils.SetupGormDB(t) + db := SetupTestGormDB(t) err := mockdata.InsertSampleDataToDB(db) assert.NoError(t, err) - repo := irepository.NewUserRepository(db, mock_external_e2e.NewMockPortalAPI(), mock_external_e2e.NewMockTraQAPI()) + repo := NewUserRepository(db, mock_external_e2e.NewMockPortalAPI(), mock_external_e2e.NewMockTraQAPI()) type args struct { args *urepository.GetUsersArgs @@ -118,10 +116,10 @@ func TestUserRepository_GetUsers(t *testing.T) { func TestUserRepository_GetUser(t *testing.T) { t.Parallel() - db := testutils.SetupGormDB(t) + db := SetupTestGormDB(t) err := mockdata.InsertSampleDataToDB(db) assert.NoError(t, err) - repo := irepository.NewUserRepository(db, mock_external_e2e.NewMockPortalAPI(), mock_external_e2e.NewMockTraQAPI()) + repo := NewUserRepository(db, mock_external_e2e.NewMockPortalAPI(), mock_external_e2e.NewMockTraQAPI()) type args struct { userID uuid.UUID @@ -199,8 +197,8 @@ func TestUserRepository_GetUser(t *testing.T) { func TestUserRepository_CreateUser(t *testing.T) { t.Parallel() - db := testutils.SetupGormDB(t) - repo := irepository.NewUserRepository(db, mock_external_e2e.NewMockPortalAPI(), mock_external_e2e.NewMockTraQAPI()) + db := SetupTestGormDB(t) + repo := NewUserRepository(db, mock_external_e2e.NewMockPortalAPI(), mock_external_e2e.NewMockTraQAPI()) type args struct { args *urepository.CreateUserArgs @@ -251,10 +249,10 @@ func TestUserRepository_CreateUser(t *testing.T) { func TestUserRepository_UpdateUser(t *testing.T) { t.Parallel() - db := testutils.SetupGormDB(t) + db := SetupTestGormDB(t) err := mockdata.InsertSampleDataToDB(db) assert.NoError(t, err) - repo := irepository.NewUserRepository(db, mock_external_e2e.NewMockPortalAPI(), mock_external_e2e.NewMockTraQAPI()) + repo := NewUserRepository(db, mock_external_e2e.NewMockPortalAPI(), mock_external_e2e.NewMockTraQAPI()) tests := []struct { name string @@ -309,10 +307,10 @@ func TestUserRepository_UpdateUser(t *testing.T) { func TestUserRepository_GetAccounts(t *testing.T) { t.Parallel() - db := testutils.SetupGormDB(t) + db := SetupTestGormDB(t) err := mockdata.InsertSampleDataToDB(db) assert.NoError(t, err) - repo := irepository.NewUserRepository(db, mock_external_e2e.NewMockPortalAPI(), mock_external_e2e.NewMockTraQAPI()) + repo := NewUserRepository(db, mock_external_e2e.NewMockPortalAPI(), mock_external_e2e.NewMockTraQAPI()) var ( idx = 1 @@ -343,10 +341,10 @@ func TestUserRepository_GetAccounts(t *testing.T) { func TestUserRepository_GetAccount(t *testing.T) { t.Parallel() - db := testutils.SetupGormDB(t) + db := SetupTestGormDB(t) err := mockdata.InsertSampleDataToDB(db) assert.NoError(t, err) - repo := irepository.NewUserRepository(db, mock_external_e2e.NewMockPortalAPI(), mock_external_e2e.NewMockTraQAPI()) + repo := NewUserRepository(db, mock_external_e2e.NewMockPortalAPI(), mock_external_e2e.NewMockTraQAPI()) var ( idx = 1 @@ -378,10 +376,10 @@ func TestUserRepository_GetAccount(t *testing.T) { func TestUserRepository_UpdateAccount(t *testing.T) { t.Parallel() - db := testutils.SetupGormDB(t) + db := SetupTestGormDB(t) err := mockdata.InsertSampleDataToDB(db) assert.NoError(t, err) - repo := irepository.NewUserRepository(db, mock_external_e2e.NewMockPortalAPI(), mock_external_e2e.NewMockTraQAPI()) + repo := NewUserRepository(db, mock_external_e2e.NewMockPortalAPI(), mock_external_e2e.NewMockTraQAPI()) var ( idx = 1 @@ -425,10 +423,10 @@ func TestUserRepository_UpdateAccount(t *testing.T) { func TestUserRepository_DeleteAccount(t *testing.T) { t.Parallel() - db := testutils.SetupGormDB(t) + db := SetupTestGormDB(t) err := mockdata.InsertSampleDataToDB(db) assert.NoError(t, err) - repo := irepository.NewUserRepository(db, mock_external_e2e.NewMockPortalAPI(), mock_external_e2e.NewMockTraQAPI()) + repo := NewUserRepository(db, mock_external_e2e.NewMockPortalAPI(), mock_external_e2e.NewMockTraQAPI()) var ( idx = 1 @@ -464,11 +462,11 @@ func TestUserRepository_DeleteAccount(t *testing.T) { func TestUserRepository_GetUserProjects(t *testing.T) { t.Parallel() - db := testutils.SetupGormDB(t) + db := SetupTestGormDB(t) err := mockdata.InsertSampleDataToDB(db) assert.NoError(t, err) - userRepo := irepository.NewUserRepository(db, mock_external_e2e.NewMockPortalAPI(), mock_external_e2e.NewMockTraQAPI()) - projectRepo := irepository.NewProjectRepository(db, mock_external_e2e.NewMockPortalAPI()) + userRepo := NewUserRepository(db, mock_external_e2e.NewMockPortalAPI(), mock_external_e2e.NewMockTraQAPI()) + projectRepo := NewProjectRepository(db, mock_external_e2e.NewMockPortalAPI()) project1 := mustMakeProjectDetail(t, projectRepo, nil) project2 := mustMakeProjectDetail(t, projectRepo, nil) @@ -495,11 +493,11 @@ func TestUserRepository_GetUserProjects(t *testing.T) { func TestUserRepository_GetContests(t *testing.T) { t.Parallel() - db := testutils.SetupGormDB(t) + db := SetupTestGormDB(t) err := mockdata.InsertSampleDataToDB(db) assert.NoError(t, err) - userRepo := irepository.NewUserRepository(db, mock_external_e2e.NewMockPortalAPI(), mock_external_e2e.NewMockTraQAPI()) - contestRepo := irepository.NewContestRepository(db, mock_external_e2e.NewMockPortalAPI()) + userRepo := NewUserRepository(db, mock_external_e2e.NewMockPortalAPI(), mock_external_e2e.NewMockTraQAPI()) + contestRepo := NewContestRepository(db, mock_external_e2e.NewMockPortalAPI()) contestNum := 3 var contests []*domain.ContestDetail diff --git a/integration_tests/handler/0_utils_test.go b/integration_tests/handler/0_utils_test.go index d4177614..c58b7980 100644 --- a/integration_tests/handler/0_utils_test.go +++ b/integration_tests/handler/0_utils_test.go @@ -3,6 +3,7 @@ package handler import ( "bytes" "encoding/json" + "fmt" "io" "net/http/httptest" "reflect" @@ -12,8 +13,8 @@ import ( "github.com/labstack/echo/v4" "github.com/stretchr/testify/assert" "github.com/traPtitech/traPortfolio/infrastructure/external/mock_external_e2e" + "github.com/traPtitech/traPortfolio/infrastructure/migration" "github.com/traPtitech/traPortfolio/infrastructure/repository" - "github.com/traPtitech/traPortfolio/integration_tests/testutils" "github.com/traPtitech/traPortfolio/interfaces/handler" "github.com/traPtitech/traPortfolio/util/config" "github.com/traPtitech/traPortfolio/util/mockdata" @@ -55,11 +56,11 @@ func injectIntoAPIServer(t *testing.T, c *config.Config, db *gorm.DB) (handler.A func setupRoutes(t *testing.T, e *echo.Echo) *handler.API { t.Helper() - db := testutils.SetupGormDB(t) + db := SetupGormDB(t) err := mockdata.InsertSampleDataToDB(db) assert.NoError(t, err) - api, err := injectIntoAPIServer(t, testutils.Config, db) + api, err := injectIntoAPIServer(t, testConfig, db) assert.NoError(t, err) err = handler.Setup(false, e, api) @@ -68,6 +69,43 @@ func setupRoutes(t *testing.T, e *echo.Echo) *handler.API { return &api } +func SetupGormDB(t *testing.T) *gorm.DB { + t.Helper() + + db := establishTestDBConnection(t) + dropAll(t, db) + init, err := migration.Migrate(db, migration.AllTables()) + assert.True(t, init) + assert.NoError(t, err) + + return db +} + +func establishTestDBConnection(t *testing.T) *gorm.DB { + t.Helper() + + sqlConf := testConfig.DB + sqlConf.Name = "portfolio_test_" + t.Name() + + _, err := testDB.Exec(fmt.Sprintf("CREATE DATABASE IF NOT EXISTS `%s`", sqlConf.Name)) + assert.NoError(t, err) + + db, err := repository.NewGormDB(sqlConf) + assert.NoError(t, err) + + return db +} + +func dropAll(t *testing.T, db *gorm.DB) { + t.Helper() + + tables := []interface{}{"migrations"} + tables = append(tables, migration.AllTables()...) + + err := db.Migrator().DropTable(tables...) + assert.NoError(t, err) +} + func doRequest(t *testing.T, e *echo.Echo, method string, path string, body interface{}) *httptest.ResponseRecorder { t.Helper() diff --git a/integration_tests/handler/main_test.go b/integration_tests/handler/main_test.go index 0f2fcad8..668ece08 100644 --- a/integration_tests/handler/main_test.go +++ b/integration_tests/handler/main_test.go @@ -1,16 +1,23 @@ package handler import ( + "database/sql" "io" "log" "testing" "github.com/go-sql-driver/mysql" - "github.com/traPtitech/traPortfolio/integration_tests/testutils" "github.com/traPtitech/traPortfolio/util/config" + "github.com/traPtitech/traPortfolio/util/testutils" +) + +var ( + testConfig *config.Config + testDB *sql.DB ) func TestMain(m *testing.M) { + // TODO: loadをやめてテスト固有のconfigを使う c, err := config.Load(config.LoadOpts{SkipReadFromFiles: true}) if err != nil { panic(err) @@ -18,19 +25,21 @@ func TestMain(m *testing.M) { // disable mysql driver logging _ = mysql.SetLogger(mysql.Logger(log.New(io.Discard, "", 0))) - db, closeFunc, err := testutils.RunMySQLContainerOnDocker(c.DB) + db, port, closeFunc, err := testutils.RunMySQLContainerOnDocker(c.DB.User, c.DB.Pass, c.DB.Host) if err != nil { panic(err) } + c.DB.Port = port + defer func() { if err := closeFunc(); err != nil { panic(err) } }() - testutils.Config = c - testutils.DB = db + testConfig = c + testDB = db m.Run() } diff --git a/integration_tests/testutils/db.go b/integration_tests/testutils/db.go deleted file mode 100644 index 0740c0e5..00000000 --- a/integration_tests/testutils/db.go +++ /dev/null @@ -1,129 +0,0 @@ -package testutils - -import ( - "database/sql" - "fmt" - "strconv" - "testing" - "time" - - "github.com/ory/dockertest" - "github.com/ory/dockertest/docker" - "github.com/stretchr/testify/assert" - "github.com/traPtitech/traPortfolio/infrastructure/migration" - "github.com/traPtitech/traPortfolio/infrastructure/repository" - "github.com/traPtitech/traPortfolio/util/config" - "gorm.io/gorm" -) - -// TODO: integration_tests/handler以下に置く -var ( - Config *config.Config - DB *sql.DB - Port int -) - -func SetupGormDB(t *testing.T) *gorm.DB { - t.Helper() - - db := establishTestDBConnection(t) - dropAll(t, db) - init, err := migration.Migrate(db, migration.AllTables()) - assert.True(t, init) - assert.NoError(t, err) - - return db -} - -func establishTestDBConnection(t *testing.T) *gorm.DB { - t.Helper() - - sqlConf := Config.DB - sqlConf.Name = "portfolio_test_" + t.Name() - sqlConf.Port = Port - - _, err := DB.Exec(fmt.Sprintf("CREATE DATABASE IF NOT EXISTS `%s`", sqlConf.Name)) - assert.NoError(t, err) - - db, err := repository.NewGormDB(sqlConf) - assert.NoError(t, err) - - return db -} - -func dropAll(t *testing.T, db *gorm.DB) { - t.Helper() - - tables := []interface{}{"migrations"} - tables = append(tables, migration.AllTables()...) - - err := db.Migrator().DropTable(tables...) - assert.NoError(t, err) -} - -func RunMySQLContainerOnDocker(sqlConf config.SQLConfig) (*sql.DB, func() error, error) { - pool, err := dockertest.NewPool("") - if err != nil { - return nil, nil, fmt.Errorf("create docker pool: %w", err) - } - - pool.MaxWait = 1 * time.Minute - - if err := pool.Client.Ping(); err != nil { - return nil, nil, fmt.Errorf("ping docker: %w", err) - } - - resource, err := pool.RunWithOptions(&dockertest.RunOptions{ - Repository: "mariadb", - Tag: "10.6.4", - Env: []string{"MYSQL_ROOT_PASSWORD=" + sqlConf.Pass}, - }, func(hc *docker.HostConfig) { - hc.AutoRemove = true - hc.RestartPolicy = docker.RestartPolicy{Name: "no"} - }) - if err != nil { - return nil, nil, fmt.Errorf("run docker container: %w", err) - } - - if err := resource.Expire(60); err != nil { - return nil, nil, fmt.Errorf("expire docker container: %w", err) - } - - sqlConf.Name = "" - sqlConf.Port, _ = strconv.Atoi(resource.GetPort("3306/tcp")) - - var db *sql.DB - - Port, _ = strconv.Atoi(resource.GetPort("3306/tcp")) - - if err := pool.Retry(func() error { - _db, err := sql.Open("mysql", sqlConf.DsnConfig().FormatDSN()) - if err != nil { - return fmt.Errorf("open mysql: %w", err) - } - - if err := _db.Ping(); err != nil { - return fmt.Errorf("ping mysql: %w", err) - } - - db = _db - - return nil - }); err != nil { - return nil, nil, fmt.Errorf("retry: %w", err) - } - - closeFunc := func() error { - if err := db.Close(); err != nil { - return fmt.Errorf("close mysql: %w", err) - } - - if err := pool.Purge(resource); err != nil { - return fmt.Errorf("purge docker container: %w", err) - } - - return nil - } - - return db, closeFunc, nil -} diff --git a/util/testutils/db.go b/util/testutils/db.go new file mode 100644 index 00000000..7d1fa256 --- /dev/null +++ b/util/testutils/db.go @@ -0,0 +1,81 @@ +package testutils + +import ( + "database/sql" + "fmt" + "strconv" + "time" + + "github.com/ory/dockertest" + "github.com/ory/dockertest/docker" + "github.com/traPtitech/traPortfolio/util/config" +) + +func RunMySQLContainerOnDocker(user, pass, host string) (db *sql.DB, port int, closeFunc func() error, err error) { + pool, err := dockertest.NewPool("") + if err != nil { + return nil, 0, nil, fmt.Errorf("create docker pool: %w", err) + } + + pool.MaxWait = 1 * time.Minute + + if err := pool.Client.Ping(); err != nil { + return nil, 0, nil, fmt.Errorf("ping docker: %w", err) + } + + resource, err := pool.RunWithOptions(&dockertest.RunOptions{ + Repository: "mariadb", + Tag: "10.6.4", + Env: []string{"MYSQL_ROOT_PASSWORD=" + pass}, + }, func(hc *docker.HostConfig) { + hc.AutoRemove = true + hc.RestartPolicy = docker.RestartPolicy{Name: "no"} + }) + if err != nil { + return nil, 0, nil, fmt.Errorf("run docker container: %w", err) + } + + if err := resource.Expire(60); err != nil { + return nil, 0, nil, fmt.Errorf("expire docker container: %w", err) + } + + port, _ = strconv.Atoi(resource.GetPort("3306/tcp")) + sqlConfig := config.SQLConfig{ + User: user, + Pass: pass, + Host: host, + Name: "", + Port: port, + } + + if err := pool.Retry(func() error { + _db, err := sql.Open("mysql", sqlConfig.DsnConfig().FormatDSN()) + if err != nil { + return fmt.Errorf("open mysql: %w", err) + } + + if err := _db.Ping(); err != nil { + return fmt.Errorf("ping mysql: %w", err) + } + + db = _db + + return nil + }); err != nil { + return nil, 0, nil, fmt.Errorf("retry: %w", err) + } + + closeFunc = func() error { + if err := db.Close(); err != nil { + return fmt.Errorf("close mysql: %w", err) + } + + if err := pool.Purge(resource); err != nil { + return fmt.Errorf("purge docker container: %w", err) + } + + return nil + } + + return +} From a8d4c343eec5e20b324648f1c5608ee453cc728b Mon Sep 17 00:00:00 2001 From: ras0q Date: Tue, 18 Jun 2024 17:44:25 +0900 Subject: [PATCH 2/6] :recycle: rewrite contest tests --- infrastructure/repository/contest_test.go | 588 ++++++++++------------ util/random/repository.go | 35 +- 2 files changed, 286 insertions(+), 337 deletions(-) diff --git a/infrastructure/repository/contest_test.go b/infrastructure/repository/contest_test.go index d758dbc6..49ebe859 100644 --- a/infrastructure/repository/contest_test.go +++ b/infrastructure/repository/contest_test.go @@ -3,426 +3,356 @@ package repository import ( "context" "testing" - "time" "github.com/gofrs/uuid" + "github.com/golang/mock/gomock" "github.com/stretchr/testify/assert" "github.com/traPtitech/traPortfolio/domain" - "github.com/traPtitech/traPortfolio/infrastructure/external/mock_external_e2e" + "github.com/traPtitech/traPortfolio/infrastructure/external" + "github.com/traPtitech/traPortfolio/infrastructure/external/mock_external" - urepository "github.com/traPtitech/traPortfolio/usecases/repository" - "github.com/traPtitech/traPortfolio/util/mockdata" + "github.com/traPtitech/traPortfolio/usecases/repository" "github.com/traPtitech/traPortfolio/util/random" ) -func TestContestRepository_GetContests(t *testing.T) { +func TestGetContests(t *testing.T) { t.Parallel() db := SetupTestGormDB(t) - repo := NewContestRepository(db, mock_external_e2e.NewMockPortalAPI()) - contest1 := mustMakeContest(t, repo, nil) - contest2 := mustMakeContest(t, repo, nil) - contests, err := repo.GetContests(context.Background()) + portalAPI := mock_external.NewMockPortalAPI(gomock.NewController(t)) + repo := NewContestRepository(db, portalAPI) + + contest1, err := repo.CreateContest(context.Background(), random.CreateContestArgs()) + assert.NoError(t, err) + contest2, err := repo.CreateContest(context.Background(), random.CreateContestArgs()) assert.NoError(t, err) - expected := []*domain.Contest{&contest1.Contest, &contest2.Contest} + t.Run("get all contests", func(t *testing.T) { + gotContests, err := repo.GetContests(context.Background()) + assert.NoError(t, err) - assert.ElementsMatch(t, expected, contests) + expectedContests := []*domain.Contest{&contest1.Contest, &contest2.Contest} + assert.ElementsMatch(t, expectedContests, gotContests) + }) } -func TestContestRepository_GetContest(t *testing.T) { +func TestGetContest(t *testing.T) { t.Parallel() db := SetupTestGormDB(t) - repo := NewContestRepository(db, mock_external_e2e.NewMockPortalAPI()) - contest1 := mustMakeContest(t, repo, nil) - contest2 := mustMakeContest(t, repo, nil) + portalAPI := mock_external.NewMockPortalAPI(gomock.NewController(t)) + repo := NewContestRepository(db, portalAPI) - gotContest1, err := repo.GetContest(context.Background(), contest1.ID) + contest1, err := repo.CreateContest(context.Background(), random.CreateContestArgs()) assert.NoError(t, err) - assert.Equal(t, contest1, gotContest1) - - gotContest2, err := repo.GetContest(context.Background(), contest2.ID) + contest2, err := repo.CreateContest(context.Background(), random.CreateContestArgs()) assert.NoError(t, err) - assert.Equal(t, contest2, gotContest2) + + t.Run("get contest1", func(t *testing.T) { + gotContest, err := repo.GetContest(context.Background(), contest1.ID) + assert.NoError(t, err) + assert.Equal(t, contest1, gotContest) + }) + + t.Run("get contest2", func(t *testing.T) { + gotContest, err := repo.GetContest(context.Background(), contest2.ID) + assert.NoError(t, err) + assert.Equal(t, contest2, gotContest) + }) } -func TestContestRepository_UpdateContest(t *testing.T) { +func TestCreateContest(t *testing.T) {} + +func TestUpdateContest(t *testing.T) { t.Parallel() db := SetupTestGormDB(t) - repo := NewContestRepository(db, mock_external_e2e.NewMockPortalAPI()) - tests := []struct { - name string - ctx context.Context - args *urepository.UpdateContestArgs - }{ - { - name: "all fields", - ctx: context.Background(), - args: random.UpdateContestArgs(), - }, - { - name: "partial fields", - ctx: context.Background(), - args: random.UpdateContestArgs(), - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - contest1 := mustMakeContest(t, repo, nil) - contest2 := mustMakeContest(t, repo, nil) - - args := tt.args - contest1.Name = args.Name.ValueOr(contest1.Name) - contest1.Description = args.Description.ValueOr(contest1.Description) - contest1.Link = args.Link.ValueOr(contest1.Link) - contest1.TimeStart = args.Since.ValueOr(contest1.TimeStart) - contest1.TimeEnd = args.Until.ValueOr(contest1.TimeEnd) - - err := repo.UpdateContest(context.Background(), contest1.ID, args) - assert.NoError(t, err) - - gotContest1, err := repo.GetContest(context.Background(), contest1.ID) - assert.NoError(t, err) - gotContest2, err := repo.GetContest(context.Background(), contest2.ID) - assert.NoError(t, err) - - expected := []*domain.ContestDetail{contest1, contest2} - gots := []*domain.ContestDetail{gotContest1, gotContest2} - - for i := range expected { - assert.True(t, expected[i].TimeStart.Equal(gots[i].TimeStart)) - assert.True(t, expected[i].TimeEnd.Equal(gots[i].TimeEnd)) - expected[i].TimeStart = time.Time{} - expected[i].TimeEnd = time.Time{} - gots[i].TimeStart = time.Time{} - gots[i].TimeEnd = time.Time{} - assert.Equal(t, expected[i], gots[i]) - } - }) - } + portalAPI := mock_external.NewMockPortalAPI(gomock.NewController(t)) + repo := NewContestRepository(db, portalAPI) + + contest, err := repo.CreateContest(context.Background(), random.CreateContestArgs()) + assert.NoError(t, err) + + t.Run("update all fields", func(t *testing.T) { + args := random.UpdateContestArgs() + err := repo.UpdateContest(context.Background(), contest.ID, args) + assert.NoError(t, err) + + gotContest, err := repo.GetContest(context.Background(), contest.ID) + assert.NoError(t, err) + + contest.Name = args.Name.ValueOr(contest.Name) + contest.Description = args.Description.ValueOr(contest.Description) + contest.Link = args.Link.ValueOr(contest.Link) + contest.TimeStart = args.Since.ValueOr(contest.TimeStart) + contest.TimeEnd = args.Until.ValueOr(contest.TimeEnd) + assert.Equal(t, contest, gotContest) + }) + + t.Run("update no fields", func(t *testing.T) { + args := &repository.UpdateContestArgs{} + err := repo.UpdateContest(context.Background(), contest.ID, args) + assert.NoError(t, err) + + gotContest, err := repo.GetContest(context.Background(), contest.ID) + assert.NoError(t, err) + + assert.Equal(t, contest, gotContest) + }) } -func TestContestRepository_DeleteContest(t *testing.T) { +func TestDeleteContest(t *testing.T) { t.Parallel() db := SetupTestGormDB(t) - repo := NewContestRepository(db, mock_external_e2e.NewMockPortalAPI()) - contest1 := mustMakeContest(t, repo, nil) - contest2 := mustMakeContest(t, repo, nil) + portalAPI := mock_external.NewMockPortalAPI(gomock.NewController(t)) + repo := NewContestRepository(db, portalAPI) - gotContest1, err := repo.GetContest(context.Background(), contest1.ID) + contest1, err := repo.CreateContest(context.Background(), random.CreateContestArgs()) assert.NoError(t, err) - assert.Equal(t, contest1, gotContest1) - - gotContest2, err := repo.GetContest(context.Background(), contest2.ID) + contest2, err := repo.CreateContest(context.Background(), random.CreateContestArgs()) assert.NoError(t, err) - assert.Equal(t, contest2, gotContest2) - err = repo.DeleteContest(context.Background(), contest1.ID) - assert.NoError(t, err) + t.Run("delete contest1", func(t *testing.T) { + gotContest1, err := repo.GetContest(context.Background(), contest1.ID) + assert.NoError(t, err) + assert.Equal(t, contest1, gotContest1) - deletedContest1, err := repo.GetContest(context.Background(), contest1.ID) - assert.Nil(t, deletedContest1) - assert.Equal(t, err, urepository.ErrNotFound) + err = repo.DeleteContest(context.Background(), contest1.ID) + assert.NoError(t, err) - gotContest2, err = repo.GetContest(context.Background(), contest2.ID) - assert.NoError(t, err) - assert.Equal(t, contest2, gotContest2) + deletedContest1, err := repo.GetContest(context.Background(), contest1.ID) + assert.Nil(t, deletedContest1) + assert.Equal(t, err, repository.ErrNotFound) + }) + + t.Run("delete of contest1 doesn't affect contest2", func(t *testing.T) { + gotContest2, err := repo.GetContest(context.Background(), contest2.ID) + assert.NoError(t, err) + assert.Equal(t, contest2, gotContest2) + }) } -func TestContestRepository_GetContestTeams(t *testing.T) { +func TestGetContestTeams(t *testing.T) { t.Parallel() db := SetupTestGormDB(t) - repo := NewContestRepository(db, mock_external_e2e.NewMockPortalAPI()) - - contest1 := mustMakeContest(t, repo, nil) - contest2 := mustMakeContest(t, repo, nil) - team1 := mustMakeContestTeam(t, repo, contest1.ID, &urepository.CreateContestTeamArgs{ - Name: random.AlphaNumeric(), - Result: random.Optional(random.AlphaNumeric()), - Link: random.Optional(random.RandURLString()), - Description: random.AlphaNumeric(), - }) - team2 := mustMakeContestTeam(t, repo, contest1.ID, &urepository.CreateContestTeamArgs{ - Name: random.AlphaNumeric(), - Result: random.Optional(random.AlphaNumeric()), - Link: random.Optional(random.RandURLString()), - Description: random.AlphaNumeric(), - }) + portalAPI := mock_external.NewMockPortalAPI(gomock.NewController(t)) + repo := NewContestRepository(db, portalAPI) - expected1 := []*domain.ContestTeam{&team1.ContestTeam, &team2.ContestTeam} - gotTeams1, err := repo.GetContestTeams(context.Background(), contest1.ID) + // contest1 has two teams (team1, team2) + contest1, err := repo.CreateContest(context.Background(), random.CreateContestArgs()) assert.NoError(t, err) - assert.ElementsMatch(t, expected1, gotTeams1) - - expected2 := []*domain.ContestTeam{} - gotTeams2, err := repo.GetContestTeams(context.Background(), contest2.ID) + team1, err := repo.CreateContestTeam(context.Background(), contest1.ID, random.CreateContestTeamArgs()) + assert.NoError(t, err) + team2, err := repo.CreateContestTeam(context.Background(), contest1.ID, random.CreateContestTeamArgs()) + assert.NoError(t, err) + // contest2 has no teams + contest2, err := repo.CreateContest(context.Background(), random.CreateContestArgs()) assert.NoError(t, err) - assert.ElementsMatch(t, expected2, gotTeams2) + + t.Run("get teams of contest1 (two teams belongs)", func(t *testing.T) { + expectedTeams := []*domain.ContestTeam{&team1.ContestTeam, &team2.ContestTeam} + portalAPI.EXPECT().GetUsers().Return([]*external.PortalUserResponse{}, nil) + gotTeams, err := repo.GetContestTeams(context.Background(), contest1.ID) + assert.NoError(t, err) + assert.ElementsMatch(t, expectedTeams, gotTeams) + }) + + t.Run("get teams of contest2 (no teams belongs)", func(t *testing.T) { + expectedTeams := []*domain.ContestTeam{} + portalAPI.EXPECT().GetUsers().Return([]*external.PortalUserResponse{}, nil) + gotTeams, err := repo.GetContestTeams(context.Background(), contest2.ID) + assert.NoError(t, err) + assert.ElementsMatch(t, expectedTeams, gotTeams) + }) } -func TestContestRepository_GetContestTeam(t *testing.T) { +func TestGetContestTeam(t *testing.T) { t.Parallel() db := SetupTestGormDB(t) - repo := NewContestRepository(db, mock_external_e2e.NewMockPortalAPI()) - - contest1 := mustMakeContest(t, repo, nil) - contest2 := mustMakeContest(t, repo, nil) - team1 := mustMakeContestTeam(t, repo, contest1.ID, &urepository.CreateContestTeamArgs{ - Name: random.AlphaNumeric(), - Result: random.Optional(random.AlphaNumeric()), - Link: random.Optional(random.RandURLString()), - Description: random.AlphaNumeric(), - }) - team2 := mustMakeContestTeam(t, repo, contest1.ID, &urepository.CreateContestTeamArgs{ - Name: random.AlphaNumeric(), - Result: random.Optional(random.AlphaNumeric()), - Link: random.Optional(random.RandURLString()), - Description: random.AlphaNumeric(), - }) + portalAPI := mock_external.NewMockPortalAPI(gomock.NewController(t)) + repo := NewContestRepository(db, portalAPI) - gotTeams1, err := repo.GetContestTeam(context.Background(), contest1.ID, team1.ID) + // contest1 has a team (team1) + contest1, err := repo.CreateContest(context.Background(), random.CreateContestArgs()) + assert.NoError(t, err) + team1, err := repo.CreateContestTeam(context.Background(), contest1.ID, random.CreateContestTeamArgs()) assert.NoError(t, err) - assert.Equal(t, team1, gotTeams1) + // contest2 has no teams + contest2, err := repo.CreateContest(context.Background(), random.CreateContestArgs()) + assert.NoError(t, err) + + t.Run("get team1 (belongs to contest1)", func(t *testing.T) { + portalAPI.EXPECT().GetUsers().Return([]*external.PortalUserResponse{}, nil) + gotTeam1, err := repo.GetContestTeam(context.Background(), contest1.ID, team1.ID) + assert.NoError(t, err) + assert.Equal(t, team1, gotTeam1) + }) - gotTeams2, err := repo.GetContestTeam(context.Background(), contest2.ID, team2.ID) - assert.Error(t, err) - assert.Nil(t, gotTeams2) + t.Run("cannot get team1 (doesn't belong to contest2)", func(t *testing.T) { + _, err := repo.GetContestTeam(context.Background(), contest2.ID, team1.ID) + assert.Error(t, err) + assert.Equal(t, err, repository.ErrNotFound) + }) } -// func TestCreateContestTeam(t *testing.T) { -// } +func TestCreateContestTeam(t *testing.T) {} -func TestContestRepository_UpdateContestTeam(t *testing.T) { +func TestUpdateContestTeam(t *testing.T) { t.Parallel() db := SetupTestGormDB(t) - repo := NewContestRepository(db, mock_external_e2e.NewMockPortalAPI()) - - tests := []struct { - name string - ctx context.Context - args *urepository.UpdateContestTeamArgs - }{ - { - name: "all fields", - ctx: context.Background(), - args: random.UpdateContestTeamArgs(), - }, - { - name: "partial fields", - ctx: context.Background(), - args: random.OptUpdateContestTeamArgs(), - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - t.Parallel() - contest := mustMakeContest(t, repo, nil) - team := mustMakeContestTeam(t, repo, contest.ID, &urepository.CreateContestTeamArgs{ - Name: random.AlphaNumeric(), - Result: random.Optional(random.AlphaNumeric()), - Link: random.Optional(random.RandURLString()), - Description: random.AlphaNumeric(), - }) - - args := tt.args - team.Name = args.Name.ValueOr(team.Name) - team.Result = args.Result.ValueOr(team.Result) - team.Link = args.Link.ValueOr(team.Link) - team.Description = args.Description.ValueOr(team.Description) - - err := repo.UpdateContestTeam(tt.ctx, team.ID, args) - assert.NoError(t, err) - - got, err := repo.GetContestTeam(tt.ctx, contest.ID, team.ID) - assert.NoError(t, err) - assert.Equal(t, team, got) - }) - } -} + portalAPI := mock_external.NewMockPortalAPI(gomock.NewController(t)) + repo := NewContestRepository(db, portalAPI) -func TestContestRepository_DeleteContestTeam(t *testing.T) { - t.Parallel() + contest, err := repo.CreateContest(context.Background(), random.CreateContestArgs()) + assert.NoError(t, err) + team, err := repo.CreateContestTeam(context.Background(), contest.ID, random.CreateContestTeamArgs()) + assert.NoError(t, err) - db := SetupTestGormDB(t) - repo := NewContestRepository(db, mock_external_e2e.NewMockPortalAPI()) - - contest1 := mustMakeContest(t, repo, nil) - contest2 := mustMakeContest(t, repo, nil) - team1 := mustMakeContestTeam(t, repo, contest1.ID, &urepository.CreateContestTeamArgs{ - Name: random.AlphaNumeric(), - Result: random.Optional(random.AlphaNumeric()), - Link: random.Optional(random.RandURLString()), - Description: random.AlphaNumeric(), + t.Run("update all fields", func(t *testing.T) { + args := random.UpdateContestTeamArgs() + err := repo.UpdateContestTeam(context.Background(), team.ID, args) + assert.NoError(t, err) + + portalAPI.EXPECT().GetUsers().Return([]*external.PortalUserResponse{}, nil) + gotTeam, err := repo.GetContestTeam(context.Background(), contest.ID, team.ID) + assert.NoError(t, err) + + team.Name = args.Name.ValueOr(team.Name) + team.Result = args.Result.ValueOr(team.Result) + team.Link = args.Link.ValueOr(team.Link) + team.Description = args.Description.ValueOr(team.Description) + assert.Equal(t, team, gotTeam) }) - team2 := mustMakeContestTeam(t, repo, contest1.ID, &urepository.CreateContestTeamArgs{ - Name: random.AlphaNumeric(), - Result: random.Optional(random.AlphaNumeric()), - Link: random.Optional(random.RandURLString()), - Description: random.AlphaNumeric(), + + t.Run("update no fields", func(t *testing.T) { + args := &repository.UpdateContestTeamArgs{} + err := repo.UpdateContestTeam(context.Background(), team.ID, args) + assert.NoError(t, err) + + portalAPI.EXPECT().GetUsers().Return([]*external.PortalUserResponse{}, nil) + gotTeam, err := repo.GetContestTeam(context.Background(), contest.ID, team.ID) + assert.NoError(t, err) + + assert.Equal(t, team, gotTeam) }) +} - expected1 := []*domain.ContestTeam{&team1.ContestTeam, &team2.ContestTeam} - gotTeams1, err := repo.GetContestTeams(context.Background(), contest1.ID) - assert.NoError(t, err) - assert.ElementsMatch(t, expected1, gotTeams1) +func TestDeleteContestTeam(t *testing.T) { + t.Parallel() - expected2 := []*domain.ContestTeam{} - gotTeams2, err := repo.GetContestTeams(context.Background(), contest2.ID) - assert.NoError(t, err) - assert.ElementsMatch(t, expected2, gotTeams2) + db := SetupTestGormDB(t) + portalAPI := mock_external.NewMockPortalAPI(gomock.NewController(t)) + repo := NewContestRepository(db, portalAPI) - err = repo.DeleteContestTeam(context.Background(), contest1.ID, team1.ID) + contest1, err := repo.CreateContest(context.Background(), random.CreateContestArgs()) assert.NoError(t, err) - expected3 := []*domain.ContestTeam{&team2.ContestTeam} - gotTeams3, err := repo.GetContestTeams(context.Background(), contest1.ID) + team1, err := repo.CreateContestTeam(context.Background(), contest1.ID, random.CreateContestTeamArgs()) assert.NoError(t, err) - assert.Equal(t, expected3, gotTeams3) - - err = repo.DeleteContestTeam(context.Background(), contest1.ID, team2.ID) + team2, err := repo.CreateContestTeam(context.Background(), contest1.ID, random.CreateContestTeamArgs()) assert.NoError(t, err) - expected4 := []*domain.ContestTeam{} - gotTeams4, err := repo.GetContestTeams(context.Background(), contest1.ID) + contest2, err := repo.CreateContest(context.Background(), random.CreateContestArgs()) assert.NoError(t, err) - assert.Equal(t, expected4, gotTeams4) + + t.Run("delete team1 (belongs to contest1)", func(t *testing.T) { + gotTeam1, err := repo.GetContestTeam(context.Background(), contest1.ID, team1.ID) + assert.NoError(t, err) + assert.Equal(t, team1, gotTeam1) + + err = repo.DeleteContestTeam(context.Background(), contest1.ID, team1.ID) + assert.NoError(t, err) + + deletedTeam1, err := repo.GetContestTeam(context.Background(), contest1.ID, team1.ID) + assert.Nil(t, deletedTeam1) + assert.Equal(t, err, repository.ErrNotFound) + }) + + t.Run("delete of team1 doesn't affect team2", func(t *testing.T) { + gotTeam2, err := repo.GetContestTeam(context.Background(), contest1.ID, team2.ID) + assert.NoError(t, err) + assert.Equal(t, team2, gotTeam2) + }) + + t.Run("cannot delete team1 (doesn't belong to contest2)", func(t *testing.T) { + err := repo.DeleteContestTeam(context.Background(), contest2.ID, team1.ID) + assert.Error(t, err) + assert.Equal(t, err, repository.ErrNotFound) + }) } -func TestContestRepository_GetContestTeamMembers(t *testing.T) { +func TestGetContestTeamMembers(t *testing.T) { t.Parallel() db := SetupTestGormDB(t) - err := mockdata.InsertSampleDataToDB(db) + portalAPI := mock_external.NewMockPortalAPI(gomock.NewController(t)) + repo := NewContestRepository(db, portalAPI) + traqAPI := mock_external.NewMockTraQAPI(gomock.NewController(t)) + userRepo := NewUserRepository(db, portalAPI, traqAPI) + + // contest1 has a team (team1) + // team1 has two members (user1, user2) + contest1, err := repo.CreateContest(context.Background(), random.CreateContestArgs()) assert.NoError(t, err) - repo := NewContestRepository(db, mock_external_e2e.NewMockPortalAPI()) - - contest1 := mustMakeContest(t, repo, nil) - contest2 := mustMakeContest(t, repo, nil) - team1 := mustMakeContestTeam(t, repo, contest1.ID, &urepository.CreateContestTeamArgs{ - Name: random.AlphaNumeric(), - Result: random.Optional(random.AlphaNumeric()), - Link: random.Optional(random.RandURLString()), - Description: random.AlphaNumeric(), - }) - team2 := mustMakeContestTeam(t, repo, contest1.ID, &urepository.CreateContestTeamArgs{ - Name: random.AlphaNumeric(), - Result: random.Optional(random.AlphaNumeric()), - Link: random.Optional(random.RandURLString()), - Description: random.AlphaNumeric(), - }) - team3 := mustMakeContestTeam(t, repo, contest1.ID, &urepository.CreateContestTeamArgs{ - Name: random.AlphaNumeric(), - Result: random.Optional(random.AlphaNumeric()), - Link: random.Optional(random.RandURLString()), - Description: random.AlphaNumeric(), - }) - user1 := mockdata.MockUsers[1] - user2 := mockdata.MockUsers[2] - portalUser1 := mockdata.MockPortalUsers[1] - portalUser2 := mockdata.MockPortalUsers[2] - - mustAddContestTeamMembers(t, repo, team1.ID, []uuid.UUID{user1.ID}) - mustAddContestTeamMembers(t, repo, team1.ID, []uuid.UUID{user2.ID}) - mustAddContestTeamMembers(t, repo, team2.ID, []uuid.UUID{user2.ID}) - - expected1 := []*domain.User{ - domain.NewUser(user1.ID, user1.Name, portalUser1.RealName, user1.Check), - domain.NewUser(user2.ID, user2.Name, portalUser2.RealName, user2.Check), - } - users1, err := repo.GetContestTeamMembers(context.Background(), contest1.ID, team1.ID) + team1, err := repo.CreateContestTeam(context.Background(), contest1.ID, random.CreateContestTeamArgs()) assert.NoError(t, err) - assert.ElementsMatch(t, expected1, users1) - - expected2 := []*domain.User{ - domain.NewUser(user2.ID, user2.Name, portalUser2.RealName, user2.Check), - } - users2, err := repo.GetContestTeamMembers(context.Background(), contest1.ID, team2.ID) + createUserArgs1 := random.CreateUserArgs() + portalAPI.EXPECT().GetUserByTraqID(createUserArgs1.Name).Return(&external.PortalUserResponse{}, nil) + user1, err := userRepo.CreateUser(context.Background(), createUserArgs1) assert.NoError(t, err) - assert.ElementsMatch(t, expected2, users2) - - expected3 := []*domain.User{} - users3, err := repo.GetContestTeamMembers(context.Background(), contest2.ID, team3.ID) + createUserArgs2 := random.CreateUserArgs() + portalAPI.EXPECT().GetUserByTraqID(createUserArgs2.Name).Return(&external.PortalUserResponse{}, nil) + user2, err := userRepo.CreateUser(context.Background(), createUserArgs2) + assert.NoError(t, err) + memberIDs := []uuid.UUID{user1.ID} + err = repo.AddContestTeamMembers(context.Background(), team1.ID, memberIDs) assert.NoError(t, err) - assert.ElementsMatch(t, expected3, users3) + + t.Run("get team1 members", func(t *testing.T) { + expectedMembers := []*domain.User{&user1.User, &user2.User} + portalAPI.EXPECT().GetUsers().Return([]*external.PortalUserResponse{}, nil) + gotMembers, err := repo.GetContestTeamMembers(context.Background(), contest1.ID, team1.ID) + assert.NoError(t, err) + assert.Equal(t, expectedMembers, gotMembers) + }) } -// func TestContestRepository_AddContestTeamMembers(t *testing.T) { -// } +// TODO: #675がmergeされたら消す +func TestContestRepository_AddContestTeamMembers(t *testing.T) {} func TestContestRepository_EditContestTeamMembers(t *testing.T) { t.Parallel() db := SetupTestGormDB(t) - err := mockdata.InsertSampleDataToDB(db) + portalAPI := mock_external.NewMockPortalAPI(gomock.NewController(t)) + repo := NewContestRepository(db, portalAPI) + traqAPI := mock_external.NewMockTraQAPI(gomock.NewController(t)) + userRepo := NewUserRepository(db, portalAPI, traqAPI) + + // contest1 has a team (team1) + // team1 has a member (user1) + contest1, err := repo.CreateContest(context.Background(), random.CreateContestArgs()) assert.NoError(t, err) - repo := NewContestRepository(db, mock_external_e2e.NewMockPortalAPI()) - - contest1 := mustMakeContest(t, repo, nil) - contest2 := mustMakeContest(t, repo, nil) - team1 := mustMakeContestTeam(t, repo, contest1.ID, &urepository.CreateContestTeamArgs{ - Name: random.AlphaNumeric(), - Result: random.Optional(random.AlphaNumeric()), - Link: random.Optional(random.RandURLString()), - Description: random.AlphaNumeric(), - }) - team2 := mustMakeContestTeam(t, repo, contest1.ID, &urepository.CreateContestTeamArgs{ - Name: random.AlphaNumeric(), - Result: random.Optional(random.AlphaNumeric()), - Link: random.Optional(random.RandURLString()), - Description: random.AlphaNumeric(), - }) - team3 := mustMakeContestTeam(t, repo, contest1.ID, &urepository.CreateContestTeamArgs{ - Name: random.AlphaNumeric(), - Result: random.Optional(random.AlphaNumeric()), - Link: random.Optional(random.RandURLString()), - Description: random.AlphaNumeric(), - }) - user1 := mockdata.MockUsers[1] - user2 := mockdata.MockUsers[2] - portalUser1 := mockdata.MockPortalUsers[1] - portalUser2 := mockdata.MockPortalUsers[2] - - mustAddContestTeamMembers(t, repo, team1.ID, []uuid.UUID{user1.ID}) - mustAddContestTeamMembers(t, repo, team1.ID, []uuid.UUID{user2.ID}) - mustAddContestTeamMembers(t, repo, team2.ID, []uuid.UUID{user2.ID}) - - expected1 := []*domain.User{ - domain.NewUser(user1.ID, user1.Name, portalUser1.RealName, user1.Check), - domain.NewUser(user2.ID, user2.Name, portalUser2.RealName, user2.Check), - } - users1, err := repo.GetContestTeamMembers(context.Background(), contest1.ID, team1.ID) + team1, err := repo.CreateContestTeam(context.Background(), contest1.ID, random.CreateContestTeamArgs()) assert.NoError(t, err) - assert.ElementsMatch(t, expected1, users1) - - expected2 := []*domain.User{ - domain.NewUser(user2.ID, user2.Name, portalUser2.RealName, user2.Check), - } - users2, err := repo.GetContestTeamMembers(context.Background(), contest1.ID, team2.ID) + createUserArgs1 := random.CreateUserArgs() + portalAPI.EXPECT().GetUserByTraqID(createUserArgs1.Name).Return(&external.PortalUserResponse{}, nil) + user1, err := userRepo.CreateUser(context.Background(), createUserArgs1) assert.NoError(t, err) - assert.ElementsMatch(t, expected2, users2) - - expected3 := []*domain.User{} - users3, err := repo.GetContestTeamMembers(context.Background(), contest2.ID, team3.ID) + memberIDs := []uuid.UUID{user1.ID} + err = repo.AddContestTeamMembers(context.Background(), team1.ID, memberIDs) assert.NoError(t, err) - assert.ElementsMatch(t, expected3, users3) - expected4 := []*domain.User{ - domain.NewUser(user2.ID, user2.Name, portalUser2.RealName, user2.Check), - } - err = repo.EditContestTeamMembers(context.Background(), team1.ID, []uuid.UUID{user2.ID}) - assert.NoError(t, err) - users4, err := repo.GetContestTeamMembers(context.Background(), contest1.ID, team1.ID) - assert.NoError(t, err) - assert.ElementsMatch(t, expected4, users4) + t.Run("edit team1 members", func(t *testing.T) { + portalAPI.EXPECT().GetUsers().Return([]*external.PortalUserResponse{}, nil) + err := repo.EditContestTeamMembers(context.Background(), team1.ID, []uuid.UUID{}) + assert.NoError(t, err) - expected5 := []*domain.User{} - err = repo.EditContestTeamMembers(context.Background(), team1.ID, []uuid.UUID{}) - assert.NoError(t, err) - users5, err := repo.GetContestTeamMembers(context.Background(), contest1.ID, team1.ID) - assert.NoError(t, err) - assert.ElementsMatch(t, expected5, users5) + expectedMembers := []*domain.User{} + gotMembers, err := repo.GetContestTeamMembers(context.Background(), contest1.ID, team1.ID) + assert.NoError(t, err) + assert.Equal(t, expectedMembers, gotMembers) + }) } diff --git a/util/random/repository.go b/util/random/repository.go index f0be94a2..1c5aefef 100644 --- a/util/random/repository.go +++ b/util/random/repository.go @@ -2,12 +2,24 @@ package random import ( "math/rand/v2" + "time" "github.com/traPtitech/traPortfolio/domain" "github.com/traPtitech/traPortfolio/usecases/repository" "github.com/traPtitech/traPortfolio/util/optional" ) +// CreateContestArgs +func CreateContestArgs() *repository.CreateContestArgs { + return &repository.CreateContestArgs{ + Name: AlphaNumeric(), + Description: AlphaNumeric(), + Link: Optional(RandURLString()), + Since: time.Now(), + Until: Optional(time.Now().Add(time.Hour)), + } +} + // UpdateContestArgs 全てのフィールドがvalidなUpdateContestArgsを生成します func UpdateContestArgs() *repository.UpdateContestArgs { a := repository.UpdateContestArgs{ @@ -20,16 +32,14 @@ func UpdateContestArgs() *repository.UpdateContestArgs { return &a } -// OptUpdateContestArgs validかどうかも含めてランダムなUpdateContestArgsを生成します -func OptUpdateContestArgs() *repository.UpdateContestArgs { - a := repository.UpdateContestArgs{ - Name: Optional(AlphaNumeric()), - Description: Optional(AlphaNumeric()), +// CreateContestTeamArgs +func CreateContestTeamArgs() *repository.CreateContestTeamArgs { + return &repository.CreateContestTeamArgs{ + Name: AlphaNumeric(), + Result: Optional(AlphaNumeric()), Link: Optional(RandURLString()), - Since: Optional(Time()), - Until: Optional(Time()), + Description: AlphaNumeric(), } - return &a } // UpdateContestTeamArgs 全てのフィールドがvalidなUpdateContestTeamArgsを生成します @@ -82,6 +92,15 @@ func OptUpdateProjectArgs() *repository.UpdateProjectArgs { return &a } +// CreateUserArgs +func CreateUserArgs() *repository.CreateUserArgs { + return &repository.CreateUserArgs{ + Description: AlphaNumeric(), + Check: Bool(), + Name: AlphaNumeric(), + } +} + // UpdateUserArgs 全てのフィールドがvalidなUpdateUserArgsを生成します func UpdateUserArgs() *repository.UpdateUserArgs { a := repository.UpdateUserArgs{ From 75a35561dc7001e234eee50bc6ec02105633d214 Mon Sep 17 00:00:00 2001 From: ras0q Date: Tue, 18 Jun 2024 17:46:35 +0900 Subject: [PATCH 3/6] :adhesive_bandage: fix test name --- infrastructure/repository/contest_test.go | 26 +++++++++++------------ 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/infrastructure/repository/contest_test.go b/infrastructure/repository/contest_test.go index 49ebe859..169a28d5 100644 --- a/infrastructure/repository/contest_test.go +++ b/infrastructure/repository/contest_test.go @@ -15,7 +15,7 @@ import ( "github.com/traPtitech/traPortfolio/util/random" ) -func TestGetContests(t *testing.T) { +func Test_GetContests(t *testing.T) { t.Parallel() db := SetupTestGormDB(t) @@ -36,7 +36,7 @@ func TestGetContests(t *testing.T) { }) } -func TestGetContest(t *testing.T) { +func Test_GetContest(t *testing.T) { t.Parallel() db := SetupTestGormDB(t) @@ -61,9 +61,9 @@ func TestGetContest(t *testing.T) { }) } -func TestCreateContest(t *testing.T) {} +func Test_CreateContest(t *testing.T) {} -func TestUpdateContest(t *testing.T) { +func Test_UpdateContest(t *testing.T) { t.Parallel() db := SetupTestGormDB(t) @@ -101,7 +101,7 @@ func TestUpdateContest(t *testing.T) { }) } -func TestDeleteContest(t *testing.T) { +func Test_DeleteContest(t *testing.T) { t.Parallel() db := SetupTestGormDB(t) @@ -133,7 +133,7 @@ func TestDeleteContest(t *testing.T) { }) } -func TestGetContestTeams(t *testing.T) { +func Test_GetContestTeams(t *testing.T) { t.Parallel() db := SetupTestGormDB(t) @@ -168,7 +168,7 @@ func TestGetContestTeams(t *testing.T) { }) } -func TestGetContestTeam(t *testing.T) { +func Test_GetContestTeam(t *testing.T) { t.Parallel() db := SetupTestGormDB(t) @@ -198,9 +198,9 @@ func TestGetContestTeam(t *testing.T) { }) } -func TestCreateContestTeam(t *testing.T) {} +func Test_CreateContestTeam(t *testing.T) {} -func TestUpdateContestTeam(t *testing.T) { +func Test_UpdateContestTeam(t *testing.T) { t.Parallel() db := SetupTestGormDB(t) @@ -241,7 +241,7 @@ func TestUpdateContestTeam(t *testing.T) { }) } -func TestDeleteContestTeam(t *testing.T) { +func Test_DeleteContestTeam(t *testing.T) { t.Parallel() db := SetupTestGormDB(t) @@ -283,7 +283,7 @@ func TestDeleteContestTeam(t *testing.T) { }) } -func TestGetContestTeamMembers(t *testing.T) { +func Test_GetContestTeamMembers(t *testing.T) { t.Parallel() db := SetupTestGormDB(t) @@ -320,9 +320,9 @@ func TestGetContestTeamMembers(t *testing.T) { } // TODO: #675がmergeされたら消す -func TestContestRepository_AddContestTeamMembers(t *testing.T) {} +func Test_AddContestTeamMembers(t *testing.T) {} -func TestContestRepository_EditContestTeamMembers(t *testing.T) { +func Test_EditContestTeamMembers(t *testing.T) { t.Parallel() db := SetupTestGormDB(t) From 7229dc186c6e376dfc38bafb9b54d3e223fc836f Mon Sep 17 00:00:00 2001 From: ras0q Date: Tue, 18 Jun 2024 17:54:00 +0900 Subject: [PATCH 4/6] :bug: fix tests --- infrastructure/repository/contest_test.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/infrastructure/repository/contest_test.go b/infrastructure/repository/contest_test.go index 169a28d5..c9f16066 100644 --- a/infrastructure/repository/contest_test.go +++ b/infrastructure/repository/contest_test.go @@ -258,6 +258,7 @@ func Test_DeleteContestTeam(t *testing.T) { assert.NoError(t, err) t.Run("delete team1 (belongs to contest1)", func(t *testing.T) { + portalAPI.EXPECT().GetUsers().Return([]*external.PortalUserResponse{}, nil) gotTeam1, err := repo.GetContestTeam(context.Background(), contest1.ID, team1.ID) assert.NoError(t, err) assert.Equal(t, team1, gotTeam1) @@ -271,6 +272,7 @@ func Test_DeleteContestTeam(t *testing.T) { }) t.Run("delete of team1 doesn't affect team2", func(t *testing.T) { + portalAPI.EXPECT().GetUsers().Return([]*external.PortalUserResponse{}, nil) gotTeam2, err := repo.GetContestTeam(context.Background(), contest1.ID, team2.ID) assert.NoError(t, err) assert.Equal(t, team2, gotTeam2) @@ -306,7 +308,7 @@ func Test_GetContestTeamMembers(t *testing.T) { portalAPI.EXPECT().GetUserByTraqID(createUserArgs2.Name).Return(&external.PortalUserResponse{}, nil) user2, err := userRepo.CreateUser(context.Background(), createUserArgs2) assert.NoError(t, err) - memberIDs := []uuid.UUID{user1.ID} + memberIDs := []uuid.UUID{user1.ID, user2.ID} err = repo.AddContestTeamMembers(context.Background(), team1.ID, memberIDs) assert.NoError(t, err) From f59f4ceb94db26c44809f5cff4e06309459233c9 Mon Sep 17 00:00:00 2001 From: ras0q Date: Tue, 18 Jun 2024 17:58:48 +0900 Subject: [PATCH 5/6] :bug: use ElementsMatch for slice --- infrastructure/repository/contest_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/infrastructure/repository/contest_test.go b/infrastructure/repository/contest_test.go index c9f16066..eaf9c13e 100644 --- a/infrastructure/repository/contest_test.go +++ b/infrastructure/repository/contest_test.go @@ -317,7 +317,7 @@ func Test_GetContestTeamMembers(t *testing.T) { portalAPI.EXPECT().GetUsers().Return([]*external.PortalUserResponse{}, nil) gotMembers, err := repo.GetContestTeamMembers(context.Background(), contest1.ID, team1.ID) assert.NoError(t, err) - assert.Equal(t, expectedMembers, gotMembers) + assert.ElementsMatch(t, expectedMembers, gotMembers) }) } @@ -355,6 +355,6 @@ func Test_EditContestTeamMembers(t *testing.T) { expectedMembers := []*domain.User{} gotMembers, err := repo.GetContestTeamMembers(context.Background(), contest1.ID, team1.ID) assert.NoError(t, err) - assert.Equal(t, expectedMembers, gotMembers) + assert.ElementsMatch(t, expectedMembers, gotMembers) }) } From 9186151b7c10125726a84d1f8386deac0a154931 Mon Sep 17 00:00:00 2001 From: ras0q Date: Fri, 28 Jun 2024 19:27:17 +0900 Subject: [PATCH 6/6] :bug: fix compile error --- infrastructure/repository/contest_test.go | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/infrastructure/repository/contest_test.go b/infrastructure/repository/contest_test.go index eaf9c13e..dee9edcc 100644 --- a/infrastructure/repository/contest_test.go +++ b/infrastructure/repository/contest_test.go @@ -309,7 +309,7 @@ func Test_GetContestTeamMembers(t *testing.T) { user2, err := userRepo.CreateUser(context.Background(), createUserArgs2) assert.NoError(t, err) memberIDs := []uuid.UUID{user1.ID, user2.ID} - err = repo.AddContestTeamMembers(context.Background(), team1.ID, memberIDs) + err = repo.EditContestTeamMembers(context.Background(), team1.ID, memberIDs) assert.NoError(t, err) t.Run("get team1 members", func(t *testing.T) { @@ -321,9 +321,6 @@ func Test_GetContestTeamMembers(t *testing.T) { }) } -// TODO: #675がmergeされたら消す -func Test_AddContestTeamMembers(t *testing.T) {} - func Test_EditContestTeamMembers(t *testing.T) { t.Parallel() @@ -344,7 +341,7 @@ func Test_EditContestTeamMembers(t *testing.T) { user1, err := userRepo.CreateUser(context.Background(), createUserArgs1) assert.NoError(t, err) memberIDs := []uuid.UUID{user1.ID} - err = repo.AddContestTeamMembers(context.Background(), team1.ID, memberIDs) + err = repo.EditContestTeamMembers(context.Background(), team1.ID, memberIDs) assert.NoError(t, err) t.Run("edit team1 members", func(t *testing.T) {