mirror of
https://github.com/immich-app/immich.git
synced 2026-02-25 20:50:15 -05:00
fix(web): prevent null folder tree on concurrent load (#26489)
This commit is contained in:
parent
f62d98a0d1
commit
30f6d4439e
42
web/src/lib/stores/folders.svelte.spec.ts
Normal file
42
web/src/lib/stores/folders.svelte.spec.ts
Normal file
@ -0,0 +1,42 @@
|
||||
import { foldersStore } from '$lib/stores/folders.svelte';
|
||||
import { getUniqueOriginalPaths } from '@immich/sdk';
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
|
||||
vi.mock('$lib/managers/event-manager.svelte', () => ({
|
||||
eventManager: {
|
||||
on: vi.fn(),
|
||||
},
|
||||
}));
|
||||
|
||||
vi.mock('@immich/sdk', () => ({
|
||||
getAssetsByOriginalPath: vi.fn(),
|
||||
getUniqueOriginalPaths: vi.fn(),
|
||||
}));
|
||||
|
||||
describe('foldersStore', () => {
|
||||
beforeEach(() => {
|
||||
foldersStore.clearCache();
|
||||
vi.clearAllMocks();
|
||||
});
|
||||
|
||||
it('returns the same non-null tree for concurrent fetchTree calls', async () => {
|
||||
let resolvePaths: (value: string[]) => void;
|
||||
|
||||
vi.mocked(getUniqueOriginalPaths).mockReturnValue(
|
||||
new Promise<string[]>((resolve) => {
|
||||
resolvePaths = resolve;
|
||||
}),
|
||||
);
|
||||
|
||||
const first = foldersStore.fetchTree();
|
||||
const second = foldersStore.fetchTree();
|
||||
|
||||
resolvePaths!(['/photos/2026']);
|
||||
|
||||
const [firstTree, secondTree] = await Promise.all([first, second]);
|
||||
|
||||
expect(firstTree).not.toBeNull();
|
||||
expect(secondTree).not.toBeNull();
|
||||
expect(secondTree).toEqual(firstTree);
|
||||
});
|
||||
});
|
||||
@ -28,10 +28,9 @@ class FoldersStore {
|
||||
if (this.initialized) {
|
||||
return this.folders!;
|
||||
}
|
||||
this.initialized = true;
|
||||
|
||||
this.folders = TreeNode.fromPaths(await getUniqueOriginalPaths());
|
||||
this.folders.collapse();
|
||||
this.initialized = true;
|
||||
return this.folders;
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user