mirror of
https://github.com/willmiao/ComfyUI-Lora-Manager.git
synced 2026-03-25 07:05:43 -03:00
test(frontend): add dom fixture helpers
This commit is contained in:
@@ -1,53 +0,0 @@
|
||||
import { describe, it, expect, beforeEach } from 'vitest';
|
||||
import { createDefaultSettings, getCurrentPageState, initPageState, setCurrentPageType, state } from './index.js';
|
||||
import { MODEL_TYPES } from '../api/apiConfig.js';
|
||||
import { DEFAULT_PATH_TEMPLATES } from '../utils/constants.js';
|
||||
|
||||
describe('state module', () => {
|
||||
beforeEach(() => {
|
||||
// Reset to default page before each assertion
|
||||
state.currentPageType = MODEL_TYPES.LORA;
|
||||
});
|
||||
|
||||
it('creates default settings with immutable template copies', () => {
|
||||
const defaultSettings = createDefaultSettings();
|
||||
|
||||
expect(defaultSettings).toMatchObject({
|
||||
civitai_api_key: '',
|
||||
language: 'en',
|
||||
blur_mature_content: true
|
||||
});
|
||||
|
||||
expect(defaultSettings.download_path_templates).toEqual(DEFAULT_PATH_TEMPLATES);
|
||||
|
||||
// ensure nested objects are new references so tests can safely mutate
|
||||
expect(defaultSettings.download_path_templates).not.toBe(DEFAULT_PATH_TEMPLATES);
|
||||
expect(defaultSettings.base_model_path_mappings).toEqual({});
|
||||
expect(Object.isFrozen(defaultSettings)).toBe(false);
|
||||
});
|
||||
|
||||
it('switches current page type when valid', () => {
|
||||
const didSwitch = setCurrentPageType(MODEL_TYPES.CHECKPOINT);
|
||||
|
||||
expect(didSwitch).toBe(true);
|
||||
expect(state.currentPageType).toBe(MODEL_TYPES.CHECKPOINT);
|
||||
expect(getCurrentPageState()).toBe(state.pages[MODEL_TYPES.CHECKPOINT]);
|
||||
});
|
||||
|
||||
it('rejects switching to an unknown page type', () => {
|
||||
state.currentPageType = MODEL_TYPES.LORA;
|
||||
|
||||
const didSwitch = setCurrentPageType('invalid-page');
|
||||
|
||||
expect(didSwitch).toBe(false);
|
||||
expect(state.currentPageType).toBe(MODEL_TYPES.LORA);
|
||||
});
|
||||
|
||||
it('initializes and returns state for a known page', () => {
|
||||
const pageState = initPageState(MODEL_TYPES.EMBEDDING);
|
||||
|
||||
expect(pageState).toBeDefined();
|
||||
expect(pageState).toBe(state.pages[MODEL_TYPES.EMBEDDING]);
|
||||
expect(state.currentPageType).toBe(MODEL_TYPES.EMBEDDING);
|
||||
});
|
||||
});
|
||||
@@ -1,111 +0,0 @@
|
||||
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
|
||||
import * as storageHelpers from './storageHelpers.js';
|
||||
|
||||
const {
|
||||
getStorageItem,
|
||||
setStorageItem,
|
||||
removeStorageItem,
|
||||
getSessionItem,
|
||||
setSessionItem,
|
||||
removeSessionItem,
|
||||
} = storageHelpers;
|
||||
|
||||
const createFakeStorage = () => {
|
||||
const store = new Map();
|
||||
return {
|
||||
getItem: vi.fn((key) => (store.has(key) ? store.get(key) : null)),
|
||||
setItem: vi.fn((key, value) => {
|
||||
store.set(key, value);
|
||||
}),
|
||||
removeItem: vi.fn((key) => {
|
||||
store.delete(key);
|
||||
}),
|
||||
clear: vi.fn(() => {
|
||||
store.clear();
|
||||
}),
|
||||
key: vi.fn((index) => Array.from(store.keys())[index] ?? null),
|
||||
get length() {
|
||||
return store.size;
|
||||
},
|
||||
_store: store
|
||||
};
|
||||
};
|
||||
|
||||
let localStorageMock;
|
||||
let sessionStorageMock;
|
||||
let consoleLogMock;
|
||||
|
||||
beforeEach(() => {
|
||||
localStorageMock = createFakeStorage();
|
||||
sessionStorageMock = createFakeStorage();
|
||||
vi.stubGlobal('localStorage', localStorageMock);
|
||||
vi.stubGlobal('sessionStorage', sessionStorageMock);
|
||||
consoleLogMock = vi.spyOn(console, 'log').mockImplementation(() => {});
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
vi.unstubAllGlobals();
|
||||
vi.restoreAllMocks();
|
||||
});
|
||||
|
||||
describe('storageHelpers namespace utilities', () => {
|
||||
it('returns parsed JSON for prefixed localStorage items', () => {
|
||||
localStorage.setItem('lora_manager_preferences', JSON.stringify({ theme: 'dark' }));
|
||||
|
||||
const result = getStorageItem('preferences');
|
||||
|
||||
expect(result).toEqual({ theme: 'dark' });
|
||||
expect(localStorage.getItem).toHaveBeenCalledWith('lora_manager_preferences');
|
||||
});
|
||||
|
||||
it('falls back to legacy keys and migrates them to the namespace', () => {
|
||||
localStorage.setItem('legacy_key', 'value');
|
||||
|
||||
const value = getStorageItem('legacy_key');
|
||||
|
||||
expect(value).toBe('value');
|
||||
expect(localStorage.getItem('lora_manager_legacy_key')).toBe('value');
|
||||
});
|
||||
|
||||
it('serializes objects when setting prefixed localStorage values', () => {
|
||||
const data = { ids: [1, 2, 3] };
|
||||
|
||||
setStorageItem('data', data);
|
||||
|
||||
expect(localStorage.setItem).toHaveBeenCalledWith('lora_manager_data', JSON.stringify(data));
|
||||
expect(localStorage.getItem('lora_manager_data')).toEqual(JSON.stringify(data));
|
||||
});
|
||||
|
||||
it('removes both prefixed and legacy localStorage entries', () => {
|
||||
localStorage.setItem('lora_manager_temp', '123');
|
||||
localStorage.setItem('temp', '456');
|
||||
|
||||
removeStorageItem('temp');
|
||||
|
||||
expect(localStorage.getItem('lora_manager_temp')).toBeNull();
|
||||
expect(localStorage.getItem('temp')).toBeNull();
|
||||
});
|
||||
|
||||
it('returns parsed JSON for session storage items', () => {
|
||||
sessionStorage.setItem('lora_manager_session', JSON.stringify({ page: 'loras' }));
|
||||
|
||||
const session = getSessionItem('session');
|
||||
|
||||
expect(session).toEqual({ page: 'loras' });
|
||||
});
|
||||
|
||||
it('stores primitives in session storage directly', () => {
|
||||
setSessionItem('token', 'abc123');
|
||||
|
||||
expect(sessionStorage.setItem).toHaveBeenCalledWith('lora_manager_token', 'abc123');
|
||||
expect(sessionStorage.getItem('lora_manager_token')).toBe('abc123');
|
||||
});
|
||||
|
||||
it('removes session storage entries by namespace', () => {
|
||||
sessionStorage.setItem('lora_manager_flag', '1');
|
||||
|
||||
removeSessionItem('flag');
|
||||
|
||||
expect(sessionStorage.getItem('lora_manager_flag')).toBeNull();
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user