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