def makeBugSubscriptionFilter(self, target): subscriber = self.factory.makePerson() login_person(subscriber) subscription = target.addBugSubscription(subscriber, subscriber) subscription_filter = BugSubscriptionFilter() subscription_filter.structural_subscription = subscription return subscription_filter
def newBugFilter(self): """See `IStructuralSubscription`.""" bug_filter = BugSubscriptionFilter() bug_filter.structural_subscription = self # This flush is needed for the web service API. IStore(StructuralSubscription).flush() return bug_filter
def test_information_types_set_empty(self): # Assigning an empty iterable to information_types updates the # database. bug_subscription_filter = BugSubscriptionFilter() bug_subscription_filter.information_types = [] self.assertEqual( frozenset(), bug_subscription_filter.information_types)
def test_information_types_set_all(self): # Setting all information_types is normalized into setting no # information_types. bug_subscription_filter = BugSubscriptionFilter() bug_subscription_filter.information_types = list(InformationType.items) self.assertEqual(frozenset(), bug_subscription_filter.information_types)
def test_information_types_set_empty(self): # Assigning an empty iterable to information_types updates the # database. bug_subscription_filter = BugSubscriptionFilter() bug_subscription_filter.information_types = [] self.assertEqual(frozenset(), bug_subscription_filter.information_types)
def test_tags_set_wildcard(self): # Setting one or more wildcard tags may update include_any_tags or # exclude_any_tags. bug_subscription_filter = BugSubscriptionFilter() self.assertEqual(frozenset(), bug_subscription_filter.tags) self.assertFalse(bug_subscription_filter.include_any_tags) self.assertFalse(bug_subscription_filter.exclude_any_tags) bug_subscription_filter.tags = [u"*"] self.assertEqual(frozenset((u"*",)), bug_subscription_filter.tags) self.assertTrue(bug_subscription_filter.include_any_tags) self.assertFalse(bug_subscription_filter.exclude_any_tags) bug_subscription_filter.tags = [u"-*"] self.assertEqual(frozenset((u"-*",)), bug_subscription_filter.tags) self.assertFalse(bug_subscription_filter.include_any_tags) self.assertTrue(bug_subscription_filter.exclude_any_tags) bug_subscription_filter.tags = [u"*", u"-*"] self.assertEqual( frozenset((u"*", u"-*")), bug_subscription_filter.tags) self.assertTrue(bug_subscription_filter.include_any_tags) self.assertTrue(bug_subscription_filter.exclude_any_tags) bug_subscription_filter.tags = [] self.assertEqual(frozenset(), bug_subscription_filter.tags) self.assertFalse(bug_subscription_filter.include_any_tags) self.assertFalse(bug_subscription_filter.exclude_any_tags)
def test_bug_filters(self): # The bug_filters attribute returns the BugSubscriptionFilter records # associated with this subscription. subscription_filter = BugSubscriptionFilter() subscription_filter.structural_subscription = self.subscription self.assertContentEqual([subscription_filter, self.original_filter], list(self.subscription.bug_filters))
def test_information_types_set_all(self): # Setting all information_types is normalized into setting no # information_types. bug_subscription_filter = BugSubscriptionFilter() bug_subscription_filter.information_types = list( InformationType.items) self.assertEqual( frozenset(), bug_subscription_filter.information_types)
def test_bug_filters(self): # The bug_filters attribute returns the BugSubscriptionFilter records # associated with this subscription. subscription_filter = BugSubscriptionFilter() subscription_filter.structural_subscription = self.subscription self.assertContentEqual( [subscription_filter, self.original_filter], list(self.subscription.bug_filters))
def test_tags_set(self): # Assigning any iterable to tags updates the database. bug_subscription_filter = BugSubscriptionFilter() bug_subscription_filter.tags = [u"foo", u"-bar"] self.assertEqual(frozenset((u"foo", u"-bar")), bug_subscription_filter.tags) # Assigning a subset causes the other tag filters to be removed. bug_subscription_filter.tags = [u"foo"] self.assertEqual(frozenset((u"foo", )), bug_subscription_filter.tags)
def test_basics(self): """Test the basic operation of `BugSubscriptionFilter` objects.""" # Create. bug_subscription_filter = BugSubscriptionFilter() bug_subscription_filter.structural_subscription = self.subscription bug_subscription_filter.bug_notification_level = ( BugNotificationLevel.METADATA) bug_subscription_filter.find_all_tags = True bug_subscription_filter.include_any_tags = True bug_subscription_filter.exclude_any_tags = True bug_subscription_filter.other_parameters = u"foo" bug_subscription_filter.description = u"bar" # Flush and reload. IStore(bug_subscription_filter).flush() IStore(bug_subscription_filter).reload(bug_subscription_filter) # Check. self.assertIsNot(None, bug_subscription_filter.id) self.assertEqual(self.subscription.id, bug_subscription_filter.structural_subscription_id) self.assertEqual(self.subscription, bug_subscription_filter.structural_subscription) self.assertIs(True, bug_subscription_filter.find_all_tags) self.assertIs(True, bug_subscription_filter.include_any_tags) self.assertIs(True, bug_subscription_filter.exclude_any_tags) self.assertEqual(BugNotificationLevel.METADATA, bug_subscription_filter.bug_notification_level) self.assertEqual(u"foo", bug_subscription_filter.other_parameters) self.assertEqual(u"bar", bug_subscription_filter.description)
def test_read_to_all(self): """`BugSubscriptionFilter`s can be read by anyone.""" bug_subscription_filter = BugSubscriptionFilter() bug_subscription_filter.structural_subscription = self.subscription bug_subscription_filter = ProxyFactory(bug_subscription_filter) with person_logged_in(self.subscriber): bug_subscription_filter.find_all_tags with person_logged_in(self.factory.makePerson()): bug_subscription_filter.find_all_tags with anonymous_logged_in(): bug_subscription_filter.find_all_tags
def test_tags_set(self): # Assigning any iterable to tags updates the database. bug_subscription_filter = BugSubscriptionFilter() bug_subscription_filter.tags = [u"foo", u"-bar"] self.assertEqual( frozenset((u"foo", u"-bar")), bug_subscription_filter.tags) # Assigning a subset causes the other tag filters to be removed. bug_subscription_filter.tags = [u"foo"] self.assertEqual( frozenset((u"foo",)), bug_subscription_filter.tags)
def test_statuses_set(self): # Assigning any iterable to statuses updates the database. bug_subscription_filter = BugSubscriptionFilter() bug_subscription_filter.statuses = [ BugTaskStatus.NEW, BugTaskStatus.INCOMPLETE ] self.assertEqual( frozenset((BugTaskStatus.NEW, BugTaskStatus.INCOMPLETE)), bug_subscription_filter.statuses) # Assigning a subset causes the other status filters to be removed. bug_subscription_filter.statuses = [BugTaskStatus.NEW] self.assertEqual(frozenset((BugTaskStatus.NEW, )), bug_subscription_filter.statuses)
def test_defaults(self): """Test the default values of `BugSubscriptionFilter` objects.""" # Create. bug_subscription_filter = BugSubscriptionFilter() bug_subscription_filter.structural_subscription = self.subscription # Check. self.assertEqual(BugNotificationLevel.COMMENTS, bug_subscription_filter.bug_notification_level) self.assertIs(False, bug_subscription_filter.find_all_tags) self.assertIs(False, bug_subscription_filter.include_any_tags) self.assertIs(False, bug_subscription_filter.exclude_any_tags) self.assertIs(None, bug_subscription_filter.other_parameters) self.assertIs(None, bug_subscription_filter.description)
def test_statuses_set(self): # Assigning any iterable to statuses updates the database. bug_subscription_filter = BugSubscriptionFilter() bug_subscription_filter.statuses = [ BugTaskStatus.NEW, BugTaskStatus.INCOMPLETE] self.assertEqual( frozenset((BugTaskStatus.NEW, BugTaskStatus.INCOMPLETE)), bug_subscription_filter.statuses) # Assigning a subset causes the other status filters to be removed. bug_subscription_filter.statuses = [BugTaskStatus.NEW] self.assertEqual( frozenset((BugTaskStatus.NEW,)), bug_subscription_filter.statuses)
def test_importances_set(self): # Assigning any iterable to importances updates the database. bug_subscription_filter = BugSubscriptionFilter() bug_subscription_filter.importances = [ BugTaskImportance.HIGH, BugTaskImportance.LOW] self.assertEqual( frozenset((BugTaskImportance.HIGH, BugTaskImportance.LOW)), bug_subscription_filter.importances) # Assigning a subset causes the other importance filters to be # removed. bug_subscription_filter.importances = [BugTaskImportance.HIGH] self.assertEqual( frozenset((BugTaskImportance.HIGH,)), bug_subscription_filter.importances)
def test_information_types_set(self): # Assigning any iterable to information_types updates the database. bug_subscription_filter = BugSubscriptionFilter() bug_subscription_filter.information_types = [ InformationType.PRIVATESECURITY, InformationType.USERDATA ] self.assertEqual( frozenset( (InformationType.PRIVATESECURITY, InformationType.USERDATA)), bug_subscription_filter.information_types) # Assigning a subset causes the other status filters to be removed. bug_subscription_filter.information_types = [InformationType.USERDATA] self.assertEqual(frozenset((InformationType.USERDATA, )), bug_subscription_filter.information_types)
def test_basics(self): """Test the basic operation of `BugSubscriptionFilter` objects.""" # Create. bug_subscription_filter = BugSubscriptionFilter() bug_subscription_filter.structural_subscription = self.subscription bug_subscription_filter.bug_notification_level = ( BugNotificationLevel.METADATA) bug_subscription_filter.find_all_tags = True bug_subscription_filter.include_any_tags = True bug_subscription_filter.exclude_any_tags = True bug_subscription_filter.other_parameters = u"foo" bug_subscription_filter.description = u"bar" # Flush and reload. IStore(bug_subscription_filter).flush() IStore(bug_subscription_filter).reload(bug_subscription_filter) # Check. self.assertIsNot(None, bug_subscription_filter.id) self.assertEqual( self.subscription.id, bug_subscription_filter.structural_subscription_id) self.assertEqual( self.subscription, bug_subscription_filter.structural_subscription) self.assertIs(True, bug_subscription_filter.find_all_tags) self.assertIs(True, bug_subscription_filter.include_any_tags) self.assertIs(True, bug_subscription_filter.exclude_any_tags) self.assertEqual( BugNotificationLevel.METADATA, bug_subscription_filter.bug_notification_level) self.assertEqual(u"foo", bug_subscription_filter.other_parameters) self.assertEqual(u"bar", bug_subscription_filter.description)
def test_defaults(self): """Test the default values of `BugSubscriptionFilter` objects.""" # Create. bug_subscription_filter = BugSubscriptionFilter() bug_subscription_filter.structural_subscription = self.subscription # Check. self.assertEqual( BugNotificationLevel.COMMENTS, bug_subscription_filter.bug_notification_level) self.assertIs(False, bug_subscription_filter.find_all_tags) self.assertIs(False, bug_subscription_filter.include_any_tags) self.assertIs(False, bug_subscription_filter.exclude_any_tags) self.assertIs(None, bug_subscription_filter.other_parameters) self.assertIs(None, bug_subscription_filter.description)
def test_importances_set(self): # Assigning any iterable to importances updates the database. bug_subscription_filter = BugSubscriptionFilter() bug_subscription_filter.importances = [ BugTaskImportance.HIGH, BugTaskImportance.LOW ] self.assertEqual( frozenset((BugTaskImportance.HIGH, BugTaskImportance.LOW)), bug_subscription_filter.importances) # Assigning a subset causes the other importance filters to be # removed. bug_subscription_filter.importances = [BugTaskImportance.HIGH] self.assertEqual(frozenset((BugTaskImportance.HIGH, )), bug_subscription_filter.importances)
def test_information_types_set(self): # Assigning any iterable to information_types updates the database. bug_subscription_filter = BugSubscriptionFilter() bug_subscription_filter.information_types = [ InformationType.PRIVATESECURITY, InformationType.USERDATA] self.assertEqual( frozenset((InformationType.PRIVATESECURITY, InformationType.USERDATA)), bug_subscription_filter.information_types) # Assigning a subset causes the other status filters to be removed. bug_subscription_filter.information_types = [ InformationType.USERDATA] self.assertEqual( frozenset((InformationType.USERDATA,)), bug_subscription_filter.information_types)
def test_write_to_subscribers(self): """`BugSubscriptionFilter`s can only be modifed by subscribers.""" bug_subscription_filter = BugSubscriptionFilter() bug_subscription_filter.structural_subscription = self.subscription bug_subscription_filter = ProxyFactory(bug_subscription_filter) # The subscriber can edit the filter. with person_logged_in(self.subscriber): bug_subscription_filter.find_all_tags = True # Any other person is denied rights to edit the filter. with person_logged_in(self.factory.makePerson()): self.assertRaises(Unauthorized, setattr, bug_subscription_filter, "find_all_tags", True) # Anonymous users are also denied. with anonymous_logged_in(): self.assertRaises(Unauthorized, setattr, bug_subscription_filter, "find_all_tags", True)
def test_delete_by_subscribers(self): """`BugSubscriptionFilter`s can only be deleted by subscribers.""" bug_subscription_filter = BugSubscriptionFilter() bug_subscription_filter.structural_subscription = self.subscription bug_subscription_filter = ProxyFactory(bug_subscription_filter) # Anonymous users are denied rights to delete the filter. with anonymous_logged_in(): self.assertRaises( Unauthorized, getattr, bug_subscription_filter, "delete") # Any other person is also denied. with person_logged_in(self.factory.makePerson()): self.assertRaises( Unauthorized, getattr, bug_subscription_filter, "delete") # The subscriber can delete the filter. with person_logged_in(self.subscriber): bug_subscription_filter.delete()
def test_write_to_any_user_when_no_subscription(self): """ `BugSubscriptionFilter`s can be modifed by any logged-in user when there is no related subscription. """ bug_subscription_filter = BugSubscriptionFilter() bug_subscription_filter = ProxyFactory(bug_subscription_filter) # The subscriber can edit the filter. with person_logged_in(self.subscriber): bug_subscription_filter.find_all_tags = True # Any other person can edit the filter. with person_logged_in(self.factory.makePerson()): bug_subscription_filter.find_all_tags = True # Anonymous users are denied rights to edit the filter. with anonymous_logged_in(): self.assertRaises(Unauthorized, setattr, bug_subscription_filter, "find_all_tags", True)
def test_write_to_subscribers(self): """`BugSubscriptionFilter`s can only be modifed by subscribers.""" bug_subscription_filter = BugSubscriptionFilter() bug_subscription_filter.structural_subscription = self.subscription bug_subscription_filter = ProxyFactory(bug_subscription_filter) # The subscriber can edit the filter. with person_logged_in(self.subscriber): bug_subscription_filter.find_all_tags = True # Any other person is denied rights to edit the filter. with person_logged_in(self.factory.makePerson()): self.assertRaises( Unauthorized, setattr, bug_subscription_filter, "find_all_tags", True) # Anonymous users are also denied. with anonymous_logged_in(): self.assertRaises( Unauthorized, setattr, bug_subscription_filter, "find_all_tags", True)
def test_write_to_any_user_when_no_subscription(self): """ `BugSubscriptionFilter`s can be modifed by any logged-in user when there is no related subscription. """ bug_subscription_filter = BugSubscriptionFilter() bug_subscription_filter = ProxyFactory(bug_subscription_filter) # The subscriber can edit the filter. with person_logged_in(self.subscriber): bug_subscription_filter.find_all_tags = True # Any other person can edit the filter. with person_logged_in(self.factory.makePerson()): bug_subscription_filter.find_all_tags = True # Anonymous users are denied rights to edit the filter. with anonymous_logged_in(): self.assertRaises( Unauthorized, setattr, bug_subscription_filter, "find_all_tags", True)
def setUp(self): super(TestBugSubscriptionFilterInformationType, self).setUp() self.target = self.factory.makeProduct() self.subscriber = self.target.owner login_person(self.subscriber) self.subscription = self.target.addBugSubscription( self.subscriber, self.subscriber) self.subscription_filter = BugSubscriptionFilter() self.subscription_filter.structural_subscription = self.subscription
def test_tags_with_any_and_all(self): # If the tags are bundled in a c.l.searchbuilder.any or .all, the # find_any_tags attribute will also be updated. bug_subscription_filter = BugSubscriptionFilter() self.assertEqual(frozenset(), bug_subscription_filter.tags) self.assertFalse(bug_subscription_filter.find_all_tags) bug_subscription_filter.tags = searchbuilder.all(u"foo") self.assertEqual(frozenset((u"foo", )), bug_subscription_filter.tags) self.assertTrue(bug_subscription_filter.find_all_tags) # Not using `searchbuilder.any` or `.all` leaves find_all_tags # unchanged. bug_subscription_filter.tags = [u"-bar"] self.assertEqual(frozenset((u"-bar", )), bug_subscription_filter.tags) self.assertTrue(bug_subscription_filter.find_all_tags) bug_subscription_filter.tags = searchbuilder.any(u"baz") self.assertEqual(frozenset((u"baz", )), bug_subscription_filter.tags) self.assertFalse(bug_subscription_filter.find_all_tags)
def test_tags_with_any_and_all(self): # If the tags are bundled in a c.l.searchbuilder.any or .all, the # find_any_tags attribute will also be updated. bug_subscription_filter = BugSubscriptionFilter() self.assertEqual(frozenset(), bug_subscription_filter.tags) self.assertFalse(bug_subscription_filter.find_all_tags) bug_subscription_filter.tags = searchbuilder.all(u"foo") self.assertEqual(frozenset((u"foo",)), bug_subscription_filter.tags) self.assertTrue(bug_subscription_filter.find_all_tags) # Not using `searchbuilder.any` or `.all` leaves find_all_tags # unchanged. bug_subscription_filter.tags = [u"-bar"] self.assertEqual(frozenset((u"-bar",)), bug_subscription_filter.tags) self.assertTrue(bug_subscription_filter.find_all_tags) bug_subscription_filter.tags = searchbuilder.any(u"baz") self.assertEqual(frozenset((u"baz",)), bug_subscription_filter.tags) self.assertFalse(bug_subscription_filter.find_all_tags)
def test_tags_set_wildcard(self): # Setting one or more wildcard tags may update include_any_tags or # exclude_any_tags. bug_subscription_filter = BugSubscriptionFilter() self.assertEqual(frozenset(), bug_subscription_filter.tags) self.assertFalse(bug_subscription_filter.include_any_tags) self.assertFalse(bug_subscription_filter.exclude_any_tags) bug_subscription_filter.tags = [u"*"] self.assertEqual(frozenset((u"*", )), bug_subscription_filter.tags) self.assertTrue(bug_subscription_filter.include_any_tags) self.assertFalse(bug_subscription_filter.exclude_any_tags) bug_subscription_filter.tags = [u"-*"] self.assertEqual(frozenset((u"-*", )), bug_subscription_filter.tags) self.assertFalse(bug_subscription_filter.include_any_tags) self.assertTrue(bug_subscription_filter.exclude_any_tags) bug_subscription_filter.tags = [u"*", u"-*"] self.assertEqual(frozenset((u"*", u"-*")), bug_subscription_filter.tags) self.assertTrue(bug_subscription_filter.include_any_tags) self.assertTrue(bug_subscription_filter.exclude_any_tags) bug_subscription_filter.tags = [] self.assertEqual(frozenset(), bug_subscription_filter.tags) self.assertFalse(bug_subscription_filter.include_any_tags) self.assertFalse(bug_subscription_filter.exclude_any_tags)
def test_delete(self): """`BugSubscriptionFilter` objects can be deleted. Child objects - like `BugSubscriptionFilterTags` - will also be deleted. """ # This is a second filter for the subscription. bug_subscription_filter = BugSubscriptionFilter() bug_subscription_filter.structural_subscription = self.subscription bug_subscription_filter.importances = [BugTaskImportance.LOW] bug_subscription_filter.statuses = [BugTaskStatus.NEW] bug_subscription_filter.tags = [u"foo"] IStore(bug_subscription_filter).flush() self.assertIsNot(None, Store.of(bug_subscription_filter)) # Delete. bug_subscription_filter.delete() IStore(bug_subscription_filter).flush() # It doesn't exist in the database anymore. self.assertIs(None, Store.of(bug_subscription_filter))
def test_delete_by_subscribers(self): """`BugSubscriptionFilter`s can only be deleted by subscribers.""" bug_subscription_filter = BugSubscriptionFilter() bug_subscription_filter.structural_subscription = self.subscription bug_subscription_filter = ProxyFactory(bug_subscription_filter) # Anonymous users are denied rights to delete the filter. with anonymous_logged_in(): self.assertRaises(Unauthorized, getattr, bug_subscription_filter, "delete") # Any other person is also denied. with person_logged_in(self.factory.makePerson()): self.assertRaises(Unauthorized, getattr, bug_subscription_filter, "delete") # The subscriber can delete the filter. with person_logged_in(self.subscriber): bug_subscription_filter.delete()
def test_importances_set_all(self): # Setting all importances is normalized into setting no importances. bug_subscription_filter = BugSubscriptionFilter() bug_subscription_filter.importances = list(BugTaskImportance.items) self.assertEqual(frozenset(), bug_subscription_filter.importances)
def test_description(self): """Test the description property.""" bug_subscription_filter = BugSubscriptionFilter() bug_subscription_filter.description = u"foo" self.assertEqual(u"foo", bug_subscription_filter.description)
def test_statuses_set_all(self): # Setting all statuses is normalized into setting no statuses. bug_subscription_filter = BugSubscriptionFilter() bug_subscription_filter.statuses = list(BugTaskStatus.items) self.assertEqual(frozenset(), bug_subscription_filter.statuses)
def test_importances(self): # The importances property is a frozenset of the importances that are # filtered upon. bug_subscription_filter = BugSubscriptionFilter() self.assertEqual(frozenset(), bug_subscription_filter.importances)
def delete(self): BugSubscriptionFilter.deleteMultiple([bf.id for bf in self.bug_filters]) Store.of(self).remove(self)
def test_tags_set_empty(self): # Assigning an empty iterable to tags updates the database. bug_subscription_filter = BugSubscriptionFilter() bug_subscription_filter.tags = [] self.assertEqual(frozenset(), bug_subscription_filter.tags)
def test_tags(self): # The tags property is a frozenset of the tags that are filtered upon. bug_subscription_filter = BugSubscriptionFilter() self.assertEqual(frozenset(), bug_subscription_filter.tags)
def test_information_types(self): # The information_types property is a frozenset of the # information_types that are filtered upon. bug_subscription_filter = BugSubscriptionFilter() self.assertEqual(frozenset(), bug_subscription_filter.information_types)
def delete(self): BugSubscriptionFilter.deleteMultiple( [bf.id for bf in self.bug_filters]) Store.of(self).remove(self)