50 lines
1.5 KiB
Python
50 lines
1.5 KiB
Python
from __future__ import annotations
|
|
|
|
import unittest
|
|
|
|
from govoplan_mail.backend.db.models import MailMailboxFolderIndex, MailMailboxMessageIndex
|
|
from govoplan_mail.backend.mailbox_index import clear_mailbox_index
|
|
|
|
|
|
class _DeleteQuery:
|
|
def __init__(self, model: type, deleted_models: list[type]) -> None:
|
|
self.model = model
|
|
self.deleted_models = deleted_models
|
|
|
|
def filter(self, *_criteria):
|
|
return self
|
|
|
|
def delete(self, *, synchronize_session: bool) -> int:
|
|
if synchronize_session is not False:
|
|
raise AssertionError("bulk invalidation must not synchronize loaded cache rows")
|
|
self.deleted_models.append(self.model)
|
|
return 2 if self.model is MailMailboxMessageIndex else 1
|
|
|
|
|
|
class _Session:
|
|
def __init__(self) -> None:
|
|
self.deleted_models: list[type] = []
|
|
|
|
def query(self, model: type) -> _DeleteQuery:
|
|
return _DeleteQuery(model, self.deleted_models)
|
|
|
|
|
|
class MailboxIndexInvalidationTests(unittest.TestCase):
|
|
def test_profile_wide_invalidation_deletes_messages_before_folders(self) -> None:
|
|
session = _Session()
|
|
|
|
deleted_folders, deleted_messages = clear_mailbox_index(
|
|
session, # type: ignore[arg-type]
|
|
profile_id="profile-1",
|
|
)
|
|
|
|
self.assertEqual(
|
|
session.deleted_models,
|
|
[MailMailboxMessageIndex, MailMailboxFolderIndex],
|
|
)
|
|
self.assertEqual((deleted_folders, deleted_messages), (1, 2))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|