github.com/Redstoneguy129/cli@v0.0.0-20230211220159-15dca4e91917/internal/secrets/unset/unset_test.go (about) 1 package unset 2 3 import ( 4 "context" 5 "errors" 6 "testing" 7 8 "github.com/spf13/afero" 9 "github.com/stretchr/testify/assert" 10 "github.com/stretchr/testify/require" 11 "github.com/Redstoneguy129/cli/internal/testing/apitest" 12 "github.com/Redstoneguy129/cli/internal/utils" 13 "github.com/Redstoneguy129/cli/pkg/api" 14 "gopkg.in/h2non/gock.v1" 15 ) 16 17 func TestSecretUnsetCommand(t *testing.T) { 18 t.Run("Unsets secret via cli args", func(t *testing.T) { 19 // Setup in-memory fs 20 fsys := afero.NewMemMapFs() 21 _, err := fsys.Create(utils.ConfigPath) 22 require.NoError(t, err) 23 // Setup valid project ref 24 project := apitest.RandomProjectRef() 25 err = afero.WriteFile(fsys, utils.ProjectRefPath, []byte(project), 0644) 26 require.NoError(t, err) 27 // Setup valid access token 28 token := apitest.RandomAccessToken(t) 29 t.Setenv("SUPABASE_ACCESS_TOKEN", string(token)) 30 // Flush pending mocks after test execution 31 defer gock.OffAll() 32 gock.New("https://api.supabase.io"). 33 Delete("/v1/projects/" + project + "/secrets"). 34 MatchType("json"). 35 JSON(api.DeleteSecretsJSONBody{"my-secret"}). 36 Reply(200) 37 // Run test 38 assert.NoError(t, Run(context.Background(), []string{"my-secret"}, fsys)) 39 // Validate api 40 assert.Empty(t, apitest.ListUnmatchedRequests()) 41 }) 42 43 t.Run("throws error on missing config file", func(t *testing.T) { 44 assert.Error(t, Run(context.Background(), []string{}, afero.NewMemMapFs())) 45 }) 46 47 t.Run("throws error on missing project ref", func(t *testing.T) { 48 // Setup in-memory fs 49 fsys := afero.NewMemMapFs() 50 _, err := fsys.Create(utils.ConfigPath) 51 require.NoError(t, err) 52 // Run test 53 assert.Error(t, Run(context.Background(), []string{}, fsys)) 54 }) 55 56 t.Run("throws error on missing access token", func(t *testing.T) { 57 // Setup in-memory fs 58 fsys := afero.NewMemMapFs() 59 _, err := fsys.Create(utils.ConfigPath) 60 require.NoError(t, err) 61 _, err = fsys.Create(utils.ProjectRefPath) 62 require.NoError(t, err) 63 // Run test 64 assert.Error(t, Run(context.Background(), []string{}, fsys)) 65 }) 66 67 t.Run("throws error on empty secret", func(t *testing.T) { 68 // Setup in-memory fs 69 fsys := afero.NewMemMapFs() 70 _, err := fsys.Create(utils.ConfigPath) 71 require.NoError(t, err) 72 // Setup valid project ref 73 project := apitest.RandomProjectRef() 74 err = afero.WriteFile(fsys, utils.ProjectRefPath, []byte(project), 0644) 75 require.NoError(t, err) 76 // Setup valid access token 77 token := apitest.RandomAccessToken(t) 78 t.Setenv("SUPABASE_ACCESS_TOKEN", string(token)) 79 // Run test 80 assert.Error(t, Run(context.Background(), []string{}, fsys)) 81 }) 82 83 t.Run("throws error on network error", func(t *testing.T) { 84 // Setup in-memory fs 85 fsys := afero.NewMemMapFs() 86 _, err := fsys.Create(utils.ConfigPath) 87 require.NoError(t, err) 88 // Setup valid project ref 89 project := apitest.RandomProjectRef() 90 err = afero.WriteFile(fsys, utils.ProjectRefPath, []byte(project), 0644) 91 require.NoError(t, err) 92 // Setup valid access token 93 token := apitest.RandomAccessToken(t) 94 t.Setenv("SUPABASE_ACCESS_TOKEN", string(token)) 95 // Flush pending mocks after test execution 96 defer gock.OffAll() 97 gock.New("https://api.supabase.io"). 98 Delete("/v1/projects/" + project + "/secrets"). 99 MatchType("json"). 100 JSON(api.DeleteSecretsJSONBody{"my-secret"}). 101 ReplyError(errors.New("network error")) 102 // Run test 103 assert.Error(t, Run(context.Background(), []string{"my-secret"}, fsys)) 104 // Validate api 105 assert.Empty(t, apitest.ListUnmatchedRequests()) 106 }) 107 108 t.Run("throws error on server unavailable", func(t *testing.T) { 109 // Setup in-memory fs 110 fsys := afero.NewMemMapFs() 111 _, err := fsys.Create(utils.ConfigPath) 112 require.NoError(t, err) 113 // Setup valid project ref 114 project := apitest.RandomProjectRef() 115 err = afero.WriteFile(fsys, utils.ProjectRefPath, []byte(project), 0644) 116 require.NoError(t, err) 117 // Setup valid access token 118 token := apitest.RandomAccessToken(t) 119 t.Setenv("SUPABASE_ACCESS_TOKEN", string(token)) 120 // Flush pending mocks after test execution 121 defer gock.OffAll() 122 gock.New("https://api.supabase.io"). 123 Delete("/v1/projects/" + project + "/secrets"). 124 MatchType("json"). 125 JSON(api.DeleteSecretsJSONBody{"my-secret"}). 126 Reply(500). 127 JSON(map[string]string{"message": "unavailable"}) 128 // Run test 129 assert.Error(t, Run(context.Background(), []string{"my-secret"}, fsys)) 130 // Validate api 131 assert.Empty(t, apitest.ListUnmatchedRequests()) 132 }) 133 }