import { describe, expect, it } from 'vitest'; import { sortMostRecentFirst } from '../../../src/ha/browse-media/sort'; import { BrowseMediaMetadata, RichBrowseMedia, } from '../../../src/ha/browse-media/types'; import { createBrowseMedia, createRichBrowseMedia } from '../../test-utils'; const createMetadata = ( metadata: Partial, ): BrowseMediaMetadata => ({ cameraID: 'camera.office', startDate: new Date('2025-05-10T20:22:00Z'), endDate: new Date('2025-05-10T20:22:10Z'), ...metadata, }); describe('sortMostRecentFirst', () => { it('should return an empty array when given an empty array', () => { const media: RichBrowseMedia[] = []; expect(sortMostRecentFirst(media)).toEqual([]); }); it('should sort media by startDate in descending order', () => { const media: RichBrowseMedia[] = [ createRichBrowseMedia({ title: 'Media 1', _metadata: createMetadata({ startDate: new Date('2025-05-10T20:29:00.000Z') }), }), createRichBrowseMedia({ title: 'Media 2', _metadata: createMetadata({ startDate: new Date('2025-05-12T20:29:00.000Z') }), }), createRichBrowseMedia({ title: 'Media 3', _metadata: createMetadata({ startDate: new Date('2025-05-11T20:29:00.000Z') }), }), ]; const expected: RichBrowseMedia[] = [ createRichBrowseMedia({ title: 'Media 2', _metadata: createMetadata({ startDate: new Date('2025-05-12T20:29:00.000Z') }), }), createRichBrowseMedia({ title: 'Media 3', _metadata: createMetadata({ startDate: new Date('2025-05-11T20:29:00.000Z') }), }), createRichBrowseMedia({ title: 'Media 1', _metadata: createMetadata({ startDate: new Date('2025-05-10T20:29:00.000Z') }), }), ]; expect(sortMostRecentFirst(media)).toEqual(expected); }); it('should handle items with undefined startDate by placing them at the end', () => { const media: RichBrowseMedia[] = [ createRichBrowseMedia({ title: 'Media 1', _metadata: createMetadata({ startDate: new Date('2025-05-10T20:29:00.000Z') }), }), createBrowseMedia({ title: 'Media 2', }), createRichBrowseMedia({ title: 'Media 3', _metadata: createMetadata({ startDate: new Date('2025-05-12T20:29:00.000Z') }), }), createBrowseMedia({ title: 'Media 4', }), ]; const expected: RichBrowseMedia[] = [ createBrowseMedia({ title: 'Media 2', }), createBrowseMedia({ title: 'Media 4', }), createRichBrowseMedia({ title: 'Media 3', _metadata: createMetadata({ startDate: new Date('2025-05-12T20:29:00.000Z') }), }), createRichBrowseMedia({ title: 'Media 1', _metadata: createMetadata({ startDate: new Date('2025-05-10T20:29:00.000Z') }), }), ]; expect(sortMostRecentFirst(media)).toEqual(expected); }); });