github.com/icyphox/x@v0.0.355-0.20220311094250-029bd783e8b8/sqlcon/dockertest/test_helper_test.go (about) 1 package dockertest 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/mock" 7 8 "github.com/ory/dockertest/v3" 9 dc "github.com/ory/dockertest/v3/docker" 10 ) 11 12 type mockPool struct{ mock.Mock } 13 14 func (p *mockPool) Purge(r *dockertest.Resource) error { 15 args := p.Called(r) 16 return args.Error(0) 17 } 18 19 func (p *mockPool) Run(repository string, tag string, env []string) (*dockertest.Resource, error) { 20 args := p.Called(repository, tag, env) 21 return args.Get(0).(*dockertest.Resource), args.Error(1) 22 } 23 24 func (p *mockPool) RunWithOptions(opts *dockertest.RunOptions, hcOpts ...func(*dc.HostConfig)) (*dockertest.Resource, error) { 25 args := p.Called(opts, hcOpts) 26 return args.Get(0).(*dockertest.Resource), args.Error(1) 27 } 28 29 func setupMock(t *testing.T) *mockPool { 30 m := &mockPool{} 31 m.Test(t) 32 pool = m 33 return m 34 } 35 36 func TestRunTestDBs(t *testing.T) { 37 tc := []struct { 38 name string 39 env string 40 testFn func(t testing.TB) string 41 }{ 42 { 43 name: "postgres", 44 env: "TEST_DATABASE_POSTGRESQL", 45 testFn: RunTestPostgreSQL, 46 }, { 47 name: "mysql", 48 env: "TEST_DATABASE_MYSQL", 49 testFn: RunTestMySQL, 50 }, { 51 name: "cockroachdb", 52 env: "TEST_DATABASE_COCKROACHDB", 53 testFn: RunTestCockroachDB, 54 }, 55 } 56 57 for _, tt := range tc { 58 t.Run("db="+tt.name, func(t *testing.T) { 59 t.Run("case=from_docker", func(t *testing.T) { 60 m := setupMock(t) 61 t.Setenv(tt.env, "") 62 resource := &dockertest.Resource{} 63 m.On("Run", mock.Anything, mock.Anything, mock.Anything).Return(resource, nil) 64 m.On("RunWithOptions", mock.Anything, mock.Anything).Return(resource, nil) 65 m.On("Purge", resource).Return(nil) 66 67 t.Run("in test", func(t *testing.T) { tt.testFn(t) }) 68 69 m.AssertCalled(t, "Purge", resource) 70 }) 71 72 t.Run("case=from_env", func(t *testing.T) { 73 m := setupMock(t) 74 t.Setenv(tt.env, "conn") 75 76 tt.testFn(t) 77 78 m.AssertExpectations(t) 79 }) 80 }) 81 } 82 }