1package query
2
3import (
4 "testing"
5
6 "github.com/stretchr/testify/assert"
7
8 "github.com/MichaelMure/git-bug/bug"
9)
10
11func TestParse(t *testing.T) {
12 var tests = []struct {
13 input string
14 output *Query
15 }{
16 {"gibberish", nil},
17 {"status:", nil},
18 {":value", nil},
19
20 {"status:open", &Query{
21 Filters: Filters{Status: []bug.Status{bug.OpenStatus}},
22 }},
23 {"status:closed", &Query{
24 Filters: Filters{Status: []bug.Status{bug.ClosedStatus}},
25 }},
26 {"status:unknown", nil},
27
28 {"author:rene", &Query{
29 Filters: Filters{Author: []string{"rene"}},
30 }},
31 {`author:"René Descartes"`, &Query{
32 Filters: Filters{Author: []string{"René Descartes"}},
33 }},
34
35 {"actor:bernhard", &Query{
36 Filters: Filters{Actor: []string{"bernhard"}},
37 }},
38 {"participant:leonhard", &Query{
39 Filters: Filters{Participant: []string{"leonhard"}},
40 }},
41
42 {"label:hello", &Query{
43 Filters: Filters{Label: []string{"hello"}},
44 }},
45 {`label:"Good first issue"`, &Query{
46 Filters: Filters{Label: []string{"Good first issue"}},
47 }},
48
49 {"title:titleOne", &Query{
50 Filters: Filters{Title: []string{"titleOne"}},
51 }},
52 {`title:"Bug titleTwo"`, &Query{
53 Filters: Filters{Title: []string{"Bug titleTwo"}},
54 }},
55
56 {"no:label", &Query{
57 Filters: Filters{NoLabel: true},
58 }},
59
60 {"sort:edit", &Query{
61 OrderBy: OrderByEdit,
62 }},
63 {"sort:unknown", nil},
64
65 {`status:open author:"René Descartes" participant:leonhard label:hello label:"Good first issue" sort:edit-desc`,
66 &Query{
67 Filters: Filters{
68 Status: []bug.Status{bug.OpenStatus},
69 Author: []string{"René Descartes"},
70 Participant: []string{"leonhard"},
71 Label: []string{"hello", "Good first issue"},
72 },
73 OrderBy: OrderByEdit,
74 OrderDirection: OrderDescending,
75 },
76 },
77 }
78
79 for _, tc := range tests {
80 t.Run(tc.input, func(t *testing.T) {
81 query, err := Parse(tc.input)
82 if tc.output == nil {
83 assert.Error(t, err)
84 assert.Nil(t, query)
85 } else {
86 assert.NoError(t, err)
87 if tc.output.OrderBy != 0 {
88 assert.Equal(t, tc.output.OrderBy, query.OrderBy)
89 }
90 if tc.output.OrderDirection != 0 {
91 assert.Equal(t, tc.output.OrderDirection, query.OrderDirection)
92 }
93 assert.Equal(t, tc.output.Filters, query.Filters)
94 }
95 })
96 }
97}