class TestWatcherHandling(ActivityTestCase): def setUp(self): super(TestWatcherHandling, self).setUp() self.center = NotificationCenter() def test_fetch_returns_watcher_by_means_of_actor_id(self): hugo = create(Builder('watcher').having(actorid='hugo')) peter = create(Builder('watcher').having(actorid='peter')) self.assertEquals(hugo, self.center.fetch_watcher('hugo')) self.assertEquals(peter, self.center.fetch_watcher('peter')) def test_return_none_when_watcher_not_exists(self): self.assertEquals(None, self.center.fetch_watcher('peter')) def test_adding(self): self.center.add_watcher('peter') self.assertEquals(1, len(Watcher.query.all())) self.assertEquals('peter', Watcher.query.first().actorid) def test_add_watcher_twice_raise_integrity_error(self): self.center.add_watcher('peter') with self.assertRaises(IntegrityError): self.center.add_watcher('peter') transaction.commit() transaction.abort() def test_add_watcher_to_resource(self): peter = create(Builder('watcher').having(actorid='peter')) resource = create(Builder('resource').oguid('fd:123')) self.center.add_watcher_to_resource(Oguid('fd', '123'), 'peter') self.assertEquals([peter], list(resource.watchers)) def test_adding_watcher_twice_to_resource_is_ignored(self): peter = create(Builder('watcher').having(actorid='peter')) resource = create(Builder('resource').oguid('fd:123')) self.center.add_watcher_to_resource(Oguid('fd', '123'), 'peter') self.center.add_watcher_to_resource(Oguid('fd', '123'), 'peter') self.assertEquals([peter], list(resource.watchers)) def test_add_watcher_to_resource_creates_resource_when_not_exitst(self): peter = create(Builder('watcher').having(actorid='peter')) self.center.add_watcher_to_resource(Oguid('fd', '123'), 'peter') resource = peter.resources[0] self.assertEquals('fd:123', resource.oguid) def test_add_watcher_to_resource_creates_watcher_when_not_exitst(self): resource = create(Builder('resource').oguid('fd:123')) self.center.add_watcher_to_resource(Oguid('fd', '123'), 'peter') watcher = list(resource.watchers)[0] self.assertEquals('peter', watcher.actorid) def test_get_watchers_returns_a_list_of_resource_watchers(self): peter = create(Builder('watcher').having(actorid='peter')) hugo = create(Builder('watcher').having(actorid='hugo')) fritz = create(Builder('watcher').having(actorid='fritz')) resource_1 = create(Builder('resource') .oguid('fd:123').watchers([hugo, fritz])) resource_2 = create(Builder('resource') .oguid('fd:456').watchers([peter])) self.assertEquals([hugo, fritz], self.center.get_watchers(Oguid('fd', '123'))) self.assertEquals([peter], self.center.get_watchers(Oguid('fd', '456'))) def test_get_watchers_returns_empty_list_when_resource_not_exists(self): self.assertEquals([], self.center.get_watchers(Oguid('fd', '123'))) def test_remove_watcher_from_resource_will_be_ignored_when_watcher_not_exists(self): create(Builder('resource').oguid('fd:123')) self.center.remove_watcher_from_resource( Oguid('fd', '123'), 'peter', WATCHER_ROLE) def test_remove_watcher_from_resource_will_remove_subscription_if_no_roles_left(self): resource = create(Builder('resource').oguid('fd:123')) watcher = create(Builder('watcher').having(actorid=u'peter')) create(Builder('subscription') .having(resource=resource, watcher=watcher, role=WATCHER_ROLE)) self.center.remove_watcher_from_resource( Oguid('fd', '123'), 'peter', WATCHER_ROLE) self.assertEquals([], resource.watchers) def test_remove_watcher_from_resource_will_be_ignored_when_resource_not_exists(self): create(Builder('watcher').having(actorid='peter')) self.center.remove_watcher_from_resource( Oguid('fd', '123'), 'peter', WATCHER_ROLE) def test_remove_watcher_from_resource(self): peter = create(Builder('watcher').having(actorid='peter')) hugo = create(Builder('watcher').having(actorid='hugo')) resource = create(Builder('resource') .oguid('fd:123') .watchers([hugo, peter])) self.center.remove_watcher_from_resource( Oguid('fd', '123'), 'peter', WATCHER_ROLE) self.assertEquals([hugo], resource.watchers)
class TestWatcherHandling(ActivityTestCase): def setUp(self): super(TestWatcherHandling, self).setUp() self.center = NotificationCenter() def test_fetch_returns_watcher_by_means_of_actor_id(self): hugo = create(Builder('watcher').having(actorid='hugo')) peter = create(Builder('watcher').having(actorid='peter')) self.assertEquals(hugo, self.center.fetch_watcher('hugo')) self.assertEquals(peter, self.center.fetch_watcher('peter')) def test_return_none_when_watcher_not_exists(self): self.assertEquals(None, self.center.fetch_watcher('peter')) def test_adding(self): self.center.add_watcher('peter') self.assertEquals(1, len(Watcher.query.all())) self.assertEquals('peter', Watcher.query.first().actorid) def test_add_watcher_twice_raise_integrity_error(self): self.center.add_watcher('peter') with self.assertRaises(IntegrityError): self.center.add_watcher('peter') transaction.commit() transaction.abort() def test_add_watcher_to_resource(self): peter = create(Builder('watcher').having(actorid='peter')) resource = create(Builder('resource').oguid('fd:123')) self.center.add_watcher_to_resource(Oguid('fd', '123'), 'peter') self.assertEquals([peter], list(resource.watchers)) def test_adding_watcher_twice_to_resource_is_ignored(self): peter = create(Builder('watcher').having(actorid='peter')) resource = create(Builder('resource').oguid('fd:123')) self.center.add_watcher_to_resource(Oguid('fd', '123'), 'peter') self.center.add_watcher_to_resource(Oguid('fd', '123'), 'peter') self.assertEquals([peter], list(resource.watchers)) def test_add_watcher_to_resource_creates_resource_when_not_exitst(self): peter = create(Builder('watcher').having(actorid='peter')) self.center.add_watcher_to_resource(Oguid('fd', '123'), 'peter') resource = peter.resources[0] self.assertEquals('fd:123', resource.oguid) def test_add_watcher_to_resource_creates_watcher_when_not_exitst(self): resource = create(Builder('resource').oguid('fd:123')) self.center.add_watcher_to_resource(Oguid('fd', '123'), 'peter') watcher = list(resource.watchers)[0] self.assertEquals('peter', watcher.actorid) def test_get_watchers_returns_a_list_of_resource_watchers(self): peter = create(Builder('watcher').having(actorid='peter')) hugo = create(Builder('watcher').having(actorid='hugo')) fritz = create(Builder('watcher').having(actorid='fritz')) resource_1 = create(Builder('resource') .oguid('fd:123').watchers([hugo, fritz])) resource_2 = create(Builder('resource') .oguid('fd:456').watchers([peter])) # A weakref gets reaped unless we keep a reference to the resources. # https://stackoverflow.com/questions/30044069/stale-association-proxy-parent-object-has-gone-out-of-scope-with-flask-sqlalc # So to squelch pyflakes we do trivial asserts on them here. self.assertEquals(123, resource_1.int_id) self.assertEquals(456, resource_2.int_id) self.assertEquals((hugo, fritz), self.center.get_watchers(Oguid('fd', '123'))) self.assertEquals((peter,), self.center.get_watchers(Oguid('fd', '456'))) def test_get_watchers_returns_empty_list_when_resource_not_exists(self): self.assertEquals((), self.center.get_watchers(Oguid('fd', '123'))) def test_remove_watcher_from_resource_will_be_ignored_when_watcher_not_exists(self): create(Builder('resource').oguid('fd:123')) self.center.remove_watcher_from_resource( Oguid('fd', '123'), 'peter', WATCHER_ROLE) def test_remove_watcher_from_resource_will_remove_subscription_if_no_roles_left(self): resource = create(Builder('resource').oguid('fd:123')) watcher = create(Builder('watcher').having(actorid=u'peter')) create(Builder('subscription') .having(resource=resource, watcher=watcher, role=WATCHER_ROLE)) self.center.remove_watcher_from_resource( Oguid('fd', '123'), 'peter', WATCHER_ROLE) self.assertEquals([], resource.watchers) def test_remove_watcher_from_resource_will_be_ignored_when_resource_not_exists(self): create(Builder('watcher').having(actorid='peter')) self.center.remove_watcher_from_resource( Oguid('fd', '123'), 'peter', WATCHER_ROLE) def test_remove_watcher_from_resource(self): peter = create(Builder('watcher').having(actorid='peter')) hugo = create(Builder('watcher').having(actorid='hugo')) resource = create(Builder('resource') .oguid('fd:123') .watchers([hugo, peter])) self.center.remove_watcher_from_resource( Oguid('fd', '123'), 'peter', WATCHER_ROLE) self.assertEquals([hugo], resource.watchers) def test_remove_watchers_from_resource_by_role(self): peter = create(Builder('watcher').having(actorid='peter')) hugo = create(Builder('watcher').having(actorid='hugo')) marie = create(Builder('watcher').having(actorid='marie')) resource = create(Builder('resource').oguid('fd:123')) create(Builder('subscription') .having(resource=resource, watcher=peter, role=WATCHER_ROLE)) create(Builder('subscription') .having(resource=resource, watcher=marie, role=WATCHER_ROLE)) create(Builder('subscription') .having(resource=resource, watcher=peter, role=TASK_ISSUER_ROLE)) create(Builder('subscription') .having(resource=resource, watcher=hugo, role=TASK_ISSUER_ROLE)) self.center.remove_watchers_from_resource_by_role( Oguid('fd', '123'), WATCHER_ROLE) self.assertEqual( set([TASK_ISSUER_ROLE]), set([subscription.role for subscription in Subscription.query.all()])) self.assertEquals([peter, hugo], resource.watchers) def test_remove_watchers_from_resource_by_role_does_not_affect_other_resources(self): hugo = create(Builder('watcher').having(actorid='hugo')) create(Builder('resource').oguid('fd:123').watchers([hugo])) create(Builder('resource').oguid('fd:234').watchers([hugo])) self.assertEqual(2, Subscription.query.count()) self.assertEqual( ['fd:123', 'fd:234'], [subscription.resource.oguid.id for subscription in Subscription.query.all()]) self.center.remove_watchers_from_resource_by_role( Oguid('fd', '234'), WATCHER_ROLE)