class TipModelTestCase(unittest.TestCase): def setUp(self): # -------------------------------------------------------------------- # All Tips need an owner Guide, which need an owner Account. # -------------------------------------------------------------------- self.user = User.objects.create_user(username = '******', email = '*****@*****.**', password = '******') self.user.save() self.account = self.user.get_profile() self.guide = Guide(title = "What to do in Montreal!", location = "Montreal, Canada", owner = self.account, is_draft = False) self.guide.save() self.draft_guide = Guide(title = "What to do in Montreal!", location = "Montreal, Canada", owner = self.account, is_draft = True) self.draft_guide.save() # -------------------------------------------------------------------- cache.clear() def tearDown(self): for pk in [self.guide.pk, self.draft_guide.pk]: if Guide.objects.filter(pk__exact = self.guide.pk).exists(): self.guide.delete() self.user.delete() def test_tip_creation(self): self.assertEqual(len(Tip.objects.all()), 0) self.assertEqual(len(self.guide.tip_set.all()), 0) tip = Tip(title = "Peel Pub", location = "Peel Street, near McGill campus", guide = self.guide) tip.save() self.assertEqual(len(Tip.objects.all()), 1) self.assertEqual(len(self.guide.tip_set.all()), 1) def test_guide_deletion_deletes_tip(self): tip = Tip(title = "Peel Pub", location = "Peel Street, near McGill campus", guide = self.guide) tip.save() self.assertTrue(Tip.objects.filter(pk__exact = tip.pk).exists()) self.guide.delete() self.assertFalse(Tip.objects.filter(pk__exact = tip.pk).exists()) def test_tip_add_remove_tags(self): tip = Tip(title = "Peel Pub", location = "Peel Street, near McGill campus", guide = self.guide) tip.save() self.assertEqual(tip.tags.count(), 0) tip.tags.add("drink", "pub", "student") self.assertEqual(tip.tags.count(), 3) self.assertEqual(Tip.objects.filter(tags__name__exact = "drink").count(), 1) self.assertEqual(Tip.objects.filter(tags__name__exact = "pub").count(), 1) self.assertEqual(Tip.objects.filter(tags__name__exact = "student").count(), 1) self.assertEqual(Tip.objects.filter(tags__name__exact = "museum").count(), 0) tip.tags.remove("drink", "pub") self.assertEqual(tip.tags.count(), 1) self.assertEqual(Tip.objects.filter(tags__name__exact = "drink").count(), 0) self.assertEqual(Tip.objects.filter(tags__name__exact = "pub").count(), 0) self.assertEqual(Tip.objects.filter(tags__name__exact = "student").count(), 1) self.assertEqual(Tip.objects.filter(tags__name__exact = "museum").count(), 0) # ------------------------------------------------------------------------- # Account.has_favourited_tip. Tested here as the m2m field is # Tip.favouritors. # ------------------------------------------------------------------------- def _test_account_has_favourited_tip(self, is_public_guide = None, is_draft_guide = None, remove_favourited_tip = None, delete_tip = None, delete_guide = None, toggle_guide_visibility = None): assert(any(guide for guide in [is_public_guide, is_draft_guide])) if is_public_guide: tip = Tip(title = "Peel Pub", location = "Peel Street, near McGill campus", guide = self.guide) elif is_draft_guide: tip = Tip(title = "Peel Pub", location = "Peel Street, near McGill campus", guide = self.draft_guide) tip.save() account = tip.guide.owner print "adding tip" account.add_favourited_tip(tip) if is_public_guide: self.assertTrue(account.has_favourited_tip(tip)) else: self.assertFalse(account.has_favourited_tip(tip)) if remove_favourited_tip: print "removing tip" account.remove_favourited_tip(tip) elif delete_tip: print "deleting tip" tip.delete() elif delete_guide: print "deleting guide" tip.guide.delete() elif toggle_guide_visibility: print "toggling guide visibility" tip.guide.is_draft = not tip.guide.is_draft tip.guide.save() if is_public_guide: self.assertFalse(account.has_favourited_tip(tip)) elif is_draft_guide and not toggle_guide_visibility: self.assertFalse(account.has_favourited_tip(tip)) elif is_draft_guide and toggle_guide_visibility: self.assertTrue(account.has_favourited_tip(tip)) def test_account_has_favourited_tip_after_removing_favourited_tip_for_public_guide(self): self._test_account_has_favourited_tip(is_public_guide = True, remove_favourited_tip = True) def test_account_has_favourited_tip_after_removing_favourited_tip_for_draft_guide(self): self._test_account_has_favourited_tip(is_draft_guide = True, remove_favourited_tip = True) def test_account_has_favourited_tip_after_deleting_tip_for_public_guide(self): self._test_account_has_favourited_tip(is_public_guide = True, delete_tip = True) def test_account_has_favourited_tip_after_deleting_tip_for_draft_guide(self): self._test_account_has_favourited_tip(is_draft_guide = True, delete_tip = True) def test_account_has_favourited_tip_after_deleting_guide_for_public_guide(self): self._test_account_has_favourited_tip(is_public_guide = True, delete_guide = True) def test_account_has_favourited_tip_after_deleting_guide_for_draft_guide(self): self._test_account_has_favourited_tip(is_draft_guide = True, delete_guide = True) def test_account_has_favourited_tip_after_toggling_guide_visibility_for_draft_guide(self): self._test_account_has_favourited_tip(is_draft_guide = True, toggle_guide_visibility = True) # ------------------------------------------------------------------------- # Account.favourite_tips. Tested here as the m2m field is # Tip.favouritors. # ------------------------------------------------------------------------- def _test_account_favourite_tips(self, is_public_guide = None, is_draft_guide = None, remove_favourited_tip = None, delete_tip = None, delete_guide = None, toggle_guide_visibility = None): assert(any(guide for guide in [is_public_guide, is_draft_guide])) if is_public_guide: tip = Tip(title = "Peel Pub", location = "Peel Street, near McGill campus", guide = self.guide) elif is_draft_guide: tip = Tip(title = "Peel Pub", location = "Peel Street, near McGill campus", guide = self.draft_guide) tip.save() account = tip.guide.owner print "adding tip" account.add_favourited_tip(tip) if is_public_guide: self.assertTrue(account.has_favourited_tip(tip)) else: self.assertFalse(account.has_favourited_tip(tip)) print "check favourite tips on account" if is_public_guide: self.assertTrue(tip in account.favourite_tips) else: self.assertFalse(tip in account.favourite_tips) if remove_favourited_tip: print "removing tip" account.remove_favourited_tip(tip) elif delete_tip: print "deleting tip" tip.delete() elif delete_guide: print "deleting guide" tip.guide.delete() elif toggle_guide_visibility: print "toggling guide visibility" tip.guide.is_draft = not tip.guide.is_draft tip.guide.save() if is_public_guide: self.assertFalse(tip in account.favourite_tips) elif is_draft_guide and not toggle_guide_visibility: self.assertFalse(tip in account.favourite_tips) elif is_draft_guide and toggle_guide_visibility: self.assertTrue(tip in account.favourite_tips) def test_account_favourite_tips_after_removing_favourited_tip_for_public_guide(self): self._test_account_favourite_tips(is_public_guide = True, remove_favourited_tip = True) def test_account_favourite_tips_after_removing_favourited_tip_for_draft_guide(self): self._test_account_favourite_tips(is_draft_guide = True, remove_favourited_tip = True) def test_account_favourite_tips_after_deleting_tip_for_public_guide(self): self._test_account_favourite_tips(is_public_guide = True, delete_tip = True) def test_account_favourite_tips_after_deleting_tip_for_draft_guide(self): self._test_account_favourite_tips(is_draft_guide = True, delete_tip = True) def test_account_favourite_tips_after_deleting_guide_for_public_guide(self): self._test_account_favourite_tips(is_public_guide = True, delete_guide = True) def test_account_favourite_tips_after_deleting_guide_for_draft_guide(self): self._test_account_favourite_tips(is_draft_guide = True, delete_guide = True) def test_account_favourite_tips_after_toggling_guide_visibility_for_draft_guide(self): self._test_account_favourite_tips(is_draft_guide = True, toggle_guide_visibility = True) # ------------------------------------------------------------------------- # ------------------------------------------------------------------------- # Account.get_favourite_tag_generator. Tested here as the m2m field is # Tip.favouritors. Recall this function returns TagWithURL objects. # ------------------------------------------------------------------------- def _test_account_get_favourite_tag_generator(self, is_public_guide = None, is_draft_guide = None, tip_before_tags = None, remove_favourited_tip = None, delete_tip = None, delete_guide = None, toggle_guide_visibility = None): assert(any(guide for guide in [is_public_guide, is_draft_guide])) if is_public_guide: tip = Tip(title = "Peel Pub", location = "Peel Street, near McGill campus", guide = self.guide) else: tip = Tip(title = "Peel Pub", location = "Peel Street, near McGill campus", guide = self.draft_guide) tip.save() account = tip.guide.owner if tip_before_tags == True: print "adding tip as favourite" account.add_favourited_tip(tip) print "add tags" tip.tags.add("pub", "student", "fun") else: print "add tags" tip.tags.add("pub", "student", "fun") print "adding tip as favourite" account.add_favourited_tip(tip) print "check favourite tags on account" if is_public_guide: self.assertTrue("pub" in [tag.tag.name for tag in account.get_favourite_tag_generator()]) self.assertTrue("student" in [tag.tag.name for tag in account.get_favourite_tag_generator()]) self.assertTrue("fun" in [tag.tag.name for tag in account.get_favourite_tag_generator()]) else: self.assertFalse("pub" in [tag.tag.name for tag in account.get_favourite_tag_generator()]) self.assertFalse("student" in [tag.tag.name for tag in account.get_favourite_tag_generator()]) self.assertFalse("fun" in [tag.tag.name for tag in account.get_favourite_tag_generator()]) if remove_favourited_tip: print "removing tip" account.remove_favourited_tip(tip) elif delete_tip: print "deleting tip" tip.delete() elif delete_guide: print "deleting guide" self.guide.delete() elif toggle_guide_visibility: print "toggling guide visibility" tip.guide.is_draft = not tip.guide.is_draft tip.guide.save() if is_public_guide: self.assertFalse("pub" in [tag.tag.name for tag in account.get_favourite_tag_generator()]) self.assertFalse("student" in [tag.tag.name for tag in account.get_favourite_tag_generator()]) self.assertFalse("fun" in [tag.tag.name for tag in account.get_favourite_tag_generator()]) elif is_draft_guide and not toggle_guide_visibility: self.assertFalse("pub" in [tag.tag.name for tag in account.get_favourite_tag_generator()]) self.assertFalse("student" in [tag.tag.name for tag in account.get_favourite_tag_generator()]) self.assertFalse("fun" in [tag.tag.name for tag in account.get_favourite_tag_generator()]) elif is_draft_guide and toggle_guide_visibility: self.assertTrue("pub" in [tag.tag.name for tag in account.get_favourite_tag_generator()]) self.assertTrue("student" in [tag.tag.name for tag in account.get_favourite_tag_generator()]) self.assertTrue("fun" in [tag.tag.name for tag in account.get_favourite_tag_generator()]) def test_account_get_favourite_tag_generator_tip_before_tags_for_draft_guide(self): self._test_account_get_favourite_tag_generator(is_draft_guide = True, tip_before_tags = True, remove_favourited_tip = True) def test_account_get_favourite_tag_generator_tip_before_tags_for_public_guide(self): self._test_account_get_favourite_tag_generator(is_public_guide = True, tip_before_tags = True, remove_favourited_tip = True) def test_account_get_favourite_tag_generator_tags_before_tip_for_draft_guide(self): self._test_account_get_favourite_tag_generator(is_draft_guide = True, tip_before_tags = False, remove_favourited_tip = True) def test_account_get_favourite_tag_generator_tags_before_tip_for_draft_guide(self): self._test_account_get_favourite_tag_generator(is_public_guide = True, tip_before_tags = False, remove_favourited_tip = True) def test_account_get_favourite_tag_generator_during_tip_deletion_tip_before_tags_for_draft_guide(self): self._test_account_get_favourite_tag_generator(is_draft_guide = True, tip_before_tags = True, delete_tip = True) def test_account_get_favourite_tag_generator_during_tip_deletion_tip_before_tags_for_public_guide(self): self._test_account_get_favourite_tag_generator(is_public_guide = True, tip_before_tags = True, delete_tip = True) def test_account_get_favourite_tag_generator_during_tip_deletion_tags_before_tips_for_draft_guide(self): self._test_account_get_favourite_tag_generator(is_draft_guide = True, tip_before_tags = False, delete_tip = True) def test_account_get_favourite_tag_generator_during_tip_deletion_tags_before_tips_for_public_guide(self): self._test_account_get_favourite_tag_generator(is_public_guide = True, tip_before_tags = False, delete_tip = True) def test_account_get_favourite_tag_generator_during_guide_deletion_tip_before_tags_for_draft_guide(self): self._test_account_get_favourite_tag_generator(is_draft_guide = True, tip_before_tags = True, delete_guide = True) def test_account_get_favourite_tag_generator_during_guide_deletion_tip_before_tags_for_public_guide(self): self._test_account_get_favourite_tag_generator(is_public_guide = True, tip_before_tags = True, delete_guide = True) def test_account_get_favourite_tag_generator_during_guide_deletion_tags_before_tips_for_draft_guide(self): self._test_account_get_favourite_tag_generator(is_draft_guide = True, tip_before_tags = False, delete_guide = True) def test_account_get_favourite_tag_generator_during_guide_deletion_tags_before_tips_for_public_guide(self): self._test_account_get_favourite_tag_generator(is_public_guide = True, tip_before_tags = False, delete_guide = True) def test_account_get_favourite_tag_generator_during_toggle_guide_visibility_tags_before_tips_for_draft_guide(self): self._test_account_get_favourite_tag_generator(is_draft_guide = True, tip_before_tags = False, toggle_guide_visibility = True) def test_account_get_favourite_tag_generator_during_toggle_guide_visibility_tips_before_tags_for_draft_guide(self): self._test_account_get_favourite_tag_generator(is_draft_guide = True, tip_before_tags = True, toggle_guide_visibility = True) # ------------------------------------------------------------------------- # ------------------------------------------------------------------------- # Test Tip.tags_as_list # ------------------------------------------------------------------------- def test_tip_tags_as_list(self): tip = Tip(title = "Peel Pub", location = "Peel Street, near McGill campus", guide = self.guide) tip.save() self.assertEqual(len(tip.tags_as_list), 0) tip.tags.add("pub", "student", "fun") self.assertEqual(len(tip.tags_as_list), 3) self.assertTrue("pub" in [tag.tag for tag in tip.tags_as_list]) self.assertTrue("student" in [tag.tag for tag in tip.tags_as_list]) self.assertTrue("fun" in [tag.tag for tag in tip.tags_as_list]) tip.tags.remove("pub") self.assertEqual(len(tip.tags_as_list), 2) self.assertFalse("pub" in [tag.tag for tag in tip.tags_as_list]) self.assertTrue("student" in [tag.tag for tag in tip.tags_as_list]) self.assertTrue("fun" in [tag.tag for tag in tip.tags_as_list]) tip.tags.clear() self.assertEqual(len(tip.tags_as_list), 0) # ------------------------------------------------------------------------- def test_image_add(self): tip = Tip(title = "Peel Pub", location = "Peel Street, near McGill campus", guide = self.guide) tip.save() self.assertEqual(len(tip.image_set.all()), 0) i = Image(description = "cute dog!", owner=self.account) i.tip = tip i.save() self.assertEqual(len(tip.image_set.all()), 1)