def tests_get_subscription(self):
        """Test retrieving subscriptions information.
        """
        manager_root = ISubscriptionManager(self.root)
        manager_root.subscribability = SUBSCRIBABLE
        manager_root.subscribe("*****@*****.**")
        manager_folder = ISubscriptionManager(self.root.folder)
        manager_folder.subscribe("*****@*****.**")

        manager = ISubscriptionManager(self.root.folder.index)
        manager.subscribability = SUBSCRIBABLE
        manager.subscribe("*****@*****.**")

        self.assertEqual(manager.get_subscription("*****@*****.**"), None)
        subscription = manager.get_subscription("*****@*****.**")
        self.assertTrue(verifyObject(ISubscription, subscription))
        self.assertEqual(subscription.email, "*****@*****.**")
        self.assertEqual(subscription.content, self.root)
        self.assertEqual(len(manager.get_subscriptions()), 3)

        manager_root.subscribability = NOT_SUBSCRIBABLE

        self.assertEqual(manager.get_subscription("*****@*****.**"), None)
        subscription = manager.get_subscription("*****@*****.**")
        self.assertTrue(verifyObject(ISubscription, subscription))
        self.assertEqual(subscription.email, "*****@*****.**")
        self.assertEqual(subscription.content, self.root.folder.index)
        self.assertEqual(len(manager.get_subscriptions()), 1)
    def request_subscription(self, content, email):
        # Send out request for subscription
        # NOTE: no doc string, so, not *publishable* TTW
        #
        if not self.are_subscriptions_enabled():
            raise errors.NotSubscribableError()

        manager = ISubscriptionManager(content, None)
        # see if content is subscribable
        if manager is None or not manager.is_subscribable():
            raise errors.NotSubscribableError()

        # validate address
        if not isValidMailAddress(email):
            raise errors.InvalidEmailaddressError()

        # check if not yet subscribed
        subscription = manager.get_subscription(email)
        if subscription is not None:
            # send an email informing about this situation
            self._send_confirmation(
                content, subscription.content, email,
                'already_subscribed_template', 'confirm_subscription')
            raise errors.AlreadySubscribedError()

        # send confirmation email to emailaddress
        self._send_confirmation(
            content, content, email,
            'subscription_confirmation_template', 'confirm_subscription')
    def request_cancellation(self, content, email):
        # Send out request for cancellation of the subscription
        # NOTE: no doc string, so, not *publishable* TTW
        #
        manager = ISubscriptionManager(content, None)
        if manager is None:
            raise errors.NotSubscribableError()
        # validate address
        if not isValidMailAddress(email):
            raise errors.InvalidEmailaddressError()

        # check if indeed subscribed
        subscription = manager.get_subscription(email)
        if subscription is None:
            # send an email informing about this situation
            self._send_information(content, email, 'not_subscribed_template')
            raise errors.NotSubscribedError()

        self._send_confirmation(
            content, subscription.content, email,
            'cancellation_confirmation_template', 'confirm_cancellation')