github.com/supabase/cli@v1.168.1/internal/db/test/test_test.go (about) 1 package test 2 3 import ( 4 "context" 5 "errors" 6 "testing" 7 8 "github.com/jackc/pgconn" 9 "github.com/jackc/pgerrcode" 10 "github.com/spf13/afero" 11 "github.com/stretchr/testify/assert" 12 "github.com/stretchr/testify/require" 13 "github.com/supabase/cli/internal/testing/apitest" 14 "github.com/supabase/cli/internal/testing/pgtest" 15 "github.com/supabase/cli/internal/utils" 16 "gopkg.in/h2non/gock.v1" 17 ) 18 19 var dbConfig = pgconn.Config{ 20 Host: "db.supabase.co", 21 Port: 5432, 22 User: "admin", 23 Password: "password", 24 Database: "postgres", 25 } 26 27 func TestRunCommand(t *testing.T) { 28 t.Run("runs tests with pg_prove", func(t *testing.T) { 29 // Setup in-memory fs 30 fsys := afero.NewMemMapFs() 31 require.NoError(t, utils.WriteConfig(fsys, false)) 32 // Setup mock postgres 33 conn := pgtest.NewConn() 34 defer conn.Close(t) 35 conn.Query(ENABLE_PGTAP). 36 Reply("CREATE EXTENSION"). 37 Query(DISABLE_PGTAP). 38 Reply("DROP EXTENSION") 39 // Setup mock docker 40 require.NoError(t, apitest.MockDocker(utils.Docker)) 41 defer gock.OffAll() 42 containerId := "test-pg-prove" 43 apitest.MockDockerStart(utils.Docker, utils.GetRegistryImageUrl(utils.PgProveImage), containerId) 44 require.NoError(t, apitest.MockDockerLogs(utils.Docker, containerId, "Result: SUCCESS")) 45 // Run test 46 err := Run(context.Background(), []string{"nested"}, dbConfig, fsys, conn.Intercept) 47 // Check error 48 assert.NoError(t, err) 49 }) 50 51 t.Run("throws error on connect failure", func(t *testing.T) { 52 // Setup in-memory fs 53 fsys := afero.NewMemMapFs() 54 require.NoError(t, utils.WriteConfig(fsys, false)) 55 // Run test 56 err := Run(context.Background(), nil, dbConfig, fsys) 57 // Check error 58 assert.ErrorContains(t, err, "failed to connect to postgres") 59 }) 60 61 t.Run("throws error on pgtap failure", func(t *testing.T) { 62 // Setup in-memory fs 63 fsys := afero.NewMemMapFs() 64 require.NoError(t, utils.WriteConfig(fsys, false)) 65 // Setup mock postgres 66 conn := pgtest.NewConn() 67 defer conn.Close(t) 68 conn.Query(ENABLE_PGTAP). 69 ReplyError(pgerrcode.DuplicateObject, `extension "pgtap" already exists, skipping`) 70 // Run test 71 err := Run(context.Background(), nil, dbConfig, fsys, conn.Intercept) 72 // Check error 73 assert.ErrorContains(t, err, "failed to enable pgTAP") 74 }) 75 76 t.Run("throws error on network failure", func(t *testing.T) { 77 errNetwork := errors.New("network error") 78 // Setup in-memory fs 79 fsys := afero.NewMemMapFs() 80 require.NoError(t, utils.WriteConfig(fsys, false)) 81 // Setup mock postgres 82 conn := pgtest.NewConn() 83 defer conn.Close(t) 84 conn.Query(ENABLE_PGTAP). 85 Reply("CREATE EXTENSION"). 86 Query(DISABLE_PGTAP). 87 Reply("DROP EXTENSION") 88 // Setup mock docker 89 require.NoError(t, apitest.MockDocker(utils.Docker)) 90 defer gock.OffAll() 91 gock.New(utils.Docker.DaemonHost()). 92 Get("/v" + utils.Docker.ClientVersion() + "/images/" + utils.GetRegistryImageUrl(utils.PgProveImage) + "/json"). 93 ReplyError(errNetwork) 94 // Run test 95 err := Run(context.Background(), nil, dbConfig, fsys, conn.Intercept) 96 // Check error 97 assert.ErrorIs(t, err, errNetwork) 98 assert.Empty(t, apitest.ListUnmatchedRequests()) 99 }) 100 }