github.com/supabase/cli@v1.168.1/internal/db/branch/delete/delete_test.go (about) 1 package delete 2 3 import ( 4 "net/http" 5 "path/filepath" 6 "testing" 7 8 "github.com/spf13/afero" 9 "github.com/stretchr/testify/assert" 10 "github.com/stretchr/testify/require" 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 TestBranchDir(t *testing.T) { 17 t.Run("removes a branch directory", func(t *testing.T) { 18 // Setup in-memory fs 19 fsys := afero.NewMemMapFs() 20 path := filepath.Join(filepath.Dir(utils.CurrBranchPath), "test-branch") 21 require.NoError(t, fsys.Mkdir(path, 0755)) 22 // Run test 23 assert.NoError(t, deleteBranchDir("test-branch", fsys)) 24 // Validate removal 25 exists, err := afero.Exists(fsys, path) 26 assert.NoError(t, err) 27 assert.False(t, exists) 28 }) 29 30 t.Run("branch is current", func(t *testing.T) { 31 // Setup in-memory fs 32 fsys := afero.NewMemMapFs() 33 require.NoError(t, afero.WriteFile(fsys, utils.CurrBranchPath, []byte("main"), 0644)) 34 // Run test 35 assert.Error(t, deleteBranchDir("main", fsys)) 36 }) 37 38 t.Run("branch is reserved", func(t *testing.T) { 39 assert.Error(t, deleteBranchDir("main", afero.NewMemMapFs())) 40 }) 41 42 t.Run("branch does not exist", func(t *testing.T) { 43 assert.Error(t, deleteBranchDir("test-branch", afero.NewMemMapFs())) 44 }) 45 46 t.Run("branch permission denied", func(t *testing.T) { 47 // Setup read-only fs 48 fsys := afero.NewMemMapFs() 49 path := filepath.Join(filepath.Dir(utils.CurrBranchPath), "test-branch") 50 require.NoError(t, fsys.Mkdir(path, 0755)) 51 // Run test 52 assert.Error(t, deleteBranchDir("test-branch", afero.NewReadOnlyFs(fsys))) 53 }) 54 } 55 56 func TestDeleteCommand(t *testing.T) { 57 const branch = "test-branch" 58 59 t.Run("throws error on missing config", func(t *testing.T) { 60 assert.Error(t, Run(branch, afero.NewMemMapFs())) 61 }) 62 63 t.Run("throws error on stopped db", func(t *testing.T) { 64 // Setup in-memory fs 65 fsys := &afero.MemMapFs{} 66 require.NoError(t, utils.WriteConfig(fsys, false)) 67 // Setup mock docker 68 require.NoError(t, apitest.MockDocker(utils.Docker)) 69 defer gock.OffAll() 70 gock.New(utils.Docker.DaemonHost()). 71 Get("/v" + utils.Docker.ClientVersion() + "/containers"). 72 Reply(http.StatusNotFound) 73 // Run test 74 err := Run(branch, fsys) 75 // Validate api 76 assert.ErrorIs(t, err, utils.ErrNotRunning) 77 assert.Empty(t, apitest.ListUnmatchedRequests()) 78 }) 79 }