github.com/secman-team/gh-api@v1.8.2/pkg/cmd/alias/expand/expand_test.go (about) 1 package expand 2 3 import ( 4 "errors" 5 "reflect" 6 "testing" 7 8 "github.com/MakeNowJust/heredoc" 9 "github.com/secman-team/gh-api/core/config" 10 ) 11 12 func TestExpandAlias(t *testing.T) { 13 findShFunc := func() (string, error) { 14 return "/usr/bin/sh", nil 15 } 16 17 cfg := config.NewFromString(heredoc.Doc(` 18 aliases: 19 co: pr checkout 20 il: issue list --author="$1" --label="$2" 21 ia: issue list --author="$1" --assignee="$1" 22 `)) 23 24 type args struct { 25 config config.Config 26 argv []string 27 } 28 tests := []struct { 29 name string 30 args args 31 wantExpanded []string 32 wantIsShell bool 33 wantErr error 34 }{ 35 { 36 name: "no arguments", 37 args: args{ 38 config: cfg, 39 argv: []string{}, 40 }, 41 wantExpanded: []string(nil), 42 wantIsShell: false, 43 wantErr: nil, 44 }, 45 { 46 name: "too few arguments", 47 args: args{ 48 config: cfg, 49 argv: []string{"gh"}, 50 }, 51 wantExpanded: []string(nil), 52 wantIsShell: false, 53 wantErr: nil, 54 }, 55 { 56 name: "no expansion", 57 args: args{ 58 config: cfg, 59 argv: []string{"gh", "pr", "status"}, 60 }, 61 wantExpanded: []string{"pr", "status"}, 62 wantIsShell: false, 63 wantErr: nil, 64 }, 65 { 66 name: "simple expansion", 67 args: args{ 68 config: cfg, 69 argv: []string{"gh", "co"}, 70 }, 71 wantExpanded: []string{"pr", "checkout"}, 72 wantIsShell: false, 73 wantErr: nil, 74 }, 75 { 76 name: "adding arguments after expansion", 77 args: args{ 78 config: cfg, 79 argv: []string{"gh", "co", "123"}, 80 }, 81 wantExpanded: []string{"pr", "checkout", "123"}, 82 wantIsShell: false, 83 wantErr: nil, 84 }, 85 { 86 name: "not enough arguments for expansion", 87 args: args{ 88 config: cfg, 89 argv: []string{"gh", "il"}, 90 }, 91 wantExpanded: []string{}, 92 wantIsShell: false, 93 wantErr: errors.New(`not enough arguments for alias: issue list --author="$1" --label="$2"`), 94 }, 95 { 96 name: "not enough arguments for expansion 2", 97 args: args{ 98 config: cfg, 99 argv: []string{"gh", "il", "vilmibm"}, 100 }, 101 wantExpanded: []string{}, 102 wantIsShell: false, 103 wantErr: errors.New(`not enough arguments for alias: issue list --author="vilmibm" --label="$2"`), 104 }, 105 { 106 name: "satisfy expansion arguments", 107 args: args{ 108 config: cfg, 109 argv: []string{"gh", "il", "vilmibm", "help wanted"}, 110 }, 111 wantExpanded: []string{"issue", "list", "--author=vilmibm", "--label=help wanted"}, 112 wantIsShell: false, 113 wantErr: nil, 114 }, 115 { 116 name: "mixed positional and non-positional arguments", 117 args: args{ 118 config: cfg, 119 argv: []string{"gh", "il", "vilmibm", "epic", "-R", "monalisa/testing"}, 120 }, 121 wantExpanded: []string{"issue", "list", "--author=vilmibm", "--label=epic", "-R", "monalisa/testing"}, 122 wantIsShell: false, 123 wantErr: nil, 124 }, 125 { 126 name: "dollar in expansion", 127 args: args{ 128 config: cfg, 129 argv: []string{"gh", "ia", "$coolmoney$"}, 130 }, 131 wantExpanded: []string{"issue", "list", "--author=$coolmoney$", "--assignee=$coolmoney$"}, 132 wantIsShell: false, 133 wantErr: nil, 134 }, 135 } 136 for _, tt := range tests { 137 t.Run(tt.name, func(t *testing.T) { 138 gotExpanded, gotIsShell, err := ExpandAlias(tt.args.config, tt.args.argv, findShFunc) 139 if tt.wantErr != nil { 140 if err == nil { 141 t.Fatal("expected error") 142 } 143 if tt.wantErr.Error() != err.Error() { 144 t.Fatalf("expected error %q, got %q", tt.wantErr, err) 145 } 146 return 147 } 148 if err != nil { 149 t.Fatalf("got error: %v", err) 150 } 151 if !reflect.DeepEqual(gotExpanded, tt.wantExpanded) { 152 t.Errorf("ExpandAlias() gotExpanded = %v, want %v", gotExpanded, tt.wantExpanded) 153 } 154 if gotIsShell != tt.wantIsShell { 155 t.Errorf("ExpandAlias() gotIsShell = %v, want %v", gotIsShell, tt.wantIsShell) 156 } 157 }) 158 } 159 } 160 161 // cfg := `--- 162 // aliases: 163 // co: pr checkout 164 // il: issue list --author="$1" --label="$2" 165 // ia: issue list --author="$1" --assignee="$1" 166 // ` 167 // initBlankContext(cfg, "OWNER/REPO", "trunk") 168 // for _, c := range []struct { 169 // Args string 170 // ExpectedArgs []string 171 // Err string 172 // }{ 173 // {"gh co", []string{"pr", "checkout"}, ""}, 174 // {"gh il", nil, `not enough arguments for alias: issue list --author="$1" --label="$2"`}, 175 // {"gh il vilmibm", nil, `not enough arguments for alias: issue list --author="vilmibm" --label="$2"`}, 176 // {"gh co 123", []string{"pr", "checkout", "123"}, ""}, 177 // {"gh il vilmibm epic", []string{"issue", "list", `--author=vilmibm`, `--label=epic`}, ""}, 178 // {"gh ia vilmibm", []string{"issue", "list", `--author=vilmibm`, `--assignee=vilmibm`}, ""}, 179 // {"gh ia $coolmoney$", []string{"issue", "list", `--author=$coolmoney$`, `--assignee=$coolmoney$`}, ""}, 180 // {"gh pr status", []string{"pr", "status"}, ""}, 181 // {"gh il vilmibm epic -R vilmibm/testing", []string{"issue", "list", "--author=vilmibm", "--label=epic", "-R", "vilmibm/testing"}, ""}, 182 // {"gh dne", []string{"dne"}, ""}, 183 // {"gh", []string{}, ""}, 184 // {"", []string{}, ""}, 185 // } {