Projet

Général

Profil

0001-tests-move-users-manager-tests-45009.patch

Benjamin Dauvergne, 10 juillet 2020 12:14

Télécharger (14,1 ko)

Voir les différences:

Subject: [PATCH 1/2] tests: move users manager tests (#45009)

 tests/test_manager.py      | 136 +-----------------------------------
 tests/test_user_manager.py | 137 ++++++++++++++++++++++++++++++++++++-
 2 files changed, 137 insertions(+), 136 deletions(-)
tests/test_manager.py
56 56
        path = reverse('a2-manager-%s' % section)
57 57
        assert manager_home_page.pyquery.remove_namespaces()('.apps a[href=\'%s\']' % path)
58 58

  
59

  
59 60
def test_manager_create_ou(superuser_or_admin, app):
60 61
    ou_add = login(app, superuser_or_admin, path=reverse('a2-manager-ou-add'))
61 62
    form = ou_add.form
......
761 762
    assert response.request.query_string == 'next=/manage/'
762 763

  
763 764

  
764
def test_manager_create_user_next(superuser_or_admin, app, ou1):
765
    login(app, superuser_or_admin, '/manage/')
766

  
767
    next_url = u'/example.nowhere.null/'
768
    url = u'/manage/users/%s/add/?next=%s' % (ou1.pk, next_url)
769
    response = app.get(url)
770

  
771
    # cancel is not handled through form submission, it's a link
772
    # next without cancel, no cancel button
773
    assert response.pyquery.remove_namespaces()('a.cancel').attr('href') == '../..'
774
    assert response.pyquery.remove_namespaces()('input[name="next"]').attr('value') == next_url
775

  
776
    next_url = u'/example.nowhere.null/$UUID/'
777
    cancel_url = u'/example.nowhere.cancel/'
778
    url = u'/manage/users/%s/add/?next=%s&cancel=%s' % (ou1.pk, next_url, cancel_url)
779
    response = app.get(url)
780

  
781
    assert response.pyquery.remove_namespaces()('a.cancel').attr('href') == cancel_url
782
    assert response.pyquery.remove_namespaces()('input[name="next"]').attr('value') == next_url
783

  
784
    form = response.form
785
    form.set('first_name', 'John')
786
    form.set('last_name', 'Doe')
787
    form.set('email', 'john.doe@gmail.com')
788
    form.set('password1', 'ABcd1234')
789
    form.set('password2', 'ABcd1234')
790
    response = form.submit()
791
    user = User.objects.latest('id')
792
    assert urlparse(response.location).path == next_url.replace('$UUID', str(user.uuid))
793

  
794

  
795
def test_manager_create_user_next_form_error(superuser_or_admin, app, ou1):
796
    next_url = u'/example.nowhere.null/'
797
    url = u'/manage/users/%s/add/?next=%s' % (ou1.pk, next_url)
798
    login(app, superuser_or_admin, '/manage/')
799
    response = app.get(url)
800
    form = response.form
801
    form.set('first_name', 'John')
802
    form.set('last_name', 'Doe')
803
    form.set('email', 'jd')  # erroneous
804
    form.set('password1', 'notvalid')  # erroneous
805
    assert force_bytes('<input type="hidden" name="next" value="%s">' % next_url) in form.submit().body
806

  
807

  
808
def test_manager_add_user_querystring(superuser_or_admin, app, ou1):
809
    querystring = u'stay_here=true'
810
    url = u'/manage/users/add/?%s' % querystring
811
    login(app, superuser_or_admin, '/manage/')
812
    response = app.get(url)
813

  
814
    assert querystring in response.location
815

  
816

  
817
def test_manager_edit_user_next(app, simple_user, superuser_or_admin):
818
    next_url = u'/example.nowhere.null/'
819
    url = u'/manage/users/%s/edit/?next=%s' % (simple_user.pk, next_url)
820
    login(app, superuser_or_admin, '/manage/')
821
    response = app.get(url)
822

  
823
    # cancel if not handled through form submission
824
    assert response.pyquery.remove_namespaces()('a.cancel').attr('href') == next_url
825

  
826
    form = response.form
827
    form.set('last_name', 'New name')
828
    assert urlparse(form.submit().location).path == next_url
829

  
830

  
831
def test_manager_edit_user_next_form_error(superuser_or_admin, app, ou1, simple_user):
832
    next_url = u'/example.nowhere.null/'
833
    url = u'/manage/users/%s/edit/?next=%s' % (simple_user.pk, next_url)
834
    login(app, superuser_or_admin, '/manage/')
835
    response = app.get(url)
836
    form = response.form
837
    form.set('email', 'jd')  # erroneous
838
    resp = form.submit()
839
    assert '<input type="hidden" name="next" value="%s">' % next_url in resp.ubody
840

  
841

  
842 765
def test_roles_widget(admin, app, db):
843 766
    from authentic2.manager.forms import ChooseRoleForm
844 767

  
......
883 806
    assert len(response.json['results']) == 1
884 807

  
885 808

  
886
def test_user_add_settings(settings, admin, app, db):
887
    passwd_options = ('generate_password', 'reset_password_at_next_login',
888
                      'send_mail', 'send_password_reset')
889
    for policy in [choice[0] for choice in OU.USER_ADD_PASSWD_POLICY_CHOICES]:
890
        ou = get_default_ou()
891
        ou.user_add_password_policy = policy
892
        ou.save()
893
        user_add = login(app, admin, '/manage/users/add/').follow()
894
        for option, i in zip(passwd_options, range(4)):
895
            assert (user_add.form.get(option).value
896
                    == {False: None, True: 'on'}.get(OU.USER_ADD_PASSWD_POLICY_VALUES[policy][i]))
897
        app.get('/logout/').form.submit()
898

  
899

  
900
def test_ou_hide_username(admin, app, db):
901
    some_ou = OU.objects.create(name=u'Some Ou', show_username=False)
902

  
903
    login(app, admin, '/manage/')
904
    url = u'/manage/users/%s/add/' % some_ou.pk
905
    response = app.get(url)
906
    q = response.pyquery.remove_namespaces()
907
    assert len(q('p[id="id_username_p"]')) == 0
908

  
909
    form = response.form
910
    form.set('first_name', 'John')
911
    form.set('last_name', 'Doe')
912
    form.set('email', 'john.doe@gmail.com')
913
    form.set('password1', 'ABcd1234')
914
    form.set('password2', 'ABcd1234')
915
    form.submit()
916

  
917
    assert User.objects.get(email='john.doe@gmail.com')
918

  
919

  
920
def test_manager_edit_user_email_verified(app, simple_user, superuser_or_admin):
921
    simple_user.email_verified = True
922
    simple_user.save()
923

  
924
    url = u'/manage/users/%s/edit/' % simple_user.pk
925
    login(app, superuser_or_admin, '/manage/')
926

  
927
    user = User.objects.get(id=simple_user.id)
928
    assert user.email_verified
929

  
930
    response = app.get(url)
931
    form = response.form
932
    form.set('email', 'new.email@gmail.net')
933
    response = form.submit().follow()
934

  
935
    user = User.objects.get(id=simple_user.id)
936
    assert not user.email_verified
937

  
938

  
939 809
def test_manager_ajax_form_view_mixin_response(superuser_or_admin, app):
940 810
    app.set_user(superuser_or_admin.username)
941 811
    resp = app.get('/manage/roles/add/', xhr=True, status=200)
......
1004 874
    url = '/manage/roles/%s/remove-parent/%s/' % (role.pk, simple_role.pk)
1005 875
    token = str(response.context['csrf_token'])
1006 876
    app.post(url, params={'csrfmiddlewaretoken': token})
1007
    assert not simple_role in role.parents()
877
    assert simple_role not in role.parents()
1008 878

  
1009 879
    # user roles view works
1010 880
    response = app.get('/manage/users/%s/roles/' % admin.pk)
......
1118 988
        return set(result['id'] for result in select2_json['results'])
1119 989

  
1120 990
    visible_role = Role.objects.create(name='visible_role', ou=simple_user.ou)
1121
    invisible_role = Role.objects.create(name='invisible_role', ou=simple_user.ou)
991
    Role.objects.create(name='invisible_role', ou=simple_user.ou)
1122 992
    admin_of_simple_role = simple_role.get_admin_role()
1123 993

  
1124 994
    admin_of_simple_role.members.add(simple_user)
tests/test_user_manager.py
20 20
import csv
21 21
import re
22 22
import time
23
from urllib.parse import urlparse
23 24

  
24 25
import pytest
25 26
from webtest import Upload
......
263 264
    User.objects.bulk_create(users)
264 265
    users = list(User.objects.filter(username__startswith='user'))
265 266

  
266
    user_ct = ContentType.objects.get_for_model(User)
267
    ContentType.objects.get_for_model(User)
267 268
    atvs = []
268 269
    for i in range(USER_COUNT):
269 270
        atvs.extend([AttributeValue(
......
277 278
    # overspending memory for the queryset cache, 4 queries by batches
278 279
    num_queries = int(4 + 4 * (user_count / DEFAULT_BATCH_SIZE + bool(user_count % DEFAULT_BATCH_SIZE)))
279 280
    with django_assert_num_queries(num_queries):
280
         response = response.click('CSV')
281
        response = response.click('CSV')
281 282
    table = list(csv.reader(response.text.splitlines()))
282 283
    assert len(table) == (user_count + 1)
283 284
    assert len(table[0]) == (15 + AT_COUNT)
......
512 513
    user_count = User.objects.count()
513 514
    login(app, admin, '/manage/users/')
514 515

  
515

  
516 516
    csv_lines = [
517 517
        u"email key verified,first_name,last_name,more,title,bike,saintsday,birthdate,zip,phone",
518 518
        u"elliot@universalpictures.com,Elliott,Thomas,petit,Mr,True,2019-7-20,1972-05-26,75014,1234",
......
573 573
    response = import_csv(content, app)
574 574

  
575 575
    assert len(response.pyquery('table.main tbody tr.row-invalid')) == 1
576

  
577

  
578
def test_manager_create_user_next(superuser_or_admin, app, ou1):
579
    login(app, superuser_or_admin, '/manage/')
580

  
581
    next_url = u'/example.nowhere.null/'
582
    url = u'/manage/users/%s/add/?next=%s' % (ou1.pk, next_url)
583
    response = app.get(url)
584

  
585
    # cancel is not handled through form submission, it's a link
586
    # next without cancel, no cancel button
587
    assert response.pyquery.remove_namespaces()('a.cancel').attr('href') == '../..'
588
    assert response.pyquery.remove_namespaces()('input[name="next"]').attr('value') == next_url
589

  
590
    next_url = u'/example.nowhere.null/$UUID/'
591
    cancel_url = u'/example.nowhere.cancel/'
592
    url = u'/manage/users/%s/add/?next=%s&cancel=%s' % (ou1.pk, next_url, cancel_url)
593
    response = app.get(url)
594

  
595
    assert response.pyquery.remove_namespaces()('a.cancel').attr('href') == cancel_url
596
    assert response.pyquery.remove_namespaces()('input[name="next"]').attr('value') == next_url
597

  
598
    form = response.form
599
    form.set('first_name', 'John')
600
    form.set('last_name', 'Doe')
601
    form.set('email', 'john.doe@gmail.com')
602
    form.set('password1', 'ABcd1234')
603
    form.set('password2', 'ABcd1234')
604
    response = form.submit()
605
    user = User.objects.latest('id')
606
    assert urlparse(response.location).path == next_url.replace('$UUID', str(user.uuid))
607

  
608

  
609
def test_manager_create_user_next_form_error(superuser_or_admin, app, ou1):
610
    next_url = u'/example.nowhere.null/'
611
    url = u'/manage/users/%s/add/?next=%s' % (ou1.pk, next_url)
612
    login(app, superuser_or_admin, '/manage/')
613
    response = app.get(url)
614
    form = response.form
615
    form.set('first_name', 'John')
616
    form.set('last_name', 'Doe')
617
    form.set('email', 'jd')  # erroneous
618
    form.set('password1', 'notvalid')  # erroneous
619
    assert '<input type="hidden" name="next" value="%s">' % next_url in form.submit().text
620

  
621

  
622
def test_manager_add_user_querystring(superuser_or_admin, app, ou1):
623
    querystring = u'stay_here=true'
624
    url = u'/manage/users/add/?%s' % querystring
625
    login(app, superuser_or_admin, '/manage/')
626
    response = app.get(url)
627

  
628
    assert querystring in response.location
629

  
630

  
631
def test_manager_edit_user_next(app, simple_user, superuser_or_admin):
632
    next_url = u'/example.nowhere.null/'
633
    url = u'/manage/users/%s/edit/?next=%s' % (simple_user.pk, next_url)
634
    login(app, superuser_or_admin, '/manage/')
635
    response = app.get(url)
636

  
637
    # cancel if not handled through form submission
638
    assert response.pyquery.remove_namespaces()('a.cancel').attr('href') == next_url
639

  
640
    form = response.form
641
    form.set('last_name', 'New name')
642
    assert urlparse(form.submit().location).path == next_url
643

  
644

  
645
def test_manager_edit_user_next_form_error(superuser_or_admin, app, ou1, simple_user):
646
    next_url = u'/example.nowhere.null/'
647
    url = u'/manage/users/%s/edit/?next=%s' % (simple_user.pk, next_url)
648
    login(app, superuser_or_admin, '/manage/')
649
    response = app.get(url)
650
    form = response.form
651
    form.set('email', 'jd')  # erroneous
652
    resp = form.submit()
653
    assert '<input type="hidden" name="next" value="%s">' % next_url in resp.ubody
654

  
655

  
656
def test_user_add_settings(settings, admin, app, db):
657
    passwd_options = ('generate_password', 'reset_password_at_next_login',
658
                      'send_mail', 'send_password_reset')
659
    for policy in [choice[0] for choice in OU.USER_ADD_PASSWD_POLICY_CHOICES]:
660
        ou = get_default_ou()
661
        ou.user_add_password_policy = policy
662
        ou.save()
663
        user_add = login(app, admin, '/manage/users/add/').follow()
664
        for option, i in zip(passwd_options, range(4)):
665
            assert (user_add.form.get(option).value
666
                    == {False: None, True: 'on'}.get(OU.USER_ADD_PASSWD_POLICY_VALUES[policy][i]))
667
        app.get('/logout/').form.submit()
668

  
669

  
670
def test_ou_hide_username(admin, app, db):
671
    some_ou = OU.objects.create(name=u'Some Ou', show_username=False)
672

  
673
    login(app, admin, '/manage/')
674
    url = u'/manage/users/%s/add/' % some_ou.pk
675
    response = app.get(url)
676
    q = response.pyquery.remove_namespaces()
677
    assert len(q('p[id="id_username_p"]')) == 0
678

  
679
    form = response.form
680
    form.set('first_name', 'John')
681
    form.set('last_name', 'Doe')
682
    form.set('email', 'john.doe@gmail.com')
683
    form.set('password1', 'ABcd1234')
684
    form.set('password2', 'ABcd1234')
685
    form.submit()
686

  
687
    assert User.objects.get(email='john.doe@gmail.com')
688

  
689

  
690
def test_manager_edit_user_email_verified(app, simple_user, superuser_or_admin):
691
    simple_user.email_verified = True
692
    simple_user.save()
693

  
694
    url = u'/manage/users/%s/edit/' % simple_user.pk
695
    login(app, superuser_or_admin, '/manage/')
696

  
697
    user = User.objects.get(id=simple_user.id)
698
    assert user.email_verified
699

  
700
    response = app.get(url)
701
    form = response.form
702
    form.set('email', 'new.email@gmail.net')
703
    response = form.submit().follow()
704

  
705
    user = User.objects.get(id=simple_user.id)
706
    assert not user.email_verified
576
-