def get_active_user_doron(self): user = ActiveUserFactory(first_name_en="Doron", last_name_en="Matalon", slug="doron-matalon") user.save_user_and_profile() return user
def get_active_user_jennifer(self): user = ActiveUserFactory(first_name_en="Jennifer", last_name_en="Connelly", slug="jennifer-connelly") user.save_user_and_profile() return user
class LikeViewTestCaseMixin(SpeedyCoreAccountsModelsMixin, SpeedyMatchLikesLanguageMixin): def set_up(self): super().set_up() self.user_1 = ActiveUserFactory() self.user_2 = ActiveUserFactory() self.page_url = '/{}/likes/like/'.format(self.user_2.slug) def test_user_can_like_and_other_user_gets_notified_on_like(self): self.assert_models_count( entity_count=2, user_count=2, user_email_address_count=2, confirmed_email_address_count=2, unconfirmed_email_address_count=0, ) self.user_1 = User.objects.get(pk=self.user_1.pk) self.assert_user_email_addresses_count( user=self.user_1, user_email_addresses_count=1, user_primary_email_addresses_count=1, user_confirmed_email_addresses_count=1, user_unconfirmed_email_addresses_count=0, ) self.user_2 = User.objects.get(pk=self.user_2.pk) self.assert_user_email_addresses_count( user=self.user_2, user_email_addresses_count=1, user_primary_email_addresses_count=1, user_confirmed_email_addresses_count=1, user_unconfirmed_email_addresses_count=0, ) self.assertEqual(first=len(mail.outbox), second=0) self.assertEqual(first=self.user_1.speedy_match_profile.notify_on_like, second=User.NOTIFICATIONS_ON) self.assertEqual(first=self.user_2.speedy_match_profile.notify_on_like, second=User.NOTIFICATIONS_ON) self.client.login(username=self.user_1.slug, password=tests_settings.USER_PASSWORD) self.assertEqual(first=UserLike.objects.count(), second=0) r = self.client.post(path=self.page_url) self.assertRedirects(response=r, expected_url=self.user_2.get_absolute_url(), status_code=302, target_status_code=200) self.assertEqual(first=UserLike.objects.count(), second=1) like = UserLike.objects.first() self.assertEqual(first=like.from_user.id, second=self.user_1.id) self.assertEqual(first=like.to_user.id, second=self.user_2.id) self.assertEqual(first=len(mail.outbox), second=1) self.assertEqual(first=mail.outbox[0].subject, second=self._someone_likes_you_on_speedy_match_subject_dict_by_gender[self.user_1.get_gender()]) def test_user_can_like_and_other_user_doesnt_get_notified_on_like(self): self.assert_models_count( entity_count=2, user_count=2, user_email_address_count=2, confirmed_email_address_count=2, unconfirmed_email_address_count=0, ) self.user_1 = User.objects.get(pk=self.user_1.pk) self.assert_user_email_addresses_count( user=self.user_1, user_email_addresses_count=1, user_primary_email_addresses_count=1, user_confirmed_email_addresses_count=1, user_unconfirmed_email_addresses_count=0, ) self.user_2 = User.objects.get(pk=self.user_2.pk) self.assert_user_email_addresses_count( user=self.user_2, user_email_addresses_count=1, user_primary_email_addresses_count=1, user_confirmed_email_addresses_count=1, user_unconfirmed_email_addresses_count=0, ) self.assertEqual(first=len(mail.outbox), second=0) self.user_2.speedy_match_profile.notify_on_like = User.NOTIFICATIONS_OFF self.user_2.save_user_and_profile() self.assertEqual(first=self.user_1.speedy_match_profile.notify_on_like, second=User.NOTIFICATIONS_ON) self.assertEqual(first=self.user_2.speedy_match_profile.notify_on_like, second=User.NOTIFICATIONS_OFF) self.client.login(username=self.user_1.slug, password=tests_settings.USER_PASSWORD) self.assertEqual(first=UserLike.objects.count(), second=0) r = self.client.post(path=self.page_url) self.assertRedirects(response=r, expected_url=self.user_2.get_absolute_url(), status_code=302, target_status_code=200) self.assertEqual(first=UserLike.objects.count(), second=1) like = UserLike.objects.first() self.assertEqual(first=like.from_user.id, second=self.user_1.id) self.assertEqual(first=like.to_user.id, second=self.user_2.id) self.assertEqual(first=len(mail.outbox), second=0) def test_user_cannot_like_self(self): self.client.login(username=self.user_2.slug, password=tests_settings.USER_PASSWORD) self.assertEqual(first=UserLike.objects.count(), second=0) r = self.client.post(path=self.page_url) self.assertEqual(first=r.status_code, second=403) self.assertEqual(first=UserLike.objects.count(), second=0) def test_user_cannot_like_other_user_if_blocked(self): Block.objects.block(blocker=self.user_1, blocked=self.user_2) self.client.login(username=self.user_1.slug, password=tests_settings.USER_PASSWORD) self.assertEqual(first=UserLike.objects.count(), second=0) r = self.client.post(path=self.page_url) self.assertEqual(first=r.status_code, second=403) self.assertEqual(first=UserLike.objects.count(), second=0) def test_user_cannot_like_other_user_if_blocking(self): Block.objects.block(blocker=self.user_2, blocked=self.user_1) self.client.login(username=self.user_1.slug, password=tests_settings.USER_PASSWORD) self.assertEqual(first=UserLike.objects.count(), second=0) r = self.client.post(path=self.page_url) self.assertEqual(first=r.status_code, second=403) self.assertEqual(first=UserLike.objects.count(), second=0) def test_user_cannot_like_twice(self): self.client.login(username=self.user_1.slug, password=tests_settings.USER_PASSWORD) self.assertEqual(first=UserLike.objects.count(), second=0) r = self.client.post(path=self.page_url) self.assertRedirects(response=r, expected_url=self.user_2.get_absolute_url(), status_code=302, target_status_code=200) self.assertEqual(first=UserLike.objects.count(), second=1) like = UserLike.objects.first() self.assertEqual(first=like.from_user.id, second=self.user_1.id) self.assertEqual(first=like.to_user.id, second=self.user_2.id) r = self.client.post(path=self.page_url) self.assertEqual(first=r.status_code, second=403) self.assertEqual(first=UserLike.objects.count(), second=1)
class LikeListViewsTestCaseMixin(SpeedyMatchLikesLanguageMixin): def set_up(self): super().set_up() self.user_1 = ActiveUserFactory() self.user_2 = ActiveUserFactory() self.user_3 = ActiveUserFactory() self.user_4 = ActiveUserFactory() self.user_5 = ActiveUserFactory() self.default_url = '/{}/likes/'.format(self.user_1.slug) self.to_url = '/{}/likes/people-i-like/'.format(self.user_1.slug) self.from_url = '/{}/likes/people-who-like-me/'.format(self.user_1.slug) self.mutual_url = '/{}/likes/mutual/'.format(self.user_1.slug) UserLike.objects.add_like(from_user=self.user_1, to_user=ActiveUserFactory(slug="user-99")) UserLike.objects.add_like(from_user=self.user_1, to_user=ActiveUserFactory(slug="user-98")) UserLike.objects.add_like(from_user=self.user_1, to_user=self.user_3) UserLike.objects.add_like(from_user=self.user_1, to_user=self.user_2) UserLike.objects.add_like(from_user=self.user_1, to_user=self.user_5) UserLike.objects.add_like(from_user=ActiveUserFactory(slug="user-97"), to_user=self.user_1) UserLike.objects.add_like(from_user=ActiveUserFactory(slug="user-96"), to_user=self.user_1) UserLike.objects.add_like(from_user=self.user_5, to_user=self.user_1) UserLike.objects.add_like(from_user=self.user_2, to_user=self.user_1) self.to_likes = { User.objects.get(slug="user-99"), User.objects.get(slug="user-98"), self.user_3, self.user_2, self.user_5, } self.from_likes = { User.objects.get(slug="user-97"), User.objects.get(slug="user-96"), self.user_2, self.user_5, } self.mutual_likes = { self.user_2, self.user_5, } self.client.login(username=self.user_1.slug, password=tests_settings.USER_PASSWORD) sleep(0.02) self.user_5.profile.update_last_visit() sleep(0.01) self.user_4.profile.update_last_visit() sleep(0.01) self.user_2.profile.update_last_visit() sleep(0.01) self.user_3.profile.update_last_visit() self.assertEqual(first=UserLike.objects.count(), second=9) def _test_all_like_list_views_contain_strings(self, strings): r = self.client.get(path=self.to_url) self.assertEqual(first=r.status_code, second=200) self.assertEqual(first=len(r.context['object_list']), second=len(self.to_likes)) for string in strings: self.assertIn(member=string, container=r.content.decode()) r = self.client.get(path=self.from_url) self.assertEqual(first=r.status_code, second=200) self.assertEqual(first=len(r.context['object_list']), second=len(self.from_likes)) for string in strings: self.assertIn(member=string, container=r.content.decode()) r = self.client.get(path=self.mutual_url) self.assertEqual(first=r.status_code, second=200) self.assertEqual(first=len(r.context['object_list']), second=len(self.mutual_likes)) for string in strings: self.assertIn(member=string, container=r.content.decode()) def test_visitor_has_no_access(self): self.client.logout() self.assertEqual(first=self.client.get(path=self.to_url).status_code, second=302) self.assertEqual(first=self.client.get(path=self.from_url).status_code, second=302) self.assertEqual(first=self.client.get(path=self.mutual_url).status_code, second=302) def test_default_redirect(self): r = self.client.get(path=self.default_url) self.assertRedirects(response=r, expected_url=self.to_url, status_code=302, target_status_code=200) def test_user_can_see_who_they_like(self): r = self.client.get(path=self.to_url) self.assertEqual(first=r.status_code, second=200) self.assertEqual(first=len(r.context['object_list']), second=5) self.assertSetEqual(set1={like.to_user for like in r.context['object_list']}, set2=self.to_likes) self.assertSetEqual(set1={like.from_user for like in r.context['object_list']}, set2={self.user_1}) to_likes = set(self.to_likes) UserLike.objects.add_like(from_user=self.user_1, to_user=self.user_4) to_likes.add(self.user_4) self.assertEqual(first=UserLike.objects.count(), second=10) r = self.client.get(path=self.to_url) self.assertEqual(first=r.status_code, second=200) self.assertEqual(first=len(r.context['object_list']), second=6) self.assertNotEqual(first={like.to_user for like in r.context['object_list']}, second=self.to_likes) self.assertSetEqual(set1={like.to_user for like in r.context['object_list']}, set2=to_likes) self.assertEqual(first=r.context['object_list'][0].to_user, second=self.user_3) sleep(0.01) self.user_4.profile.update_last_visit() r = self.client.get(path=self.to_url) self.assertEqual(first=r.status_code, second=200) self.assertEqual(first=len(r.context['object_list']), second=6) self.assertNotEqual(first={like.to_user for like in r.context['object_list']}, second=self.to_likes) self.assertSetEqual(set1={like.to_user for like in r.context['object_list']}, set2=to_likes) self.assertEqual(first=r.context['object_list'][0].to_user, second=self.user_4) Block.objects.block(blocker=self.user_4, blocked=self.user_1) r = self.client.get(path=self.to_url) self.assertEqual(first=r.status_code, second=200) self.assertEqual(first=len(r.context['object_list']), second=6) self.assertNotEqual(first={like.to_user for like in r.context['object_list']}, second=self.to_likes) self.assertSetEqual(set1={like.to_user for like in r.context['object_list']}, set2=to_likes) Block.objects.block(blocker=self.user_1, blocked=self.user_4) r = self.client.get(path=self.to_url) self.assertEqual(first=r.status_code, second=200) self.assertEqual(first=len(r.context['object_list']), second=5) self.assertNotEqual(first={like.to_user for like in r.context['object_list']}, second=to_likes) self.assertSetEqual(set1={like.to_user for like in r.context['object_list']}, set2=self.to_likes) Block.objects.unblock(blocker=self.user_1, blocked=self.user_4) r = self.client.get(path=self.to_url) self.assertEqual(first=r.status_code, second=200) self.assertEqual(first=len(r.context['object_list']), second=5) self.assertNotEqual(first={like.to_user for like in r.context['object_list']}, second=to_likes) self.assertSetEqual(set1={like.to_user for like in r.context['object_list']}, set2=self.to_likes) def test_user_can_see_who_likes_them(self): r = self.client.get(path=self.from_url) self.assertEqual(first=r.status_code, second=200) self.assertEqual(first=len(r.context['object_list']), second=4) self.assertSetEqual(set1={like.from_user for like in r.context['object_list']}, set2=self.from_likes) self.assertSetEqual(set1={like.to_user for like in r.context['object_list']}, set2={self.user_1}) from_likes = set(self.from_likes) UserLike.objects.add_like(from_user=self.user_4, to_user=self.user_1) from_likes.add(self.user_4) self.assertEqual(first=UserLike.objects.count(), second=10) r = self.client.get(path=self.from_url) self.assertEqual(first=r.status_code, second=200) self.assertEqual(first=len(r.context['object_list']), second=5) self.assertNotEqual(first={like.from_user for like in r.context['object_list']}, second=self.from_likes) self.assertSetEqual(set1={like.from_user for like in r.context['object_list']}, set2=from_likes) self.assertEqual(first=r.context['object_list'][0].from_user, second=self.user_2) sleep(0.01) self.user_4.profile.update_last_visit() r = self.client.get(path=self.from_url) self.assertEqual(first=r.status_code, second=200) self.assertEqual(first=len(r.context['object_list']), second=5) self.assertNotEqual(first={like.from_user for like in r.context['object_list']}, second=self.from_likes) self.assertSetEqual(set1={like.from_user for like in r.context['object_list']}, set2=from_likes) self.assertEqual(first=r.context['object_list'][0].from_user, second=self.user_4) Block.objects.block(blocker=self.user_1, blocked=self.user_4) r = self.client.get(path=self.from_url) self.assertEqual(first=r.status_code, second=200) self.assertEqual(first=len(r.context['object_list']), second=4) self.assertNotEqual(first={like.from_user for like in r.context['object_list']}, second=from_likes) self.assertSetEqual(set1={like.from_user for like in r.context['object_list']}, set2=self.from_likes) Block.objects.unblock(blocker=self.user_1, blocked=self.user_4) r = self.client.get(path=self.from_url) self.assertEqual(first=r.status_code, second=200) self.assertEqual(first=len(r.context['object_list']), second=5) self.assertNotEqual(first={like.from_user for like in r.context['object_list']}, second=self.from_likes) self.assertSetEqual(set1={like.from_user for like in r.context['object_list']}, set2=from_likes) Block.objects.block(blocker=self.user_4, blocked=self.user_1) r = self.client.get(path=self.from_url) self.assertEqual(first=r.status_code, second=200) self.assertEqual(first=len(r.context['object_list']), second=4) self.assertNotEqual(first={like.from_user for like in r.context['object_list']}, second=from_likes) self.assertSetEqual(set1={like.from_user for like in r.context['object_list']}, set2=self.from_likes) Block.objects.unblock(blocker=self.user_4, blocked=self.user_1) r = self.client.get(path=self.from_url) self.assertEqual(first=r.status_code, second=200) self.assertEqual(first=len(r.context['object_list']), second=4) self.assertNotEqual(first={like.from_user for like in r.context['object_list']}, second=from_likes) self.assertSetEqual(set1={like.from_user for like in r.context['object_list']}, set2=self.from_likes) def test_user_can_see_mutual_likes(self): r = self.client.get(path=self.mutual_url) self.assertEqual(first=r.status_code, second=200) self.assertEqual(first=len(r.context['object_list']), second=2) self.assertSetEqual(set1={like.to_user for like in r.context['object_list']}, set2=self.mutual_likes) self.assertSetEqual(set1={like.from_user for like in r.context['object_list']}, set2={self.user_1}) mutual_likes = set(self.mutual_likes) UserLike.objects.add_like(from_user=self.user_1, to_user=self.user_4) UserLike.objects.add_like(from_user=self.user_4, to_user=self.user_1) mutual_likes.add(self.user_4) self.assertEqual(first=UserLike.objects.count(), second=11) r = self.client.get(path=self.mutual_url) self.assertEqual(first=r.status_code, second=200) self.assertEqual(first=len(r.context['object_list']), second=3) self.assertNotEqual(first={like.to_user for like in r.context['object_list']}, second=self.mutual_likes) self.assertSetEqual(set1={like.to_user for like in r.context['object_list']}, set2=mutual_likes) self.assertEqual(first=r.context['object_list'][0].to_user, second=self.user_2) sleep(0.01) self.user_4.profile.update_last_visit() r = self.client.get(path=self.mutual_url) self.assertEqual(first=r.status_code, second=200) self.assertEqual(first=len(r.context['object_list']), second=3) self.assertNotEqual(first={like.to_user for like in r.context['object_list']}, second=self.mutual_likes) self.assertSetEqual(set1={like.to_user for like in r.context['object_list']}, set2=mutual_likes) self.assertEqual(first=r.context['object_list'][0].to_user, second=self.user_4) Block.objects.block(blocker=self.user_4, blocked=self.user_1) r = self.client.get(path=self.mutual_url) self.assertEqual(first=r.status_code, second=200) self.assertEqual(first=len(r.context['object_list']), second=2) self.assertNotEqual(first={like.to_user for like in r.context['object_list']}, second=mutual_likes) self.assertSetEqual(set1={like.to_user for like in r.context['object_list']}, set2=self.mutual_likes) Block.objects.unblock(blocker=self.user_4, blocked=self.user_1) r = self.client.get(path=self.mutual_url) self.assertEqual(first=r.status_code, second=200) self.assertEqual(first=len(r.context['object_list']), second=2) self.assertNotEqual(first={like.to_user for like in r.context['object_list']}, second=mutual_likes) self.assertSetEqual(set1={like.to_user for like in r.context['object_list']}, set2=self.mutual_likes) def test_like_list_views_titles(self): self._test_all_like_list_views_contain_strings(strings=[ self._list_to_title_dict_by_gender[User.GENDER_OTHER_STRING], self._list_from_title_dict_by_gender[User.GENDER_OTHER_STRING], self._list_mutual_title, ]) user_99 = User.objects.get(slug="user-99") user_97 = User.objects.get(slug="user-97") gender_count_dict = { User.GENDER_FEMALE_STRING: 0, User.GENDER_MALE_STRING: 0, User.GENDER_OTHER_STRING: 0, } for gender in User.GENDER_VALID_VALUES: for user in [self.user_3, self.user_2, self.user_5, User.objects.get(slug="user-98"), User.objects.get(slug="user-96")]: user.gender = gender user.save_user_and_profile() if (gender == User.GENDER_OTHER): two_genders = [random.choice([User.GENDER_FEMALE, User.GENDER_MALE]), gender] else: two_genders = [User.GENDER_FEMALE, User.GENDER_MALE] for gender_to_match in [User.GENDER_VALID_VALUES, [gender], two_genders]: self.user_1.speedy_match_profile.gender_to_match = gender_to_match self.user_1.save_user_and_profile() for gender_99 in User.GENDER_VALID_VALUES: for gender_97 in User.GENDER_VALID_VALUES: user_99.gender = gender_99 user_97.gender = gender_97 user_99.save_user_and_profile() user_97.save_user_and_profile() if ((gender in [User.GENDER_FEMALE, User.GENDER_MALE]) and (gender_to_match == [gender]) and (len({user_99.gender, user_97.gender, self.user_2.gender}) == 1)): gender_string = self.user_2.get_gender() self.assertIn(member=gender_string, container=[User.GENDER_FEMALE_STRING, User.GENDER_MALE_STRING]) self.assertEqual(first=gender_string, second=User.GENDERS_DICT.get(gender)) else: gender_string = User.GENDER_OTHER_STRING self.assertEqual(first=gender_string, second=User.GENDERS_DICT.get(User.GENDER_OTHER)) self._test_all_like_list_views_contain_strings(strings=[ self._list_to_title_dict_by_gender[gender_string], self._list_from_title_dict_by_gender[gender_string], self._list_mutual_title, ]) gender_count_dict[gender_string] += 1 expected_gender_count_dict = { User.GENDER_FEMALE_STRING: 1, User.GENDER_MALE_STRING: 1, User.GENDER_OTHER_STRING: 79, } self.assertDictEqual(d1=gender_count_dict, d2=expected_gender_count_dict) def test_like_list_views_titles_with_empty_lists(self): for user in User.objects.all().exclude(pk=self.user_1.pk): user.delete() self.user_2 = None self.user_3 = None self.user_4 = None self.user_5 = None self.to_likes = set() self.from_likes = set() self.mutual_likes = set() self.assertEqual(first=UserLike.objects.count(), second=0) self._test_all_like_list_views_contain_strings(strings=[ self._list_to_title_dict_by_gender[User.GENDER_OTHER_STRING], self._list_from_title_dict_by_gender[User.GENDER_OTHER_STRING], self._list_mutual_title, ]) gender_count_dict = { User.GENDER_FEMALE_STRING: 0, User.GENDER_MALE_STRING: 0, User.GENDER_OTHER_STRING: 0, } for gender in User.GENDER_VALID_VALUES: if (gender == User.GENDER_OTHER): two_genders = [random.choice([User.GENDER_FEMALE, User.GENDER_MALE]), gender] else: two_genders = [User.GENDER_FEMALE, User.GENDER_MALE] for gender_to_match in [User.GENDER_VALID_VALUES, [gender], two_genders]: self.user_1.speedy_match_profile.gender_to_match = gender_to_match self.user_1.save_user_and_profile() if ((gender in [User.GENDER_FEMALE, User.GENDER_MALE]) and (gender_to_match == [gender])): gender_string = User.GENDERS_DICT.get(gender) self.assertIn(member=gender_string, container=[User.GENDER_FEMALE_STRING, User.GENDER_MALE_STRING]) else: gender_string = User.GENDER_OTHER_STRING self.assertEqual(first=gender_string, second=User.GENDERS_DICT.get(User.GENDER_OTHER)) self._test_all_like_list_views_contain_strings(strings=[ self._list_to_title_dict_by_gender[gender_string], self._list_from_title_dict_by_gender[gender_string], self._list_mutual_title, ]) gender_count_dict[gender_string] += 1 expected_gender_count_dict = { User.GENDER_FEMALE_STRING: 1, User.GENDER_MALE_STRING: 1, User.GENDER_OTHER_STRING: 7, } self.assertDictEqual(d1=gender_count_dict, d2=expected_gender_count_dict) def test_cannot_delete_users_with_queryset_delete(self): with self.assertRaises(NotImplementedError) as cm: User.objects.all().exclude(pk=self.user_1.pk).delete() self.assertEqual(first=str(cm.exception), second="delete is not implemented.") with self.assertRaises(NotImplementedError) as cm: User.objects.delete() self.assertEqual(first=str(cm.exception), second="delete is not implemented.") with self.assertRaises(NotImplementedError) as cm: User.objects.all().delete() self.assertEqual(first=str(cm.exception), second="delete is not implemented.") with self.assertRaises(NotImplementedError) as cm: User.objects.all().filter(pk=1).delete() self.assertEqual(first=str(cm.exception), second="delete is not implemented.") def test_cannot_delete_likes_with_queryset_delete(self): with self.assertRaises(NotImplementedError) as cm: UserLike.objects.delete() self.assertEqual(first=str(cm.exception), second="delete is not implemented.") with self.assertRaises(NotImplementedError) as cm: UserLike.objects.all().delete() self.assertEqual(first=str(cm.exception), second="delete is not implemented.") with self.assertRaises(NotImplementedError) as cm: UserLike.objects.filter(from_user=self.user_1, to_user=self.user_3).delete() self.assertEqual(first=str(cm.exception), second="delete is not implemented.") with self.assertRaises(NotImplementedError) as cm: UserLike.objects.all().exclude(pk=2).delete() self.assertEqual(first=str(cm.exception), second="delete is not implemented.")
def get_active_user_doron(self): user = ActiveUserFactory(first_name_en="Doron", last_name_en="Matalon", slug="doron-matalon", gender=User.GENDER_FEMALE) user.speedy_match_profile.gender_to_match = [User.GENDER_MALE] user.save_user_and_profile() return user
class LikeNotificationsTestCaseMixin(SpeedyCoreAccountsModelsMixin, SpeedyMatchLikesLanguageMixin): def set_up(self): super().set_up() self.user_1 = ActiveUserFactory() self.user_2 = ActiveUserFactory() def test_user_gets_notified_on_like(self): self.assert_models_count( entity_count=2, user_count=2, user_email_address_count=2, confirmed_email_address_count=2, unconfirmed_email_address_count=0, ) self.user_1 = User.objects.get(pk=self.user_1.pk) self.assert_user_email_addresses_count( user=self.user_1, user_email_addresses_count=1, user_primary_email_addresses_count=1, user_confirmed_email_addresses_count=1, user_unconfirmed_email_addresses_count=0, ) self.user_2 = User.objects.get(pk=self.user_2.pk) self.assert_user_email_addresses_count( user=self.user_2, user_email_addresses_count=1, user_primary_email_addresses_count=1, user_confirmed_email_addresses_count=1, user_unconfirmed_email_addresses_count=0, ) self.assertEqual(first=len(mail.outbox), second=0) self.assertEqual(first=self.user_1.speedy_match_profile.notify_on_like, second=User.NOTIFICATIONS_ON) self.assertEqual(first=self.user_2.speedy_match_profile.notify_on_like, second=User.NOTIFICATIONS_ON) UserLike.objects.add_like(from_user=self.user_2, to_user=self.user_1) self.assertEqual(first=len(mail.outbox), second=1) self.assertEqual(first=mail.outbox[0].subject, second=self._someone_likes_you_on_speedy_match_subject_dict_by_gender[self.user_2.get_gender()]) def test_user_doesnt_get_notified_on_like(self): self.assert_models_count( entity_count=2, user_count=2, user_email_address_count=2, confirmed_email_address_count=2, unconfirmed_email_address_count=0, ) self.user_1 = User.objects.get(pk=self.user_1.pk) self.assert_user_email_addresses_count( user=self.user_1, user_email_addresses_count=1, user_primary_email_addresses_count=1, user_confirmed_email_addresses_count=1, user_unconfirmed_email_addresses_count=0, ) self.user_2 = User.objects.get(pk=self.user_2.pk) self.assert_user_email_addresses_count( user=self.user_2, user_email_addresses_count=1, user_primary_email_addresses_count=1, user_confirmed_email_addresses_count=1, user_unconfirmed_email_addresses_count=0, ) self.assertEqual(first=len(mail.outbox), second=0) self.user_1.speedy_match_profile.notify_on_like = User.NOTIFICATIONS_OFF self.user_1.save_user_and_profile() self.assertEqual(first=self.user_1.speedy_match_profile.notify_on_like, second=User.NOTIFICATIONS_OFF) self.assertEqual(first=self.user_2.speedy_match_profile.notify_on_like, second=User.NOTIFICATIONS_ON) UserLike.objects.add_like(from_user=self.user_2, to_user=self.user_1) self.assertEqual(first=len(mail.outbox), second=0)
class ManagerMatchesTestCase(SiteTestCase): def set_up(self): super().set_up() self.user_1 = ActiveUserFactory(gender=User.GENDER_FEMALE) self.user_2 = ActiveUserFactory(gender=User.GENDER_MALE) self.user_3 = ActiveUserFactory(gender=User.GENDER_FEMALE) self.user_4 = ActiveUserFactory(gender=User.GENDER_MALE) self.user_5 = ActiveUserFactory(gender=User.GENDER_OTHER) def test_set_up(self): self.assertEqual(first=User.objects.count(), second=5) def test_gender_doesnt_match_profile_in_matches_list(self): """ Test that users with non-matching genders don't appear in matches list. """ matches_list = SpeedyMatchSiteProfile.objects.get_matches( user=self.user_5) self.assertEqual(first=len(matches_list), second=4) self.assertTrue(self.user_4 in matches_list) self.user_4.speedy_match_profile.gender_to_match = [ User.GENDER_FEMALE, User.GENDER_MALE ] self.user_4.save_user_and_profile() matches_list = SpeedyMatchSiteProfile.objects.get_matches( user=self.user_5) self.assertTrue(0 < len(matches_list) < 4) self.assertTrue(self.user_4 not in matches_list) self.user_4.speedy_match_profile.gender_to_match = User.GENDER_VALID_VALUES self.user_4.save_user_and_profile() matches_list = SpeedyMatchSiteProfile.objects.get_matches( user=self.user_5) self.assertEqual(first=len(matches_list), second=4) self.assertTrue(self.user_4 in matches_list) self.user_5.speedy_match_profile.gender_to_match = [ User.GENDER_OTHER ] self.user_5.save_user_and_profile() matches_list = SpeedyMatchSiteProfile.objects.get_matches( user=self.user_5) self.assertEqual(first=len(matches_list), second=0) self.assertTrue(self.user_4 not in matches_list) self.user_5.speedy_match_profile.gender_to_match = User.GENDER_VALID_VALUES self.user_5.save_user_and_profile() matches_list = SpeedyMatchSiteProfile.objects.get_matches( user=self.user_5) self.assertEqual(first=len(matches_list), second=4) self.assertTrue(self.user_4 in matches_list) self.user_5.speedy_match_profile.gender_to_match = [ User.GENDER_FEMALE ] self.user_5.save_user_and_profile() matches_list = SpeedyMatchSiteProfile.objects.get_matches( user=self.user_5) self.assertEqual(first=len(matches_list), second=2) self.assertTrue(self.user_1 in matches_list) self.assertTrue(self.user_2 not in matches_list) self.assertTrue(self.user_3 in matches_list) self.assertTrue(self.user_4 not in matches_list) def test_matches_list_sorted_by_speedy_match_last_visit(self): """ Test that SpeedyMatchSiteProfile.objects.get_matches() returns a matches list sorted by Speedy Match last visit time (if all ranks are equal). Speedy Net last visit time is ignored. """ sleep(0.2) self.user_2.profile.update_last_visit() matches_list = SpeedyMatchSiteProfile.objects.get_matches( user=self.user_1) self.assertEqual(first=len(matches_list), second=4) self.assertListEqual(list1=matches_list[:1], list2=[self.user_2]) self.assertListEqual( list1=[u.speedy_match_profile.rank for u in matches_list], list2=[5, 5, 5, 5]) sleep(0.1) self.user_3.speedy_match_profile.update_last_visit() matches_list = SpeedyMatchSiteProfile.objects.get_matches( user=self.user_1) self.assertEqual(first=len(matches_list), second=4) self.assertListEqual(list1=matches_list[:2], list2=[self.user_3, self.user_2]) self.assertListEqual( list1=[u.speedy_match_profile.rank for u in matches_list], list2=[5, 5, 5, 5]) sleep(0.1) self.user_4.speedy_net_profile.update_last_visit() matches_list = SpeedyMatchSiteProfile.objects.get_matches( user=self.user_1) self.assertEqual(first=len(matches_list), second=4) self.assertListEqual(list1=matches_list[:2], list2=[self.user_3, self.user_2]) self.assertListEqual( list1=[u.speedy_match_profile.rank for u in matches_list], list2=[5, 5, 5, 5]) sleep(0.1) self.user_4.speedy_match_profile.update_last_visit() matches_list = SpeedyMatchSiteProfile.objects.get_matches( user=self.user_1) self.assertEqual(first=len(matches_list), second=4) self.assertListEqual( list1=matches_list, list2=[self.user_4, self.user_3, self.user_2, self.user_5]) self.assertListEqual( list1=[u.speedy_match_profile.rank for u in matches_list], list2=[5, 5, 5, 5]) matches_list = SpeedyMatchSiteProfile.objects.get_matches( user=self.user_5) self.assertEqual(first=len(matches_list), second=4) self.assertListEqual( list1=matches_list, list2=[self.user_4, self.user_3, self.user_2, self.user_1]) self.assertListEqual( list1=[u.speedy_match_profile.rank for u in matches_list], list2=[5, 5, 5, 5]) self.user_3.speedy_match_profile.profile_description = ( "Hi! " * 12).strip() self.user_3.save_user_and_profile() matches_list = SpeedyMatchSiteProfile.objects.get_matches( user=self.user_5) self.assertEqual(first=len(matches_list), second=4) self.assertListEqual( list1=matches_list, list2=[self.user_4, self.user_2, self.user_1, self.user_3]) self.assertListEqual( list1=[u.speedy_match_profile.rank for u in matches_list], list2=[5, 5, 5, 5]) self.user_3.speedy_match_profile.profile_description = self.user_5.speedy_match_profile.profile_description self.user_3.save_user_and_profile() matches_list = SpeedyMatchSiteProfile.objects.get_matches( user=self.user_5) self.assertEqual(first=len(matches_list), second=4) self.assertListEqual( list1=matches_list, list2=[self.user_4, self.user_3, self.user_2, self.user_1]) self.assertListEqual( list1=[u.speedy_match_profile.rank for u in matches_list], list2=[5, 5, 5, 5]) self.user_3.speedy_match_profile.match_description = ("Hi! " * 8).strip() self.user_3.save_user_and_profile() matches_list = SpeedyMatchSiteProfile.objects.get_matches( user=self.user_5) self.assertEqual(first=len(matches_list), second=4) self.assertListEqual( list1=matches_list, list2=[self.user_4, self.user_2, self.user_1, self.user_3]) self.assertListEqual( list1=[u.speedy_match_profile.rank for u in matches_list], list2=[5, 5, 5, 5]) self.user_3.speedy_match_profile.match_description = self.user_5.speedy_match_profile.match_description self.user_3.save_user_and_profile() matches_list = SpeedyMatchSiteProfile.objects.get_matches( user=self.user_5) self.assertEqual(first=len(matches_list), second=4) self.assertListEqual( list1=matches_list, list2=[self.user_4, self.user_3, self.user_2, self.user_1]) self.assertListEqual( list1=[u.speedy_match_profile.rank for u in matches_list], list2=[5, 5, 5, 5]) self.user_3.speedy_match_profile.profile_picture_months_offset = 25 self.user_3.save_user_and_profile() matches_list = SpeedyMatchSiteProfile.objects.get_matches( user=self.user_5) self.assertEqual(first=len(matches_list), second=4) self.assertListEqual( list1=matches_list, list2=[self.user_4, self.user_2, self.user_1, self.user_3]) self.assertListEqual( list1=[u.speedy_match_profile.rank for u in matches_list], list2=[5, 5, 5, 5]) self.user_3.speedy_match_profile.profile_picture_months_offset = 0 self.user_3.save_user_and_profile() matches_list = SpeedyMatchSiteProfile.objects.get_matches( user=self.user_5) self.assertEqual(first=len(matches_list), second=4) self.assertListEqual( list1=matches_list, list2=[self.user_4, self.user_3, self.user_2, self.user_1]) self.assertListEqual( list1=[u.speedy_match_profile.rank for u in matches_list], list2=[5, 5, 5, 5]) def test_matches_list_sorted_by_rank(self): sleep(0.2) self.user_3.speedy_match_profile.update_last_visit() self.user_1.diet = User.DIET_VEGAN self.user_2.diet = User.DIET_VEGETARIAN self.user_3.diet = User.DIET_CARNIST self.user_4.diet = User.DIET_VEGAN self.user_5.diet = User.DIET_CARNIST self.user_1.smoking_status = User.SMOKING_STATUS_NOT_SMOKING self.user_2.smoking_status = User.SMOKING_STATUS_NOT_SMOKING self.user_3.smoking_status = User.SMOKING_STATUS_NOT_SMOKING self.user_4.smoking_status = User.SMOKING_STATUS_SMOKING_OCCASIONALLY self.user_5.smoking_status = User.SMOKING_STATUS_SMOKING self.user_1.relationship_status = User.RELATIONSHIP_STATUS_SINGLE self.user_2.relationship_status = User.RELATIONSHIP_STATUS_DIVORCED self.user_3.relationship_status = User.RELATIONSHIP_STATUS_WIDOWED self.user_4.relationship_status = User.RELATIONSHIP_STATUS_MARRIED self.user_5.relationship_status = User.RELATIONSHIP_STATUS_IN_RELATIONSHIP self.user_5.speedy_match_profile.diet_match = { str(User.DIET_VEGAN): 2, str(User.DIET_VEGETARIAN): 4, str(User.DIET_CARNIST): 5 } self.user_5.speedy_match_profile.smoking_status_match = { str(User.SMOKING_STATUS_NOT_SMOKING): 5, str(User.SMOKING_STATUS_SMOKING_OCCASIONALLY): 1, str(User.SMOKING_STATUS_SMOKING): 0 } self.user_5.speedy_match_profile.relationship_status_match[str( User.RELATIONSHIP_STATUS_MARRIED )] = SpeedyMatchSiteProfile.RANK_3 self.user_2.speedy_match_profile.relationship_status_match[str( User.RELATIONSHIP_STATUS_IN_RELATIONSHIP )] = SpeedyMatchSiteProfile.RANK_2 self.user_2.speedy_match_profile.relationship_status_match[str( User.RELATIONSHIP_STATUS_IN_OPEN_RELATIONSHIP )] = SpeedyMatchSiteProfile.RANK_1 self.user_2.speedy_match_profile.relationship_status_match[str( User.RELATIONSHIP_STATUS_MARRIED )] = SpeedyMatchSiteProfile.RANK_0 self.user_1.save_user_and_profile() self.user_2.save_user_and_profile() self.user_3.save_user_and_profile() self.user_4.save_user_and_profile() self.user_5.save_user_and_profile() matches_list = SpeedyMatchSiteProfile.objects.get_matches( user=self.user_5) self.assertEqual(first=len(matches_list), second=4) self.assertListEqual( list1=matches_list, list2=[self.user_3, self.user_2, self.user_1, self.user_4]) self.assertListEqual( list1=[u.speedy_match_profile.rank for u in matches_list], list2=[5, 4, 2, 1]) self.user_5.speedy_match_profile.diet_match = { str(User.DIET_VEGAN): 5, str(User.DIET_VEGETARIAN): 4, str(User.DIET_CARNIST): 2 } self.user_5.save_user_and_profile() matches_list = SpeedyMatchSiteProfile.objects.get_matches( user=self.user_5) self.assertEqual(first=len(matches_list), second=4) self.assertListEqual( list1=matches_list, list2=[self.user_1, self.user_2, self.user_3, self.user_4]) self.assertListEqual( list1=[u.speedy_match_profile.rank for u in matches_list], list2=[5, 4, 2, 1]) matches_list = SpeedyMatchSiteProfile.objects.get_matches( user=self.user_2) self.assertEqual(first=len(matches_list), second=3) self.assertListEqual(list1=matches_list, list2=[self.user_3, self.user_1, self.user_5]) self.assertListEqual( list1=[u.speedy_match_profile.rank for u in matches_list], list2=[5, 5, 2]) self.user_5.speedy_match_profile.relationship_status_match[str( User.RELATIONSHIP_STATUS_DIVORCED )] = SpeedyMatchSiteProfile.RANK_0 self.user_5.save_user_and_profile() matches_list = SpeedyMatchSiteProfile.objects.get_matches( user=self.user_2) self.assertEqual(first=len(matches_list), second=2) self.assertListEqual(list1=matches_list, list2=[self.user_3, self.user_1]) self.assertListEqual( list1=[u.speedy_match_profile.rank for u in matches_list], list2=[5, 5]) self.user_4.relationship_status = User.RELATIONSHIP_STATUS_IN_OPEN_RELATIONSHIP self.user_4.save_user_and_profile() matches_list = SpeedyMatchSiteProfile.objects.get_matches( user=self.user_2) self.assertEqual(first=len(matches_list), second=3) self.assertListEqual(list1=matches_list, list2=[self.user_3, self.user_1, self.user_4]) self.assertListEqual( list1=[u.speedy_match_profile.rank for u in matches_list], list2=[5, 5, 1]) self.user_3.relationship_status = User.RELATIONSHIP_STATUS_IN_OPEN_RELATIONSHIP self.user_3.save_user_and_profile() matches_list = SpeedyMatchSiteProfile.objects.get_matches( user=self.user_2) self.assertEqual(first=len(matches_list), second=3) self.assertListEqual(list1=matches_list, list2=[self.user_1, self.user_3, self.user_4]) self.assertListEqual( list1=[u.speedy_match_profile.rank for u in matches_list], list2=[5, 1, 1]) sleep(0.01) self.user_4.speedy_match_profile.update_last_visit() matches_list = SpeedyMatchSiteProfile.objects.get_matches( user=self.user_2) self.assertEqual(first=len(matches_list), second=3) self.assertListEqual(list1=matches_list, list2=[self.user_1, self.user_4, self.user_3]) self.assertListEqual( list1=[u.speedy_match_profile.rank for u in matches_list], list2=[5, 1, 1]) self.user_1.speedy_match_profile.profile_description = ( "Hi! " * 12).strip() self.user_1.save_user_and_profile() matches_list = SpeedyMatchSiteProfile.objects.get_matches( user=self.user_2) self.assertEqual(first=len(matches_list), second=3) self.assertListEqual(list1=matches_list, list2=[self.user_4, self.user_3, self.user_1]) self.assertListEqual( list1=[u.speedy_match_profile.rank for u in matches_list], list2=[1, 1, 5]) self.user_1.speedy_match_profile.profile_description = self.user_2.speedy_match_profile.profile_description self.user_1.save_user_and_profile() matches_list = SpeedyMatchSiteProfile.objects.get_matches( user=self.user_2) self.assertEqual(first=len(matches_list), second=3) self.assertListEqual(list1=matches_list, list2=[self.user_1, self.user_4, self.user_3]) self.assertListEqual( list1=[u.speedy_match_profile.rank for u in matches_list], list2=[5, 1, 1]) self.user_1.speedy_match_profile.match_description = ("Hi! " * 8).strip() self.user_1.save_user_and_profile() matches_list = SpeedyMatchSiteProfile.objects.get_matches( user=self.user_2) self.assertEqual(first=len(matches_list), second=3) self.assertListEqual(list1=matches_list, list2=[self.user_4, self.user_3, self.user_1]) self.assertListEqual( list1=[u.speedy_match_profile.rank for u in matches_list], list2=[1, 1, 5]) self.user_1.speedy_match_profile.match_description = self.user_2.speedy_match_profile.match_description self.user_1.save_user_and_profile() matches_list = SpeedyMatchSiteProfile.objects.get_matches( user=self.user_2) self.assertEqual(first=len(matches_list), second=3) self.assertListEqual(list1=matches_list, list2=[self.user_1, self.user_4, self.user_3]) self.assertListEqual( list1=[u.speedy_match_profile.rank for u in matches_list], list2=[5, 1, 1]) self.user_4.speedy_match_profile.profile_description = ( "One two three four " * 4 + " five ").strip() self.user_4.save_user_and_profile() matches_list = SpeedyMatchSiteProfile.objects.get_matches( user=self.user_2) self.assertEqual(first=len(matches_list), second=3) self.assertListEqual(list1=matches_list, list2=[self.user_1, self.user_3, self.user_4]) self.assertListEqual( list1=[u.speedy_match_profile.rank for u in matches_list], list2=[5, 1, 1]) self.user_4.speedy_match_profile.profile_description = ( "One two three four " * 3 + " five six ").strip() self.user_4.save_user_and_profile() matches_list = SpeedyMatchSiteProfile.objects.get_matches( user=self.user_2) self.assertEqual(first=len(matches_list), second=3) self.assertListEqual(list1=matches_list, list2=[self.user_1, self.user_4, self.user_3]) self.assertListEqual( list1=[u.speedy_match_profile.rank for u in matches_list], list2=[5, 1, 1]) self.user_4.speedy_match_profile.profile_description = self.user_2.speedy_match_profile.profile_description self.user_4.save_user_and_profile() matches_list = SpeedyMatchSiteProfile.objects.get_matches( user=self.user_2) self.assertEqual(first=len(matches_list), second=3) self.assertListEqual(list1=matches_list, list2=[self.user_1, self.user_4, self.user_3]) self.assertListEqual( list1=[u.speedy_match_profile.rank for u in matches_list], list2=[5, 1, 1]) self.user_4.speedy_match_profile.match_description = ( "One two three four " * 3 + " five ").strip() self.user_4.save_user_and_profile() matches_list = SpeedyMatchSiteProfile.objects.get_matches( user=self.user_2) self.assertEqual(first=len(matches_list), second=3) self.assertListEqual(list1=matches_list, list2=[self.user_1, self.user_3, self.user_4]) self.assertListEqual( list1=[u.speedy_match_profile.rank for u in matches_list], list2=[5, 1, 1]) self.user_4.speedy_match_profile.match_description = ( "One two three four " * 3 + " five six ").strip() self.user_4.save_user_and_profile() matches_list = SpeedyMatchSiteProfile.objects.get_matches( user=self.user_2) self.assertEqual(first=len(matches_list), second=3) self.assertListEqual(list1=matches_list, list2=[self.user_1, self.user_4, self.user_3]) self.assertListEqual( list1=[u.speedy_match_profile.rank for u in matches_list], list2=[5, 1, 1]) self.user_4.speedy_match_profile.match_description = self.user_2.speedy_match_profile.match_description self.user_4.save_user_and_profile() matches_list = SpeedyMatchSiteProfile.objects.get_matches( user=self.user_2) self.assertEqual(first=len(matches_list), second=3) self.assertListEqual(list1=matches_list, list2=[self.user_1, self.user_4, self.user_3]) self.assertListEqual( list1=[u.speedy_match_profile.rank for u in matches_list], list2=[5, 1, 1]) self.user_4.speedy_match_profile.profile_picture_months_offset = 25 self.user_4.save_user_and_profile() matches_list = SpeedyMatchSiteProfile.objects.get_matches( user=self.user_2) self.assertEqual(first=len(matches_list), second=3) self.assertListEqual(list1=matches_list, list2=[self.user_1, self.user_3, self.user_4]) self.assertListEqual( list1=[u.speedy_match_profile.rank for u in matches_list], list2=[5, 1, 1]) self.user_4.speedy_match_profile.profile_picture_months_offset = 0 self.user_4.save_user_and_profile() matches_list = SpeedyMatchSiteProfile.objects.get_matches( user=self.user_2) self.assertEqual(first=len(matches_list), second=3) self.assertListEqual(list1=matches_list, list2=[self.user_1, self.user_4, self.user_3]) self.assertListEqual( list1=[u.speedy_match_profile.rank for u in matches_list], list2=[5, 1, 1]) # Canceled - the order of users is now random and depends on the date and their ID. # self.user_1.date_created -= relativedelta(days=20) # self.user_2.date_created -= relativedelta(days=20) # self.user_3.date_created -= relativedelta(days=20) # self.user_4.date_created -= relativedelta(days=20) # self.user_5.date_created -= relativedelta(days=20) # self.user_1.speedy_match_profile.last_visit -= relativedelta(days=8) # self.user_2.speedy_match_profile.last_visit -= relativedelta(days=8) # self.user_3.speedy_match_profile.last_visit -= relativedelta(days=8) # self.user_4.speedy_match_profile.last_visit -= relativedelta(days=8) # self.user_5.speedy_match_profile.last_visit -= relativedelta(days=8) # self.user_1.save_user_and_profile() # self.user_2.save_user_and_profile() # self.user_3.save_user_and_profile() # self.user_4.save_user_and_profile() # self.user_5.save_user_and_profile() # matches_list = SpeedyMatchSiteProfile.objects.get_matches(user=self.user_2) # self.assertEqual(first=len(matches_list), second=3) # self.assertListEqual(list1=matches_list, list2=[self.user_1, self.user_4, self.user_3]) # self.assertListEqual(list1=[u.speedy_match_profile.rank for u in matches_list], list2=[5, 1, 1]) # today = date.today() # self.user_4.date_of_birth = today - relativedelta(years=20) # self.user_4.speedy_match_profile.height = 115 # self.user_4.save_user_and_profile() # matches_list = SpeedyMatchSiteProfile.objects.get_matches(user=self.user_2) # self.assertEqual(first=len(matches_list), second=3) # self.assertListEqual(list1=matches_list, list2=[self.user_1, self.user_3, self.user_4]) # self.assertListEqual(list1=[u.speedy_match_profile.rank for u in matches_list], list2=[5, 1, 1]) # self.user_4.speedy_match_profile.height = 240 # self.user_4.save_user_and_profile() # matches_list = SpeedyMatchSiteProfile.objects.get_matches(user=self.user_2) # self.assertEqual(first=len(matches_list), second=3) # self.assertListEqual(list1=matches_list, list2=[self.user_1, self.user_3, self.user_4]) # self.assertListEqual(list1=[u.speedy_match_profile.rank for u in matches_list], list2=[5, 1, 1]) # self.user_4.speedy_match_profile.height = 75 # self.user_4.save_user_and_profile() # matches_list = SpeedyMatchSiteProfile.objects.get_matches(user=self.user_2) # self.assertEqual(first=len(matches_list), second=2) # self.assertListEqual(list1=matches_list, list2=[self.user_1, self.user_3]) # self.assertListEqual(list1=[u.speedy_match_profile.rank for u in matches_list], list2=[5, 1]) # self.user_4.speedy_match_profile.height = 330 # self.user_4.save_user_and_profile() # matches_list = SpeedyMatchSiteProfile.objects.get_matches(user=self.user_2) # self.assertEqual(first=len(matches_list), second=2) # self.assertListEqual(list1=matches_list, list2=[self.user_1, self.user_3]) # self.assertListEqual(list1=[u.speedy_match_profile.rank for u in matches_list], list2=[5, 1]) # self.user_4.speedy_match_profile.height = 180 # self.user_4.save_user_and_profile() # matches_list = SpeedyMatchSiteProfile.objects.get_matches(user=self.user_2) # self.assertEqual(first=len(matches_list), second=3) # self.assertListEqual(list1=matches_list, list2=[self.user_1, self.user_4, self.user_3]) # self.assertListEqual(list1=[u.speedy_match_profile.rank for u in matches_list], list2=[5, 1, 1]) def test_photo_not_visible_doesnt_match_profile_in_matches_list(self): """ Test that users with invisible photos don't appear in matches list, but their matches are not affected. """ matches_list = SpeedyMatchSiteProfile.objects.get_matches( user=self.user_5) self.assertEqual(first=len(matches_list), second=4) self.assertTrue(self.user_4 in matches_list) matches_list = SpeedyMatchSiteProfile.objects.get_matches( user=self.user_4) self.assertEqual(first=len(matches_list), second=4) self.assertTrue(self.user_5 in matches_list) self.user_4.photo.visible_on_website = False self.user_4.photo.save() self.user_4.save_user_and_profile() matches_list = SpeedyMatchSiteProfile.objects.get_matches( user=self.user_5) self.assertEqual(first=len(matches_list), second=3) self.assertTrue(self.user_4 not in matches_list) matches_list = SpeedyMatchSiteProfile.objects.get_matches( user=self.user_4) self.assertEqual(first=len(matches_list), second=4) self.assertTrue(self.user_5 in matches_list) def test_cannot_delete_site_profiles_with_queryset_delete(self): with self.assertRaises(NotImplementedError) as cm: SpeedyMatchSiteProfile.objects.delete() self.assertEqual(first=str(cm.exception), second="delete is not implemented.") with self.assertRaises(NotImplementedError) as cm: SpeedyMatchSiteProfile.objects.all().delete() self.assertEqual(first=str(cm.exception), second="delete is not implemented.") with self.assertRaises(NotImplementedError) as cm: SpeedyMatchSiteProfile.objects.filter(pk=1).delete() self.assertEqual(first=str(cm.exception), second="delete is not implemented.") with self.assertRaises(NotImplementedError) as cm: SpeedyMatchSiteProfile.objects.all().exclude(pk=2).delete() self.assertEqual(first=str(cm.exception), second="delete is not implemented.")
class SendMessageToUserViewTestCaseMixin(SpeedyCoreAccountsModelsMixin, SpeedyCoreMessagesLanguageMixin): def set_up(self): super().set_up() self.user_1 = ActiveUserFactory() self.user_2 = ActiveUserFactory() self.page_url = '/messages/{}/compose/'.format(self.user_2.slug) self.data = { 'text': 'Hi Hi Hi', } def test_visitor_has_no_access(self): self.client.logout() r = self.client.get(path=self.page_url) self.assertRedirects(response=r, expected_url='/login/?next={}'.format( self.page_url), status_code=302, target_status_code=200) r = self.client.post(path=self.page_url, data=self.data) self.assertRedirects(response=r, expected_url='/login/?next={}'.format( self.page_url), status_code=302, target_status_code=200) def test_user_cannot_send_message_to_self(self): self.client.login(username=self.user_2.slug, password=tests_settings.USER_PASSWORD) r = self.client.get(path=self.page_url) self.assertEqual(first=r.status_code, second=403) r = self.client.post(path=self.page_url, data=self.data) self.assertEqual(first=r.status_code, second=403) def test_user_can_see_a_form(self): self.client.login(username=self.user_1.slug, password=tests_settings.USER_PASSWORD) r = self.client.get(path=self.page_url) self.assertEqual(first=r.status_code, second=200) self.assertTemplateUsed(response=r, template_name='messages/message_form.html') def test_user_gets_redirected_to_existing_chat(self): chat = Chat.objects.chat_with(ent1=self.user_1, ent2=self.user_2) self.client.login(username=self.user_1.slug, password=tests_settings.USER_PASSWORD) r = self.client.get(path=self.page_url) self.assertRedirects(response=r, expected_url='/messages/{}/'.format( self.user_2.slug), status_code=302, target_status_code=200) def test_user_can_submit_the_form_and_other_user_gets_notified_on_message_1( self): self.assert_models_count( entity_count=2, user_count=2, user_email_address_count=2, confirmed_email_address_count=2, unconfirmed_email_address_count=0, ) self.user_1 = User.objects.get(pk=self.user_1.pk) self.assert_user_email_addresses_count( user=self.user_1, user_email_addresses_count=1, user_primary_email_addresses_count=1, user_confirmed_email_addresses_count=1, user_unconfirmed_email_addresses_count=0, ) self.user_2 = User.objects.get(pk=self.user_2.pk) self.assert_user_email_addresses_count( user=self.user_2, user_email_addresses_count=1, user_primary_email_addresses_count=1, user_confirmed_email_addresses_count=1, user_unconfirmed_email_addresses_count=0, ) self.assertEqual(first=len(mail.outbox), second=0) self.assertEqual(first=self.user_1.notify_on_message, second=User.NOTIFICATIONS_ON) self.assertEqual(first=self.user_2.notify_on_message, second=User.NOTIFICATIONS_ON) self.client.login(username=self.user_1.slug, password=tests_settings.USER_PASSWORD) self.assertEqual(first=Message.objects.count(), second=0) r = self.client.post(path=self.page_url, data=self.data) self.assertEqual(first=Message.objects.count(), second=1) message = Message.objects.latest() chat = message.chat self.assertRedirects(response=r, expected_url='/messages/{}/'.format( chat.get_slug(current_user=self.user_1)), status_code=302, target_status_code=200) self.assertEqual(first=message.text, second='Hi Hi Hi') self.assertEqual(first=message.sender.id, second=self.user_1.id) self.assertEqual(first=chat.last_message, second=message) self.assertEqual(first=chat.ent1.id, second=self.user_1.id) self.assertEqual(first=chat.ent2.id, second=self.user_2.id) self.assertTrue(expr=chat.is_private) self.assertEqual(first=len(mail.outbox), second=1) self.assertEqual( first=mail.outbox[0].subject, second={ django_settings.SPEEDY_NET_SITE_ID: self._you_have_a_new_message_on_speedy_net_subject, django_settings.SPEEDY_MATCH_SITE_ID: self._you_have_a_new_message_on_speedy_match_subject, }[self.site.id]) def test_user_can_submit_the_form_and_other_user_gets_notified_on_message_2( self): self.assert_models_count( entity_count=2, user_count=2, user_email_address_count=2, confirmed_email_address_count=2, unconfirmed_email_address_count=0, ) self.user_1 = User.objects.get(pk=self.user_1.pk) self.assert_user_email_addresses_count( user=self.user_1, user_email_addresses_count=1, user_primary_email_addresses_count=1, user_confirmed_email_addresses_count=1, user_unconfirmed_email_addresses_count=0, ) self.user_2 = User.objects.get(pk=self.user_2.pk) self.assert_user_email_addresses_count( user=self.user_2, user_email_addresses_count=1, user_primary_email_addresses_count=1, user_confirmed_email_addresses_count=1, user_unconfirmed_email_addresses_count=0, ) self.assertEqual(first=len(mail.outbox), second=0) self.assertEqual(first=self.user_1.notify_on_message, second=User.NOTIFICATIONS_ON) self.assertEqual(first=self.user_2.notify_on_message, second=User.NOTIFICATIONS_ON) self.client.login(username=self.user_1.slug, password=tests_settings.USER_PASSWORD) self.assertEqual(first=Message.objects.count(), second=0) data = self.data.copy() data['text'] = "a" * 50000 r = self.client.post(path=self.page_url, data=data) self.assertEqual(first=Message.objects.count(), second=1) message = Message.objects.latest() chat = message.chat self.assertRedirects(response=r, expected_url='/messages/{}/'.format( chat.get_slug(current_user=self.user_1)), status_code=302, target_status_code=200) self.assertEqual(first=message.text, second="a" * 50000) self.assertEqual(first=message.sender.id, second=self.user_1.id) self.assertEqual(first=chat.last_message, second=message) self.assertEqual(first=chat.ent1.id, second=self.user_1.id) self.assertEqual(first=chat.ent2.id, second=self.user_2.id) self.assertTrue(expr=chat.is_private) self.assertEqual(first=len(mail.outbox), second=1) self.assertEqual( first=mail.outbox[0].subject, second={ django_settings.SPEEDY_NET_SITE_ID: self._you_have_a_new_message_on_speedy_net_subject, django_settings.SPEEDY_MATCH_SITE_ID: self._you_have_a_new_message_on_speedy_match_subject, }[self.site.id]) def test_user_can_submit_the_form_and_other_user_doesnt_get_notified_on_message( self): self.assert_models_count( entity_count=2, user_count=2, user_email_address_count=2, confirmed_email_address_count=2, unconfirmed_email_address_count=0, ) self.user_1 = User.objects.get(pk=self.user_1.pk) self.assert_user_email_addresses_count( user=self.user_1, user_email_addresses_count=1, user_primary_email_addresses_count=1, user_confirmed_email_addresses_count=1, user_unconfirmed_email_addresses_count=0, ) self.user_2 = User.objects.get(pk=self.user_2.pk) self.assert_user_email_addresses_count( user=self.user_2, user_email_addresses_count=1, user_primary_email_addresses_count=1, user_confirmed_email_addresses_count=1, user_unconfirmed_email_addresses_count=0, ) self.assertEqual(first=len(mail.outbox), second=0) self.user_2.notify_on_message = User.NOTIFICATIONS_OFF self.user_2.save_user_and_profile() self.assertEqual(first=self.user_1.notify_on_message, second=User.NOTIFICATIONS_ON) self.assertEqual(first=self.user_2.notify_on_message, second=User.NOTIFICATIONS_OFF) self.client.login(username=self.user_1.slug, password=tests_settings.USER_PASSWORD) self.assertEqual(first=Message.objects.count(), second=0) r = self.client.post(path=self.page_url, data=self.data) self.assertEqual(first=Message.objects.count(), second=1) message = Message.objects.latest() chat = message.chat self.assertRedirects(response=r, expected_url='/messages/{}/'.format( chat.get_slug(current_user=self.user_1)), status_code=302, target_status_code=200) self.assertEqual(first=message.text, second='Hi Hi Hi') self.assertEqual(first=message.sender.id, second=self.user_1.id) self.assertEqual(first=chat.last_message, second=message) self.assertEqual(first=chat.ent1.id, second=self.user_1.id) self.assertEqual(first=chat.ent2.id, second=self.user_2.id) self.assertTrue(expr=chat.is_private) self.assertEqual(first=len(mail.outbox), second=0) def test_user_cannot_submit_the_form_with_text_too_long_1(self): self.client.login(username=self.user_1.slug, password=tests_settings.USER_PASSWORD) self.assertEqual(first=Message.objects.count(), second=0) data = self.data.copy() data['text'] = "a" * 50001 r = self.client.post(path=self.page_url, data=data) self.assertEqual(first=r.status_code, second=200) self.assertDictEqual( d1=r.context['form'].errors, d2=self. _ensure_this_value_has_at_most_max_length_characters_errors_dict_by_value_length( value_length=50001)) self.assertEqual(first=Message.objects.count(), second=0) def test_user_cannot_submit_the_form_with_text_too_long_2(self): self.client.login(username=self.user_1.slug, password=tests_settings.USER_PASSWORD) self.assertEqual(first=Message.objects.count(), second=0) data = self.data.copy() data['text'] = "b" * 1000000 r = self.client.post(path=self.page_url, data=data) self.assertEqual(first=r.status_code, second=200) self.assertDictEqual( d1=r.context['form'].errors, d2=self. _ensure_this_value_has_at_most_max_length_characters_errors_dict_by_value_length( value_length=1000000)) self.assertEqual(first=Message.objects.count(), second=0)
class SendMessageRulesTestCase(SiteTestCase): def set_up(self): super().set_up() self.user_1 = ActiveUserFactory() self.user_2 = ActiveUserFactory() def _create_users(self, users_count): for i in range(users_count): setattr(self, "user_{}".format(3 + i), ActiveUserFactory()) def test_cannot_send_message_to_self(self): self.assertFalse(expr=self.user_1.has_perm(perm='messages.send_message', obj=self.user_1)) self.assertFalse(expr=self.user_1.has_perm(perm='messages.view_send_message_button', obj=self.user_1)) def test_can_send_message_to_other_user(self): self.assertTrue(expr=self.user_1.has_perm(perm='messages.send_message', obj=self.user_2)) self.assertTrue(expr=self.user_1.has_perm(perm='messages.view_send_message_button', obj=self.user_2)) def test_cannot_send_message_to_other_user_if_blocked(self): Block.objects.block(blocker=self.user_2, blocked=self.user_1) self.assertFalse(expr=self.user_1.has_perm(perm='messages.send_message', obj=self.user_2)) self.assertFalse(expr=self.user_2.has_perm(perm='messages.send_message', obj=self.user_1)) self.assertFalse(expr=self.user_1.has_perm(perm='messages.view_send_message_button', obj=self.user_2)) self.assertFalse(expr=self.user_2.has_perm(perm='messages.view_send_message_button', obj=self.user_1)) def test_can_send_message_to_other_user_if_didnt_send_too_many_emails_1(self): self._create_users(users_count=6) chats = dict() for i in range(4): chats[str(i)] = ChatFactory(ent1=self.user_1, ent2=getattr(self, "user_{}".format(3 + i))) Message.objects.send_message(from_entity=self.user_1, chat=chats[str(i)], text='*****@*****.**') sleep(0.01) self.assertTrue(expr=self.user_1.has_perm(perm='messages.send_message', obj=self.user_2)) self.assertTrue(expr=self.user_1.has_perm(perm='messages.send_message', obj=self.user_3)) self.assertTrue(expr=self.user_1.has_perm(perm='messages.view_send_message_button', obj=self.user_2)) self.assertTrue(expr=self.user_1.has_perm(perm='messages.view_send_message_button', obj=self.user_3)) def test_can_send_message_to_other_user_if_didnt_send_too_many_emails_2(self): self._create_users(users_count=6) chats = dict() for i in range(5): chats[str(i)] = ChatFactory(ent1=self.user_1, ent2=getattr(self, "user_{}".format(3 + i))) Message.objects.send_message(from_entity=self.user_1, chat=chats[str(i)], text='Hello!') sleep(0.01) self.assertTrue(expr=self.user_1.has_perm(perm='messages.send_message', obj=self.user_2)) self.assertTrue(expr=self.user_1.has_perm(perm='messages.send_message', obj=self.user_3)) self.assertTrue(expr=self.user_1.has_perm(perm='messages.view_send_message_button', obj=self.user_2)) self.assertTrue(expr=self.user_1.has_perm(perm='messages.view_send_message_button', obj=self.user_3)) def test_cannot_send_message_to_other_user_if_sent_too_many_emails_1(self): self._create_users(users_count=6) chats = dict() for i in range(5): chats[str(i)] = ChatFactory(ent1=self.user_1, ent2=getattr(self, "user_{}".format(3 + i))) Message.objects.send_message(from_entity=self.user_1, chat=chats[str(i)], text='*****@*****.**') sleep(0.01) self.assertFalse(expr=self.user_1.has_perm(perm='messages.send_message', obj=self.user_2)) self.assertTrue(expr=self.user_1.has_perm(perm='messages.send_message', obj=self.user_3)) self.assertTrue(expr=self.user_1.has_perm(perm='messages.view_send_message_button', obj=self.user_2)) self.assertTrue(expr=self.user_1.has_perm(perm='messages.view_send_message_button', obj=self.user_3)) Message.objects.send_message(from_entity=self.user_7, chat=chats[str(4)], text='Hello!') self.assertTrue(expr=self.user_1.has_perm(perm='messages.send_message', obj=self.user_2)) self.assertTrue(expr=self.user_1.has_perm(perm='messages.send_message', obj=self.user_3)) self.assertTrue(expr=self.user_1.has_perm(perm='messages.view_send_message_button', obj=self.user_2)) self.assertTrue(expr=self.user_1.has_perm(perm='messages.view_send_message_button', obj=self.user_3)) chats[str(5)] = ChatFactory(ent1=self.user_1, ent2=self.user_8) Message.objects.send_message(from_entity=self.user_1, chat=chats[str(5)], text='Hello!') self.assertTrue(expr=self.user_1.has_perm(perm='messages.send_message', obj=self.user_2)) self.assertTrue(expr=self.user_1.has_perm(perm='messages.send_message', obj=self.user_3)) self.assertTrue(expr=self.user_1.has_perm(perm='messages.view_send_message_button', obj=self.user_2)) self.assertTrue(expr=self.user_1.has_perm(perm='messages.view_send_message_button', obj=self.user_3)) Message.objects.send_message(from_entity=self.user_1, chat=chats[str(5)], text='*****@*****.**') self.assertFalse(expr=self.user_1.has_perm(perm='messages.send_message', obj=self.user_2)) self.assertTrue(expr=self.user_1.has_perm(perm='messages.send_message', obj=self.user_3)) self.assertTrue(expr=self.user_1.has_perm(perm='messages.view_send_message_button', obj=self.user_2)) self.assertTrue(expr=self.user_1.has_perm(perm='messages.view_send_message_button', obj=self.user_3)) Message.objects.send_message(from_entity=self.user_8, chat=chats[str(5)], text='Hi.') self.assertTrue(expr=self.user_1.has_perm(perm='messages.send_message', obj=self.user_2)) self.assertTrue(expr=self.user_1.has_perm(perm='messages.send_message', obj=self.user_3)) self.assertTrue(expr=self.user_1.has_perm(perm='messages.view_send_message_button', obj=self.user_2)) self.assertTrue(expr=self.user_1.has_perm(perm='messages.view_send_message_button', obj=self.user_3)) def test_cannot_send_message_to_other_user_if_sent_too_many_emails_2(self): self._create_users(users_count=20) chats = dict() for i in range(4): chats[str(i)] = ChatFactory(ent1=self.user_1, ent2=getattr(self, "user_{}".format(3 + i))) Message.objects.send_message(from_entity=self.user_1, chat=chats[str(i)], text='*****@*****.**') sleep(0.01) self.assertTrue(expr=self.user_1.has_perm(perm='messages.send_message', obj=self.user_2)) self.assertTrue(expr=self.user_1.has_perm(perm='messages.send_message', obj=self.user_3)) self.assertTrue(expr=self.user_1.has_perm(perm='messages.view_send_message_button', obj=self.user_2)) self.assertTrue(expr=self.user_1.has_perm(perm='messages.view_send_message_button', obj=self.user_3)) for i in range(15): chats[str(4 + i)] = ChatFactory(ent1=self.user_1, ent2=getattr(self, "user_{}".format(4 + 3 + i))) Message.objects.send_message(from_entity=self.user_1, chat=chats[str(4 + i)], text='*****@*****.**') sleep(0.01) self.assertFalse(expr=self.user_1.has_perm(perm='messages.send_message', obj=self.user_2)) self.assertTrue(expr=self.user_1.has_perm(perm='messages.send_message', obj=self.user_3)) self.assertTrue(expr=self.user_1.has_perm(perm='messages.view_send_message_button', obj=self.user_2)) self.assertTrue(expr=self.user_1.has_perm(perm='messages.view_send_message_button', obj=self.user_3)) for i in range(4): Message.objects.send_message(from_entity=getattr(self, "user_{}".format(3 + i)), chat=chats[str(i)], text='Hello!') sleep(0.01) self.assertFalse(expr=self.user_1.has_perm(perm='messages.send_message', obj=self.user_2)) self.assertTrue(expr=self.user_1.has_perm(perm='messages.send_message', obj=self.user_3)) self.assertTrue(expr=self.user_1.has_perm(perm='messages.view_send_message_button', obj=self.user_2)) self.assertTrue(expr=self.user_1.has_perm(perm='messages.view_send_message_button', obj=self.user_3)) for i in range(12): Message.objects.send_message(from_entity=getattr(self, "user_{}".format(4 + 3 + i)), chat=chats[str(4 + i)], text='Hello!') sleep(0.01) self.assertTrue(expr=self.user_1.has_perm(perm='messages.send_message', obj=self.user_2)) self.assertTrue(expr=self.user_1.has_perm(perm='messages.send_message', obj=self.user_3)) self.assertTrue(expr=self.user_1.has_perm(perm='messages.view_send_message_button', obj=self.user_2)) self.assertTrue(expr=self.user_1.has_perm(perm='messages.view_send_message_button', obj=self.user_3)) def test_cannot_send_message_to_other_user_if_sent_too_many_emails_3(self): self._create_users(users_count=30) self.user_1.date_created -= relativedelta(days=30) self.user_1.save_user_and_profile() chats = dict() for i in range(19): chats[str(i)] = ChatFactory(ent1=self.user_1, ent2=getattr(self, "user_{}".format(3 + i))) Message.objects.send_message(from_entity=self.user_1, chat=chats[str(i)], text='*****@*****.**') sleep(0.01) self.assertTrue(expr=self.user_1.has_perm(perm='messages.send_message', obj=self.user_2)) self.assertTrue(expr=self.user_1.has_perm(perm='messages.send_message', obj=self.user_3)) self.assertTrue(expr=self.user_1.has_perm(perm='messages.view_send_message_button', obj=self.user_2)) self.assertTrue(expr=self.user_1.has_perm(perm='messages.view_send_message_button', obj=self.user_3)) for i in range(5): chats[str(19 + i)] = ChatFactory(ent1=self.user_1, ent2=getattr(self, "user_{}".format(19 + 3 + i))) Message.objects.send_message(from_entity=self.user_1, chat=chats[str(19 + i)], text='*****@*****.**') sleep(0.01) self.assertFalse(expr=self.user_1.has_perm(perm='messages.send_message', obj=self.user_2)) self.assertTrue(expr=self.user_1.has_perm(perm='messages.send_message', obj=self.user_3)) self.assertTrue(expr=self.user_1.has_perm(perm='messages.view_send_message_button', obj=self.user_2)) self.assertTrue(expr=self.user_1.has_perm(perm='messages.view_send_message_button', obj=self.user_3))
def get_active_user_jennifer(self): user = ActiveUserFactory(first_name_en="Jennifer", last_name_en="Connelly", slug="jennifer-connelly", gender=User.GENDER_FEMALE) user.save_user_and_profile() return user
def get_active_user_doron(self): user = ActiveUserFactory(first_name_en="Doron", last_name_en="Matalon", slug="doron-matalon", gender=User.GENDER_FEMALE) user.speedy_match_profile.gender_to_match = [User.GENDER_MALE] user.save_user_and_profile() return user
class UserDetailViewTestCaseMixin(object): def set_up(self): super().set_up() self.random_choice = random.choice([1, 2]) if (self.random_choice == 1): self.user = ActiveUserFactory(first_name_en="Corrin", last_name_en="Gideon", slug="corrin-gideon", date_of_birth=date(year=1992, month=9, day=12), gender=User.GENDER_FEMALE) self.user.first_name_he = "קורין" self.user.last_name_he = "גדעון" elif (self.random_choice == 2): self.user = ActiveUserFactory(first_name_en="Jennifer", last_name_en="Connelly", slug="jennifer-connelly", date_of_birth=date(year=1978, month=1, day=31), gender=User.GENDER_FEMALE) self.user.first_name_he = "ג'ניפר" self.user.last_name_he = "קונלי" else: raise NotImplementedError() self.user.save() self.user_profile_url = '/{}/'.format(self.user.slug) self.other_user = ActiveUserFactory() def deactivate_user(self): self.user.is_active = False self.user.save() def test_user_profile_not_logged_in(self): r = self.client.get(path=self.user_profile_url) if (django_settings.SITE_ID == django_settings.SPEEDY_NET_SITE_ID): # First, check if the date of birth is not visible. self.assertEqual(first=r.status_code, second=200) self.assertIn(member=escape(self.full_name), container=r.content.decode()) self.assertIn(member="<title>{}</title>".format( escape(self.expected_title[self.site.id])), container=r.content.decode()) self.assertNotIn(member=escape(self.birth_date), container=r.content.decode()) self.assertNotIn(member=escape(self.birth_year), container=r.content.decode()) self.assertNotIn(member=escape(self.user_birth_date), container=r.content.decode()) # Now, check if the date of birth is visible. self.user.access_dob_day_month = UserAccessField.ACCESS_ANYONE self.user.access_dob_year = UserAccessField.ACCESS_ANYONE self.user.save() r = self.client.get(path=self.user_profile_url) self.assertEqual(first=r.status_code, second=200) self.assertIn(member="<title>{}</title>".format( escape(self.expected_title[self.site.id])), container=r.content.decode()) self.assertIn(member=escape(self.birth_date), container=r.content.decode()) self.assertNotIn(member=escape(self.birth_year), container=r.content.decode()) self.assertIn(member=escape(self.user_birth_year), container=r.content.decode()) self.assertIn(member=escape(self.user_birth_date), container=r.content.decode()) self.assertNotIn(member=escape(self.not_user_birth_date), container=r.content.decode()) elif (django_settings.SITE_ID == django_settings.SPEEDY_MATCH_SITE_ID): expected_url = '/login/?next={}'.format(self.user_profile_url) self.assertRedirects(response=r, expected_url=expected_url, status_code=302, target_status_code=200) else: raise NotImplementedError() self.deactivate_user() r = self.client.get(path=self.user_profile_url) if (django_settings.SITE_ID == django_settings.SPEEDY_NET_SITE_ID): self.assertEqual(first=r.status_code, second=404) self.assertIn(member="<title>{}</title>".format( escape(self.expected_404_title[self.site.id])), container=r.content.decode()) self.assertIn(member=escape(self.expected_404_speedy_is_sorry), container=r.content.decode()) elif (django_settings.SITE_ID == django_settings.SPEEDY_MATCH_SITE_ID): expected_url = '/login/?next={}'.format(self.user_profile_url) self.assertRedirects(response=r, expected_url=expected_url, status_code=302, target_status_code=200) else: raise NotImplementedError() def test_user_own_profile_logged_in(self): self.client.login(username=self.user.slug, password=tests_settings.USER_PASSWORD) r = self.client.get(path=self.user_profile_url) self.assertEqual(first=r.status_code, second=200) self.assertIn(member=escape(self.first_name), container=r.content.decode()) if (django_settings.SITE_ID == django_settings.SPEEDY_NET_SITE_ID): self.assertIn(member=escape(self.full_name), container=r.content.decode()) elif (django_settings.SITE_ID == django_settings.SPEEDY_MATCH_SITE_ID): self.assertNotIn(member=escape(self.full_name), container=r.content.decode()) else: raise NotImplementedError() self.assertIn(member="<title>{}</title>".format( escape(self.expected_title[self.site.id])), container=r.content.decode()) self.assertIn(member=escape(self.birth_date), container=r.content.decode()) self.assertNotIn(member=escape(self.birth_year), container=r.content.decode()) self.assertIn(member=escape(self.user_birth_year), container=r.content.decode()) self.assertIn(member=escape(self.user_birth_date), container=r.content.decode()) self.assertNotIn(member=escape(self.not_user_birth_date), container=r.content.decode()) self.deactivate_user() r = self.client.get(path=self.user_profile_url) if (django_settings.SITE_ID == django_settings.SPEEDY_NET_SITE_ID): # ~~~~ TODO: should redirect to '/welcome/'. self.assertEqual(first=r.status_code, second=404) self.assertIn(member="<title>{}</title>".format( escape(self.expected_404_title[self.site.id])), container=r.content.decode()) self.assertIn(member=escape(self.expected_404_speedy_is_sorry), container=r.content.decode()) elif (django_settings.SITE_ID == django_settings.SPEEDY_MATCH_SITE_ID): expected_url = '/welcome/' self.assertRedirects(response=r, expected_url=expected_url, status_code=302, target_status_code=200) else: raise NotImplementedError() def test_user_profile_month_day_format_from_friend(self): # First, check if only the day and month are visible. self.user.access_dob_day_month = UserAccessField.ACCESS_FRIENDS self.user.save() Friend.objects.add_friend(from_user=self.user, to_user=self.other_user).accept() self.assertTrue(expr=Friend.objects.are_friends( user1=self.user, user2=self.other_user)) self.client.login(username=self.other_user.slug, password=tests_settings.USER_PASSWORD) r = self.client.get(path=self.user_profile_url) self.assertEqual(first=r.status_code, second=200) self.assertIn(member=escape(self.first_name), container=r.content.decode()) if (django_settings.SITE_ID == django_settings.SPEEDY_NET_SITE_ID): self.assertIn(member=escape(self.full_name), container=r.content.decode()) elif (django_settings.SITE_ID == django_settings.SPEEDY_MATCH_SITE_ID): self.assertNotIn(member=escape(self.full_name), container=r.content.decode()) else: raise NotImplementedError() self.assertIn(member="<title>{}</title>".format( escape(self.expected_title[self.site.id])), container=r.content.decode()) self.assertIn(member=escape(self.birth_date), container=r.content.decode()) self.assertNotIn(member=escape(self.birth_year), container=r.content.decode()) self.assertIn(member=escape(self.user_birth_month_day), container=r.content.decode()) self.assertNotIn(member=escape(self.user_birth_date), container=r.content.decode()) self.assertNotIn(member=escape(self.not_user_birth_month_day), container=r.content.decode()) self.assertNotIn(member=escape(self.not_user_birth_date), container=r.content.decode()) # Then, check if all the birth date is visible. self.user.access_dob_year = UserAccessField.ACCESS_FRIENDS self.user.save() r = self.client.get(path=self.user_profile_url) self.assertEqual(first=r.status_code, second=200) self.assertIn(member="<title>{}</title>".format( escape(self.expected_title[self.site.id])), container=r.content.decode()) self.assertIn(member=escape(self.birth_date), container=r.content.decode()) self.assertNotIn(member=escape(self.birth_year), container=r.content.decode()) self.assertIn(member=escape(self.user_birth_month_day), container=r.content.decode()) self.assertIn(member=escape(self.user_birth_year), container=r.content.decode()) self.assertIn(member=escape(self.user_birth_date), container=r.content.decode()) self.assertNotIn(member=escape(self.not_user_birth_month_day), container=r.content.decode()) self.assertNotIn(member=escape(self.not_user_birth_date), container=r.content.decode()) # Then, check if only the year is visible. self.user.access_dob_day_month = UserAccessField.ACCESS_ME self.user.save() r = self.client.get(path=self.user_profile_url) self.assertEqual(first=r.status_code, second=200) self.assertIn(member="<title>{}</title>".format( escape(self.expected_title[self.site.id])), container=r.content.decode()) self.assertNotIn(member=escape(self.birth_date), container=r.content.decode()) self.assertIn(member=escape(self.birth_year), container=r.content.decode()) self.assertNotIn(member=escape(self.user_birth_month_day), container=r.content.decode()) self.assertIn(member=escape(self.user_birth_year), container=r.content.decode()) self.assertNotIn(member=escape(self.user_birth_date), container=r.content.decode()) self.assertNotIn(member=escape(self.not_user_birth_month_day), container=r.content.decode()) self.assertNotIn(member=escape(self.not_user_birth_date), container=r.content.decode()) # Then logout and check that nothing from the date of birth is visible on Speedy Net. # On Speedy Match, the profile is not visible to visitors at all. self.client.logout() r = self.client.get(path=self.user_profile_url) if (django_settings.SITE_ID == django_settings.SPEEDY_NET_SITE_ID): self.assertEqual(first=r.status_code, second=200) self.assertIn(member="<title>{}</title>".format( escape(self.expected_title[self.site.id])), container=r.content.decode()) self.assertNotIn(member=escape(self.birth_date), container=r.content.decode()) self.assertNotIn(member=escape(self.birth_year), container=r.content.decode()) self.assertNotIn(member=escape(self.user_birth_month_day), container=r.content.decode()) self.assertNotIn(member=escape(self.user_birth_date), container=r.content.decode()) self.assertNotIn(member=escape(self.not_user_birth_month_day), container=r.content.decode()) self.assertNotIn(member=escape(self.not_user_birth_date), container=r.content.decode()) # And then, check if only the day and month are visible again. self.user.access_dob_day_month = UserAccessField.ACCESS_ANYONE self.user.save() r = self.client.get(path=self.user_profile_url) self.assertEqual(first=r.status_code, second=200) self.assertIn(member="<title>{}</title>".format( escape(self.expected_title[self.site.id])), container=r.content.decode()) self.assertIn(member=escape(self.birth_date), container=r.content.decode()) self.assertNotIn(member=escape(self.birth_year), container=r.content.decode()) self.assertIn(member=escape(self.user_birth_month_day), container=r.content.decode()) self.assertNotIn(member=escape(self.user_birth_date), container=r.content.decode()) self.assertNotIn(member=escape(self.not_user_birth_month_day), container=r.content.decode()) self.assertNotIn(member=escape(self.not_user_birth_date), container=r.content.decode()) elif (django_settings.SITE_ID == django_settings.SPEEDY_MATCH_SITE_ID): expected_url = '/login/?next={}'.format(self.user_profile_url) self.assertRedirects(response=r, expected_url=expected_url, status_code=302, target_status_code=200) else: raise NotImplementedError() self.client.login(username=self.other_user.slug, password=tests_settings.USER_PASSWORD) if (django_settings.SITE_ID == django_settings.SPEEDY_MATCH_SITE_ID ): self.other_user.speedy_match_profile.min_age_to_match = 80 self.other_user.save_user_and_profile() r = self.client.get(path=self.user_profile_url) self.assertEqual(first=r.status_code, second=404) self.assertNotIn(member="<title>{}</title>".format( escape(self.expected_title[self.site.id])), container=r.content.decode()) self.assertIn(member="<title>{}</title>".format( escape(self.expected_title_no_match[self.site.id])), container=r.content.decode()) self.other_user.speedy_match_profile.min_age_to_match = 36 self.other_user.save_user_and_profile() r = self.client.get(path=self.user_profile_url) if (self.random_choice == 1): self.assertEqual(first=self.user.slug, second="corrin-gideon") self.assertEqual(first=r.status_code, second=404) self.assertNotIn(member="<title>{}</title>".format( escape(self.expected_title[self.site.id])), container=r.content.decode()) self.assertIn(member="<title>{}</title>".format( escape(self.expected_title_no_match[self.site.id])), container=r.content.decode()) elif (self.random_choice == 2): self.assertEqual(first=self.user.slug, second="jennifer-connelly") self.assertEqual(first=r.status_code, second=200) self.assertNotIn(member="<title>{}</title>".format( escape(self.expected_title_no_match[self.site.id])), container=r.content.decode()) self.assertIn(member="<title>{}</title>".format( escape(self.expected_title[self.site.id])), container=r.content.decode()) else: raise NotImplementedError() self.other_user.speedy_match_profile.min_age_to_match = 12 self.other_user.save_user_and_profile() r = self.client.get(path=self.user_profile_url) self.assertEqual(first=r.status_code, second=200) self.assertNotIn(member="<title>{}</title>".format( escape(self.expected_title_no_match[self.site.id])), container=r.content.decode()) self.assertIn(member="<title>{}</title>".format( escape(self.expected_title[self.site.id])), container=r.content.decode()) self.deactivate_user() r = self.client.get(path=self.user_profile_url) self.assertEqual(first=r.status_code, second=404) self.assertNotIn(member="<title>{}</title>".format( escape(self.expected_title[self.site.id])), container=r.content.decode()) if (django_settings.SITE_ID == django_settings.SPEEDY_MATCH_SITE_ID ): self.assertNotIn(member="<title>{}</title>".format( escape(self.expected_title_no_match[self.site.id])), container=r.content.decode()) self.assertIn(member="<title>{}</title>".format( escape(self.expected_404_title[self.site.id])), container=r.content.decode()) self.assertIn(member=escape(self.expected_404_speedy_is_sorry), container=r.content.decode()) def test_user_profile_deactivated_user_from_friend(self): Friend.objects.add_friend(from_user=self.user, to_user=self.other_user).accept() self.assertTrue(expr=Friend.objects.are_friends( user1=self.user, user2=self.other_user)) self.client.login(username=self.other_user.slug, password=tests_settings.USER_PASSWORD) self.deactivate_user() r = self.client.get(path=self.user_profile_url) self.assertEqual(first=r.status_code, second=404) self.assertIn(member="<title>{}</title>".format( escape(self.expected_404_title[self.site.id])), container=r.content.decode()) self.assertIn(member=escape(self.expected_404_speedy_is_sorry), container=r.content.decode())
class FriendListsTestCase(SiteTestCase): def set_up(self): super().set_up() self.user_1 = ActiveUserFactory() self.user_2 = ActiveUserFactory() self.user_3 = ActiveUserFactory() self.user_4 = ActiveUserFactory() self.user_5 = ActiveUserFactory() self.user_6 = ActiveUserFactory() self.user_1.relationship_status = User.RELATIONSHIP_STATUS_MARRIED self.user_2.speedy_match_profile.diet_match = { str(User.DIET_VEGAN): 5, str(User.DIET_VEGETARIAN): 4, str(User.DIET_CARNIST): 2 } self.user_5.speedy_match_profile.relationship_status_match[str( User.RELATIONSHIP_STATUS_MARRIED )] = SpeedyMatchSiteProfile.RANK_0 self.user_1.save_user_and_profile() self.user_2.save_user_and_profile() self.user_5.save_user_and_profile() sleep(0.02) self.user_6.profile.update_last_visit() sleep(0.01) self.user_4.profile.update_last_visit() sleep(0.01) self.user_3.profile.update_last_visit() sleep(0.01) self.user_2.profile.update_last_visit() def test_site_all_friends_list(self): Friend.objects.add_friend(from_user=self.user_1, to_user=self.user_5).accept() Friend.objects.add_friend(from_user=self.user_1, to_user=self.user_4).accept() Friend.objects.add_friend(from_user=self.user_3, to_user=self.user_1).accept() Friend.objects.add_friend(from_user=self.user_1, to_user=self.user_2) self.user_1 = User.objects.get(pk=self.user_1.pk) self.assertTrue( expr=all([(friendship.to_user == self.user_1) for friendship in self.user_1.all_friends])) users_list = [ friendship.from_user for friendship in self.user_1.all_friends ] self.assertEqual(first=len(users_list), second=len(self.user_1.all_friends)) self.assertEqual(first=len(users_list), second={ django_settings.SPEEDY_NET_SITE_ID: 3, django_settings.SPEEDY_MATCH_SITE_ID: 2 }[self.site.id]) self.assertEqual(first=users_list, second={ django_settings.SPEEDY_NET_SITE_ID: [self.user_3, self.user_4, self.user_5], django_settings.SPEEDY_MATCH_SITE_ID: [self.user_3, self.user_4] }[self.site.id]) self.assertTrue(expr=all([(friendship.to_user == self.user_1) for friendship in self.user_1.all_speedy_net_friends])) users_list = [ friendship.from_user for friendship in self.user_1.all_speedy_net_friends ] self.assertEqual(first=len(users_list), second=len(self.user_1.all_speedy_net_friends)) self.assertEqual(first=len(users_list), second=3) self.assertEqual(first=users_list, second=[self.user_3, self.user_4, self.user_5]) if (django_settings.SITE_ID == django_settings.SPEEDY_NET_SITE_ID): self.assertEqual(first=self.user_1.all_friends, second=self.user_1.all_speedy_net_friends) elif (django_settings.SITE_ID == django_settings.SPEEDY_MATCH_SITE_ID): self.assertNotEqual(first=self.user_1.all_friends, second=self.user_1.all_speedy_net_friends) else: raise NotImplementedError() sleep(0.01) self.user_5.profile.update_last_visit() self.user_1 = User.objects.get(pk=self.user_1.pk) self.assertTrue( expr=all([(friendship.to_user == self.user_1) for friendship in self.user_1.all_friends])) users_list = [ friendship.from_user for friendship in self.user_1.all_friends ] self.assertEqual(first=len(users_list), second=len(self.user_1.all_friends)) self.assertEqual(first=len(users_list), second={ django_settings.SPEEDY_NET_SITE_ID: 3, django_settings.SPEEDY_MATCH_SITE_ID: 2 }[self.site.id]) self.assertEqual(first=users_list, second={ django_settings.SPEEDY_NET_SITE_ID: [self.user_5, self.user_3, self.user_4], django_settings.SPEEDY_MATCH_SITE_ID: [self.user_3, self.user_4] }[self.site.id]) self.assertTrue(expr=all([(friendship.to_user == self.user_1) for friendship in self.user_1.all_speedy_net_friends])) users_list = [ friendship.from_user for friendship in self.user_1.all_speedy_net_friends ] self.assertEqual(first=len(users_list), second=len(self.user_1.all_speedy_net_friends)) self.assertEqual(first=len(users_list), second=3) self.assertEqual(first=users_list, second=[self.user_5, self.user_3, self.user_4]) if (django_settings.SITE_ID == django_settings.SPEEDY_NET_SITE_ID): self.assertEqual(first=self.user_1.all_friends, second=self.user_1.all_speedy_net_friends) elif (django_settings.SITE_ID == django_settings.SPEEDY_MATCH_SITE_ID): self.assertNotEqual(first=self.user_1.all_friends, second=self.user_1.all_speedy_net_friends) else: raise NotImplementedError() def test_site_received_friendship_requests_list(self): Friend.objects.add_friend(from_user=self.user_5, to_user=self.user_1) Friend.objects.add_friend(from_user=self.user_4, to_user=self.user_1).accept() Friend.objects.add_friend(from_user=self.user_3, to_user=self.user_1) Friend.objects.add_friend(from_user=self.user_1, to_user=self.user_2) Friend.objects.add_friend(from_user=self.user_6, to_user=self.user_1) self.user_1 = User.objects.get(pk=self.user_1.pk) self.assertTrue( expr=all([(friendship_request.to_user == self.user_1) for friendship_request in self.user_1.received_friendship_requests])) users_list = [ friendship_request.from_user for friendship_request in self.user_1.received_friendship_requests ] self.assertEqual(first=len(users_list), second=len( self.user_1.received_friendship_requests)) self.assertEqual(first=len(users_list), second={ django_settings.SPEEDY_NET_SITE_ID: 3, django_settings.SPEEDY_MATCH_SITE_ID: 2 }[self.site.id]) self.assertEqual(first=users_list, second={ django_settings.SPEEDY_NET_SITE_ID: [self.user_3, self.user_6, self.user_5], django_settings.SPEEDY_MATCH_SITE_ID: [self.user_3, self.user_6] }[self.site.id]) sleep(0.01) self.user_5.profile.update_last_visit() self.user_1 = User.objects.get(pk=self.user_1.pk) self.assertTrue( expr=all([(friendship_request.to_user == self.user_1) for friendship_request in self.user_1.received_friendship_requests])) users_list = [ friendship_request.from_user for friendship_request in self.user_1.received_friendship_requests ] self.assertEqual(first=len(users_list), second=len( self.user_1.received_friendship_requests)) self.assertEqual(first=len(users_list), second={ django_settings.SPEEDY_NET_SITE_ID: 3, django_settings.SPEEDY_MATCH_SITE_ID: 2 }[self.site.id]) self.assertEqual(first=users_list, second={ django_settings.SPEEDY_NET_SITE_ID: [self.user_5, self.user_3, self.user_6], django_settings.SPEEDY_MATCH_SITE_ID: [self.user_3, self.user_6] }[self.site.id]) def test_site_sent_friendship_requests_list(self): Friend.objects.add_friend(from_user=self.user_1, to_user=self.user_5) Friend.objects.add_friend(from_user=self.user_1, to_user=self.user_4).accept() Friend.objects.add_friend(from_user=self.user_3, to_user=self.user_1) Friend.objects.add_friend(from_user=self.user_1, to_user=self.user_2) Friend.objects.add_friend(from_user=self.user_1, to_user=self.user_6) self.user_1 = User.objects.get(pk=self.user_1.pk) self.assertTrue( expr=all([(friendship_request.from_user == self.user_1) for friendship_request in self.user_1.sent_friendship_requests])) users_list = [ friendship_request.to_user for friendship_request in self.user_1.sent_friendship_requests ] self.assertEqual(first=len(users_list), second=len(self.user_1.sent_friendship_requests)) self.assertEqual(first=len(users_list), second={ django_settings.SPEEDY_NET_SITE_ID: 3, django_settings.SPEEDY_MATCH_SITE_ID: 2 }[self.site.id]) self.assertEqual(first=users_list, second={ django_settings.SPEEDY_NET_SITE_ID: [self.user_2, self.user_6, self.user_5], django_settings.SPEEDY_MATCH_SITE_ID: [self.user_2, self.user_6] }[self.site.id]) sleep(0.01) self.user_5.profile.update_last_visit() self.user_1 = User.objects.get(pk=self.user_1.pk) self.assertTrue( expr=all([(friendship_request.from_user == self.user_1) for friendship_request in self.user_1.sent_friendship_requests])) users_list = [ friendship_request.to_user for friendship_request in self.user_1.sent_friendship_requests ] self.assertEqual(first=len(users_list), second=len(self.user_1.sent_friendship_requests)) self.assertEqual(first=len(users_list), second={ django_settings.SPEEDY_NET_SITE_ID: 3, django_settings.SPEEDY_MATCH_SITE_ID: 2 }[self.site.id]) self.assertEqual(first=users_list, second={ django_settings.SPEEDY_NET_SITE_ID: [self.user_5, self.user_2, self.user_6], django_settings.SPEEDY_MATCH_SITE_ID: [self.user_2, self.user_6] }[self.site.id])