def test_create_new_user(registration_listener): """ Saving a serializer with valid data should create a new user. """ data = { "email": "*****@*****.**", "password": "******", "username": "******", } serializer = serializers.RegistrationSerializer(data=data) assert serializer.is_valid() with mock.patch( "rest_email_auth.serializers.models.EmailAddress.send_confirmation", # noqa autospec=True, ) as mock_send_confirmation: user = serializer.save() assert user.username == data["username"] assert user.check_password(data["password"]) assert user.email_addresses.count() == 1 email = user.email_addresses.get() assert email.email == data["email"] assert email.is_primary # Make sure we sent out an email confirmation assert mock_send_confirmation.call_count == 1 # Make sure we sent a registration event assert registration_listener.call_count == 1
def test_register_duplicate_email(email_factory, registration_listener): """ Attempting to register with an email that has already been verified should send an email to the owner of the email address notifying them of the registration attempt. """ email = email_factory() data = { 'email': email.email, 'password': '******', 'username': '******', } serializer = serializers.RegistrationSerializer(data=data) assert serializer.is_valid() with mock.patch( 'rest_email_auth.serializers.models.EmailAddress.send_duplicate_notification', # noqa autospec=True) as mock_send_duplicate_signup: serializer.save() assert get_user_model().objects.count() == 1 assert mock_send_duplicate_signup.call_count == 1 # We should not get a registration event for a duplicate email assert registration_listener.call_count == 0
def test_create_new_user(registration_listener): """ Saving a serializer with valid data should create a new user. """ data = { 'email': '*****@*****.**', 'password': '******', 'username': '******', } serializer = serializers.RegistrationSerializer(data=data) assert serializer.is_valid() with mock.patch( 'rest_email_auth.serializers.models.EmailAddress.send_confirmation', # noqa autospec=True) as mock_send_confirmation: user = serializer.save() assert user.username == data['username'] assert user.check_password(data['password']) assert user.email_addresses.count() == 1 email = user.email_addresses.get() assert email.email == data['email'] # Make sure we sent out an email confirmation assert mock_send_confirmation.call_count == 1 # Make sure we sent a registration event assert registration_listener.call_count == 1
def test_validate_email_lowercase_domain(): """ The registration serializer should not change an email address with a lowercase domain. """ email = "*****@*****.**" serializer = serializers.RegistrationSerializer() 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.RegistrationSerializer() assert serializer.validate_email(email) == expected
def test_validate_password(): """ Validating the serializer's data should run the provided password through Django's default password validation system. """ data = { 'email': '*****@*****.**', 'password': '******', 'username': '******', } serializer = serializers.RegistrationSerializer(data=data) with mock.patch( 'rest_email_auth.serializers.password_validation.validate_password', # noqa autospec=True) as mock_validate: assert serializer.is_valid() assert mock_validate.call_count == 1 assert set(mock_validate.call_args[0]) == {data['password']}
def test_validate_password(): """ Validating the serializer's data should run the provided password through Django's default password validation system. """ data = { "email": "*****@*****.**", "password": "******", "username": "******", } serializer = serializers.RegistrationSerializer(data=data) with mock.patch( "rest_email_auth.serializers.password_validation.validate_password", # noqa autospec=True, ) as mock_validate: assert serializer.is_valid() assert mock_validate.call_count == 1 assert set(mock_validate.call_args[0]) == {data["password"]}