github.com/ungtb10d/cli/v2@v2.0.0-20221110210412-98537dd9d6a1/pkg/cmd/codespace/stop_test.go (about) 1 package codespace 2 3 import ( 4 "context" 5 "fmt" 6 "testing" 7 8 "github.com/ungtb10d/cli/v2/internal/codespaces/api" 9 "github.com/ungtb10d/cli/v2/pkg/iostreams" 10 "github.com/stretchr/testify/assert" 11 ) 12 13 func TestApp_StopCodespace(t *testing.T) { 14 type fields struct { 15 apiClient apiClient 16 } 17 tests := []struct { 18 name string 19 fields fields 20 opts *stopOptions 21 }{ 22 { 23 name: "Stop a codespace I own", 24 opts: &stopOptions{ 25 codespaceName: "test-codespace", 26 }, 27 fields: fields{ 28 apiClient: &apiClientMock{ 29 GetCodespaceFunc: func(ctx context.Context, name string, includeConnection bool) (*api.Codespace, error) { 30 if name != "test-codespace" { 31 return nil, fmt.Errorf("got codespace name %s, wanted %s", name, "test-codespace") 32 } 33 34 return &api.Codespace{ 35 State: api.CodespaceStateAvailable, 36 }, nil 37 }, 38 StopCodespaceFunc: func(ctx context.Context, name string, orgName string, userName string) error { 39 if name != "test-codespace" { 40 return fmt.Errorf("got codespace name %s, wanted %s", name, "test-codespace") 41 } 42 43 if orgName != "" { 44 return fmt.Errorf("got orgName %s, expected none", orgName) 45 } 46 47 return nil 48 }, 49 }, 50 }, 51 }, 52 { 53 name: "Stop a codespace as an org admin", 54 opts: &stopOptions{ 55 codespaceName: "test-codespace", 56 orgName: "test-org", 57 userName: "test-user", 58 }, 59 fields: fields{ 60 apiClient: &apiClientMock{ 61 GetOrgMemberCodespaceFunc: func(ctx context.Context, orgName string, userName string, codespaceName string) (*api.Codespace, error) { 62 if codespaceName != "test-codespace" { 63 return nil, fmt.Errorf("got codespace name %s, wanted %s", codespaceName, "test-codespace") 64 } 65 if orgName != "test-org" { 66 return nil, fmt.Errorf("got org name %s, wanted %s", orgName, "test-org") 67 } 68 if userName != "test-user" { 69 return nil, fmt.Errorf("got user name %s, wanted %s", userName, "test-user") 70 } 71 72 return &api.Codespace{ 73 State: api.CodespaceStateAvailable, 74 }, nil 75 }, 76 StopCodespaceFunc: func(ctx context.Context, codespaceName string, orgName string, userName string) error { 77 if codespaceName != "test-codespace" { 78 return fmt.Errorf("got codespace name %s, wanted %s", codespaceName, "test-codespace") 79 } 80 if orgName != "test-org" { 81 return fmt.Errorf("got org name %s, wanted %s", orgName, "test-org") 82 } 83 if userName != "test-user" { 84 return fmt.Errorf("got user name %s, wanted %s", userName, "test-user") 85 } 86 87 return nil 88 }, 89 }, 90 }, 91 }, 92 } 93 for _, tt := range tests { 94 t.Run(tt.name, func(t *testing.T) { 95 ios, _, _, _ := iostreams.Test() 96 97 a := &App{ 98 io: ios, 99 apiClient: tt.fields.apiClient, 100 } 101 err := a.StopCodespace(context.Background(), tt.opts) 102 assert.NoError(t, err) 103 }) 104 } 105 }