Skip to content

Commit

Permalink
refactor: remove intermediate result class
Browse files Browse the repository at this point in the history
  • Loading branch information
cquintana92 committed Sep 17, 2024
1 parent b2e9208 commit 4c429ed
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 28 deletions.
26 changes: 10 additions & 16 deletions app/custom_domain_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,12 +43,6 @@ def message(self, domain: str) -> str:
raise Exception("Invalid CannotUseDomainReason")


@dataclass
class CanDomainBeUsedResult:
can_be_used: bool
reason: Optional[CannotUseDomainReason] = None


def is_valid_domain(domain: str) -> bool:
"""
Checks that a domain is valid according to RFC 1035
Expand Down Expand Up @@ -77,21 +71,21 @@ def sanitize_domain(domain: str) -> str:
return new_domain


def can_domain_be_used(user: User, domain: str) -> CanDomainBeUsedResult:
def can_domain_be_used(user: User, domain: str) -> Optional[CannotUseDomainReason]:
if not is_valid_domain(domain):
return CanDomainBeUsedResult(False, CannotUseDomainReason.InvalidDomain)
return CannotUseDomainReason.InvalidDomain
elif SLDomain.get_by(domain=domain):
return CanDomainBeUsedResult(False, CannotUseDomainReason.BuiltinDomain)
return CannotUseDomainReason.BuiltinDomain
elif CustomDomain.get_by(domain=domain):
return CanDomainBeUsedResult(False, CannotUseDomainReason.DomainAlreadyUsed)
return CannotUseDomainReason.DomainAlreadyUsed
elif get_email_domain_part(user.email) == domain:
return CanDomainBeUsedResult(False, CannotUseDomainReason.DomainPartOfUserEmail)
return CannotUseDomainReason.DomainPartOfUserEmail
elif Mailbox.filter(
Mailbox.verified.is_(True), Mailbox.email.endswith(f"@{domain}")
).first():
return CanDomainBeUsedResult(False, CannotUseDomainReason.DomainUserInMailbox)
return CannotUseDomainReason.DomainUserInMailbox
else:
return CanDomainBeUsedResult(True)
return None


def create_custom_domain(
Expand All @@ -104,10 +98,10 @@ def create_custom_domain(
)

new_domain = sanitize_domain(domain)
can_use_domain = can_domain_be_used(user, new_domain)
if not can_use_domain.can_be_used:
domain_forbidden_cause = can_domain_be_used(user, new_domain)
if domain_forbidden_cause:
return CreateCustomDomainResult(
message=can_use_domain.reason.message(new_domain), message_category="error"
message=domain_forbidden_cause.message(new_domain), message_category="error"
)

new_custom_domain = CustomDomain.create(domain=new_domain, user_id=user.id)
Expand Down
18 changes: 6 additions & 12 deletions tests/test_custom_domain_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,45 +49,39 @@ def test_is_valid_domain():
def test_can_domain_be_used():
domain = f"{random_string(10)}.com"
res = can_domain_be_used(user, domain)
assert res.can_be_used is True
assert res.reason is None
assert res is None


def test_can_domain_be_used_existing_domain():
domain = random_domain()
CustomDomain.create(user_id=user.id, domain=domain, commit=True)
res = can_domain_be_used(user, domain)
assert res.can_be_used is False
assert res.reason is CannotUseDomainReason.DomainAlreadyUsed
assert res is CannotUseDomainReason.DomainAlreadyUsed


def test_can_domain_be_used_sl_domain():
domain = ALIAS_DOMAINS[0]
res = can_domain_be_used(user, domain)
assert res.can_be_used is False
assert res.reason is CannotUseDomainReason.BuiltinDomain
assert res is CannotUseDomainReason.BuiltinDomain


def test_can_domain_be_used_domain_of_user_email():
domain = user.email.split("@")[1]
res = can_domain_be_used(user, domain)
assert res.can_be_used is False
assert res.reason is CannotUseDomainReason.DomainPartOfUserEmail
assert res is CannotUseDomainReason.DomainPartOfUserEmail


def test_can_domain_be_used_domain_of_existing_mailbox():
domain = random_domain()
Mailbox.create(user_id=user.id, email=f"email@{domain}", verified=True, commit=True)
res = can_domain_be_used(user, domain)
assert res.can_be_used is False
assert res.reason is CannotUseDomainReason.DomainUserInMailbox
assert res is CannotUseDomainReason.DomainUserInMailbox


def test_can_domain_be_used_invalid_domain():
domain = f"{random_string(10)}@lol.com"
res = can_domain_be_used(user, domain)
assert res.can_be_used is False
assert res.reason is CannotUseDomainReason.InvalidDomain
assert res is CannotUseDomainReason.InvalidDomain


# sanitize_domain
Expand Down

0 comments on commit 4c429ed

Please sign in to comment.