github.com/supabase/cli@v1.168.1/internal/functions/delete/delete_test.go (about) 1 package delete 2 3 import ( 4 "context" 5 "errors" 6 "net/http" 7 "testing" 8 9 "github.com/spf13/afero" 10 "github.com/stretchr/testify/assert" 11 "github.com/supabase/cli/internal/testing/apitest" 12 "github.com/supabase/cli/internal/utils" 13 "gopkg.in/h2non/gock.v1" 14 ) 15 16 func TestDeleteCommand(t *testing.T) { 17 const slug = "test-func" 18 // Setup valid project ref 19 project := apitest.RandomProjectRef() 20 // Setup valid access token 21 token := apitest.RandomAccessToken(t) 22 t.Setenv("SUPABASE_ACCESS_TOKEN", string(token)) 23 24 t.Run("deletes function from project", func(t *testing.T) { 25 // Setup in-memory fs 26 fsys := afero.NewMemMapFs() 27 // Setup mock api 28 defer gock.OffAll() 29 gock.New(utils.DefaultApiHost). 30 Delete("/v1/projects/" + project + "/functions/" + slug). 31 Reply(http.StatusOK) 32 // Run test 33 assert.NoError(t, Run(context.Background(), slug, project, fsys)) 34 // Validate api 35 assert.Empty(t, apitest.ListUnmatchedRequests()) 36 }) 37 38 t.Run("throws error on malformed slug", func(t *testing.T) { 39 // Setup in-memory fs 40 fsys := afero.NewMemMapFs() 41 // Setup valid project ref 42 project := apitest.RandomProjectRef() 43 // Run test 44 err := Run(context.Background(), "@", project, fsys) 45 // Check error 46 assert.ErrorContains(t, err, "Invalid Function name.") 47 }) 48 49 t.Run("throws error on network failure", func(t *testing.T) { 50 // Setup in-memory fs 51 fsys := afero.NewMemMapFs() 52 // Setup mock api 53 defer gock.OffAll() 54 gock.New(utils.DefaultApiHost). 55 Delete("/v1/projects/" + project + "/functions/" + slug). 56 ReplyError(errors.New("network error")) 57 // Run test 58 err := Run(context.Background(), slug, project, fsys) 59 // Check error 60 assert.ErrorContains(t, err, "network error") 61 assert.Empty(t, apitest.ListUnmatchedRequests()) 62 }) 63 64 t.Run("throws error on missing function", func(t *testing.T) { 65 // Setup in-memory fs 66 fsys := afero.NewMemMapFs() 67 // Setup mock api 68 defer gock.OffAll() 69 gock.New(utils.DefaultApiHost). 70 Delete("/v1/projects/" + project + "/functions/" + slug). 71 Reply(http.StatusNotFound). 72 JSON(map[string]string{"message": "Function not found"}) 73 // Run test 74 err := Run(context.Background(), slug, project, fsys) 75 // Check error 76 assert.ErrorContains(t, err, "Function test-func does not exist on the Supabase project.") 77 assert.Empty(t, apitest.ListUnmatchedRequests()) 78 }) 79 80 t.Run("throws error on service unavailable", func(t *testing.T) { 81 // Setup in-memory fs 82 fsys := afero.NewMemMapFs() 83 // Setup mock api 84 defer gock.OffAll() 85 gock.New(utils.DefaultApiHost). 86 Delete("/v1/projects/" + project + "/functions/" + slug). 87 Reply(http.StatusServiceUnavailable) 88 // Run test 89 err := Run(context.Background(), slug, project, fsys) 90 // Check error 91 assert.ErrorContains(t, err, "Failed to delete Function test-func on the Supabase project:") 92 assert.Empty(t, apitest.ListUnmatchedRequests()) 93 }) 94 }