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

Side by Side Diff: appengine/monorail/services/test/features_svc_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 """Unit tests for features_svc module."""
7
8 import unittest
9
10 import mox
11
12 from features import filterrules_helpers
13 from framework import sql
14 from services import features_svc
15 from testing import fake
16 from tracker import tracker_bizobj
17 from tracker import tracker_constants
18
19
20 class FeaturesServiceTest(unittest.TestCase):
21
22 def MakeMockTable(self):
23 return self.mox.CreateMock(sql.SQLTableManager)
24
25 def setUp(self):
26 self.mox = mox.Mox()
27 self.cnxn = self.mox.CreateMock(sql.MonorailConnection)
28 self.cache_manager = fake.CacheManager()
29
30 self.features_service = features_svc.FeaturesService(self.cache_manager)
31
32 for table_var in [
33 'user2savedquery_tbl', 'quickedithistory_tbl',
34 'quickeditmostrecent_tbl', 'savedquery_tbl',
35 'savedqueryexecutesinproject_tbl', 'project2savedquery_tbl',
36 'filterrule_tbl']:
37 setattr(self.features_service, table_var, self.MakeMockTable())
38
39 def tearDown(self):
40 self.mox.UnsetStubs()
41 self.mox.ResetAll()
42
43 ### quickedit command history
44
45 def testGetRecentCommands(self):
46 self.features_service.quickedithistory_tbl.Select(
47 self.cnxn, cols=['slot_num', 'command', 'comment'],
48 user_id=1, project_id=12345).AndReturn(
49 [(1, 'status=New', 'Brand new issue')])
50 self.features_service.quickeditmostrecent_tbl.SelectValue(
51 self.cnxn, 'slot_num', default=1, user_id=1, project_id=12345
52 ).AndReturn(1)
53 self.mox.ReplayAll()
54 slots, recent_slot_num = self.features_service.GetRecentCommands(
55 self.cnxn, 1, 12345)
56 self.mox.VerifyAll()
57
58 self.assertEqual(1, recent_slot_num)
59 self.assertEqual(
60 len(tracker_constants.DEFAULT_RECENT_COMMANDS), len(slots))
61 self.assertEqual('status=New', slots[0][1])
62
63 def testStoreRecentCommand(self):
64 self.features_service.quickedithistory_tbl.InsertRow(
65 self.cnxn, replace=True, user_id=1, project_id=12345,
66 slot_num=1, command='status=New', comment='Brand new issue')
67 self.features_service.quickeditmostrecent_tbl.InsertRow(
68 self.cnxn, replace=True, user_id=1, project_id=12345,
69 slot_num=1)
70 self.mox.ReplayAll()
71 self.features_service.StoreRecentCommand(
72 self.cnxn, 1, 12345, 1, 'status=New', 'Brand new issue')
73 self.mox.VerifyAll()
74
75 def testExpungeQuickEditHistory(self):
76 self.features_service.quickeditmostrecent_tbl.Delete(
77 self.cnxn, project_id=12345)
78 self.features_service.quickedithistory_tbl.Delete(
79 self.cnxn, project_id=12345)
80 self.mox.ReplayAll()
81 self.features_service.ExpungeQuickEditHistory(
82 self.cnxn, 12345)
83 self.mox.VerifyAll()
84
85 ### Saved User and Project Queries
86
87 def testGetSavedQuery(self):
88 self.features_service.savedquery_tbl.Select(
89 self.cnxn, cols=features_svc.SAVEDQUERY_COLS, id=[1]).AndReturn(
90 [(1, 'query1', 100, 'owner:me')])
91 self.features_service.savedqueryexecutesinproject_tbl.Select(
92 self.cnxn, cols=features_svc.SAVEDQUERYEXECUTESINPROJECT_COLS,
93 query_id=[1]).AndReturn([(1, 12345)])
94 self.mox.ReplayAll()
95 saved_query = self.features_service.GetSavedQuery(
96 self.cnxn, 1)
97 self.mox.VerifyAll()
98 self.assertEqual(1, saved_query.query_id)
99 self.assertEqual('query1', saved_query.name)
100 self.assertEqual(100, saved_query.base_query_id)
101 self.assertEqual('owner:me', saved_query.query)
102 self.assertEqual([12345], saved_query.executes_in_project_ids)
103
104 def SetUpUsersSavedQueries(self):
105 query = tracker_bizobj.MakeSavedQuery(1, 'query1', 100, 'owner:me')
106 self.features_service.saved_query_cache.CacheItem(1, [query])
107 self.features_service.user2savedquery_tbl.Select(
108 self.cnxn,
109 cols=features_svc.SAVEDQUERY_COLS + ['user_id', 'subscription_mode'],
110 left_joins=[('SavedQuery ON query_id = id', [])],
111 order_by=[('rank', [])], user_id=[2]).AndReturn(
112 [(2, 'query2', 100, 'status:New', 2, 'Sub_Mode')])
113 self.features_service.savedqueryexecutesinproject_tbl.Select(
114 self.cnxn, cols=features_svc.SAVEDQUERYEXECUTESINPROJECT_COLS,
115 query_id=set([2])).AndReturn([(2, 12345)])
116
117 def testGetUsersSavedQueriesDict(self):
118 self.SetUpUsersSavedQueries()
119 self.mox.ReplayAll()
120 results_dict = self.features_service._GetUsersSavedQueriesDict(
121 self.cnxn, [1, 2])
122 self.mox.VerifyAll()
123 self.assertIn(1, results_dict)
124 self.assertIn(2, results_dict)
125
126 def testGetSavedQueriesByUserID(self):
127 self.SetUpUsersSavedQueries()
128 self.mox.ReplayAll()
129 saved_queries = self.features_service.GetSavedQueriesByUserID(
130 self.cnxn, 2)
131 self.mox.VerifyAll()
132 self.assertEqual(1, len(saved_queries))
133 self.assertEqual(2, saved_queries[0].query_id)
134
135 def SetUpCannedQueriesForProjects(self):
136 self.features_service.project2savedquery_tbl.Select(
137 self.cnxn, cols=['project_id'] + features_svc.SAVEDQUERY_COLS,
138 left_joins=[('SavedQuery ON query_id = id', [])],
139 order_by=[('rank', [])], project_id=[12345]).AndReturn(
140 [(12345, 1, 'query1', 100, 'owner:me')])
141
142 def testGetCannedQueriesForProjects(self):
143 self.SetUpCannedQueriesForProjects()
144 self.mox.ReplayAll()
145 results_dict = self.features_service.GetCannedQueriesForProjects(
146 self.cnxn, [12345])
147 self.mox.VerifyAll()
148 self.assertIn(12345, results_dict)
149
150 def testGetCannedQueriesByProjectID(self):
151 self.SetUpCannedQueriesForProjects()
152 self.mox.ReplayAll()
153 result = self.features_service.GetCannedQueriesByProjectID(
154 self.cnxn, 12345)
155 self.mox.VerifyAll()
156 self.assertEqual(1, len(result))
157 self.assertEqual(1, result[0].query_id)
158
159 def SetUpUpdateSavedQueries(self, commit=True):
160 query1 = tracker_bizobj.MakeSavedQuery(1, 'query1', 100, 'owner:me')
161 query2 = tracker_bizobj.MakeSavedQuery(None, 'query2', 100, 'status:New')
162 saved_queries = [query1, query2]
163 savedquery_rows = [
164 (sq.query_id or None, sq.name, sq.base_query_id, sq.query)
165 for sq in saved_queries]
166 self.features_service.savedquery_tbl.Delete(
167 self.cnxn, id=[1], commit=commit)
168 self.features_service.savedquery_tbl.InsertRows(
169 self.cnxn, features_svc.SAVEDQUERY_COLS, savedquery_rows, commit=commit,
170 return_generated_ids=True).AndReturn([11, 12])
171 return saved_queries
172
173 def testUpdateSavedQueries(self):
174 saved_queries = self.SetUpUpdateSavedQueries()
175 self.mox.ReplayAll()
176 self.features_service._UpdateSavedQueries(
177 self.cnxn, saved_queries, True)
178 self.mox.VerifyAll()
179
180 def testUpdateCannedQueries(self):
181 self.features_service.project2savedquery_tbl.Delete(
182 self.cnxn, project_id=12345, commit=False)
183 canned_queries = self.SetUpUpdateSavedQueries(False)
184 project2savedquery_rows = [(12345, 0, 1), (12345, 1, 12)]
185 self.features_service.project2savedquery_tbl.InsertRows(
186 self.cnxn, features_svc.PROJECT2SAVEDQUERY_COLS,
187 project2savedquery_rows, commit=False)
188 self.cnxn.Commit()
189 self.mox.ReplayAll()
190 self.features_service.UpdateCannedQueries(
191 self.cnxn, 12345, canned_queries)
192 self.mox.VerifyAll()
193
194 def testUpdateUserSavedQueries(self):
195 saved_queries = self.SetUpUpdateSavedQueries(False)
196 self.features_service.savedqueryexecutesinproject_tbl.Delete(
197 self.cnxn, query_id=[1], commit=False)
198 self.features_service.user2savedquery_tbl.Delete(
199 self.cnxn, user_id=1, commit=False)
200 user2savedquery_rows = [
201 (1, 0, 1, 'noemail'), (1, 1, 12, 'noemail')]
202 self.features_service.user2savedquery_tbl.InsertRows(
203 self.cnxn, features_svc.USER2SAVEDQUERY_COLS,
204 user2savedquery_rows, commit=False)
205 self.features_service.savedqueryexecutesinproject_tbl.InsertRows(
206 self.cnxn, features_svc.SAVEDQUERYEXECUTESINPROJECT_COLS, [],
207 commit=False)
208 self.cnxn.Commit()
209 self.mox.ReplayAll()
210 self.features_service.UpdateUserSavedQueries(
211 self.cnxn, 1, saved_queries)
212 self.mox.VerifyAll()
213
214 ### Subscriptions
215
216 def testGetSubscriptionsInProjects(self):
217 join_str = (
218 'SavedQueryExecutesInProject ON '
219 'SavedQueryExecutesInProject.query_id = User2SavedQuery.query_id')
220 self.features_service.user2savedquery_tbl.Select(
221 self.cnxn, cols=['user_id'], distinct=True,
222 joins=[(join_str, [])],
223 subscription_mode='immediate', project_id=12345).AndReturn(
224 [(1, 'asd'), (2, 'efg')])
225 self.SetUpUsersSavedQueries()
226 self.mox.ReplayAll()
227 result = self.features_service.GetSubscriptionsInProjects(
228 self.cnxn, 12345)
229 self.mox.VerifyAll()
230 self.assertIn(1, result)
231 self.assertIn(2, result)
232
233 def testExpungeSavedQueriesExecuteInProject(self):
234 self.features_service.savedqueryexecutesinproject_tbl.Delete(
235 self.cnxn, project_id=12345)
236 self.features_service.project2savedquery_tbl.Select(
237 self.cnxn, cols=['query_id'], project_id=12345).AndReturn(
238 [(1, 'asd'), (2, 'efg')])
239 self.features_service.project2savedquery_tbl.Delete(
240 self.cnxn, project_id=12345)
241 self.features_service.savedquery_tbl.Delete(
242 self.cnxn, id=[1, 2])
243 self.mox.ReplayAll()
244 self.features_service.ExpungeSavedQueriesExecuteInProject(
245 self.cnxn, 12345)
246 self.mox.VerifyAll()
247
248 ### Filter Rules
249
250 def testDeserializeFilterRules(self):
251 filterrule_rows = [
252 (12345, 0, 'predicate1', 'default_status:New'),
253 (12345, 1, 'predicate2', 'default_owner_id:1 add_cc_id:2'),
254 ]
255 result_dict = self.features_service._DeserializeFilterRules(
256 filterrule_rows)
257 self.assertIn(12345, result_dict)
258 self.assertEqual(2, len(result_dict[12345]))
259 self.assertEqual('New', result_dict[12345][0].default_status)
260 self.assertEqual(1, result_dict[12345][1].default_owner_id)
261 self.assertEqual([2], result_dict[12345][1].add_cc_ids)
262
263 def testDeserializeRuleConsequence(self):
264 consequence = ('default_status:New default_owner_id:1 add_cc_id:2'
265 ' add_label:label1 add_label:label2 add_notify:admin')
266 (default_status, default_owner_id, add_cc_ids, add_labels,
267 add_notify) = self.features_service._DeserializeRuleConsequence(
268 consequence)
269 self.assertEqual('New', default_status)
270 self.assertEqual(1, default_owner_id)
271 self.assertEqual([2], add_cc_ids)
272 self.assertEqual(['label1', 'label2'], add_labels)
273 self.assertEqual(['admin'], add_notify)
274
275 def SetUpGetFilterRulesByProjectIDs(self):
276 filterrule_rows = [
277 (12345, 0, 'predicate1', 'default_status:New'),
278 (12345, 1, 'predicate2', 'default_owner_id:1 add_cc_id:2'),
279 ]
280
281 self.features_service.filterrule_tbl.Select(
282 self.cnxn, cols=features_svc.FILTERRULE_COLS,
283 project_id=[12345]).AndReturn(filterrule_rows)
284
285 def testGetFilterRulesByProjectIDs(self):
286 self.SetUpGetFilterRulesByProjectIDs()
287 self.mox.ReplayAll()
288 result = self.features_service._GetFilterRulesByProjectIDs(
289 self.cnxn, [12345])
290 self.mox.VerifyAll()
291 self.assertIn(12345, result)
292 self.assertEqual(2, len(result[12345]))
293
294 def testGetFilterRules(self):
295 self.SetUpGetFilterRulesByProjectIDs()
296 self.mox.ReplayAll()
297 result = self.features_service.GetFilterRules(
298 self.cnxn, 12345)
299 self.mox.VerifyAll()
300 self.assertEqual(2, len(result))
301
302 def testSerializeRuleConsequence(self):
303 rule = filterrules_helpers.MakeRule(
304 'predicate', 'New', 1, [1, 2], ['label1', 'label2'], ['admin'])
305 result = self.features_service._SerializeRuleConsequence(rule)
306 self.assertEqual('add_label:label1 add_label:label2 default_status:New'
307 ' default_owner_id:1 add_cc_id:1 add_cc_id:2'
308 ' add_notify:admin', result)
309
310 def testUpdateFilterRules(self):
311 self.features_service.filterrule_tbl.Delete(self.cnxn, project_id=12345)
312 rows = [
313 (12345, 0, 'predicate1', 'add_label:label1 add_label:label2'
314 ' default_status:New default_owner_id:1'
315 ' add_cc_id:1 add_cc_id:2 add_notify:admin'),
316 (12345, 1, 'predicate2', 'add_label:label2 add_label:label3'
317 ' default_status:Fixed default_owner_id:2'
318 ' add_cc_id:1 add_cc_id:2 add_notify:admin2')
319 ]
320 self.features_service.filterrule_tbl.InsertRows(
321 self.cnxn, features_svc.FILTERRULE_COLS, rows)
322 rule1 = filterrules_helpers.MakeRule(
323 'predicate1', 'New', 1, [1, 2], ['label1', 'label2'], ['admin'])
324 rule2 = filterrules_helpers.MakeRule(
325 'predicate2', 'Fixed', 2, [1, 2], ['label2', 'label3'], ['admin2'])
326 self.mox.ReplayAll()
327 self.features_service.UpdateFilterRules(
328 self.cnxn, 12345, [rule1, rule2])
329 self.mox.VerifyAll()
330
331 def testExpungeFilterRules(self):
332 self.features_service.filterrule_tbl.Delete(self.cnxn, project_id=12345)
333 self.mox.ReplayAll()
334 self.features_service.ExpungeFilterRules(
335 self.cnxn, 12345)
336 self.mox.VerifyAll()
337
338
339 if __name__ == '__main__':
340 unittest.main()
OLDNEW
« no previous file with comments | « appengine/monorail/services/test/config_svc_test.py ('k') | appengine/monorail/services/test/fulltext_helpers_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698