175
176
self.addNotificationRecipient(notification, person)
176
177
return notification
179
def includeFilterInNotification(self, description=None, subscription=None,
181
create_new_filter=False):
182
if subscription is None:
183
subscription = self.subscription
184
if notification is None:
185
notification = self.notification
186
if create_new_filter:
187
bug_filter = subscription.newBugFilter()
189
bug_filter = subscription.bug_filters.one()
190
if description is not None:
191
bug_filter.description = description
192
BugNotificationFilter(
193
bug_notification=notification,
194
bug_subscription_filter=bug_filter)
196
def prepareTwoNotificationsWithFilters(self):
197
# Set up first notification and filter.
198
self.includeFilterInNotification(description=u'Special Filter!')
199
# Set up second notification and filter.
200
self.notification2 = self.addNotification(self.subscriber)
201
self.includeFilterInNotification(description=u'Another Filter!',
202
create_new_filter=True,
203
notification=self.notification2)
178
205
def test_bug_filters_empty(self):
179
206
# When there are no linked bug filters, it returns a ResultSet
180
207
# with no entries.
217
241
def test_getRecipientFilterData_other_persons(self):
218
242
# When there is no named bug filter for the recipient,
219
243
# it returns the recipient but with no filter descriptions.
220
BugNotificationFilter(
221
bug_notification=self.notification,
222
bug_subscription_filter=self.subscription.bug_filters.one())
244
self.includeFilterInNotification()
223
245
subscriber2 = self.factory.makePerson()
224
246
subscription2 = self.bug.default_bugtask.target.addSubscription(
225
247
subscriber2, subscriber2)
226
bug_filter = subscription2.bug_filters.one()
227
bug_filter.description = u'Special Filter!'
228
BugNotificationFilter(
229
bug_notification=self.notification,
230
bug_subscription_filter=bug_filter)
248
notification2 = self.addNotification(subscriber2)
249
self.includeFilterInNotification(subscription=subscription2,
250
description=u'Special Filter!',
251
notification=notification2)
231
252
sources = list(self.notification.recipients)
253
sources2 = list(notification2.recipients)
232
254
self.assertEqual(
233
255
{self.subscriber: {'sources': sources,
234
'filter descriptions': []}},
256
'filter descriptions': []},
257
subscriber2: {'sources': sources2,
258
'filter descriptions': [u'Special Filter!']}},
235
259
BugNotificationSet().getRecipientFilterData(
236
{self.subscriber: sources}, [self.notification]))
260
{self.subscriber: sources, subscriber2: sources2},
261
[self.notification, notification2]))
238
263
def test_getRecipientFilterData_match(self):
239
264
# When there are bug filters for the recipient,
240
265
# only those filters are returned.
241
bug_filter = self.subscription.bug_filters.one()
242
bug_filter.description = u'Special Filter!'
243
BugNotificationFilter(
244
bug_notification=self.notification,
245
bug_subscription_filter=bug_filter)
266
self.includeFilterInNotification(description=u'Special Filter!')
246
267
sources = list(self.notification.recipients)
247
268
self.assertEqual(
248
269
{self.subscriber: {'sources': sources,
253
274
def test_getRecipientFilterData_multiple_notifications_match(self):
254
275
# When there are bug filters for the recipient for multiple
255
276
# notifications, return filters for all the notifications.
256
# Set up first notification and filter.
257
bug_filter = self.subscription.bug_filters.one()
258
bug_filter.description = u'Special Filter!'
259
BugNotificationFilter(
260
bug_notification=self.notification,
261
bug_subscription_filter=bug_filter)
262
# Set up second notification and filter.
263
notification2 = self.addNotification(self.subscriber)
264
bug_filter2 = self.subscription.newBugFilter()
265
bug_filter2.description = u'Another Filter!'
266
BugNotificationFilter(
267
bug_notification=notification2,
268
bug_subscription_filter=bug_filter2)
277
self.prepareTwoNotificationsWithFilters()
269
279
sources = list(self.notification.recipients)
270
sources.extend(notification2.recipients)
271
# This first check is really just for the internal consistency of the
273
self.assertEqual(len(sources), 2)
280
sources.extend(self.notification2.recipients)
281
assert(len(sources)==2)
275
282
self.assertEqual(
276
283
{self.subscriber: {'sources': sources,
277
284
'filter descriptions': ['Another Filter!', 'Special Filter!']}},
278
285
BugNotificationSet().getRecipientFilterData(
279
286
{self.subscriber: sources},
287
[self.notification, self.notification2]))
289
def test_getRecipientFilterData_mute(self):
290
# When there are bug filters for the recipient,
291
# only those filters are returned.
292
self.includeFilterInNotification(description=u'Special Filter!')
293
# Mute the first filter.
294
BugSubscriptionFilterMute(
295
person=self.subscriber,
296
filter=self.notification.bug_filters.one())
297
sources = list(self.notification.recipients)
300
BugNotificationSet().getRecipientFilterData(
301
{self.subscriber: sources}, [self.notification]))
303
def test_getRecipientFilterData_mute_one_person_of_two(self):
304
self.includeFilterInNotification()
305
# Mute the first filter.
306
BugSubscriptionFilterMute(
307
person=self.subscriber,
308
filter=self.notification.bug_filters.one())
309
subscriber2 = self.factory.makePerson()
310
subscription2 = self.bug.default_bugtask.target.addSubscription(
311
subscriber2, subscriber2)
312
notification2 = self.addNotification(subscriber2)
313
self.includeFilterInNotification(subscription=subscription2,
314
description=u'Special Filter!',
315
notification=notification2)
316
sources = list(self.notification.recipients)
317
sources2 = list(notification2.recipients)
319
{subscriber2: {'sources': sources2,
320
'filter descriptions': [u'Special Filter!']}},
321
BugNotificationSet().getRecipientFilterData(
322
{self.subscriber: sources, subscriber2: sources2},
280
323
[self.notification, notification2]))
325
def test_getRecipientFilterData_mute_one_filter_of_two(self):
326
self.prepareTwoNotificationsWithFilters()
327
# Mute the first filter.
328
BugSubscriptionFilterMute(
329
person=self.subscriber,
330
filter=self.notification.bug_filters.one())
331
sources = list(self.notification.recipients)
332
sources.extend(self.notification2.recipients)
335
{self.subscriber: {'sources': sources,
336
'filter descriptions': ['Another Filter!']}},
337
BugNotificationSet().getRecipientFilterData(
338
{self.subscriber: sources},
339
[self.notification, self.notification2]))
341
def test_getRecipientFilterData_mute_both_filters_mutes(self):
342
self.prepareTwoNotificationsWithFilters()
343
# Mute the first filter.
344
BugSubscriptionFilterMute(
345
person=self.subscriber,
346
filter=self.notification.bug_filters.one())
347
# Mute the second filter.
348
BugSubscriptionFilterMute(
349
person=self.subscriber,
350
filter=self.notification2.bug_filters.one())
351
sources = list(self.notification.recipients)
352
sources.extend(self.notification2.recipients)
356
BugNotificationSet().getRecipientFilterData(
357
{self.subscriber: sources},
358
[self.notification, self.notification2]))
283
361
class TestNotificationProcessingWithoutRecipients(TestCaseWithFactory):
284
362
"""Adding notificatons without any recipients does not cause any harm.