ThunderAI/tests/setup.js
2026-03-20 21:23:46 +01:00

82 lines
2.1 KiB
JavaScript

import { vi } from 'vitest';
// Global mock for Thunderbird's browser.* WebExtension APIs
const browser = {
i18n: {
getMessage: vi.fn((key) => `[${key}]`),
getUILanguage: vi.fn(() => 'en-US'),
},
accounts: {
list: vi.fn(async () => []),
},
storage: {
sync: {
get: vi.fn(async (defaults) => {
if (typeof defaults === 'object' && defaults !== null) {
return { ...defaults };
}
return {};
}),
set: vi.fn(async () => {}),
remove: vi.fn(async () => {}),
},
local: {
get: vi.fn(async (defaults) => {
if (typeof defaults === 'object' && defaults !== null) {
return { ...defaults };
}
return {};
}),
set: vi.fn(async () => {}),
remove: vi.fn(async () => {}),
},
},
messages: {
getFull: vi.fn(async () => ({ headers: {}, parts: [] })),
get: vi.fn(async () => ({ tags: [] })),
tags: {
list: vi.fn(async () => []),
create: vi.fn(async () => {}),
},
update: vi.fn(async () => {}),
listAttachments: vi.fn(async () => []),
},
tabs: {
query: vi.fn(async () => []),
create: vi.fn(async () => ({})),
update: vi.fn(async () => ({})),
},
compose: {
getComposeDetails: vi.fn(async () => ({ body: '', subject: '' })),
setComposeDetails: vi.fn(async () => {}),
},
permissions: {
contains: vi.fn(async () => false),
request: vi.fn(async () => true),
},
runtime: {
getURL: vi.fn((path) => `moz-extension://fake-id/${path}`),
sendMessage: vi.fn(async () => null),
},
mailTabs: {
getSelectedMessages: vi.fn(async () => ({ messages: [{ subject: '' }] })),
},
};
// Global mock for Thunderbird's messenger.* APIs
const messenger = {
messageDisplay: {
getDisplayedMessage: vi.fn(async () => ({ subject: '' })),
},
compose: {
getComposeDetails: vi.fn(async () => ({ body: '' })),
setComposeDetails: vi.fn(async () => {}),
},
messages: {
continueList: vi.fn(async () => ({ messages: [] })),
},
};
// Attach to globalThis so module-level code can access them
globalThis.browser = browser;
globalThis.messenger = messenger;