102 lines
3.1 KiB
Go
102 lines
3.1 KiB
Go
package test
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"testing"
|
|
|
|
"github.com/h2non/gock"
|
|
"github.com/jackc/pgconn"
|
|
"github.com/jackc/pgerrcode"
|
|
"github.com/spf13/afero"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
"github.com/supabase/cli/internal/testing/apitest"
|
|
"github.com/supabase/cli/internal/utils"
|
|
"github.com/supabase/cli/pkg/config"
|
|
"github.com/supabase/cli/pkg/pgtest"
|
|
)
|
|
|
|
var dbConfig = pgconn.Config{
|
|
Host: "db.supabase.co",
|
|
Port: 5432,
|
|
User: "admin",
|
|
Password: "password",
|
|
Database: "postgres",
|
|
}
|
|
|
|
func TestRunCommand(t *testing.T) {
|
|
t.Run("runs tests with pg_prove", func(t *testing.T) {
|
|
// Setup in-memory fs
|
|
fsys := afero.NewMemMapFs()
|
|
require.NoError(t, utils.WriteConfig(fsys, false))
|
|
// Setup mock postgres
|
|
conn := pgtest.NewConn()
|
|
defer conn.Close(t)
|
|
conn.Query(ENABLE_PGTAP).
|
|
Reply("CREATE EXTENSION").
|
|
Query(DISABLE_PGTAP).
|
|
Reply("DROP EXTENSION")
|
|
// Setup mock docker
|
|
require.NoError(t, apitest.MockDocker(utils.Docker))
|
|
defer gock.OffAll()
|
|
containerId := "test-pg-prove"
|
|
apitest.MockDockerStart(utils.Docker, utils.GetRegistryImageUrl(config.Images.PgProve), containerId)
|
|
require.NoError(t, apitest.MockDockerLogs(utils.Docker, containerId, "Result: SUCCESS"))
|
|
// Run test
|
|
err := Run(context.Background(), []string{"nested"}, dbConfig, fsys, conn.Intercept)
|
|
// Check error
|
|
assert.NoError(t, err)
|
|
})
|
|
|
|
t.Run("throws error on connect failure", func(t *testing.T) {
|
|
// Setup in-memory fs
|
|
fsys := afero.NewMemMapFs()
|
|
require.NoError(t, utils.WriteConfig(fsys, false))
|
|
// Run test
|
|
err := Run(context.Background(), nil, dbConfig, fsys)
|
|
// Check error
|
|
assert.ErrorContains(t, err, "failed to connect to postgres")
|
|
})
|
|
|
|
t.Run("throws error on pgtap failure", func(t *testing.T) {
|
|
// Setup in-memory fs
|
|
fsys := afero.NewMemMapFs()
|
|
require.NoError(t, utils.WriteConfig(fsys, false))
|
|
// Setup mock postgres
|
|
conn := pgtest.NewConn()
|
|
defer conn.Close(t)
|
|
conn.Query(ENABLE_PGTAP).
|
|
ReplyError(pgerrcode.DuplicateObject, `extension "pgtap" already exists, skipping`)
|
|
// Run test
|
|
err := Run(context.Background(), nil, dbConfig, fsys, conn.Intercept)
|
|
// Check error
|
|
assert.ErrorContains(t, err, "failed to enable pgTAP")
|
|
})
|
|
|
|
t.Run("throws error on network failure", func(t *testing.T) {
|
|
errNetwork := errors.New("network error")
|
|
// Setup in-memory fs
|
|
fsys := afero.NewMemMapFs()
|
|
require.NoError(t, utils.WriteConfig(fsys, false))
|
|
// Setup mock postgres
|
|
conn := pgtest.NewConn()
|
|
defer conn.Close(t)
|
|
conn.Query(ENABLE_PGTAP).
|
|
Reply("CREATE EXTENSION").
|
|
Query(DISABLE_PGTAP).
|
|
Reply("DROP EXTENSION")
|
|
// Setup mock docker
|
|
require.NoError(t, apitest.MockDocker(utils.Docker))
|
|
defer gock.OffAll()
|
|
gock.New(utils.Docker.DaemonHost()).
|
|
Get("/v" + utils.Docker.ClientVersion() + "/images/" + utils.GetRegistryImageUrl(config.Images.PgProve) + "/json").
|
|
ReplyError(errNetwork)
|
|
// Run test
|
|
err := Run(context.Background(), nil, dbConfig, fsys, conn.Intercept)
|
|
// Check error
|
|
assert.ErrorIs(t, err, errNetwork)
|
|
assert.Empty(t, apitest.ListUnmatchedRequests())
|
|
})
|
|
}
|