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  }