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  }