mirror of
https://github.com/simple-login/app.git
synced 2025-09-05 22:24:43 +08:00
fix: mailbox deletion respects alias setting
This commit is contained in:
parent
c776a05ca4
commit
532d69844d
2 changed files with 32 additions and 12 deletions
|
@ -2982,10 +2982,17 @@ class Mailbox(Base, ModelMixin):
|
|||
alias.mailbox_id = first_mb.id
|
||||
alias._mailboxes.remove(first_mb)
|
||||
else:
|
||||
from app.alias_delete import perform_alias_deletion
|
||||
from app.alias_delete import perform_alias_deletion, move_alias_to_trash
|
||||
# If the user setting is DeleteImmediately, perform alias deletion
|
||||
# Otherwise, if the user setting is MoveToTrash, assign the default mailbox and move them to trash
|
||||
|
||||
# only put aliases that have mailbox as a single mailbox into trash
|
||||
perform_alias_deletion(alias, user, AliasDeleteReason.MailboxDeleted)
|
||||
if user.alias_delete_action == UserAliasDeleteAction.DeleteImmediately:
|
||||
perform_alias_deletion(
|
||||
alias, user, AliasDeleteReason.MailboxDeleted
|
||||
)
|
||||
else:
|
||||
alias.mailbox_id = user.default_mailbox_id
|
||||
move_alias_to_trash(alias, user, AliasDeleteReason.MailboxDeleted)
|
||||
Session.commit()
|
||||
|
||||
cls.filter(cls.id == obj_id).delete()
|
||||
|
|
|
@ -43,13 +43,17 @@ def teardown_module():
|
|||
|
||||
def ensure_alias_is_trashed(
|
||||
alias: Alias, expected_audit_log_size: int, reason: AliasDeleteReason
|
||||
):
|
||||
assert alias.enabled is False
|
||||
assert alias.delete_on is not None
|
||||
assert alias.delete_reason == reason
|
||||
) -> Alias:
|
||||
db_alias = Alias.get(alias.id)
|
||||
assert db_alias is not None
|
||||
assert db_alias.enabled is False
|
||||
assert db_alias.delete_on is not None
|
||||
assert db_alias.delete_reason == reason
|
||||
|
||||
# Ensure audit log
|
||||
audit_logs: List[AliasAuditLog] = AliasAuditLog.filter_by(alias_id=alias.id).all()
|
||||
audit_logs: List[AliasAuditLog] = AliasAuditLog.filter_by(
|
||||
alias_id=db_alias.id
|
||||
).all()
|
||||
assert len(audit_logs) == expected_audit_log_size
|
||||
assert (
|
||||
audit_logs[expected_audit_log_size - 2].action
|
||||
|
@ -61,9 +65,11 @@ def ensure_alias_is_trashed(
|
|||
)
|
||||
|
||||
# Ensure DeletedAlias instance is not created
|
||||
deleted_alias: Optional[DeletedAlias] = DeletedAlias.get_by(email=alias.email)
|
||||
deleted_alias: Optional[DeletedAlias] = DeletedAlias.get_by(email=db_alias.email)
|
||||
assert deleted_alias is None
|
||||
|
||||
return db_alias
|
||||
|
||||
|
||||
def ensure_alias_is_deleted(
|
||||
alias_id: int,
|
||||
|
@ -205,9 +211,16 @@ def test_delete_mailbox_deletes_alias_with_user_setting(
|
|||
|
||||
Mailbox.delete(mb.id)
|
||||
|
||||
ensure_alias_is_deleted(
|
||||
alias_id, alias_email, 2, reason=AliasDeleteReason.MailboxDeleted
|
||||
)
|
||||
if user_setting == UserAliasDeleteAction.MoveToTrash:
|
||||
db_alias = ensure_alias_is_trashed(
|
||||
alias, 2, reason=AliasDeleteReason.MailboxDeleted
|
||||
)
|
||||
# Ensure mailbox_id has been changed to the user's default mailbox id
|
||||
assert db_alias.mailbox_id == user.default_mailbox_id
|
||||
elif user_setting == UserAliasDeleteAction.DeleteImmediately:
|
||||
ensure_alias_is_deleted(
|
||||
alias_id, alias_email, 2, reason=AliasDeleteReason.MailboxDeleted
|
||||
)
|
||||
|
||||
|
||||
# Restore alias
|
||||
|
|
Loading…
Add table
Reference in a new issue