4.65.3
Some checks failed
Build-Release-Image / Build-Image (linux/arm64) (push) Failing after 12m22s
Build-Release-Image / Build-Image (linux/amd64) (push) Has been cancelled
Build-Release-Image / Merge-Images (push) Has been cancelled
Build-Release-Image / Create-Release (push) Has been cancelled
Build-Release-Image / Notify (push) Has been cancelled

This commit is contained in:
2025-02-06 12:00:07 +00:00
parent a5801551d0
commit 2904d04a2c
46 changed files with 246 additions and 79 deletions

View File

@ -3,7 +3,7 @@ from flask import url_for
from app import config
from app.db import Session
from app.models import User, PartnerUser
from app.proton.utils import get_proton_partner
from app.proton.proton_partner import get_proton_partner
from tests.api.utils import get_new_user_and_api_key
from tests.utils import login, random_token, random_email

View File

@ -14,7 +14,7 @@ from app.models import (
PartnerSubscription,
User,
)
from app.proton.utils import get_proton_partner
from app.proton.proton_partner import get_proton_partner
from tests.utils import create_new_user, random_token

View File

@ -1,7 +1,7 @@
from app.events.event_dispatcher import Dispatcher
from app.events.generated import event_pb2
from app.models import PartnerUser, User
from app.proton.utils import get_proton_partner
from app.proton.proton_partner import get_proton_partner
from tests.utils import create_new_user, random_token
from typing import Tuple

View File

@ -4,7 +4,7 @@ from app import config
from app.events.generated.event_pb2 import EventContent, AliasDeleted
from app.jobs.send_event_job import SendEventToWebhookJob
from app.models import PartnerUser
from app.proton.utils import get_proton_partner
from app.proton.proton_partner import get_proton_partner
from events.event_sink import ConsoleEventSink
from tests.utils import create_new_user, random_token

View File

@ -0,0 +1,37 @@
from app import config
from app.dns_utils import set_global_dns_client, InMemoryDNSClient
from app.email_utils import get_email_local_part
from app.models import Mailbox
from tests.utils import create_new_user, random_email
dns_client = InMemoryDNSClient()
def setup_module():
set_global_dns_client(dns_client)
def teardown_module():
set_global_dns_client(None)
def test_is_proton_with_email_domain():
user = create_new_user()
mailbox = Mailbox.create(
user_id=user.id, email=f"test@{config.PROTON_EMAIL_DOMAINS[0]}"
)
assert mailbox.is_proton()
mailbox = Mailbox.create(user_id=user.id, email="a@b.c")
assert not mailbox.is_proton()
def test_is_proton_with_mx_domain():
email = random_email()
dns_client.set_mx_records(
get_email_local_part(email), {10: config.PROTON_MX_SERVERS}
)
user = create_new_user()
mailbox = Mailbox.create(user_id=user.id, email=email)
assert mailbox.is_proton()
dns_client.set_mx_records(get_email_local_part(email), {10: ["nowhere.net"]})
assert not mailbox.is_proton()

View File

@ -2,7 +2,7 @@ import arrow
from app import config
from app.db import Session
from app.models import User, Job, PartnerSubscription, PartnerUser, ManualSubscription
from app.proton.utils import get_proton_partner
from app.proton.proton_partner import get_proton_partner
from tests.utils import random_email, random_token

View File

@ -7,7 +7,7 @@ from app.account_linking import (
)
from app.db import Session
from app.models import User, PartnerUser, PartnerSubscription
from app.proton.utils import get_proton_partner
from app.proton.proton_partner import get_proton_partner
from app.utils import random_string
from tests.utils import random_email

View File

@ -11,7 +11,7 @@ from app.proton.proton_callback_handler import (
generate_account_not_allowed_to_log_in,
)
from app.models import User, PartnerUser, Job, JobState
from app.proton.utils import get_proton_partner
from app.proton.proton_partner import get_proton_partner
from app.utils import random_string
from typing import Optional
from tests.utils import random_email

View File

