mirror of
https://github.com/simple-login/app.git
synced 2024-11-16 00:48:32 +01:00
38d377acb3
* Extract contact creation logic to an external function * PR comments
117 lines
3.8 KiB
Python
117 lines
3.8 KiB
Python
from typing import Optional
|
|
|
|
import pytest
|
|
from app.contact_utils import create_contact, ContactCreateError
|
|
from app.db import Session
|
|
from app.models import (
|
|
Alias,
|
|
Contact,
|
|
)
|
|
from tests.utils import create_new_user, random_email, random_token
|
|
|
|
|
|
def create_provider():
|
|
# name auto_created from_partner
|
|
yield ["name", "a@b.c", True, True]
|
|
yield [None, None, True, True]
|
|
yield [None, None, False, True]
|
|
yield [None, None, True, False]
|
|
yield [None, None, False, False]
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"name, mail_from, automatic_created, from_partner", create_provider()
|
|
)
|
|
def test_create_contact(
|
|
name: Optional[str],
|
|
mail_from: Optional[str],
|
|
automatic_created: bool,
|
|
from_partner: bool,
|
|
):
|
|
user = create_new_user()
|
|
alias = Alias.create_new_random(user)
|
|
Session.commit()
|
|
email = random_email()
|
|
contact_result = create_contact(
|
|
email,
|
|
name,
|
|
alias,
|
|
mail_from=mail_from,
|
|
automatic_created=automatic_created,
|
|
from_partner=from_partner,
|
|
)
|
|
assert contact_result.error is None
|
|
contact = contact_result.contact
|
|
assert contact.user_id == user.id
|
|
assert contact.alias_id == alias.id
|
|
assert contact.website_email == email
|
|
assert contact.name == name
|
|
assert contact.mail_from == mail_from
|
|
assert contact.automatic_created == automatic_created
|
|
assert not contact.invalid_email
|
|
expected_flags = Contact.FLAG_PARTNER_CREATED if from_partner else 0
|
|
assert contact.flags == expected_flags
|
|
|
|
|
|
def test_create_contact_email_email_not_allowed():
|
|
user = create_new_user()
|
|
alias = Alias.create_new_random(user)
|
|
Session.commit()
|
|
contact_result = create_contact("", "", alias)
|
|
assert contact_result.contact is None
|
|
assert contact_result.error == ContactCreateError.InvalidEmail
|
|
|
|
|
|
def test_create_contact_email_email_allowed():
|
|
user = create_new_user()
|
|
alias = Alias.create_new_random(user)
|
|
Session.commit()
|
|
contact_result = create_contact("", "", alias, allow_empty_email=True)
|
|
assert contact_result.error is None
|
|
assert contact_result.contact is not None
|
|
assert contact_result.contact.website_email == ""
|
|
assert contact_result.contact.invalid_email
|
|
|
|
|
|
def test_do_not_allow_invalid_email():
|
|
user = create_new_user()
|
|
alias = Alias.create_new_random(user)
|
|
Session.commit()
|
|
contact_result = create_contact("potato", "", alias)
|
|
assert contact_result.contact is None
|
|
assert contact_result.error == ContactCreateError.InvalidEmail
|
|
contact_result = create_contact("asdf\x00@gmail.com", "", alias)
|
|
assert contact_result.contact is None
|
|
assert contact_result.error == ContactCreateError.InvalidEmail
|
|
|
|
|
|
def test_update_name_for_existing():
|
|
user = create_new_user()
|
|
alias = Alias.create_new_random(user)
|
|
Session.commit()
|
|
email = random_email()
|
|
contact_result = create_contact(email, "", alias)
|
|
assert contact_result.error is None
|
|
assert contact_result.contact is not None
|
|
assert contact_result.contact.name == ""
|
|
name = random_token()
|
|
contact_result = create_contact(email, name, alias)
|
|
assert contact_result.error is None
|
|
assert contact_result.contact is not None
|
|
assert contact_result.contact.name == name
|
|
|
|
|
|
def test_update_mail_from_for_existing():
|
|
user = create_new_user()
|
|
alias = Alias.create_new_random(user)
|
|
Session.commit()
|
|
email = random_email()
|
|
contact_result = create_contact(email, "", alias)
|
|
assert contact_result.error is None
|
|
assert contact_result.contact is not None
|
|
assert contact_result.contact.mail_from is None
|
|
mail_from = random_email()
|
|
contact_result = create_contact(email, "", alias, mail_from=mail_from)
|
|
assert contact_result.error is None
|
|
assert contact_result.contact is not None
|
|
assert contact_result.contact.mail_from == mail_from
|