✨(mailboxes) check imported mailboxes don't clash with existing alias
check that dimail imported mailboxes don't use the same username as existing aliases.
This commit is contained in:
committed by
Marie
parent
040f949e5e
commit
e01b422c13
@@ -40,22 +40,22 @@ def test_dimail_synchronization__already_sync(dimail_token_ok):
|
|||||||
assert pre_sync_mailboxes.count() == 3
|
assert pre_sync_mailboxes.count() == 3
|
||||||
|
|
||||||
dimail_client = DimailAPIClient()
|
dimail_client = DimailAPIClient()
|
||||||
|
|
||||||
# Ensure successful response using "responses":
|
# Ensure successful response using "responses":
|
||||||
# token response in fixtures
|
# token response in fixtures
|
||||||
responses.get(
|
responses.get(
|
||||||
re.compile(rf".*/domains/{domain.name}/mailboxes/"),
|
re.compile(rf".*/domains/{domain.name}/mailboxes/"),
|
||||||
json=[
|
json=[
|
||||||
{
|
{
|
||||||
"type": "mailbox",
|
"type": "mailbox",
|
||||||
"status": "broken",
|
"status": "broken",
|
||||||
"email": f"{mailbox.local_part}@{domain.name}",
|
"email": f"{mailbox.local_part}@{domain.name}",
|
||||||
"givenName": mailbox.first_name,
|
"givenName": mailbox.first_name,
|
||||||
"surName": mailbox.last_name,
|
"surName": mailbox.last_name,
|
||||||
"displayName": f"{mailbox.first_name} {mailbox.last_name}",
|
"displayName": f"{mailbox.first_name} {mailbox.last_name}",
|
||||||
}
|
}
|
||||||
for mailbox in pre_sync_mailboxes
|
for mailbox in pre_sync_mailboxes
|
||||||
],
|
],
|
||||||
status=status.HTTP_200_OK,
|
status=status.HTTP_200_OK,
|
||||||
content_type="application/json",
|
content_type="application/json",
|
||||||
)
|
)
|
||||||
@@ -75,8 +75,10 @@ def test_dimail_synchronization__synchronize_mailboxes(mock_warning, dimail_toke
|
|||||||
domain = factories.MailDomainEnabledFactory()
|
domain = factories.MailDomainEnabledFactory()
|
||||||
assert not models.Mailbox.objects.exists()
|
assert not models.Mailbox.objects.exists()
|
||||||
|
|
||||||
|
existing_alias = factories.AliasFactory(domain=domain)
|
||||||
|
|
||||||
dimail_client = DimailAPIClient()
|
dimail_client = DimailAPIClient()
|
||||||
|
|
||||||
# Ensure successful response using "responses":
|
# Ensure successful response using "responses":
|
||||||
# token response in fixtures
|
# token response in fixtures
|
||||||
mailbox_valid = {
|
mailbox_valid = {
|
||||||
@@ -111,15 +113,24 @@ def test_dimail_synchronization__synchronize_mailboxes(mock_warning, dimail_toke
|
|||||||
"surName": "Vang",
|
"surName": "Vang",
|
||||||
"displayName": "Jean Vang",
|
"displayName": "Jean Vang",
|
||||||
}
|
}
|
||||||
|
mailbox_existing_username = {
|
||||||
|
"type": "mailbox",
|
||||||
|
"status": "broken",
|
||||||
|
"email": f"{existing_alias.local_part}@{domain.name}",
|
||||||
|
"givenName": "Support",
|
||||||
|
"surName": "email",
|
||||||
|
"displayName": "Support email",
|
||||||
|
}
|
||||||
|
|
||||||
responses.get(
|
responses.get(
|
||||||
re.compile(rf".*/domains/{domain.name}/mailboxes/"),
|
re.compile(rf".*/domains/{domain.name}/mailboxes/"),
|
||||||
json=[
|
json=[
|
||||||
mailbox_valid,
|
mailbox_valid,
|
||||||
mailbox_with_wrong_domain,
|
mailbox_with_wrong_domain,
|
||||||
mailbox_with_invalid_domain,
|
mailbox_with_invalid_domain,
|
||||||
mailbox_with_invalid_local_part,
|
mailbox_with_invalid_local_part,
|
||||||
],
|
mailbox_existing_username,
|
||||||
|
],
|
||||||
status=status.HTTP_200_OK,
|
status=status.HTTP_200_OK,
|
||||||
content_type="application/json",
|
content_type="application/json",
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -377,14 +377,16 @@ class DimailAPIClient:
|
|||||||
dimail_mailboxes = response.json()
|
dimail_mailboxes = response.json()
|
||||||
known_mailboxes = models.Mailbox.objects.filter(domain=domain)
|
known_mailboxes = models.Mailbox.objects.filter(domain=domain)
|
||||||
known_aliases = [
|
known_aliases = [
|
||||||
known_alias.local_part
|
known_alias.local_part
|
||||||
for known_alias in models.Alias.objects.filter(domain=domain)
|
for known_alias in models.Alias.objects.filter(domain=domain)
|
||||||
]
|
]
|
||||||
imported_mailboxes = []
|
imported_mailboxes = []
|
||||||
for dimail_mailbox in dimail_mailboxes:
|
for dimail_mailbox in dimail_mailboxes:
|
||||||
if dimail_mailbox["email"] not in [
|
if (
|
||||||
str(known_mailboxes) for known_mailboxes in known_mailboxes
|
dimail_mailbox["email"]
|
||||||
] and dimail_mailbox['email'].split('@')[0] not in known_aliases:
|
not in [str(known_mailboxes) for known_mailboxes in known_mailboxes]
|
||||||
|
and dimail_mailbox["email"].split("@")[0] not in known_aliases
|
||||||
|
):
|
||||||
try:
|
try:
|
||||||
# sometimes dimail api returns email from another domain,
|
# sometimes dimail api returns email from another domain,
|
||||||
# so we decide to exclude this kind of email
|
# so we decide to exclude this kind of email
|
||||||
|
|||||||
Reference in New Issue
Block a user