github.com/ungtb10d/cli/v2@v2.0.0-20221110210412-98537dd9d6a1/pkg/cmd/search/issues/issues_test.go (about) 1 package issues 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 TestNewCmdIssues(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: "issue"}, 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: "issue"}, 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: "issue"}, 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: "issue"}, 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: "include-prs flag", 94 input: "--include-prs", 95 output: shared.IssuesOptions{ 96 Query: search.Query{ 97 Keywords: []string{}, 98 Kind: "issues", 99 Limit: 30, 100 Qualifiers: search.Qualifiers{Type: ""}, 101 }, 102 }, 103 }, 104 { 105 name: "app flag", 106 input: "--app dependabot", 107 output: shared.IssuesOptions{ 108 Query: search.Query{ 109 Keywords: []string{}, 110 Kind: "issues", 111 Limit: 30, 112 Qualifiers: search.Qualifiers{Type: "issue", Author: "app/dependabot"}, 113 }, 114 }, 115 }, 116 { 117 name: "invalid author and app flags", 118 input: "--author test --app dependabot", 119 wantErr: true, 120 errMsg: "specify only `--author` or `--app`", 121 }, 122 { 123 name: "qualifier flags", 124 input: ` 125 --archived 126 --assignee=assignee 127 --author=author 128 --closed=closed 129 --commenter=commenter 130 --created=created 131 --match=title,body 132 --language=language 133 --locked 134 --mentions=mentions 135 --no-label 136 --repo=owner/repo 137 --updated=updated 138 --visibility=public 139 `, 140 output: shared.IssuesOptions{ 141 Query: search.Query{ 142 Keywords: []string{}, 143 Kind: "issues", 144 Limit: 30, 145 Qualifiers: search.Qualifiers{ 146 Archived: &trueBool, 147 Assignee: "assignee", 148 Author: "author", 149 Closed: "closed", 150 Commenter: "commenter", 151 Created: "created", 152 In: []string{"title", "body"}, 153 Is: []string{"public", "locked"}, 154 Language: "language", 155 Mentions: "mentions", 156 No: []string{"label"}, 157 Repo: []string{"owner/repo"}, 158 Type: "issue", 159 Updated: "updated", 160 }, 161 }, 162 }, 163 }, 164 } 165 for _, tt := range tests { 166 t.Run(tt.name, func(t *testing.T) { 167 ios, _, _, _ := iostreams.Test() 168 f := &cmdutil.Factory{ 169 IOStreams: ios, 170 } 171 argv, err := shlex.Split(tt.input) 172 assert.NoError(t, err) 173 var gotOpts *shared.IssuesOptions 174 cmd := NewCmdIssues(f, func(opts *shared.IssuesOptions) error { 175 gotOpts = opts 176 return nil 177 }) 178 cmd.SetArgs(argv) 179 cmd.SetIn(&bytes.Buffer{}) 180 cmd.SetOut(&bytes.Buffer{}) 181 cmd.SetErr(&bytes.Buffer{}) 182 183 _, err = cmd.ExecuteC() 184 if tt.wantErr { 185 assert.EqualError(t, err, tt.errMsg) 186 return 187 } 188 189 assert.NoError(t, err) 190 assert.Equal(t, tt.output.Query, gotOpts.Query) 191 assert.Equal(t, tt.output.WebMode, gotOpts.WebMode) 192 }) 193 } 194 }