feat(mail): add governed JMAP mailbox sync and search
Module Package Release / publish-packages (push) Successful in 12s

This commit is contained in:
2026-08-22 17:09:05 +02:00
parent fd808336bc
commit 1cbf4acaf4
29 changed files with 2481 additions and 183 deletions
+30 -2
View File
@@ -21,9 +21,11 @@ from govoplan_mail.backend.db.models import (
from govoplan_mail.backend.manifest import manifest
from govoplan_mail.backend.provider_state import (
IMAP_PROVIDER_ID,
JMAP_PROVIDER_ID,
POP3_PROVIDER_ID,
SMTP_PROVIDER_ID,
imap_provider_states,
jmap_provider_states,
pop3_provider_states,
smtp_provider_states,
)
@@ -124,17 +126,43 @@ class MailProviderStateTests(unittest.TestCase):
),
)
self.assertEqual(
{SMTP_PROVIDER_ID, IMAP_PROVIDER_ID, POP3_PROVIDER_ID},
{SMTP_PROVIDER_ID, IMAP_PROVIDER_ID, JMAP_PROVIDER_ID, POP3_PROVIDER_ID},
{item.id for item in manifest.external_providers},
)
self.assertEqual(
{SMTP_PROVIDER_ID, IMAP_PROVIDER_ID, POP3_PROVIDER_ID},
{SMTP_PROVIDER_ID, IMAP_PROVIDER_ID, JMAP_PROVIDER_ID, POP3_PROVIDER_ID},
{
item.provider_id
for item in manifest.external_provider_state_providers
},
)
def test_jmap_state_reuses_protocol_neutral_index_without_endpoint_details(self) -> None:
self.session.add(
MailServerEndpoint(
id="jmap-server-1",
profile_id=self.profile.id,
tenant_id="tenant-1",
protocol="jmap",
name="JMAP",
config={"session_url": "https://jmap.example.test/.well-known/jmap"},
scope_type="tenant",
scope_id="tenant-1",
is_active=True,
)
)
self.session.flush()
state = jmap_provider_states(
ExternalProviderStateContext(session=self.session, tenant_id="tenant-1")
)[0]
self.assertEqual(JMAP_PROVIDER_ID, state.provider_id)
self.assertEqual("healthy", state.health)
self.assertEqual("current", state.freshness)
self.assertEqual("mail:profile:profile-1:jmap", state.binding_ref)
self.assertNotIn("jmap.example.test", str(state.to_dict()))
def test_pop3_state_is_disabled_by_default_and_projects_deletion_evidence(self) -> None:
endpoint = MailServerEndpoint(
id="pop3-server-1",