github.com/Redstoneguy129/cli@v0.0.0-20230211220159-15dca4e91917/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/Redstoneguy129/cli/internal/testing/apitest"
    13  	"github.com/Redstoneguy129/cli/internal/utils"
    14  	"gopkg.in/h2non/gock.v1"
    15  )
    16  
    17  func TestServeCommand(t *testing.T) {
    18  	t.Run("serves function locally", func(t *testing.T) {
    19  		// Setup in-memory fs
    20  		fsys := afero.NewMemMapFs()
    21  		require.NoError(t, utils.WriteConfig(fsys, false))
    22  		// Setup mock docker
    23  		require.NoError(t, apitest.MockDocker(utils.Docker))
    24  		defer gock.OffAll()
    25  		gock.New(utils.Docker.DaemonHost()).
    26  			Get("/v" + utils.Docker.ClientVersion() + "/containers").
    27  			Reply(http.StatusOK).
    28  			JSON(types.ContainerJSON{})
    29  		gock.New(utils.Docker.DaemonHost()).
    30  			Delete("/v" + utils.Docker.ClientVersion() + "/containers").
    31  			Reply(http.StatusOK)
    32  		utils.DenoRelayId = "test-deno"
    33  		apitest.MockDockerStart(utils.Docker, utils.GetRegistryImageUrl(utils.DenoRelayImage), utils.DenoRelayId)
    34  		gock.New(utils.Docker.DaemonHost()).
    35  			Post("/v" + utils.Docker.ClientVersion() + "/containers").
    36  			Reply(http.StatusServiceUnavailable)
    37  		// Run test
    38  		err := Run(context.Background(), "test-func", "", nil, "", false, fsys)
    39  		// Check error
    40  		assert.ErrorContains(t, err, "request returned Service Unavailable for API route and version http://"+utils.Config.Hostname+"/v1.41/containers/supabase_deno_relay_serve/exec")
    41  		assert.Empty(t, apitest.ListUnmatchedRequests())
    42  	})
    43  }