Esempio n. 1
0
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)
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)