fix: Remove the unnecessary item limit from folder media (#2688)
- Fixed: #2573
This commit is contained in:
@@ -238,12 +238,11 @@ describe('HAFoldersEngine', () => {
|
||||
expect(await engine.expandFolder(createHASS(), query)).toBeNull();
|
||||
});
|
||||
|
||||
it('should early exit when limit is reached', async () => {
|
||||
it('should return every matching media item without a cap', async () => {
|
||||
const query: FolderQuery = {
|
||||
source: QuerySource.Folder,
|
||||
folder: { type: 'ha', id: 'test' },
|
||||
path: [{ ha: { id: 'media-source://id' } }],
|
||||
limit: 1,
|
||||
};
|
||||
|
||||
vi.mocked(homeAssistantWSRequest).mockResolvedValueOnce(
|
||||
@@ -266,8 +265,7 @@ describe('HAFoldersEngine', () => {
|
||||
const engine = new HAFoldersEngine(templateManager);
|
||||
const results = await engine.expandFolder(createHASS(), query);
|
||||
|
||||
// Even though there are 2 children, the limit of 1 should trigger earlyExit.
|
||||
expect(results?.length).toBe(1);
|
||||
expect(results?.length).toBe(2);
|
||||
});
|
||||
|
||||
// See additional matcher testing in media-matcher.test.ts .
|
||||
|
||||
@@ -157,35 +157,6 @@ describe('navigateUp', () => {
|
||||
path: [{ ha: { id: 'one' } }, { ha: { id: 'two' } }],
|
||||
});
|
||||
});
|
||||
|
||||
it('should go up in the folder hierarchy with limit', () => {
|
||||
const api = createCardAPI();
|
||||
const folder = createFolder();
|
||||
const view = createView({
|
||||
query: createFolderQuery(folder, [{ ha: { id: 'one' } }, { ha: { id: 'two' } }]),
|
||||
});
|
||||
vi.mocked(api.getViewManager().getView).mockReturnValue(view);
|
||||
|
||||
const epoch: ViewManagerEpoch = {
|
||||
manager: api.getViewManager(),
|
||||
};
|
||||
|
||||
const builder = new UnifiedQueryBuilder(
|
||||
mock<CameraManager>(),
|
||||
mock<FoldersManager>(),
|
||||
);
|
||||
const options: FolderNavigationParamaters = {
|
||||
builder,
|
||||
viewManagerEpoch: epoch,
|
||||
limit: 50,
|
||||
};
|
||||
|
||||
navigateUp(options);
|
||||
|
||||
const query = vi.mocked(api.getViewManager().setViewByParametersWithExistingQuery)
|
||||
.mock.calls[0][0]?.params?.query as UnifiedQuery;
|
||||
expect(query.getNodes()[0].limit).toBe(50);
|
||||
});
|
||||
});
|
||||
|
||||
describe('navigateToFolder', () => {
|
||||
@@ -241,31 +212,6 @@ describe('navigateToFolder', () => {
|
||||
expect(nodes?.[0]).toHaveProperty('path');
|
||||
expect((nodes?.[0] as { path: readonly unknown[] }).path).toHaveLength(2);
|
||||
});
|
||||
|
||||
it('should navigate into folder with limit', () => {
|
||||
const api = createCardAPI();
|
||||
const folder = createFolder();
|
||||
const epoch: ViewManagerEpoch = {
|
||||
manager: api.getViewManager(),
|
||||
};
|
||||
|
||||
const builder = new UnifiedQueryBuilder(
|
||||
mock<CameraManager>(),
|
||||
mock<FoldersManager>(),
|
||||
);
|
||||
const options: FolderNavigationParamaters = {
|
||||
builder,
|
||||
viewManagerEpoch: epoch,
|
||||
limit: 100,
|
||||
};
|
||||
|
||||
const item = new ViewFolder(folder, [{ ha: { id: 'root' } }]);
|
||||
navigateToFolder(item, options);
|
||||
|
||||
const query = vi.mocked(api.getViewManager().setViewByParametersWithExistingQuery)
|
||||
.mock.calls[0][0]?.params?.query;
|
||||
expect(query?.getNodes()[0].limit).toBe(100);
|
||||
});
|
||||
});
|
||||
|
||||
describe('getUpFolderItem', () => {
|
||||
|
||||
@@ -499,22 +499,7 @@ describe('UnifiedQueryBuilder', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('should apply limit option', () => {
|
||||
const { cameraManager, foldersManager } = createMocks();
|
||||
const builder = new UnifiedQueryBuilder(cameraManager, foldersManager);
|
||||
const folder = createFolder({ id: 'folder1', title: 'Test' });
|
||||
const path: [FolderPathComponent] = [{ ha: { id: 'Root' } }];
|
||||
const query = builder.buildFolderQueryWithPath(folder, path, {
|
||||
limit: 10,
|
||||
});
|
||||
|
||||
expect(query.getNodes()[0]).toMatchObject({
|
||||
source: QuerySource.Folder,
|
||||
limit: 10,
|
||||
});
|
||||
});
|
||||
|
||||
it('should not include limit when not provided', () => {
|
||||
it('should not limit the number of items', () => {
|
||||
const { cameraManager, foldersManager } = createMocks();
|
||||
const builder = new UnifiedQueryBuilder(cameraManager, foldersManager);
|
||||
const folder = createFolder({ id: 'folder1', title: 'Test' });
|
||||
@@ -568,26 +553,6 @@ describe('UnifiedQueryBuilder', () => {
|
||||
expect(query).toBeNull();
|
||||
});
|
||||
|
||||
it('should apply limit option', () => {
|
||||
const { cameraManager, foldersManager } = createMocks();
|
||||
const folder = createFolder({ id: 'folder1', title: 'Test' });
|
||||
const path: [FolderPathComponent] = [{ ha: { id: 'Root' } }];
|
||||
|
||||
foldersManager.getFolder.mockReturnValue(folder);
|
||||
foldersManager.getDefaultQueryParameters.mockReturnValue(
|
||||
createFolderQueryParams(folder, path),
|
||||
);
|
||||
|
||||
const builder = new UnifiedQueryBuilder(cameraManager, foldersManager);
|
||||
const query = builder.buildDefaultFolderQuery('folder1', { limit: 20 });
|
||||
|
||||
assert(query);
|
||||
expect(query.getNodes()[0]).toMatchObject({
|
||||
source: QuerySource.Folder,
|
||||
limit: 20,
|
||||
});
|
||||
});
|
||||
|
||||
it('should use default folder when no ID provided', () => {
|
||||
const { cameraManager, foldersManager } = createMocks();
|
||||
foldersManager.getFolder.mockReturnValue(null);
|
||||
@@ -1010,6 +975,30 @@ describe('UnifiedQueryBuilder', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('should not limit a folder query built for folder media type', () => {
|
||||
const { cameraManager, foldersManager, store } = createMocks();
|
||||
store.getCameraIDs.mockReturnValue(new Set(['camera.office']));
|
||||
store.getCameraConfig.mockReturnValue(
|
||||
createCameraConfig({ media: { type: 'folder', folders: ['folder1'] } }),
|
||||
);
|
||||
|
||||
cameraManager.getCameraCapabilities.mockReturnValue(createCapabilities());
|
||||
|
||||
const folder = createFolder({ id: 'folder1', title: 'Test Folder' });
|
||||
const path: [FolderPathComponent] = [{ ha: { id: 'Root' } }];
|
||||
|
||||
foldersManager.getFolder.mockReturnValue(folder);
|
||||
foldersManager.getDefaultQueryParameters.mockReturnValue(
|
||||
createFolderQueryParams(folder, path),
|
||||
);
|
||||
|
||||
const builder = new UnifiedQueryBuilder(cameraManager, foldersManager);
|
||||
const query = builder.buildDefaultCameraQuery(undefined, { limit: 50 });
|
||||
|
||||
assert(query);
|
||||
expect(query.getNodes()[0]).not.toHaveProperty('limit');
|
||||
});
|
||||
|
||||
it('should build default folder query for folder media type without specific folders', () => {
|
||||
const { cameraManager, foldersManager, store } = createMocks();
|
||||
store.getCameraIDs.mockReturnValue(new Set(['camera.office']));
|
||||
|
||||
Reference in New Issue
Block a user