Story 3.2 done
This commit is contained in:
@@ -29,6 +29,7 @@ describe('DirectorsBoard', () => {
|
||||
let stateStore;
|
||||
let controller;
|
||||
let adapter;
|
||||
let scenePresetManager;
|
||||
let board;
|
||||
|
||||
beforeEach(() => {
|
||||
@@ -39,8 +40,18 @@ describe('DirectorsBoard', () => {
|
||||
get: vi.fn(() => ({ name: 'Alice', avatar: null })),
|
||||
all: vi.fn(() => [{ id: 'u1' }]),
|
||||
},
|
||||
scenes: {
|
||||
current: vi.fn(() => null),
|
||||
},
|
||||
};
|
||||
board = new DirectorsBoard(stateStore, controller, adapter);
|
||||
scenePresetManager = {
|
||||
list: vi.fn(() => []),
|
||||
save: vi.fn(),
|
||||
load: vi.fn(),
|
||||
_getSceneFlagData: vi.fn(() => null),
|
||||
_getAutoApplyConfig: vi.fn(() => ({ enabled: false, presetName: null, preDelay: 0 })),
|
||||
};
|
||||
board = new DirectorsBoard(stateStore, controller, adapter, scenePresetManager);
|
||||
});
|
||||
|
||||
describe('constructor', () => {
|
||||
@@ -52,10 +63,16 @@ describe('DirectorsBoard', () => {
|
||||
expect(board._hookId).toBeNull();
|
||||
});
|
||||
|
||||
it('stores stateStore, controller, adapter references', () => {
|
||||
it('stores stateStore, controller, adapter, scenePresetManager references', () => {
|
||||
expect(board._stateStore).toBe(stateStore);
|
||||
expect(board._controller).toBe(controller);
|
||||
expect(board._adapter).toBe(adapter);
|
||||
expect(board._scenePresetManager).toBe(scenePresetManager);
|
||||
});
|
||||
|
||||
it('initializes _saveDialog and _loadDialog to null', () => {
|
||||
expect(board._saveDialog).toBeNull();
|
||||
expect(board._loadDialog).toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -362,8 +379,10 @@ describe('DirectorsBoard spotlight', () => {
|
||||
};
|
||||
adapter = {
|
||||
users: { all: vi.fn(() => [{ id: 'u1' }, { id: 'u2' }, { id: 'u3' }]) },
|
||||
scenes: { current: vi.fn(() => null) },
|
||||
i18n: { localize: vi.fn((key) => key) },
|
||||
};
|
||||
board = new DirectorsBoard(stateStore, controller, adapter);
|
||||
board = new DirectorsBoard(stateStore, controller, adapter, null);
|
||||
board.rendered = false;
|
||||
board.render = vi.fn();
|
||||
});
|
||||
@@ -448,4 +467,142 @@ describe('DirectorsBoard spotlight', () => {
|
||||
expect(spy).toHaveBeenCalledWith('u2');
|
||||
});
|
||||
});
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
// Preset Save/Load Tests
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
describe('_prepareContext() with presets', () => {
|
||||
it('should include presetCount in context', async () => {
|
||||
// Create a board with a scenePresetManager that has presets
|
||||
const presetManagerWithPresets = {
|
||||
list: vi.fn().mockReturnValue([
|
||||
{ name: 'Preset 1' },
|
||||
{ name: 'Preset 2' },
|
||||
]),
|
||||
save: vi.fn(),
|
||||
load: vi.fn(),
|
||||
};
|
||||
const boardWithPresets = new DirectorsBoard(stateStore, controller, adapter, presetManagerWithPresets);
|
||||
|
||||
const context = await boardWithPresets._prepareContext();
|
||||
|
||||
expect(context.presetCount).toBe(2);
|
||||
expect(context.hasPresets).toBe(true);
|
||||
});
|
||||
|
||||
it('should include hasPresets false when no presets', async () => {
|
||||
// Create a board with a scenePresetManager that has no presets
|
||||
const presetManagerNoPresets = {
|
||||
list: vi.fn().mockReturnValue([]),
|
||||
save: vi.fn(),
|
||||
load: vi.fn(),
|
||||
};
|
||||
const boardNoPresets = new DirectorsBoard(stateStore, controller, adapter, presetManagerNoPresets);
|
||||
|
||||
const context = await boardNoPresets._prepareContext();
|
||||
|
||||
expect(context.presetCount).toBe(0);
|
||||
expect(context.hasPresets).toBe(false);
|
||||
});
|
||||
|
||||
it('should handle missing scenePresetManager gracefully', async () => {
|
||||
const boardWithoutManager = new DirectorsBoard(stateStore, controller, adapter, null);
|
||||
|
||||
const context = await boardWithoutManager._prepareContext();
|
||||
|
||||
expect(context.presetCount).toBe(0);
|
||||
expect(context.hasPresets).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
describe('_onSavePreset()', () => {
|
||||
it('should have _onSavePreset method defined', () => {
|
||||
expect(board._onSavePreset).toBeDefined();
|
||||
expect(typeof board._onSavePreset).toBe('function');
|
||||
});
|
||||
|
||||
it('should have _onLoadPreset method defined', () => {
|
||||
expect(board._onLoadPreset).toBeDefined();
|
||||
expect(typeof board._onLoadPreset).toBe('function');
|
||||
});
|
||||
|
||||
it('should have _closePresetDialogs method defined', () => {
|
||||
expect(board._closePresetDialogs).toBeDefined();
|
||||
expect(typeof board._closePresetDialogs).toBe('function');
|
||||
});
|
||||
});
|
||||
|
||||
describe('click handler with preset actions', () => {
|
||||
it('should have click handler that processes save-preset action', () => {
|
||||
// The click handler is created in _onRender, so we need to set up the element first
|
||||
const mockElement = {
|
||||
querySelectorAll: vi.fn().mockReturnValue([]),
|
||||
querySelector: vi.fn(() => null),
|
||||
addEventListener: vi.fn(),
|
||||
removeEventListener: vi.fn(),
|
||||
prepend: vi.fn(),
|
||||
after: vi.fn(),
|
||||
};
|
||||
board.element = mockElement;
|
||||
board.rendered = true;
|
||||
|
||||
board._onRender(mockElement);
|
||||
|
||||
const clickHandler = board._clickHandler;
|
||||
expect(clickHandler).toBeDefined();
|
||||
|
||||
// Verify the handler processes the action by checking it doesn't throw
|
||||
expect(typeof clickHandler).toBe('function');
|
||||
});
|
||||
|
||||
it('should have _onSavePreset method', () => {
|
||||
expect(board._onSavePreset).toBeDefined();
|
||||
expect(typeof board._onSavePreset).toBe('function');
|
||||
});
|
||||
|
||||
it('should have _onLoadPreset method', () => {
|
||||
expect(board._onLoadPreset).toBeDefined();
|
||||
expect(typeof board._onLoadPreset).toBe('function');
|
||||
});
|
||||
});
|
||||
|
||||
describe('cleanup on close', () => {
|
||||
it('should call _closePresetDialogs on _onClose', async () => {
|
||||
// Spy on the method
|
||||
const closeSpy = vi.spyOn(board, '_closePresetDialogs');
|
||||
|
||||
// Call _onClose
|
||||
await board._onClose({});
|
||||
|
||||
// _closePresetDialogs should be called
|
||||
expect(closeSpy).toHaveBeenCalled();
|
||||
|
||||
closeSpy.mockRestore();
|
||||
});
|
||||
|
||||
it('should close save dialog on _closePresetDialogs', () => {
|
||||
// Use the board created in beforeEach
|
||||
const saveDialog = { close: vi.fn().mockResolvedValue({}) };
|
||||
board._saveDialog = saveDialog;
|
||||
board._loadDialog = null;
|
||||
|
||||
board._closePresetDialogs();
|
||||
|
||||
expect(saveDialog.close).toHaveBeenCalled();
|
||||
expect(board._saveDialog).toBeNull();
|
||||
});
|
||||
|
||||
it('should close load dialog on _closePresetDialogs', () => {
|
||||
// Use the board created in beforeEach
|
||||
const loadDialog = { close: vi.fn().mockResolvedValue({}) };
|
||||
board._saveDialog = null;
|
||||
board._loadDialog = loadDialog;
|
||||
|
||||
board._closePresetDialogs();
|
||||
|
||||
expect(loadDialog.close).toHaveBeenCalled();
|
||||
expect(board._loadDialog).toBeNull();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user