diff --git a/gregui/tests/api/views/test_identity.py b/gregui/tests/api/views/test_identity.py new file mode 100644 index 0000000000000000000000000000000000000000..7d24aec7deed206156d9a4b9b58c9f085ae3686c --- /dev/null +++ b/gregui/tests/api/views/test_identity.py @@ -0,0 +1,32 @@ +import pytest + +from rest_framework.reverse import reverse + +from greg.models import Identity +from gregui.models import GregUserProfile + + +@pytest.mark.django_db +def test_identity_get(client, log_in, user_sponsor, person_foo): + log_in(user_sponsor) + response = client.get( + reverse("gregui-v1:identity-detail", kwargs={"pk": person_foo.fnr.id}) + ) + assert response.status_code == 200 + content = response.json() + assert content["person"] == person_foo.id + + +@pytest.mark.django_db +def test_identity_patch(client, log_in, user_sponsor, person_foo): + log_in(user_sponsor) + ident = Identity.objects.get(pk=person_foo.fnr.id) + assert not ident.verified + + client.patch( + reverse("gregui-v1:identity-detail", kwargs={"pk": person_foo.fnr.id}), + data={}, + ) + ident.refresh_from_db() + assert ident.verified == Identity.Verified.MANUAL + assert ident.verified_by == GregUserProfile.objects.get(user=user_sponsor).sponsor diff --git a/gregui/tests/api/views/test_userinfo.py b/gregui/tests/api/views/test_userinfo.py index c5caaa302600e3a60d26b4e2fd2fede220749e06..8b615661adab101b74bc49da74e4f19551b62b28 100644 --- a/gregui/tests/api/views/test_userinfo.py +++ b/gregui/tests/api/views/test_userinfo.py @@ -43,6 +43,14 @@ def test_userinfo_invited_get(client, invitation_link): } +@pytest.mark.django_db +def test_userinfo_user_no_profile(client, log_in, user_no_profile): + """Pure django users should be forbidden""" + log_in(user_no_profile) + response = client.get(reverse("api-userinfo")) + assert response.status_code == status.HTTP_403_FORBIDDEN + + @pytest.mark.django_db def test_userinfo_sponsor_get(client, log_in, user_sponsor): """Sponsors should get info about themselves""" diff --git a/gregui/tests/conftest.py b/gregui/tests/conftest.py index f30b5e001cfd65a8abe341975578cc70a12c1ac1..c7e5d52ac930def1bce5b3ddde659a4b5891dcc4 100644 --- a/gregui/tests/conftest.py +++ b/gregui/tests/conftest.py @@ -142,6 +142,19 @@ def create_user() -> Callable[[str, str, str, str], UserModel]: return create_user +@pytest.fixture +def user_no_profile(create_user) -> User: + """User without a GregUserProfile""" + user_model = get_user_model() + user = create_user( + username="no_profile", + email="no_profile@example.org", + first_name="No", + last_name="Profile", + ) + return user_model.objects.get(id=user.id) + + @pytest.fixture def user_sponsor(sponsor_foo: Sponsor, create_user) -> User: user_model = get_user_model() diff --git a/gregui/tests/test_mailutils.py b/gregui/tests/test_mailutils.py index 7977f4cfac3568e8064c65ebe7d273035d941234..04bf6dcd2b144dd4a55b1226fe1247604c228455 100644 --- a/gregui/tests/test_mailutils.py +++ b/gregui/tests/test_mailutils.py @@ -57,3 +57,22 @@ def test_confirmation_mail(confirmation_template): assert result(task_id) == 1 assert len(mail.outbox) == 1 assert mail.outbox[0].to == ["test@example.no"] + + +@pytest.mark.django_db +def test_send_invite_mail(registration_template, invited_person): + """Verify function queues an email when called""" + _, link = invited_person + assert len(mail.outbox) == 0 + assert mailutils.send_invite_mail(link) + assert len(mail.outbox) == 1 + + +@pytest.mark.django_db +def test_send_invite_mail_no_mail(invited_person): + """Verify function returns None if an email is not present""" + person, link = invited_person + person.private_email.delete() + assert len(mail.outbox) == 0 + assert mailutils.send_invite_mail(link) is None + assert len(mail.outbox) == 0 diff --git a/gregui/tests/test_utils.py b/gregui/tests/test_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..f759f30611ca456c534bb17cb10994356f23469c --- /dev/null +++ b/gregui/tests/test_utils.py @@ -0,0 +1,23 @@ +from gregui.utils import name_diff, restricted_damarau_levenshtein + + +def test_rdm_replace(): + assert restricted_damarau_levenshtein("abc", "abd") == 1 + + +def test_rdm_swap(): + assert restricted_damarau_levenshtein("abc", "bac") == 1 + + +def test_name_diff(): + assert name_diff("Foo Bar", "Foo Baz") == 1 + + +def test_name_longer(): + """Verify stops early with default threshold""" + assert name_diff("Abcdefgh Ijklmnop", "Qrstuvw Xyz") == 5 + + +def test_name_threshold(): + """Verify continues with raised threshold""" + assert name_diff("Abcdefgh Ijklmnop", "Qrstuvw Xyz", 100) == 10