def setUp(self):
        self.user1 = User(username="******", email="*****@*****.**")
        self.user1.save()

        self.user2 = User(username="******", email="*****@*****.**")
        self.user2.save()

        self.test = TestModel()
        self.test.save()

        self.subscription = Subscription(user=self.user1, typ="email", content_object=self.test)
        self.subscription.save()
class SubscriptableMixinTest(TestCase):
    def setUp(self):
        self.user1 = User(username="******", email="*****@*****.**")
        self.user1.save()

        self.user2 = User(username="******", email="*****@*****.**")
        self.user2.save()

        self.test = TestModel()
        self.test.save()

        self.subscription = Subscription(user=self.user1, typ="email", content_object=self.test)
        self.subscription.save()

    def test_post_save(self):
        self.assertEqual(len(mail.outbox), 0)
        self.test.save()
        self.assertEqual(len(mail.outbox), 1)
        self.assertEqual(mail.outbox[0].subject, "Object TestModel object updated")
        self.assertEqual(mail.outbox[0].body, "The object TestModel object has been updated.\n")

    def test_subscribe_user(self):
        self.assertEqual(Subscription.objects.filter(user=self.user2).count(), 0)
        self.test.subscribe_user(self.user2, "email")
        self.assertEqual(Subscription.objects.filter(user=self.user2).count(), 1)

    def test_subscribe_email(self):
        self.assertEqual(Subscription.objects.filter(email="*****@*****.**").count(), 0)
        self.test.subscribe_email("*****@*****.**", "email")
        self.assertEqual(Subscription.objects.filter(email="*****@*****.**").count(), 1)

    def test_unsubscribe_user(self):
        self.assertEqual(Subscription.objects.filter(user=self.user2).count(), 0)
        self.assertEqual(self.test.subscribe_user(self.user2, "email"), "new")
        self.assertEqual(self.test.subscribe_user(self.user2, "db"), "new")
        self.assertEqual(Subscription.objects.filter(user=self.user2).count(), 2)
        self.test.unsubscribe_user(self.user2, "email")
        self.assertEqual(Subscription.objects.filter(user=self.user2).count(), 1)
        self.test.unsubscribe_user(self.user2, "db")
        self.assertEqual(Subscription.objects.filter(user=self.user2).count(), 0)

        self.assertEqual(Subscription.objects.filter(user=self.user2).count(), 0)
        self.test.subscribe_user(self.user2, "email")
        self.test.subscribe_user(self.user2, "db")
        self.assertEqual(Subscription.objects.filter(user=self.user2).count(), 2)
        self.test.unsubscribe_user(self.user2)
        self.assertEqual(Subscription.objects.filter(user=self.user2).count(), 0)

    def test_unsubscribe_email(self):
        self.assertEqual(Subscription.objects.filter(email="*****@*****.**").count(), 0)
        self.test.subscribe_email("*****@*****.**", "email")
        self.test.subscribe_email("*****@*****.**", "db")
        self.assertEqual(Subscription.objects.filter(email="*****@*****.**").count(), 2)
        self.test.unsubscribe_email("*****@*****.**", "email")
        self.assertEqual(Subscription.objects.filter(email="*****@*****.**").count(), 1)
        self.test.unsubscribe_email("*****@*****.**", "db")
        self.assertEqual(Subscription.objects.filter(email="*****@*****.**").count(), 0)

        self.assertEqual(Subscription.objects.filter(email="*****@*****.**").count(), 0)
        self.test.subscribe_email("*****@*****.**", "email")
        self.test.subscribe_email("*****@*****.**", "db")
        self.assertEqual(Subscription.objects.filter(email="*****@*****.**").count(), 2)
        self.test.unsubscribe_email("*****@*****.**")
        self.assertEqual(Subscription.objects.filter(email="*****@*****.**").count(), 0)