Files
advanced-camera-card/tests/view/query-classifier.test.ts
T

139 lines
4.4 KiB
TypeScript

import { describe, expect, it } from 'vitest';
import { QueryType } from '../../src/camera-manager/types';
import {
EventMediaQuery,
FolderViewQuery,
RecordingMediaQuery,
} from '../../src/view/query';
import { QueryClassifier } from '../../src/view/query-classifier';
import { createFolder } from '../test-utils';
describe('QueryClassifier', () => {
it('isEventQuery', () => {
expect(QueryClassifier.isEventQuery(new EventMediaQuery())).toBeTruthy();
expect(QueryClassifier.isEventQuery(new RecordingMediaQuery())).toBeFalsy();
});
it('isRecordingQuery', () => {
expect(QueryClassifier.isRecordingQuery(new RecordingMediaQuery())).toBeTruthy();
expect(QueryClassifier.isRecordingQuery(new EventMediaQuery())).toBeFalsy();
});
it('getQueryType', () => {
expect(QueryClassifier.getQueryType(new EventMediaQuery())).toBe('event');
expect(QueryClassifier.getQueryType(new FolderViewQuery())).toBe('folder');
expect(QueryClassifier.getQueryType(new RecordingMediaQuery())).toBe('recording');
expect(QueryClassifier.getQueryType()).toBeNull();
});
it('isClipsQuery', () => {
expect(
QueryClassifier.isClipsQuery(
new EventMediaQuery([
{ type: QueryType.Event, cameraIDs: new Set(['camera']), hasClip: true },
]),
),
).toBeTruthy();
expect(
QueryClassifier.isClipsQuery(
new EventMediaQuery([
{ type: QueryType.Event, cameraIDs: new Set(['camera']), hasClip: true },
{ type: QueryType.Event, cameraIDs: new Set(['camera']), hasClip: false },
]),
),
).toBeFalsy();
expect(
QueryClassifier.isClipsQuery(
new EventMediaQuery([
{ type: QueryType.Event, cameraIDs: new Set(['camera']), hasClip: true },
{ type: QueryType.Event, cameraIDs: new Set(['camera']) },
]),
),
).toBeFalsy();
});
it('isSnapshotQuery', () => {
expect(
QueryClassifier.isSnapshotQuery(
new EventMediaQuery([
{ type: QueryType.Event, cameraIDs: new Set(['camera']), hasSnapshot: true },
]),
),
).toBeTruthy();
expect(
QueryClassifier.isSnapshotQuery(
new EventMediaQuery([
{ type: QueryType.Event, cameraIDs: new Set(['camera']), hasSnapshot: true },
{ type: QueryType.Event, cameraIDs: new Set(['camera']), hasSnapshot: false },
]),
),
).toBeFalsy();
expect(
QueryClassifier.isSnapshotQuery(
new EventMediaQuery([
{ type: QueryType.Event, cameraIDs: new Set(['camera']), hasSnapshot: true },
{ type: QueryType.Event, cameraIDs: new Set(['camera']) },
]),
),
).toBeFalsy();
});
it('isFolderQuery', () => {
expect(
QueryClassifier.isFolderQuery(
new EventMediaQuery([
{ type: QueryType.Event, cameraIDs: new Set(['camera']), hasSnapshot: true },
]),
),
).toBeFalsy();
expect(
QueryClassifier.isFolderQuery(
new RecordingMediaQuery([
{ type: QueryType.Recording, cameraIDs: new Set(['camera']) },
]),
),
).toBeFalsy();
expect(
QueryClassifier.isFolderQuery(new FolderViewQuery({ folder: createFolder() })),
).toBeTruthy();
});
it('getMediaType', () => {
expect(
QueryClassifier.getMediaType(
new EventMediaQuery([
{ type: QueryType.Event, cameraIDs: new Set(['camera']), hasSnapshot: true },
{ type: QueryType.Event, cameraIDs: new Set(['camera']), hasSnapshot: true },
]),
),
).toBe('snapshots');
expect(
QueryClassifier.getMediaType(
new EventMediaQuery([
{ type: QueryType.Event, cameraIDs: new Set(['camera']), hasClip: true },
{ type: QueryType.Event, cameraIDs: new Set(['camera']), hasClip: true },
]),
),
).toBe('clips');
expect(
QueryClassifier.getMediaType(
new RecordingMediaQuery([
{ type: QueryType.Recording, cameraIDs: new Set(['camera']) },
{ type: QueryType.Recording, cameraIDs: new Set(['camera']) },
]),
),
).toBe('recordings');
expect(
QueryClassifier.getMediaType(
new EventMediaQuery([
{ type: QueryType.Event, cameraIDs: new Set(['camera']), hasSnapshot: true },
{ type: QueryType.Event, cameraIDs: new Set(['camera']), hasSnapshot: false },
]),
),
).toBeNull();
});
});