Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(947)

Side by Side Diff: appengine/monorail/search/test/ast2sort_test.py

Issue 1868553004: Open Source Monorail (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Rebase Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 # Copyright 2016 The Chromium Authors. All rights reserved.
2 # Use of this source code is govered by a BSD-style
3 # license that can be found in the LICENSE file or at
4 # https://developers.google.com/open-source/licenses/bsd
5
6 """Tests for the ast2sort module."""
7
8 import unittest
9
10 from search import ast2sort
11 from search import query2ast
12
13
14 BUILTIN_ISSUE_FIELDS = query2ast.BUILTIN_ISSUE_FIELDS
15 ANY_FIELD = query2ast.BUILTIN_ISSUE_FIELDS['any_field']
16
17
18 class AST2SortTest(unittest.TestCase):
19
20 def setUp(self):
21 self.harmonized_labels = [
22 (101, 0, 'Hot'), (102, 1, 'Cold'), (103, None, 'Odd')]
23 self.harmonized_statuses = [
24 (201, 0, 'New'), (202, 1, 'Assigned'), (203, None, 'OnHold')]
25 self.harmonized_fields = []
26 self.fmt = lambda string, **kwords: string
27
28 def testBuildSortClauses_EmptySortDirectives(self):
29 left_joins, order_by = ast2sort.BuildSortClauses(
30 [], self.harmonized_labels, self.harmonized_statuses,
31 self.harmonized_fields)
32 self.assertEqual([], left_joins)
33 self.assertEqual([], order_by)
34
35 def testBuildSortClauses_Normal(self):
36 left_joins, order_by = ast2sort.BuildSortClauses(
37 ['stars', 'status', 'pri', 'reporter', 'id'], self.harmonized_labels,
38 self.harmonized_statuses, self.harmonized_fields)
39 expected_left_joins = [
40 ('User AS Sort3 ON Issue.reporter_id = Sort3.user_id', [])]
41 expected_order_by = [
42 ('Issue.star_count ASC', []),
43 ('FIELD(IF(ISNULL(Issue.status_id), Issue.derived_status_id, '
44 'Issue.status_id), %s,%s) DESC', [201, 202]),
45 ('FIELD(IF(ISNULL(Issue.status_id), Issue.derived_status_id, '
46 'Issue.status_id), %s) DESC', [203]),
47 ('ISNULL(Sort3.email) ASC', []),
48 ('Sort3.email ASC', []),
49 ('Issue.local_id ASC', [])]
50 self.assertEqual(expected_left_joins, left_joins)
51 self.assertEqual(expected_order_by, order_by)
52
53 def testProcessProjectSD(self):
54 left_joins, order_by = ast2sort._ProcessProjectSD(self.fmt)
55 self.assertEqual([], left_joins)
56 self.assertEqual(
57 [('Issue.project_id {sort_dir}', [])],
58 order_by)
59
60 def testProcessReporterSD(self):
61 left_joins, order_by = ast2sort._ProcessReporterSD(self.fmt)
62 self.assertEqual(
63 [('User AS {alias} ON Issue.reporter_id = {alias}.user_id', [])],
64 left_joins)
65 self.assertEqual(
66 [('ISNULL({alias}.email) {sort_dir}', []),
67 ('{alias}.email {sort_dir}', [])],
68 order_by)
69
70 def testProcessOwnerSD(self):
71 left_joins, order_by = ast2sort._ProcessOwnerSD(self.fmt)
72 self.assertEqual(
73 [('User AS {alias} ON (Issue.owner_id = {alias}.user_id OR '
74 'Issue.derived_owner_id = {alias}.user_id)', [])],
75 left_joins)
76 self.assertEqual(
77 [('ISNULL({alias}.email) {sort_dir}', []),
78 ('{alias}.email {sort_dir}', [])],
79 order_by)
80
81 def testProcessCcSD(self):
82 left_joins, order_by = ast2sort._ProcessCcSD(self.fmt)
83 self.assertEqual(
84 [('Issue2Cc AS {alias} ON Issue.id = {alias}.issue_id '
85 'LEFT JOIN User AS {alias}_user '
86 'ON {alias}.cc_id = {alias}_user.user_id', [])],
87 left_joins)
88 self.assertEqual(
89 [('ISNULL({alias}_user.email) {sort_dir}', []),
90 ('{alias}_user.email {sort_dir}', [])],
91 order_by)
92
93 def testProcessComponentSD(self):
94 left_joins, order_by = ast2sort._ProcessComponentSD(self.fmt)
95 self.assertEqual(
96 [('Issue2Component AS {alias} ON Issue.id = {alias}.issue_id '
97 'LEFT JOIN ComponentDef AS {alias}_component '
98 'ON {alias}.component_id = {alias}_component.id', [])],
99 left_joins)
100 self.assertEqual(
101 [('ISNULL({alias}_component.path) {sort_dir}', []),
102 ('{alias}_component.path {sort_dir}', [])],
103 order_by)
104
105 def testProcessSummarySD(self):
106 left_joins, order_by = ast2sort._ProcessSummarySD(self.fmt)
107 self.assertEqual(
108 [('IssueSummary AS {alias} ON Issue.id = {alias}.issue_id', [])],
109 left_joins)
110 self.assertEqual(
111 [('{alias}.summary {sort_dir}', [])],
112 order_by)
113
114 def testProcessStatusSD(self):
115 pass # TODO(jrobbins): fill in this test case
116
117 def testProcessBlockedSD(self):
118 left_joins, order_by = ast2sort._ProcessBlockedSD(self.fmt)
119 self.assertEqual(
120 [('IssueRelation AS {alias} ON Issue.id = {alias}.issue_id '
121 'AND {alias}.kind = %s', ['blockedon'])],
122 left_joins)
123 self.assertEqual(
124 [('ISNULL({alias}.dst_issue_id) {sort_dir}', [])],
125 order_by)
126
127 def testProcessBlockedOnSD(self):
128 left_joins, order_by = ast2sort._ProcessBlockedOnSD(self.fmt)
129 self.assertEqual(
130 [('IssueRelation AS {alias} ON Issue.id = {alias}.issue_id '
131 'AND {alias}.kind = %s', ['blockedon'])],
132 left_joins)
133 self.assertEqual(
134 [('ISNULL({alias}.dst_issue_id) {sort_dir}', []),
135 ('{alias}.dst_issue_id {sort_dir}', [])],
136 order_by)
137
138 def testProcessBlockingSD(self):
139 left_joins, order_by = ast2sort._ProcessBlockingSD(self.fmt)
140 self.assertEqual(
141 [('IssueRelation AS {alias} ON Issue.id = {alias}.dst_issue_id '
142 'AND {alias}.kind = %s', ['blockedon'])],
143 left_joins)
144 self.assertEqual(
145 [('ISNULL({alias}.issue_id) {sort_dir}', []),
146 ('{alias}.issue_id {sort_dir}', [])],
147 order_by)
148
149 def testProcessCustomAndLabelSD(self):
150 pass # TODO(jrobbins): fill in this test case
151
152 def testLabelSortClauses_NoSuchLabels(self):
153 sd = 'somethingelse'
154 harmonized_labels = [
155 (101, 0, 'Type-Defect'),
156 (102, 1, 'Type-Enhancement'),
157 (103, 2, 'Type-Task'),
158 (104, 0, 'Priority-High'),
159 (199, None, 'Type-Laundry'),
160 ]
161 left_joins, order_by = ast2sort._LabelSortClauses(
162 sd, harmonized_labels, self.fmt)
163 self.assertEqual([], left_joins)
164 self.assertEqual([], order_by)
165
166 def testLabelSortClauses_Normal(self):
167 sd = 'type'
168 harmonized_labels = [
169 (101, 0, 'Type-Defect'),
170 (102, 1, 'Type-Enhancement'),
171 (103, 2, 'Type-Task'),
172 (104, 0, 'Priority-High'),
173 (199, None, 'Type-Laundry'),
174 ]
175 left_joins, order_by = ast2sort._LabelSortClauses(
176 sd, harmonized_labels, self.fmt)
177 self.assertEqual(1, len(left_joins))
178 self.assertEqual(
179 ('Issue2Label AS {alias} ON Issue.id = {alias}.issue_id AND '
180 '{alias}.label_id IN ({all_label_ph})',
181 [101, 102, 103, 199]),
182 left_joins[0])
183 self.assertEqual(2, len(order_by))
184 self.assertEqual(
185 ('FIELD({alias}.label_id, {wk_label_ph}) {rev_sort_dir}',
186 [101, 102, 103]),
187 order_by[0])
188 self.assertEqual(
189 ('FIELD({alias}.label_id, {odd_label_ph}) {rev_sort_dir}',
190 [199]),
191 order_by[1])
192
193 def testOneSortDirective_NativeSortable(self):
194 left_joins, order_by = ast2sort._OneSortDirective(
195 1, 'opened', self.harmonized_labels, self.harmonized_statuses,
196 self.harmonized_fields)
197 self.assertEqual([], left_joins)
198 self.assertEqual([('Issue.opened ASC', [])], order_by)
199
200 left_joins, order_by = ast2sort._OneSortDirective(
201 1, 'stars', self.harmonized_labels, self.harmonized_statuses,
202 self.harmonized_fields)
203 self.assertEqual([], left_joins)
204 self.assertEqual([('Issue.star_count ASC', [])], order_by)
205
206 left_joins, order_by = ast2sort._OneSortDirective(
207 1, '-stars', self.harmonized_labels, self.harmonized_statuses,
208 self.harmonized_fields)
209 self.assertEqual([], left_joins)
210 self.assertEqual([('Issue.star_count DESC', [])], order_by)
211
212
213 if __name__ == '__main__':
214 unittest.main()
OLDNEW
« no previous file with comments | « appengine/monorail/search/test/ast2select_test.py ('k') | appengine/monorail/search/test/backendnonviewable_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698