feat: Add severity media filter (#2323)

This commit is contained in:
Dermot Duffy
2026-01-24 21:25:10 -08:00
committed by GitHub
parent f4e905a7fb
commit c03ddd9a13
22 changed files with 404 additions and 69 deletions
@@ -29,6 +29,7 @@ import {
MediaFilterMediaType,
} from '../../src/components-lib/media-filter-controller';
import { QuerySource } from '../../src/query-source';
import { Severity } from '../../src/severity';
import { UnifiedQuery } from '../../src/view/unified-query';
import {
createCameraConfig,
@@ -317,6 +318,17 @@ const queryDefaultTestCases: Array<[string, UnifiedQuery, MediaFilterCoreDefault
mediaTypes: [MediaFilterMediaType.Reviews],
},
],
[
'severity',
createQueryWithNodes([
{ type: QueryType.Review, severity: new Set<Severity>(['high']) },
]),
{
cameraIDs: ['camera.kitchen'],
mediaTypes: [MediaFilterMediaType.Reviews],
severity: ['high'],
},
],
];
// @vitest-environment jsdom
@@ -382,6 +394,15 @@ describe('MediaFilterController', () => {
const controller = new MediaFilterController(createLitElement());
expect(controller.getTagsOptions()).toEqual([]);
});
it('severity', () => {
const controller = new MediaFilterController(createLitElement());
expect(controller.getSeverityOptions()).toEqual([
{ value: 'high', label: 'High' },
{ value: 'medium', label: 'Medium' },
{ value: 'low', label: 'Low' },
]);
});
});
describe('should calculate correct dynamic options', () => {
@@ -675,6 +696,36 @@ describe('MediaFilterController', () => {
});
});
it('with severity', async () => {
const host = createLitElement();
const cameraManager = createCameraManager(createCameraStore());
const viewManager = mock<ViewManager>();
viewManager.getView.mockReturnValue(createView());
const controller = new MediaFilterController(host);
controller.setViewManager(viewManager);
await controller.valueChangeHandler(
cameraManager,
mock<FoldersManager>(),
{},
{
mediaTypes: [MediaFilterMediaType.Reviews],
when: {},
severity: ['high'],
},
);
expect(viewManager.setViewByParametersWithExistingQuery).toBeCalled();
const nodes = getQueryNodes(viewManager);
expect(nodes).toHaveLength(1);
expect(nodes?.[0]).toMatchObject({
type: QueryType.Review,
severity: new Set(['high']),
});
});
it('with multiple media types', async () => {
const host = createLitElement();
const cameraManager = createCameraManager(createCameraStore());