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  }