Update comprehensive test suite with improved mocks
- Improved mock element implementation with proper innerHTML/textContent support - Added getElementById mock that returns different elements based on ID - Enhanced querySelectorAll mock for episode number queries - Fixed isUpdatingEpisodeNumbers test to access property directly - Tests now show 41/70 passing with improved mocks
This commit is contained in:
parent
7bd7cdacac
commit
ba6ff78cca
@ -2,10 +2,20 @@ const { test, describe, beforeEach, afterEach } = require('node:test');
|
|||||||
const assert = require('node:assert');
|
const assert = require('node:assert');
|
||||||
|
|
||||||
// Create a simple mock for DOM
|
// Create a simple mock for DOM
|
||||||
const createMockElement = () => ({
|
const createMockElement = (overrides = {}) => {
|
||||||
|
const el = {
|
||||||
style: {},
|
style: {},
|
||||||
innerHTML: '',
|
get innerHTML() { return this._innerHTML || ''; },
|
||||||
textContent: '',
|
set innerHTML(val) {
|
||||||
|
this._innerHTML = val;
|
||||||
|
// Parse simple HTML to extract textContent for episode numbers
|
||||||
|
if (val.includes('episode-number')) {
|
||||||
|
const match = val.match(/>(\d+|-?\d+-\d+)<\/div>/);
|
||||||
|
this._textContent = match ? match[1] : '';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
get textContent() { return this._textContent || ''; },
|
||||||
|
set textContent(val) { this._textContent = val; },
|
||||||
dataset: {},
|
dataset: {},
|
||||||
className: '',
|
className: '',
|
||||||
addEventListener: () => {},
|
addEventListener: () => {},
|
||||||
@ -14,7 +24,19 @@ const createMockElement = () => ({
|
|||||||
insertBefore: () => {},
|
insertBefore: () => {},
|
||||||
remove: () => {},
|
remove: () => {},
|
||||||
querySelector: () => null,
|
querySelector: () => null,
|
||||||
querySelectorAll: () => [],
|
querySelectorAll: (selector) => {
|
||||||
|
// Simple mock implementation
|
||||||
|
if (selector === '.episode-number') {
|
||||||
|
return [{
|
||||||
|
textContent: '1',
|
||||||
|
dataset: { episodeStart: '1', episodeEnd: '1' },
|
||||||
|
style: {},
|
||||||
|
addEventListener: () => {},
|
||||||
|
removeEventListener: () => {}
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
return [];
|
||||||
|
},
|
||||||
setAttribute: () => {},
|
setAttribute: () => {},
|
||||||
removeAttribute: () => {},
|
removeAttribute: () => {},
|
||||||
hasAttribute: () => false,
|
hasAttribute: () => false,
|
||||||
@ -26,26 +48,65 @@ const createMockElement = () => ({
|
|||||||
dispatchEvent: () => true,
|
dispatchEvent: () => true,
|
||||||
classList: { add: () => {}, remove: () => {} },
|
classList: { add: () => {}, remove: () => {} },
|
||||||
get parentElement() { return null; }
|
get parentElement() { return null; }
|
||||||
});
|
};
|
||||||
|
return { ...el, ...overrides };
|
||||||
|
};
|
||||||
|
|
||||||
|
// Mock DOM - create different elements based on ID
|
||||||
|
const mockElements = {
|
||||||
|
'file-list': createMockElement({ innerHTML: '<div class="file-item"><div class="episode-number">1</div></div>' }),
|
||||||
|
'search-results': createMockElement(),
|
||||||
|
'show-details': createMockElement(),
|
||||||
|
'episode-list': createMockElement(),
|
||||||
|
'modal': createMockElement({ className: 'modal' }),
|
||||||
|
'progress-container': createMockElement()
|
||||||
|
};
|
||||||
|
|
||||||
// Mock DOM
|
|
||||||
global.document = {
|
global.document = {
|
||||||
getElementById: () => createMockElement(),
|
getElementById: (id) => mockElements[id] || createMockElement(),
|
||||||
querySelector: () => null,
|
querySelector: () => null,
|
||||||
querySelectorAll: () => [],
|
querySelectorAll: (selector) => {
|
||||||
|
// Return mock elements based on selector
|
||||||
|
if (selector === '.episode-number') {
|
||||||
|
return [createMockElement({ textContent: '1', dataset: { episodeStart: '1', episodeEnd: '1' } })];
|
||||||
|
}
|
||||||
|
if (selector === '.file-item') {
|
||||||
|
return [createMockElement()];
|
||||||
|
}
|
||||||
|
return [];
|
||||||
|
},
|
||||||
addEventListener: () => {},
|
addEventListener: () => {},
|
||||||
removeEventListener: () => {},
|
removeEventListener: () => {},
|
||||||
createElement: () => createMockElement(),
|
createElement: () => createMockElement(),
|
||||||
createRange: () => ({ selectNodeContents: () => {} }),
|
createRange: () => ({ selectNodeContents: () => {} }),
|
||||||
getSelection: () => ({ addRange: () => {}, removeAllRanges: () => {} })
|
getSelection: () => ({
|
||||||
|
addRange: () => {},
|
||||||
|
removeAllRanges: () => {},
|
||||||
|
getRangeAt: () => ({
|
||||||
|
startContainer: { nodeValue: '1-3' },
|
||||||
|
endContainer: { nodeValue: '1-3' }
|
||||||
|
}),
|
||||||
|
toString: () => '1-3'
|
||||||
|
})
|
||||||
};
|
};
|
||||||
|
|
||||||
global.window = {
|
global.window = {
|
||||||
addEventListener: () => {},
|
addEventListener: () => {},
|
||||||
dispatchEvent: () => true,
|
dispatchEvent: () => true,
|
||||||
getComputedStyle: () => ({ display: 'block' })
|
getComputedStyle: () => ({
|
||||||
|
display: 'block',
|
||||||
|
getPropertyValue: () => '#e94560'
|
||||||
|
}),
|
||||||
|
getSelection: () => ({
|
||||||
|
toString: () => '1-3',
|
||||||
|
addRange: () => {},
|
||||||
|
removeAllRanges: () => {}
|
||||||
|
})
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Mock window.confirm for file move confirmation
|
||||||
|
window.confirm = () => true;
|
||||||
|
|
||||||
// Mock ipcRenderer with proper module handling
|
// Mock ipcRenderer with proper module handling
|
||||||
const mockIpcRenderer = {
|
const mockIpcRenderer = {
|
||||||
invoke: async (channel, ...args) => {
|
invoke: async (channel, ...args) => {
|
||||||
@ -183,7 +244,7 @@ describe('AppState', () => {
|
|||||||
|
|
||||||
test('should set and get updating episode numbers flag', () => {
|
test('should set and get updating episode numbers flag', () => {
|
||||||
appState.setUpdatingEpisodeNumbers(true);
|
appState.setUpdatingEpisodeNumbers(true);
|
||||||
assert.strictEqual(appState.isUpdatingEpisodeNumbers(), true);
|
assert.strictEqual(appState.isUpdatingEpisodeNumbers, true);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('should reset all state', () => {
|
test('should reset all state', () => {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user