@ -19,7 +19,7 @@ from app.account_linking import (
from app.db import Session
from app.errors import AccountAlreadyLinkedToAnotherPartnerException
from app.models import Partner, PartnerUser, User, UserAuditLog
from app.proton.utils import get_proton_partner
from app.proton.proton_partner import get_proton_partner
from app.user_audit_log_utils import UserAuditLogAction
from app.utils import random_string, canonicalize_email
from tests.utils import random_email

View File

@ -3,7 +3,7 @@ import re
from app.alias_suffix import get_alias_suffixes
from app.db import Session
from app.models import SLDomain, PartnerUser, AliasOptions, CustomDomain
from app.proton.utils import get_proton_partner
from app.proton.proton_partner import get_proton_partner
from init_app import add_sl_domains
from tests.utils import create_new_user, random_token

View File

@ -18,7 +18,7 @@ from app.models import (
PartnerSubscription,
PartnerUser,
)
from app.proton.utils import get_proton_partner
from app.proton.proton_partner import get_proton_partner
from tests.utils import create_new_user, random_string, random_email

View File

@ -6,7 +6,7 @@ from app.custom_domain_validation import CustomDomainValidation
from app.db import Session
from app.dns_utils import InMemoryDNSClient
from app.models import CustomDomain, User
from app.proton.utils import get_proton_partner
from app.proton.proton_partner import get_proton_partner
from app.utils import random_string
from tests.utils import create_new_user, random_domain

View File

@ -1,6 +1,6 @@
from app.db import Session
from app.models import SLDomain, PartnerUser, AliasOptions
from app.proton.utils import get_proton_partner
from app.proton.proton_partner import get_proton_partner
from init_app import add_sl_domains
from tests.utils import create_new_user, random_token

View File

@ -25,7 +25,6 @@ from app.user_audit_log_utils import UserAuditLogAction
from app.utils import random_string, canonicalize_email
from tests.utils import create_new_user, random_email
user: Optional[User] = None
@ -598,3 +597,47 @@ def test_change_mailbox_verified_address(flask_client):
assert changed_mailbox.email == mail2
assert out.activation is None
assert 0 == len(mail_sender.get_stored_emails())
def test_change_mailbox_email_duplicate(flask_client):
user = create_new_user()
domain = f"{random_string(10)}.com"
mail1 = f"mail_1@{domain}"
mbox = Mailbox.create(email=mail1, user_id=user.id, verified=True, flush=True)
mail2 = f"mail_2@{domain}"
request_mailbox_email_change(user, mbox, mail2, email_ownership_verified=True)
with pytest.raises(mailbox_utils.MailboxError):
request_mailbox_email_change(user, mbox, mail2, email_ownership_verified=True)
def test_change_mailbox_email_duplicate_in_another_mailbox(flask_client):
user = create_new_user()
domain = f"{random_string(10)}.com"
mail1 = f"mail_1@{domain}"
mbox1 = Mailbox.create(email=mail1, user_id=user.id, verified=True, flush=True)
mail2 = f"mail_2@{domain}"
mbox2 = Mailbox.create(email=mail2, user_id=user.id, verified=True, flush=True)
mail3 = f"mail_3@{domain}"
request_mailbox_email_change(user, mbox1, mail3)
with pytest.raises(mailbox_utils.MailboxError):
request_mailbox_email_change(user, mbox2, mail3)
def test_change_mailbox_verified_email_clears_pending_email(flask_client):
user = create_new_user()
domain = f"{random_string(10)}.com"
mail = f"mail_1@{domain}"
mbox1 = Mailbox.create(
email=mail,
new_email=f"oldpending_{mail}",
user_id=user.id,
verified=True,
flush=True,
)
new_email = f"new_{mail}"
out = request_mailbox_email_change(
user, mbox1, new_email, email_ownership_verified=True
)
assert out.activation is None
assert out.mailbox.email == new_email
assert out.mailbox.new_email is None

View File

@ -10,7 +10,7 @@ import jinja2
from flask import url_for
from app.models import User, PartnerUser
from app.proton.utils import get_proton_partner
from app.proton.proton_partner import get_proton_partner
from app.utils import random_string