fix: Improve review media filtering (#2322)

This commit is contained in:
Dermot Duffy
2026-01-24 16:22:12 -08:00
committed by GitHub
parent fc32727860
commit f4e905a7fb
37 changed files with 884 additions and 253 deletions
+82
View File
@@ -0,0 +1,82 @@
import { describe, expect, it } from 'vitest';
import { mock } from 'vitest-mock-extended';
import { ViewFolder } from '../../../src/view/item';
import { UnifiedQuery } from '../../../src/view/unified-query';
import {
getReviewedQueryFilterFromConfig,
getReviewedQueryFilterFromQuery,
} from '../../../src/view/utils/query-filter';
import { createEventQuery, createFolder, TestViewMedia } from '../../test-utils';
describe('query-filter', () => {
describe('getReviewedQueryFilterFromQuery', () => {
it('should return undefined if query is missing', () => {
expect(getReviewedQueryFilterFromQuery(null)).toBeUndefined();
});
it('should return undefined if item is missing', () => {
expect(getReviewedQueryFilterFromQuery(mock<UnifiedQuery>())).toBeUndefined();
});
it('should return undefined if item is not media', () => {
const query = mock<UnifiedQuery>();
const item = new ViewFolder(createFolder(), []);
expect(getReviewedQueryFilterFromQuery(query, item)).toBeUndefined();
});
it('should return undefined if item has no cameraID', () => {
const query = mock<UnifiedQuery>();
const item = new TestViewMedia({ cameraID: null });
expect(getReviewedQueryFilterFromQuery(query, item)).toBeUndefined();
});
it('should return undefined if zero or multiple media queries match', () => {
const query = mock<UnifiedQuery>();
const item = new TestViewMedia({ cameraID: 'camera-1' });
query.getMediaQueries.mockReturnValue([]);
expect(getReviewedQueryFilterFromQuery(query, item)).toBeUndefined();
query.getMediaQueries.mockReturnValue([
createEventQuery('camera-1'),
createEventQuery('camera-2'),
]);
expect(getReviewedQueryFilterFromQuery(query, item)).toBeUndefined();
});
it('should return boolean if exactly one media query matches', () => {
const query = mock<UnifiedQuery>();
const item = new TestViewMedia({ cameraID: 'camera-1' });
query.getMediaQueries.mockReturnValue([
createEventQuery('camera-1', { reviewed: true }),
]);
expect(getReviewedQueryFilterFromQuery(query, item)).toBe(true);
query.getMediaQueries.mockReturnValue([
createEventQuery('camera-1', { reviewed: false }),
]);
expect(getReviewedQueryFilterFromQuery(query, item)).toBe(false);
query.getMediaQueries.mockReturnValue([createEventQuery('camera-1')]);
expect(getReviewedQueryFilterFromQuery(query, item)).toBeUndefined();
});
});
describe('getReviewedQueryFilterFromConfig', () => {
it('should return true for reviewed', () => {
expect(getReviewedQueryFilterFromConfig('reviewed')).toBe(true);
});
it('should return undefined for all', () => {
expect(getReviewedQueryFilterFromConfig('all')).toBeUndefined();
expect(getReviewedQueryFilterFromConfig(undefined)).toBe(false);
});
it('should return false for unreviewed', () => {
expect(getReviewedQueryFilterFromConfig('unreviewed')).toBe(false);
});
});
});