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
示例#3
0
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"}
示例#4
0
def test_validate_make_unverified_primary(email_factory):
    """
    Attempting to mark an existing but unverified email address as the
    primary should not 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"}
示例#5
0
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"}
示例#6
0
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_serialize(email_factory):
    """
    Test serializing an email address.
    """
    email = email_factory()
    serializer = serializers.EmailSerializer(email)

    expected = {
        'id': email.id,
        'created_at': email.created_at.isoformat(),
        'email': email.email,
        'is_primary': email.is_primary,
        'is_verified': email.is_verified,
    }

    assert serializer.data == expected
示例#8
0
def test_serialize(email_factory):
    """
    Test serializing an email address.
    """
    email = email_factory()
    serializer = serializers.EmailSerializer(email)

    expected = {
        "id": email.id,
        "created_at": email.created_at.isoformat(),
        "email": email.email,
        "is_primary": email.is_primary,
        "is_verified": email.is_verified,
    }

    assert serializer.data == expected
示例#9
0
def test_update_is_primary(email_factory):
    """
    If an email address is verified, it should be able to be marked as
    the user's primary address.
    """
    email = email_factory(is_primary=False, is_verified=True)
    data = {"is_primary": True}

    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 == 1
示例#10
0
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
示例#11
0
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-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
示例#12
0
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, )
示例#13
0
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
示例#14
0
def test_create_non_primary(mock_send_confirmation, 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

    # Make sure a confirmation email was sent
    assert mock_send_confirmation.call_count == 1
示例#15
0
def test_create(mock_send_confirmation, 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
    address, 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

    # Make sure a confirmation email was sent
    assert mock_send_confirmation.call_count == 1
示例#16
0
def test_update(api_client, email_factory):
    """
    Sending a PATCH request to the view should allow for updating the
    email address 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-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