// @ts-nocheck /** * tests/helpers/foundryAdapterMock.js * * Canonical FoundryAdapter mock factory. * ALL tests in this project MUST use this factory — no ad-hoc stubs. * * Usage: * import { createFoundryAdapterMock } from '../helpers/foundryAdapterMock.js' * const adapter = createFoundryAdapterMock() * const adapter = createFoundryAdapterMock({ settings: { get: () => 'custom' } }) * * Surface contract mirrors FoundryAdapter (src/foundry/FoundryAdapter.js): * settings, socket, users, scenes, notifications, webrtc, hooks */ /** * Creates a mock FoundryAdapter with optional overrides. * * All methods are vi.fn() stubs by default; pass overrides to customise. * * @param {Partial} [overrides={}] * @returns {FoundryAdapterSurface} */ export function createFoundryAdapterMock(overrides = {}) { const defaults = { settings: { register: () => {}, get: () => null, set: () => Promise.resolve(), ...overrides.settings, }, socket: { emit: () => {}, on: () => {}, off: () => {}, ...overrides.socket, }, users: { get: () => null, all: () => [], isGM: () => false, current: () => overrides.users?.get?.("test-user") ?? null, ...overrides.users, }, scenes: { current: () => null, get: () => null, ...overrides.scenes, }, notifications: { info: () => {}, warn: () => {}, error: () => {}, ...overrides.notifications, }, /** * WebRTC track-disabling surface, or null when OQ-1 resolved to css-fallback. * * Default is null (CSS fallback path). FoundryVTT v14 spike (Story 1.2) confirmed * that track.enabled = false does not stop inbound RTP bandwidth, so the probe * always returns 'css-fallback' and this.webrtc remains null in production. * * To simulate the track-disable path in tests, override with: * createFoundryAdapterMock({ webrtc: { disableTrack: vi.fn(), enableTrack: vi.fn() } }) */ webrtc: overrides.webrtc !== undefined ? overrides.webrtc : null, hooks: { on: () => {}, once: () => {}, off: () => {}, callAll: () => {}, ...overrides.hooks, }, }; return defaults; }