feat(quick-261008-who): eigene Module beim Start vorladen — Durchstich
- Spalte User.customModulePreloadIds, PUT /custom-modules/:id/preload (Grenze 8, 404 fuer Fremdes) - Vorlade-Planer und -Komponente, Speicher preload()/pinned, Ersatzgroesse im Behaelter - E2E-Skript gegen die API Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import { CUSTOM_MODULE_PRELOAD_MAX } from '@tessera/shared';
|
||||
import { beforeEach, describe, expect, it } from 'vitest';
|
||||
import {
|
||||
CUSTOM_MODULE_KEEP_ALIVE_MAX,
|
||||
@@ -81,3 +82,55 @@ describe('useCustomModuleCacheStore', () => {
|
||||
expect(state.active).toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
describe('useCustomModuleCacheStore — preload (quick-261008-who)', () => {
|
||||
const mod = (id: string) => ({ id, name: id, url: `https://x.test/${id}` });
|
||||
|
||||
beforeEach(() => {
|
||||
useCustomModuleCacheStore.getState().clear();
|
||||
});
|
||||
|
||||
it('merkt Metadaten, haengt hinten an openIds, pinnt und laesst active unberuehrt', () => {
|
||||
useCustomModuleCacheStore.getState().preload(mod('a'));
|
||||
useCustomModuleCacheStore.getState().preload(mod('b'));
|
||||
const s = useCustomModuleCacheStore.getState();
|
||||
expect(s.modules.a).toEqual(mod('a'));
|
||||
expect(s.openIds).toEqual(['a', 'b']);
|
||||
expect(s.pinned).toEqual(['a', 'b']);
|
||||
expect(s.active).toBeNull();
|
||||
});
|
||||
|
||||
it('zweimal aufgerufen aendert nichts', () => {
|
||||
useCustomModuleCacheStore.getState().preload(mod('a'));
|
||||
const before = useCustomModuleCacheStore.getState();
|
||||
useCustomModuleCacheStore.getState().preload(mod('a'));
|
||||
expect(useCustomModuleCacheStore.getState()).toBe(before);
|
||||
});
|
||||
|
||||
it('ignoriert mehr als CUSTOM_MODULE_PRELOAD_MAX gepinnte', () => {
|
||||
for (let i = 0; i < CUSTOM_MODULE_PRELOAD_MAX + 2; i++) {
|
||||
useCustomModuleCacheStore.getState().preload(mod(`m${i}`));
|
||||
}
|
||||
const s = useCustomModuleCacheStore.getState();
|
||||
expect(s.pinned).toHaveLength(CUSTOM_MODULE_PRELOAD_MAX);
|
||||
expect(s.openIds).toHaveLength(CUSTOM_MODULE_PRELOAD_MAX);
|
||||
});
|
||||
|
||||
it('forget und clear entfernen auch aus pinned', () => {
|
||||
useCustomModuleCacheStore.getState().preload(mod('a'));
|
||||
useCustomModuleCacheStore.getState().preload(mod('b'));
|
||||
useCustomModuleCacheStore.getState().forget('a');
|
||||
expect(useCustomModuleCacheStore.getState().pinned).toEqual(['b']);
|
||||
useCustomModuleCacheStore.getState().clear();
|
||||
expect(useCustomModuleCacheStore.getState().pinned).toEqual([]);
|
||||
});
|
||||
|
||||
it('activate eines gepinnten Moduls laesst es gepinnt', () => {
|
||||
useCustomModuleCacheStore.getState().preload(mod('a'));
|
||||
useCustomModuleCacheStore.getState().activate('a', document.createElement('div'));
|
||||
const s = useCustomModuleCacheStore.getState();
|
||||
expect(s.pinned).toEqual(['a']);
|
||||
expect(s.openIds).toEqual(['a']);
|
||||
expect(s.active?.id).toBe('a');
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user