def test_validate_invalid_key(db):
    """
	If there is no confirmation with the provided key,
	the serializer should not be valid.
	"""
    data = {"key": "invalid", "password": "******"}

    serializer = serializers.EmailVerificationSerializer(data=data)

    assert not serializer.is_valid()
    assert set(serializer.errors.keys()) == {"key"}
def test_validate_invalid_password(email_confirmation_factory, email_factory,
                                   user_factory):
    """
	If an invalid password is provided, the serializer should not be
	valid.
	"""
    user = user_factory(password="******")
    email = email_factory(user=user)
    confirmation = email_confirmation_factory(email=email)

    data = {"key": confirmation.key, "password": "******"}

    serializer = serializers.EmailVerificationSerializer(data=data)

    assert not serializer.is_valid()
    assert set(serializer.errors.keys()) == {"non_field_errors"}
def test_validate_expired(email_confirmation_factory):
    """
	If the confirmation matching the provided key is expired, 
	the serializer should not be valid
	"""
    confirmation = email_confirmation_factory()

    data = {"key": confirmation.key, "password": "******"}

    serializer = serializers.EmailVerificationSerializer(data=data)

    with mock.patch(
            "rest_social_email_auth.models.EmailConfirmation.is_expired",
            new_callable=mock.PropertyMock,
    ) as mock_is_expired:
        mock_is_expired.return_value = True

        assert not serializer.is_valid()

    assert mock_is_expired.call_count == 1
    assert set(serializer.errors.keys()) == {"key"}
Beispiel #4
0
def test_verify_email(api_rf, email_confirmation_factory, email_factory,
                      user_factory):
    """
	Sending a POST request with valid data to the endpoint 
	should mark the associated email address
	as verified.
	"""
    user = user_factory(password="******")
    email = email_factory(user=user)
    confirmation = email_confirmation_factory(email=email)

    data = {"key": confirmation.key, "password": "******"}

    serializer = serializers.EmailVerificationSerializer(data=data)
    assert serializer.is_valid()

    request = api_rf.post("/", data)
    response = email_verification_view(request)

    assert response.status_code == status.HTTP_201_CREATED
    assert response.data == serializer.data
def test_confirm_email(email_confirmation_factory, email_factory,
                       user_factory):
    """
	If a valid confirmation key and password are provided,
	the email matching the key should be verified.
	"""
    user = user_factory(password="******")
    email = email_factory(user=user)
    confirmation = email_confirmation_factory(email=email)

    data = {"key": confirmation.key, "password": "******"}

    serializer = serializers.EmailVerificationSerializer(data=data)
    assert serializer.is_valid()

    serializer.save()
    email.refresh_from_db()

    expected = {"email": email.email}

    assert serializer.data == expected
    assert email.is_verified
    assert email.confirmations.count() == 0
def test_validate_no_password(app_settings, email_confirmation_factory,
                              email_factory, user_factory):
    """
	If password requirement for verifying email addresses is
	disabled then users should be able to verify email addresses without 
	providing their password.
	"""
    app_settings.EMAIL_VERIFICATION_PASSWORD_REQUIRED = False

    user = user_factory()
    email = email_factory(user=user)
    confirmation = email_confirmation_factory(email=email)

    data = {"key": confirmation.key}

    serializer = serializers.EmailVerificationSerializer(data=data)
    assert serializer.is_valid()

    serializer.save()
    email.refresh_from_db()

    expected = {"email": email.email}
    assert email.is_verified
    assert email.confirmations.count() == 0