fix: Expose gallery and media views as media type agnostic (#2335)

This commit is contained in:
Dermot Duffy
2026-02-08 08:04:11 -08:00
committed by GitHub
parent 0a099b95f7
commit 21f9469784
22 changed files with 363 additions and 238 deletions
@@ -568,48 +568,54 @@ describe('ViewQueryExecutor', () => {
});
});
describe('with a media view', () => {
it('should set query and queryResults for events', async () => {
const api = createPopulatedAPI();
const cameraManager = api.getCameraManager();
if (cameraManager) {
vi.mocked(cameraManager.getCameraCapabilities).mockReturnValue(
new Capabilities({ clips: true }),
);
}
describe('with a media or gallery view', () => {
it.each(['media' as const, 'gallery' as const])(
'should set query and queryResults for events with %s view',
async (viewName) => {
const api = createPopulatedAPI();
const cameraManager = api.getCameraManager();
if (cameraManager) {
vi.mocked(cameraManager.getCameraCapabilities).mockReturnValue(
new Capabilities({ clips: true }),
);
}
const viewQueryExecutor = new ViewQueryExecutor(api);
const view = new View({
view: 'media',
camera: 'camera.office',
});
const viewQueryExecutor = new ViewQueryExecutor(api);
const view = new View({
view: viewName,
camera: 'camera.office',
});
const modifiers = await viewQueryExecutor.getNewQueryModifiers(view);
applyViewModifiers(view, modifiers);
const modifiers = await viewQueryExecutor.getNewQueryModifiers(view);
applyViewModifiers(view, modifiers);
expect(view.query).toBeInstanceOf(UnifiedQuery);
const queries = view.query?.getMediaQueries({ type: QueryType.Event });
expect(queries?.length).toBeGreaterThan(0);
expect(queries?.[0].cameraIDs.has('camera.office')).toBe(true);
expect(view.queryResults).toBeDefined();
});
expect(view.query).toBeInstanceOf(UnifiedQuery);
const queries = view.query?.getMediaQueries({ type: QueryType.Event });
expect(queries?.length).toBeGreaterThan(0);
expect(queries?.[0].cameraIDs.has('camera.office')).toBe(true);
expect(view.queryResults).toBeDefined();
},
);
it('should query all cameras in media view grid mode', async () => {
const api = createPopulatedAPI();
const viewQueryExecutor = new ViewQueryExecutor(api);
const view = createView({
view: 'media',
camera: 'camera.office',
displayMode: 'grid',
});
it.each(['media' as const, 'gallery' as const])(
'should query all cameras in %s view grid mode',
async (viewName) => {
const api = createPopulatedAPI();
const viewQueryExecutor = new ViewQueryExecutor(api);
const view = createView({
view: viewName,
camera: 'camera.office',
displayMode: 'grid',
});
const modifiers = await viewQueryExecutor.getNewQueryModifiers(view);
applyViewModifiers(view, modifiers);
const modifiers = await viewQueryExecutor.getNewQueryModifiers(view);
applyViewModifiers(view, modifiers);
expect(view.query).toBeInstanceOf(UnifiedQuery);
const allCameraIDs = view.query?.getAllCameraIDs();
expect(allCameraIDs?.size).toBeGreaterThan(0);
});
expect(view.query).toBeInstanceOf(UnifiedQuery);
const allCameraIDs = view.query?.getAllCameraIDs();
expect(allCameraIDs?.size).toBeGreaterThan(0);
},
);
});
describe('with an events-based view', () => {