gitlab.com/picnic-app/backend/role-api@v0.0.0-20230614140944-06a76ff3696d/internal/controller/controller_test.go (about) 1 package controller_test 2 3 import ( 4 "context" 5 "log" 6 "net/http" 7 "net/http/httptest" 8 "os" 9 "strings" 10 "testing" 11 12 "cloud.google.com/go/spanner" 13 14 "gitlab.com/picnic-app/backend/libs/golang/config" 15 "gitlab.com/picnic-app/backend/role-api/internal/controller" 16 spannerRepo "gitlab.com/picnic-app/backend/role-api/internal/repo/spanner" 17 "gitlab.com/picnic-app/backend/role-api/internal/service" 18 ) 19 20 var ( 21 spannerCli *spanner.Client 22 httpServer *httptest.Server 23 mux = &http.ServeMux{} 24 ) 25 26 type Container struct { 27 mux *http.ServeMux 28 spannerCli *spanner.Client 29 service *service.Service 30 controller controller.Controller 31 repo spannerRepo.Repo 32 } 33 34 func initContainer(t *testing.T) Container { 35 repo := spannerRepo.NewRepoWithClient(spannerCli) 36 svc := service.New(repo) 37 38 return Container{ 39 mux: mux, 40 service: svc, 41 repo: repo, 42 spannerCli: spannerCli, 43 controller: controller.New(svc), 44 } 45 } 46 47 func TestMain(m *testing.M) { 48 if isCI() { 49 return 50 } 51 52 // defer goleak.VerifyTestMain(m) 53 54 // Change the working dir to the root dir 55 if err := os.Chdir("./../.."); err != nil { 56 log.Fatal(err) 57 } 58 59 ctx := context.Background() 60 61 if err := config.Load(ctx); err != nil { 62 log.Fatal("failed to load config: ", err) 63 } 64 65 cfg, err := config.GetConfig(ctx) 66 if err != nil { 67 log.Fatal("failed to load config: ", err) 68 } 69 70 spannerCli, err = spannerRepo.NewSpannerClient(ctx, cfg.Spanner.DSN, cfg.Spanner.ADCPath) 71 if err != nil { 72 log.Fatal("failed to create spanner client: ", err) 73 } 74 75 row := spannerCli.Single().Query(ctx, spanner.Statement{SQL: "SELECT 1;"}) 76 err = row.Do(func(r *spanner.Row) error { return nil }) 77 if err != nil { 78 log.Fatal("failed to execute query with spanner client: ", err) 79 } 80 81 httpServer = httptest.NewServer(mux) 82 defer httpServer.Close() 83 84 code := m.Run() 85 86 spannerCli.Close() 87 88 os.Exit(code) 89 } 90 91 // isCI checks if the test is running on a CI environment. 92 func isCI() bool { 93 value, found := os.LookupEnv("CI") 94 if !found { 95 return false 96 } 97 return strings.ToLower(value) != "false" 98 }