def test_validate_email_lowercase_domain(): """ The registration serializer should not change an email address with a lowercase domain. """ email = "*****@*****.**" serializer = serializers.EmailSerializer() assert serializer.validate_email(email) == email
def test_validate_email_mixed_case_domain(): """ If the domain portion of the email is mixed case. it should be converted to lowercase. """ email = "*****@*****.**" expected = "*****@*****.**" serializer = serializers.EmailSerializer() assert serializer.validate_email(email) == expected
def test_validate_create_primary(): """ Attempting to create a primary email address should not be valid. It should only be valid to mark a verified email address as the primary unless this is the user's first email. """ data = {"email": "*****@*****.**", "is_primary": True} serializer = serializers.EmailSerializer(data=data) assert not serializer.is_valid() assert set(serializer.errors.keys()) == {"is_primary"}
def test_validate_changed_email(email_factory): """ If a bound serializer attempts to change the email address of its instance it should not be valid """ email = email_factory(email="*****@*****.**") data = {"email": "*****@*****.**"} serializer = serializers.EmailSerializer(email, data=data) assert not serializer.is_valid() assert set(serializer.errors.keys()) == {"email"}
def test_validate_make_unverified_primary(email_factory): """ attempting to mark an existing but unverified email address as the primary should be valid. """ email = email_factory(is_primary=False, is_verified=False) data = {"is_primary": True} serializer = serializers.EmailSerializer(email, data=data, partial=True) assert not serializer.is_valid() assert set(serializer.errors.keys()) == {"is_primary"}
def test_update_is_primary_false(email_factory): """ Updating 'is_primary' to false should not call set_primary. """ email = email_factory(is_primary=True, is_verified=True) data = {"is_primary": False} serializer = serializers.EmailSerializer(email, data=data, partial=True) assert serializer.is_valid() with mock.patch.object(email, "set_primary", autospec=True) as mock_set_primary: email = serializer.save() assert mock_set_primary.call_count == 0
def test_create_non_primary(email_factory, user_factory): """ If the user already has a primary email address, the created email should not be marked as the user's primary. """ user = user_factory() email_factory(is_primary=True, user=user) data = {"email": "*****@*****.**"} serializer = serializers.EmailSerializer(data=data) assert serializer.is_valid() email = serializer.save(user=user) assert email.email == data["email"] assert not email.is_primary
def test_create_email(api_client, user_factory): """ Sending a POST request with valid data to the view should create a new email address associated with the account. """ user = user_factory() api_client.force_authenticate(user=user) data = {"email": "*****@*****.**"} response = api_client.post(url, data) assert response.status_code == status.HTTP_201_CREATED serializer = serializers.EmailSerializer(user.email_addresses.get()) assert response.data == serializer.data
def test_create(user_factory): """ Test creating a new email address from the serializer. Creating a new email address should also send a confirmation email for the provided address. If the user does not have a primary email, the created one should be marked as the primary. """ user = user_factory() data = {"email": "*****@*****.**"} serializer = serializers.EmailSerializer(data=data) assert serializer.is_valid() email = serializer.save(user=user) assert email.email == data["email"] assert email.is_primary
def test_create_duplicate(mock_duplicate_notification, email_factory, user_factory): """ Attempting to add an email address that already exists should send a notification to the existing email. """ email = email_factory() user = user_factory() data = {"email": email.email} serializer = serializers.EmailSerializer(data=data) assert serializer.is_valid(), serializer.errors serializer.save(user=user) assert mock_duplicate_notification.call_count == 1 assert mock_duplicate_notification.call_args[0] == (email, )
def test_get(api_client, email_factory): """ Sending a GET request to the view with the ID of an email address owned by the requesting user should return the given email address' information. """ email = email_factory() api_client.force_authenticate(user=email.user) url = reverse("rest-social-email-auth:email-detail", kwargs={"pk": email.pk}) response = api_client.get(url) assert response.status_code == status.HTTP_200_OK serializer = serializers.EmailSerializer(email) assert response.data == serializer.data
def test_update(api_client, email_factory): """ Sending a PATCH request to the view should allow for updating the email adddress associated with the endpoint. """ email = email_factory(is_primary=False, is_verified=True) data = {"is_primary": True} api_client.force_authenticate(user=email.user) url = reverse("rest-social-email-auth:email-detail", kwargs={"pk": email.pk}) response = api_client.patch(url, data) assert response.status_code == status.HTTP_200_OK email.refresh_from_db() serializer = serializers.EmailSerializer(email) assert response.data == serializer.data
def test_list_emails(api_client, email_factory, user_factory): """ Sending a GET request to the view should return the requesting user's emails. """ user = user_factory() email_factory(user=user) email_factory(user=user) # Create email address for other user email_factory() serializer = serializers.EmailSerializer(user.email_addresses.all(), many=True) api_client.force_authenticate(user=user) response = api_client.get(url) assert response.status_code == status.HTTP_200_OK assert response.data == serializer.data