fix(email): make the "Move to" context menu work across accounts
Moving a message to a folder in another account (own ↔ delegated/shared) via the "Move to" context menu was a no-op — the handlers always issued a single-account Email/set, which can't move between JMAP accounts. Drag-and-drop already routed these correctly; the context menu never did. Add moveToMailboxCrossAware: it detects a cross-account destination (own and shared mailboxes both carry accountId) and routes through the drag-and-drop crossAccountMoveEmails pipeline, else falls back to the single-account move. Fix the pipeline for delegated folders too: a client can't stage a blob in a delegated account (Blob/upload → blobNotFound), so importing into a shared folder failed. When one client reaches both accounts, use a server-side JMAP Email/copy (+ destroy original) instead of blob copy+import; the blob path is kept only for separate cross-server login accounts. Adds client.copyEmailAcrossAccounts. Unit tests for the dispatch; the two 08-shared-moves specs are un-pinned. Full docker integration suite green (37 passed).
This commit is contained in:
@@ -77,12 +77,9 @@ test.describe('Shared-folder moves', () => {
|
||||
expect(await ja.findEmailBySubject(s, teamB), 'message left TeamB').toBeFalsy();
|
||||
});
|
||||
|
||||
// KNOWN LIMITATION (documented via test.fail): the "Move to" submenu offers a
|
||||
// shared folder as a destination for an own-account message, but clicking it
|
||||
// does NOT relocate the message across the account boundary — it stays put.
|
||||
// Same in reverse (shared -> own). If cross-account moves get implemented,
|
||||
// these will start passing; flip them back to plain tests then.
|
||||
test.fail('own account -> shared folder', async ({ page }) => {
|
||||
// The "Move to" submenu relocates a message across the account boundary
|
||||
// (own ↔ shared folder) via copy+delete, matching drag-and-drop.
|
||||
test('own account -> shared folder', async ({ page }) => {
|
||||
const s = subj('mv-own2sh');
|
||||
await sendMail({ from: carol.email, authPass: carol.password, to: carol.email, subject: s, body: 'x' });
|
||||
await jc.waitForEmail(s);
|
||||
@@ -100,7 +97,7 @@ test.describe('Shared-folder moves', () => {
|
||||
expect(await ja.findEmailBySubject(s, teamA), 'message in shared TeamA').toBeTruthy();
|
||||
});
|
||||
|
||||
test.fail('shared folder -> own account', async ({ page }) => {
|
||||
test('shared folder -> own account', async ({ page }) => {
|
||||
const s = subj('mv-sh2own');
|
||||
await seedInto(teamA, s);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user