github.com/ungtb10d/cli/v2@v2.0.0-20221110210412-98537dd9d6a1/pkg/cmd/search/prs/prs_test.go (about) 1 package prs 2 3 import ( 4 "bytes" 5 "testing" 6 7 "github.com/ungtb10d/cli/v2/pkg/cmd/search/shared" 8 "github.com/ungtb10d/cli/v2/pkg/cmdutil" 9 "github.com/ungtb10d/cli/v2/pkg/iostreams" 10 "github.com/ungtb10d/cli/v2/pkg/search" 11 "github.com/google/shlex" 12 "github.com/stretchr/testify/assert" 13 ) 14 15 func TestNewCmdPrs(t *testing.T) { 16 var trueBool = true 17 tests := []struct { 18 name string 19 input string 20 output shared.IssuesOptions 21 wantErr bool 22 errMsg string 23 }{ 24 { 25 name: "no arguments", 26 input: "", 27 wantErr: true, 28 errMsg: "specify search keywords or flags", 29 }, 30 { 31 name: "keyword arguments", 32 input: "some search terms", 33 output: shared.IssuesOptions{ 34 Query: search.Query{ 35 Keywords: []string{"some", "search", "terms"}, 36 Kind: "issues", 37 Limit: 30, 38 Qualifiers: search.Qualifiers{Type: "pr"}, 39 }, 40 }, 41 }, 42 { 43 name: "web flag", 44 input: "--web", 45 output: shared.IssuesOptions{ 46 Query: search.Query{ 47 Keywords: []string{}, 48 Kind: "issues", 49 Limit: 30, 50 Qualifiers: search.Qualifiers{Type: "pr"}, 51 }, 52 WebMode: true, 53 }, 54 }, 55 { 56 name: "limit flag", 57 input: "--limit 10", 58 output: shared.IssuesOptions{ 59 Query: search.Query{ 60 Keywords: []string{}, 61 Kind: "issues", 62 Limit: 10, 63 Qualifiers: search.Qualifiers{Type: "pr"}, 64 }, 65 }, 66 }, 67 { 68 name: "invalid limit flag", 69 input: "--limit 1001", 70 wantErr: true, 71 errMsg: "`--limit` must be between 1 and 1000", 72 }, 73 { 74 name: "order flag", 75 input: "--order asc", 76 output: shared.IssuesOptions{ 77 Query: search.Query{ 78 Keywords: []string{}, 79 Kind: "issues", 80 Limit: 30, 81 Order: "asc", 82 Qualifiers: search.Qualifiers{Type: "pr"}, 83 }, 84 }, 85 }, 86 { 87 name: "invalid order flag", 88 input: "--order invalid", 89 wantErr: true, 90 errMsg: "invalid argument \"invalid\" for \"--order\" flag: valid values are {asc|desc}", 91 }, 92 { 93 name: "app flag", 94 input: "--app dependabot", 95 output: shared.IssuesOptions{ 96 Query: search.Query{ 97 Keywords: []string{}, 98 Kind: "issues", 99 Limit: 30, 100 Qualifiers: search.Qualifiers{Type: "pr", Author: "app/dependabot"}, 101 }, 102 }, 103 }, 104 { 105 name: "invalid author and app flags", 106 input: "--author test --app dependabot", 107 wantErr: true, 108 errMsg: "specify only `--author` or `--app`", 109 }, 110 { 111 name: "qualifier flags", 112 input: ` 113 --archived 114 --assignee=assignee 115 --author=author 116 --closed=closed 117 --commenter=commenter 118 --created=created 119 --match=title,body 120 --language=language 121 --locked 122 --merged 123 --no-milestone 124 --updated=updated 125 --visibility=public 126 `, 127 output: shared.IssuesOptions{ 128 Query: search.Query{ 129 Keywords: []string{}, 130 Kind: "issues", 131 Limit: 30, 132 Qualifiers: search.Qualifiers{ 133 Archived: &trueBool, 134 Assignee: "assignee", 135 Author: "author", 136 Closed: "closed", 137 Commenter: "commenter", 138 Created: "created", 139 In: []string{"title", "body"}, 140 Is: []string{"public", "locked", "merged"}, 141 Language: "language", 142 No: []string{"milestone"}, 143 Type: "pr", 144 Updated: "updated", 145 }, 146 }, 147 }, 148 }, 149 { 150 name: "review requested flag with user", 151 input: "--review-requested user", 152 output: shared.IssuesOptions{ 153 Query: search.Query{ 154 Keywords: []string{}, 155 Kind: "issues", 156 Limit: 30, 157 Qualifiers: search.Qualifiers{Type: "pr", ReviewRequested: "user"}, 158 }, 159 }, 160 }, 161 { 162 name: "review requested flag with team", 163 input: "--review-requested org/team", 164 output: shared.IssuesOptions{ 165 Query: search.Query{ 166 Keywords: []string{}, 167 Kind: "issues", 168 Limit: 30, 169 Qualifiers: search.Qualifiers{Type: "pr", TeamReviewRequested: "org/team"}, 170 }, 171 }, 172 }, 173 } 174 for _, tt := range tests { 175 t.Run(tt.name, func(t *testing.T) { 176 ios, _, _, _ := iostreams.Test() 177 f := &cmdutil.Factory{ 178 IOStreams: ios, 179 } 180 argv, err := shlex.Split(tt.input) 181 assert.NoError(t, err) 182 var gotOpts *shared.IssuesOptions 183 cmd := NewCmdPrs(f, func(opts *shared.IssuesOptions) error { 184 gotOpts = opts 185 return nil 186 }) 187 cmd.SetArgs(argv) 188 cmd.SetIn(&bytes.Buffer{}) 189 cmd.SetOut(&bytes.Buffer{}) 190 cmd.SetErr(&bytes.Buffer{}) 191 192 _, err = cmd.ExecuteC() 193 if tt.wantErr { 194 assert.EqualError(t, err, tt.errMsg) 195 return 196 } 197 198 assert.NoError(t, err) 199 assert.Equal(t, tt.output.Query, gotOpts.Query) 200 assert.Equal(t, tt.output.WebMode, gotOpts.WebMode) 201 }) 202 } 203 }