Skip to content

Commit 4b8ac5b

Browse files
committed
Add unit tests
1 parent ed05e0b commit 4b8ac5b

File tree

1 file changed

+129
-0
lines changed

1 file changed

+129
-0
lines changed

api_tests/institutions/views/test_institution_auth.py

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -494,6 +494,135 @@ def test_user_external_unconfirmed(self, app, institution, url_auth_institution)
494494
assert accepted_terms_of_service == user.accepted_terms_of_service
495495
assert not user.has_usable_password()
496496

497+
def test_duplicate_emails_and_names_success_existing_user(self, app, institution, url_auth_institution):
498+
username, fullname, password = 'user_deanseu@user.edu', 'Foo Bar', 'FuAsKeEr'
499+
exiting_user = make_user(username, fullname)
500+
exiting_user.set_password(password)
501+
exiting_user.save()
502+
sso_email = f'{username};{username}'
503+
with capture_signals() as mock_signals:
504+
res = app.post(
505+
url_auth_institution,
506+
make_payload(
507+
institution,
508+
sso_email,
509+
family_name='User;User',
510+
given_name='Fake;Fake',
511+
fullname='Fake User;Fake User',
512+
)
513+
)
514+
assert res.status_code == 204
515+
assert not mock_signals.signals_sent()
516+
user = OSFUser.objects.filter(username=username).first()
517+
assert user
518+
assert user.fullname == fullname
519+
affiliation = user.get_institution_affiliation(institution._id)
520+
assert affiliation.sso_mail == username
521+
assert user.has_usable_password()
522+
assert user.check_password(password)
523+
assert institution in user.get_affiliated_institutions()
524+
525+
def test_duplicate_emails_and_names_success_new_user(self, app, institution, url_auth_institution):
526+
username, fullname, family_name, given_name = 'user_deansnu@user.edu', 'Fake User', 'User', 'Fake'
527+
sso_email = f'{username};{username}'
528+
with capture_signals() as mock_signals:
529+
res = app.post(
530+
url_auth_institution,
531+
make_payload(
532+
institution,
533+
sso_email,
534+
family_name=f'{family_name};{family_name}',
535+
given_name=f'{given_name};{given_name}',
536+
fullname=f'{fullname};{fullname}',
537+
)
538+
)
539+
assert res.status_code == 204
540+
assert mock_signals.signals_sent()
541+
user = OSFUser.objects.filter(username=username).first()
542+
assert user
543+
assert user.fullname == fullname
544+
assert user.family_name == family_name
545+
assert user.given_name == given_name
546+
affiliation = user.get_institution_affiliation(institution._id)
547+
assert affiliation.sso_mail == username
548+
assert user.has_usable_password()
549+
assert institution in user.get_affiliated_institutions()
550+
551+
def test_multiple_names_warning_exiting_user(self, app, institution, url_auth_institution):
552+
username, fullname, password = 'user_mnweu@user.edu', 'Foo Bar', 'FuAsKeEr'
553+
exiting_user = make_user(username, fullname)
554+
exiting_user.set_password(password)
555+
exiting_user.save()
556+
with capture_signals() as mock_signals:
557+
res = app.post(
558+
url_auth_institution,
559+
make_payload(
560+
institution,
561+
username,
562+
family_name='User1;User2',
563+
given_name='Fake1;Fake2',
564+
fullname='Fake1 User1;Fake2 User2',
565+
)
566+
)
567+
assert res.status_code == 204
568+
assert not mock_signals.signals_sent()
569+
user = OSFUser.objects.filter(username=username).first()
570+
assert user
571+
assert user.fullname == fullname
572+
affiliation = user.get_institution_affiliation(institution._id)
573+
assert affiliation.sso_mail == username
574+
assert user.has_usable_password()
575+
assert user.check_password(password)
576+
assert institution in user.get_affiliated_institutions()
577+
578+
def test_multiple_names_warning_new_user(self, app, institution, url_auth_institution):
579+
sso_email, fullname, family_name, given_name = 'user_deansnu@user.edu', 'Fake User;Foo Bar', 'User;Bar', 'Fake;Foo'
580+
with capture_signals() as mock_signals:
581+
res = app.post(
582+
url_auth_institution,
583+
make_payload(institution, sso_email, family_name=family_name, given_name=given_name, fullname=fullname),
584+
)
585+
assert res.status_code == 204
586+
assert mock_signals.signals_sent()
587+
user = OSFUser.objects.filter(username=sso_email).first()
588+
assert user
589+
assert user.fullname == fullname
590+
assert user.family_name == family_name
591+
assert user.given_name == given_name
592+
affiliation = user.get_institution_affiliation(institution._id)
593+
assert affiliation.sso_mail == sso_email
594+
assert user.has_usable_password()
595+
assert institution in user.get_affiliated_institutions()
596+
597+
def test_multiple_emails_failure_existing_user(self, app, institution, url_auth_institution):
598+
username, second_email, fullname, password = 'user_mefeu_a', 'user_mefeu_b@user.edu', 'Fake User', 'FuAsKeEr'
599+
existing_uesr = make_user(username, fullname)
600+
existing_uesr.set_password(password)
601+
existing_uesr.save()
602+
sso_email = f'{username};{second_email}'
603+
with capture_signals() as mock_signals:
604+
res = app.post(
605+
url_auth_institution,
606+
make_payload(institution, sso_email=sso_email, fullname=fullname),
607+
expect_errors=True,
608+
)
609+
assert res.status_code == 403
610+
assert res.json['errors'][0]['detail'] == 'InstitutionSsoMultipleEmailsNotSupported'
611+
assert not mock_signals.signals_sent()
612+
613+
def test_multiple_emails_failure_new_user(self, app, institution, url_auth_institution):
614+
first_email, second_email, family_name, given_name = 'user_mefeu_a', 'user_mefeu_b@user.edu', 'User', 'Fake'
615+
sso_email = f'{first_email};{second_email}'
616+
with capture_signals() as mock_signals:
617+
res = app.post(
618+
url_auth_institution,
619+
make_payload(institution, sso_email, family_name=family_name, given_name=given_name),
620+
expect_errors=True,
621+
)
622+
assert res.status_code == 403
623+
assert res.json['errors'][0]['detail'] == 'InstitutionSsoMultipleEmailsNotSupported'
624+
assert not mock_signals.signals_sent()
625+
497626

498627
@pytest.mark.django_db
499628
class TestInstitutionStorageRegion:

0 commit comments

Comments
 (0)