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  }