19
19
from canonical.config import config
20
20
from canonical.database.sqlbase import sqlvalues
21
from canonical.launchpad.database.message import MessageSet
21
from lp.services.messages.model.message import MessageSet
22
22
from canonical.launchpad.ftests import login
23
23
from canonical.testing import (
24
24
DatabaseFunctionalLayer,
233
233
def test_getRecipientFilterData_empty(self):
234
234
# When there is empty input, there is empty output.
235
235
self.assertEqual(
236
BugNotificationSet().getRecipientFilterData({}, []),
236
BugNotificationSet().getRecipientFilterData(self.bug, {}, []),
238
238
self.assertEqual(
239
239
BugNotificationSet().getRecipientFilterData(
240
{}, [self.notification]),
240
self.bug, {}, [self.notification]),
243
243
def test_getRecipientFilterData_other_persons(self):
259
259
subscriber2: {'sources': sources2,
260
260
'filter descriptions': [u'Special Filter!']}},
261
261
BugNotificationSet().getRecipientFilterData(
262
{self.subscriber: sources, subscriber2: sources2},
262
self.bug, {self.subscriber: sources, subscriber2: sources2},
263
263
[self.notification, notification2]))
265
265
def test_getRecipientFilterData_match(self):
271
271
{self.subscriber: {'sources': sources,
272
272
'filter descriptions': ['Special Filter!']}},
273
273
BugNotificationSet().getRecipientFilterData(
274
{self.subscriber: sources}, [self.notification]))
274
self.bug, {self.subscriber: sources}, [self.notification]))
276
276
def test_getRecipientFilterData_multiple_notifications_match(self):
277
277
# When there are bug filters for the recipient for multiple
285
285
{self.subscriber: {'sources': sources,
286
286
'filter descriptions': ['Another Filter!', 'Special Filter!']}},
287
287
BugNotificationSet().getRecipientFilterData(
288
{self.subscriber: sources},
288
self.bug, {self.subscriber: sources},
289
289
[self.notification, self.notification2]))
291
291
def test_getRecipientFilterData_mute(self):
300
300
self.assertEqual(
302
302
BugNotificationSet().getRecipientFilterData(
303
{self.subscriber: sources}, [self.notification]))
303
self.bug, {self.subscriber: sources}, [self.notification]))
305
305
def test_getRecipientFilterData_mute_one_person_of_two(self):
306
306
self.includeFilterInNotification()
321
321
{subscriber2: {'sources': sources2,
322
322
'filter descriptions': [u'Special Filter!']}},
323
323
BugNotificationSet().getRecipientFilterData(
324
{self.subscriber: sources, subscriber2: sources2},
324
self.bug, {self.subscriber: sources, subscriber2: sources2},
325
325
[self.notification, notification2]))
327
327
def test_getRecipientFilterData_mute_one_filter_of_two(self):
337
337
{self.subscriber: {'sources': sources,
338
338
'filter descriptions': ['Another Filter!']}},
339
339
BugNotificationSet().getRecipientFilterData(
340
{self.subscriber: sources},
340
self.bug, {self.subscriber: sources},
341
341
[self.notification, self.notification2]))
343
343
def test_getRecipientFilterData_mute_both_filters_mutes(self):
356
356
self.assertEqual(
358
358
BugNotificationSet().getRecipientFilterData(
359
{self.subscriber: sources},
359
self.bug, {self.subscriber: sources},
360
360
[self.notification, self.notification2]))
362
def test_getRecipientFilterData_mute_bug_mutes(self):
363
# Mute the bug for the subscriber.
364
self.team = self.factory.makeTeam()
365
self.subscriber.join(self.team)
367
self.bug.mute(self.subscriber, self.subscriber)
368
sources = list(self.notification.recipients)
372
BugNotificationSet().getRecipientFilterData(
373
self.bug, {self.subscriber: sources}, [self.notification]))
375
def test_getRecipientFilterData_mute_bug_mutes_only_themselves(self):
376
# Mute the bug for the subscriber.
377
self.bug.mute(self.subscriber, self.subscriber)
379
# Notification for the other person still goes through.
380
person = self.factory.makePerson(name='other')
381
self.addNotificationRecipient(self.notification, person)
383
sources = list(self.notification.recipients)
387
{person: {'filter descriptions': [],
388
'sources': sources}},
389
BugNotificationSet().getRecipientFilterData(
390
self.bug, {self.subscriber: sources,
392
[self.notification]))
394
def test_getRecipientFilterData_mute_bug_mutes_filter(self):
395
# Mute the bug for the subscriber.
396
self.bug.mute(self.subscriber, self.subscriber)
397
self.includeFilterInNotification(description=u'Special Filter!')
398
sources = list(self.notification.recipients)
401
BugNotificationSet().getRecipientFilterData(
402
self.bug, {self.subscriber: sources}, [self.notification]))
363
405
class TestNotificationProcessingWithoutRecipients(TestCaseWithFactory):
364
406
"""Adding notificatons without any recipients does not cause any harm.