Merge pull request #509 from hildebrandttk/feat/unified-mailbox-account-scope
Feat/unified mailbox account scope Rework the sidebar "All accounts" into an account-bounded "Unified Mailbox" by default, with cross-account merging as an opt-in (admin-gated) sub-option. The standalone per-account "All Mail" virtual folder is folded into the unified All mail / Unread / Starred entries. Conflict resolution notes: - stores/settings-store.ts: both main and this branch independently added a per-account default-identity (#507) migration at different versions (main v6, branch v7). Merged migration is version 7 using the refactored migrateSettings function; the unified-mailbox rework is guarded at `version < 7` so users who stopped at main's interim v6 identity bump still receive it, while the #507 identity-map coercion stays at `version < 6` so their populated map is kept. - stores/auth-store.ts: kept main's applyPreferredIdentity (superset with the pre-#507 legacy migration). - stores/email-store.ts: removed the ALL_MAIL_MAILBOX_ID paths (folded into the unified views) while preserving main's plugin hooks (onSearchResults / onEmailsFetched); adopted advancedSearchCrossViewEmails for advanced cross-view search. - components/settings/layout-settings.tsx: kept main's faviconUnreadBadge setting alongside the new unifiedCrossAccount toggle. - integration/: union-merged the two independently-authored suites - branch suite is authoritative (matches new behavior) with main's shared-identity (#569) group infrastructure preserved. - components/email/email-composer.tsx: dropped a duplicate data-testid attribute introduced by the auto-merge.
This commit is contained in:
+38
-1
@@ -80,9 +80,46 @@ integration/
|
||||
│ └── app.ts # login, add/switch account, folder-counter reads
|
||||
├── 01-login.spec.ts
|
||||
├── 02-mail-sync.spec.ts # single-account: receive/read/move/delete/folder-create
|
||||
└── 03-multi-account.spec.ts # isolation + cross-account Unified Inbox aggregation
|
||||
├── 03-multi-account.spec.ts # isolation + cross-account Unified Inbox aggregation
|
||||
├── 04-all-mail.spec.ts # All Mail view: single-account merge + cross-account
|
||||
├── 04-shared-identity.spec.ts# composer From offers shared/group send-as identities (issue #569)
|
||||
├── 05-actions.spec.ts # context-menu read/unread, delete, spam (inbox)
|
||||
├── 06-shared-folders.spec.ts # delegated folder: appears + read/unread/delete/spam
|
||||
├── 07-drafts.spec.ts # multiple recipients, changed sender, continue-draft button
|
||||
├── 08-shared-moves.spec.ts # moving mail across own/shared and shared/shared
|
||||
├── 09-live-counters.spec.ts # live unified/All-Mail counters (login + shared)
|
||||
└── 10-attachments.spec.ts # cross-account attachment download from All Mail
|
||||
```
|
||||
|
||||
## Findings surfaced by the suite
|
||||
|
||||
Some tests assert server-side truth (or use `test.fail` to pin a known gap)
|
||||
because the UI behaviour is currently incomplete. Worth a look:
|
||||
|
||||
- **Shared-account counters now reconcile on focus/interval** (`09-live-counters`).
|
||||
Stalwart's SSE only pushes StateChange for the *primary* account, so a
|
||||
background change in a shared/delegated account is never pushed. The client
|
||||
now also polls the session's secondary accounts, so their folder badges and
|
||||
the unified/All-Mail counter refresh on the visibility reconcile and on a slow
|
||||
background poll. (A *login* account already updates live via its own SSE.)
|
||||
Note: these shared counters still don't update the instant a local action
|
||||
runs — they follow the reconcile, not the optimistic path.
|
||||
- **`mark-as-spam` doesn't optimistically decrement the source counter** the
|
||||
way `delete` does; it settles after a reconcile.
|
||||
- **Reopening a draft resets the From selector** to the default identity even
|
||||
though the draft was saved with (and the server retains) the chosen sender.
|
||||
Pinned with `test.fail` in `07-drafts`.
|
||||
- **Cross-account moves (own ⇆ shared folder) don't relocate the message.** The
|
||||
"Move to" submenu offers the shared folder, but clicking it is a no-op.
|
||||
Shared ⇆ shared (same owner) moves work. Pinned with `test.fail` in
|
||||
`08-shared-moves`.
|
||||
- **Cross-account attachments & inline images (fixed).** Blobs are account-
|
||||
scoped, so viewing/downloading/previewing an attachment, rendering an inline
|
||||
`cid:` image, dragging out, and the bundle/S-MIME/TNEF/embedded-message
|
||||
fetches on an All-Mail message from another account 404'd against the active
|
||||
account. Every viewer blob fetch now routes to the message's owning client +
|
||||
accountId (`10-attachments` covers download + inline image).
|
||||
|
||||
## How the tests work
|
||||
|
||||
- **Mutations** are made out-of-band — mail is injected over SMTP
|
||||
|
||||
Reference in New Issue
Block a user