Revision 6e3bb9c8 snf-astakos-app/astakos/im/tests/auth.py
b/snf-astakos-app/astakos/im/tests/auth.py | ||
---|---|---|
685 | 685 |
r = self.client.get(ui_url('email_change')) |
686 | 686 |
self.assertEqual(r.status_code, 200) |
687 | 687 |
self.assertFalse(user.email_change_is_pending()) |
688 |
self.assertEqual(EmailChange.objects.consumed().count(), 0) |
|
689 |
self.assertEqual(EmailChange.objects.filter().count(), 0) |
|
688 | 690 |
|
689 | 691 |
# request email change to an existing email fails |
690 | 692 |
data = {'new_email_address': 'existing@synnefo.org'} |
691 | 693 |
r = self.client.post(ui_url('email_change'), data) |
692 | 694 |
self.assertContains(r, messages.EMAIL_USED) |
695 |
self.assertEqual(EmailChange.objects.consumed().count(), 0) |
|
696 |
self.assertEqual(EmailChange.objects.filter().count(), 0) |
|
693 | 697 |
|
694 | 698 |
# proper email change |
695 | 699 |
data = {'new_email_address': 'kpap@gmail.com'} |
... | ... | |
697 | 701 |
self.assertRedirects(r, ui_url('profile')) |
698 | 702 |
self.assertContains(r, messages.EMAIL_CHANGE_REGISTERED) |
699 | 703 |
change1 = EmailChange.objects.get() |
704 |
self.assertEqual(EmailChange.objects.consumed().count(), 0) |
|
705 |
self.assertEqual(EmailChange.objects.filter().count(), 1) |
|
700 | 706 |
|
701 | 707 |
# user sees a warning |
702 | 708 |
r = self.client.get(ui_url('email_change')) |
... | ... | |
704 | 710 |
self.assertContains(r, messages.PENDING_EMAIL_CHANGE_REQUEST) |
705 | 711 |
self.assertTrue(user.email_change_is_pending()) |
706 | 712 |
|
713 |
# also in profile page |
|
714 |
r = self.client.get(ui_url('profile')) |
|
715 |
self.assertEqual(r.status_code, 200) |
|
716 |
self.assertContains(r, messages.PENDING_EMAIL_CHANGE_WARNING[:15]) |
|
717 |
self.assertTrue(user.email_change_is_pending()) |
|
718 |
|
|
707 | 719 |
# link was sent |
708 | 720 |
self.assertEqual(len(get_mailbox('kpap@synnefo.org')), 0) |
709 | 721 |
self.assertEqual(len(get_mailbox('kpap@gmail.com')), 1) |
... | ... | |
716 | 728 |
self.assertEqual(len(get_mailbox('kpap@synnefo.org')), 0) |
717 | 729 |
self.assertEqual(len(get_mailbox('kpap@yahoo.com')), 1) |
718 | 730 |
change2 = EmailChange.objects.get() |
731 |
self.assertEqual(EmailChange.objects.consumed().count(), 0) |
|
732 |
self.assertEqual(EmailChange.objects.filter().count(), 1) |
|
719 | 733 |
|
720 |
r = self.client.get(change1.get_url()) |
|
721 |
self.assertEquals(r.status_code, 404) |
|
734 |
# invalidated |
|
735 |
r = self.client.get(change1.get_url(), follow=True) |
|
736 |
self.assertEquals(r.status_code, 200) |
|
737 |
self.assertContains(r, messages.INVALID_CHANGE_EMAIL_ACTIVATION_KEY) |
|
722 | 738 |
self.client.logout() |
739 |
self.assertEqual(EmailChange.objects.consumed().count(), 0) |
|
740 |
self.assertEqual(EmailChange.objects.filter().count(), 1) |
|
723 | 741 |
|
742 |
# use of another user email change url results to 403 response |
|
724 | 743 |
invalid_client = Client() |
725 | 744 |
r = invalid_client.post(ui_url('local?'), |
726 | 745 |
{'username': 'existing@synnefo.org', |
... | ... | |
728 | 747 |
r = invalid_client.get(change2.get_url(), follow=True) |
729 | 748 |
self.assertEquals(r.status_code, 403) |
730 | 749 |
|
750 |
# consume change url |
|
731 | 751 |
r = self.client.post(ui_url('local?next=' + change2.get_url()), |
732 | 752 |
{'username': 'kpap@synnefo.org', |
733 | 753 |
'password': 'password', |
... | ... | |
737 | 757 |
user = r.context['request'].user |
738 | 758 |
self.assertEquals(user.email, 'kpap@yahoo.com') |
739 | 759 |
self.assertEquals(user.username, 'kpap@yahoo.com') |
760 |
self.assertEqual(EmailChange.objects.consumed().count(), 1) |
|
761 |
self.assertEqual(EmailChange.objects.filter().count(), 0) |
|
762 |
|
|
763 |
# request another email change |
|
764 |
data = {'new_email_address': 'kpap@gmail.com'} |
|
765 |
# both users request for the same email change |
|
766 |
r = invalid_client.post(ui_url('email_change'), data, follow=True) |
|
767 |
r = self.client.post(ui_url('email_change'), data, follow=True) |
|
768 |
self.assertRedirects(r, ui_url('profile')) |
|
769 |
self.assertEqual(EmailChange.objects.consumed().count(), 1) |
|
770 |
# two email changes pending, one for each user |
|
771 |
self.assertEqual(EmailChange.objects.filter().count(), 2) |
|
772 |
# first user consumes email change |
|
773 |
change_email_url = user.emailchanges.get().get_url() |
|
774 |
self.client.get(change_email_url) |
|
775 |
consumed = EmailChange.objects.consumed() |
|
776 |
self.assertEqual(consumed.filter(user__id=user.pk).count(), 2) |
|
777 |
# one left pending, will be invalidated once accessed, since the |
|
778 |
# kpap@gmail.com is not available any more |
|
779 |
self.assertEqual(EmailChange.objects.filter().count(), 1) |
|
780 |
|
|
781 |
# second user fails to consume |
|
782 |
second_user = AstakosUser.objects.get(email="existing@synnefo.org") |
|
783 |
second_change_email_url = second_user.emailchanges.get().get_url() |
|
784 |
r = invalid_client.get(second_change_email_url, follow=True) |
|
785 |
self.assertEqual(EmailChange.objects.filter().count(), 0) |
|
740 | 786 |
|
741 | 787 |
self.client.logout() |
742 | 788 |
r = self.client.post(ui_url('local?next=' + change2.get_url()), |
Also available in: Unified diff