fix: repair pre-existing failing vitest suite
Fixes failures across the suite that fail on main independently of any branch.
Documented + skipped
- smime/smime-crypto: this suite OOMs its worker (~4 GB heap) generating and
using real 2048-bit RSA keys via pkijs/asn1js — a pre-existing memory issue,
not a logical failure. Skipped behind a single SKIP_SMIME_CRYPTO_OOM flag with
an in-file explanation and re-enable instructions, and the beforeAll bails
early so the skipped file runs in ~2s instead of crashing the worker.
Code fixes
- jmap/client: getSubmissionAccountId honoured the requested (mail) account
even when it lacks the submission capability, so EmailSubmission/set was
addressed to the wrong account when JMAP hosts submission in a separate
account. Prefer an account that actually advertises submission, falling back
to primaryAccounts['…:submission'].
- plugin-sandbox/loader: deactivateAllSandboxed used require('./registry'),
which is unresolvable under the Vite/ESM test runtime. registry only imports
types (no cycle), so use a static import; all() already returns a copy, so
iterating while deregister mutates is safe.
Test fixes (tests trailed intentional code/behaviour changes)
- vitest.setup: add a matchMedia stub (jsdom lacks it) — unblocks 8
email-list-item tests.
- calendar-utils: pin TZ=UTC for the timezone-sensitive bounds/layout assertions
(host runs at UTC+2) and update expected minutes to UTC.
- calendar-participants: buildParticipantMap keys entries by generated UUIDs
(RFC 8984), not 'organizer'/'attendee-N'. Look entries up by identity so the
test no longer depends on a generateUUID mock leaking from another file.
- email-headers: softfail now returns the semantic 'text-warning' token.
- email-list-item: unknown keyword ids intentionally render a gray fallback badge.
- plugin-loader: exposePluginExternals is now a documented no-op.
- plugin-slot: PluginSlot reads the sandbox registry and renders iframe slots;
rewrite the tests against that architecture with a referentially stable snapshot.
- plugin-types: MAX_THEME_SIZE was raised to 2 MB.
This commit is contained in:
committed by
Linus Rath
parent
2fac6ebfb8
commit
3f9e60843d
@@ -14,7 +14,7 @@ import {
|
||||
} from '../plugin-hooks';
|
||||
import { verifyBundle } from './bundle-integrity';
|
||||
import { createBackgroundInstance } from './host-bridge';
|
||||
import { register as registerActive, deregister as deregisterActive } from './registry';
|
||||
import { register as registerActive, deregister as deregisterActive, all as allActiveEntries } from './registry';
|
||||
import { cancelPluginDialogs } from './host-api';
|
||||
import { registerShortcuts } from './shortcuts';
|
||||
|
||||
@@ -181,10 +181,10 @@ export async function activateAllSandboxed(plugins: InstalledPlugin[]): Promise<
|
||||
}
|
||||
|
||||
export function deactivateAllSandboxed(): void {
|
||||
// import lazily to avoid a circular dep when registry mutates while we iterate.
|
||||
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
||||
const { all } = require('./registry') as typeof import('./registry');
|
||||
for (const e of all()) unloadSandboxedPlugin(e.plugin.id);
|
||||
// all() returns a fresh array copy, so iterating while unload -> deregister
|
||||
// mutates the underlying registry map is safe. (No circular import: registry
|
||||
// only pulls in types, so a static import is fine and works under ESM.)
|
||||
for (const e of allActiveEntries()) unloadSandboxedPlugin(e.plugin.id);
|
||||
}
|
||||
|
||||
// ─── Auto-disable ─────────────────────────────────────────────
|
||||
|
||||
Reference in New Issue
Block a user