github.com/supabase/cli@v1.168.1/internal/functions/serve/serve_test.go (about) 1 package serve 2 3 import ( 4 "context" 5 "net/http" 6 "testing" 7 8 "github.com/docker/docker/api/types" 9 "github.com/spf13/afero" 10 "github.com/stretchr/testify/assert" 11 "github.com/stretchr/testify/require" 12 "github.com/supabase/cli/internal/testing/apitest" 13 "github.com/supabase/cli/internal/utils" 14 "gopkg.in/h2non/gock.v1" 15 ) 16 17 func TestServeCommand(t *testing.T) { 18 t.Run("serves all functions", func(t *testing.T) { 19 // Setup in-memory fs 20 fsys := afero.NewMemMapFs() 21 require.NoError(t, utils.InitConfig(utils.InitParams{ProjectId: "test"}, fsys)) 22 require.NoError(t, afero.WriteFile(fsys, ".env", []byte{}, 0644)) 23 require.NoError(t, afero.WriteFile(fsys, utils.FallbackImportMapPath, []byte{}, 0644)) 24 // Setup mock docker 25 require.NoError(t, apitest.MockDocker(utils.Docker)) 26 defer gock.OffAll() 27 gock.New(utils.Docker.DaemonHost()). 28 Get("/v" + utils.Docker.ClientVersion() + "/containers/supabase_db_test/json"). 29 Reply(http.StatusOK). 30 JSON(types.ContainerJSON{}) 31 containerId := "supabase_edge_runtime_test" 32 gock.New(utils.Docker.DaemonHost()). 33 Delete("/v" + utils.Docker.ClientVersion() + "/containers/" + containerId). 34 Reply(http.StatusOK) 35 apitest.MockDockerStart(utils.Docker, utils.GetRegistryImageUrl(utils.EdgeRuntimeImage), containerId) 36 require.NoError(t, apitest.MockDockerLogs(utils.Docker, containerId, "success")) 37 // Run test 38 noVerifyJWT := true 39 err := Run(context.Background(), ".env", &noVerifyJWT, "", fsys) 40 // Check error 41 assert.NoError(t, err) 42 assert.Empty(t, apitest.ListUnmatchedRequests()) 43 }) 44 45 t.Run("throws error on missing config", func(t *testing.T) { 46 // Setup in-memory fs 47 fsys := afero.NewMemMapFs() 48 // Run test 49 err := Run(context.Background(), "", nil, "", fsys) 50 // Check error 51 assert.ErrorContains(t, err, "open supabase/config.toml: file does not exist") 52 }) 53 54 t.Run("throws error on missing db", func(t *testing.T) { 55 // Setup in-memory fs 56 fsys := afero.NewMemMapFs() 57 require.NoError(t, utils.InitConfig(utils.InitParams{ProjectId: "test"}, fsys)) 58 // Setup mock docker 59 require.NoError(t, apitest.MockDocker(utils.Docker)) 60 defer gock.OffAll() 61 gock.New(utils.Docker.DaemonHost()). 62 Get("/v" + utils.Docker.ClientVersion() + "/containers/supabase_db_test/json"). 63 Reply(http.StatusNotFound) 64 // Run test 65 err := Run(context.Background(), "", nil, "", fsys) 66 // Check error 67 assert.ErrorIs(t, err, utils.ErrNotRunning) 68 }) 69 70 t.Run("throws error on missing env file", func(t *testing.T) { 71 // Setup in-memory fs 72 fsys := afero.NewMemMapFs() 73 require.NoError(t, utils.InitConfig(utils.InitParams{ProjectId: "test"}, fsys)) 74 // Setup mock docker 75 require.NoError(t, apitest.MockDocker(utils.Docker)) 76 defer gock.OffAll() 77 gock.New(utils.Docker.DaemonHost()). 78 Get("/v" + utils.Docker.ClientVersion() + "/containers/supabase_db_test/json"). 79 Reply(http.StatusOK). 80 JSON(types.ContainerJSON{}) 81 // Run test 82 err := Run(context.Background(), ".env", nil, "", fsys) 83 // Check error 84 assert.ErrorContains(t, err, "open .env: file does not exist") 85 }) 86 87 t.Run("throws error on missing import map", func(t *testing.T) { 88 // Setup in-memory fs 89 fsys := afero.NewMemMapFs() 90 require.NoError(t, utils.InitConfig(utils.InitParams{ProjectId: "test"}, fsys)) 91 require.NoError(t, afero.WriteFile(fsys, ".env", []byte{}, 0644)) 92 // Setup mock docker 93 require.NoError(t, apitest.MockDocker(utils.Docker)) 94 defer gock.OffAll() 95 gock.New(utils.Docker.DaemonHost()). 96 Get("/v" + utils.Docker.ClientVersion() + "/containers/supabase_db_test/json"). 97 Reply(http.StatusOK). 98 JSON(types.ContainerJSON{}) 99 // Run test 100 err := Run(context.Background(), ".env", nil, "import_map.json", fsys) 101 // Check error 102 assert.ErrorContains(t, err, "Failed to read import map") 103 assert.ErrorContains(t, err, "file does not exist") 104 }) 105 }