test: Improve timezone resilience / cleanliness of tests (#2279)

- Related: https://github.com/dermotduffy/advanced-camera-card/pull/2278
- Reported by @0x464e
This commit is contained in:
Dermot Duffy
2025-12-11 05:33:48 -08:00
committed by GitHub
parent 236f3b7b57
commit f64690335b
6 changed files with 63 additions and 26 deletions
@@ -7,7 +7,9 @@ describe('MetadataGenerator', () => {
const browseMedia = createBrowseMedia({
title: 'Test Media 2025-05-26 18:18',
});
const expectedDate = new Date('2025-05-26T18:18:00.000Z');
// Create expected date using local time, since the date parser interprets
// the date string in local time (not UTC)
const expectedDate = new Date(2025, 4, 26, 18, 18);
const formatlessDateParser: Parser = {
type: 'startdate',
};
@@ -129,10 +131,11 @@ describe('MetadataGenerator', () => {
});
it('should incorporate parent metadata without a date format', async () => {
// Parent has a start date at local midnight on 2025-05-26
const parentBrowseMedia = createRichBrowseMedia({
title: '2025-05-26',
_metadata: {
startDate: new Date('2025-05-26T00:00:00.000Z'),
startDate: new Date(2025, 4, 26, 0, 0),
},
});
const childBrowseMedia = createBrowseMedia({
@@ -145,7 +148,7 @@ describe('MetadataGenerator', () => {
generator.generate(childBrowseMedia, parentBrowseMedia, [
formatlessDateParser,
])?.startDate,
).toEqual(new Date('2025-05-26T22:42:00.000Z'));
).toEqual(new Date(2025, 4, 26, 22, 42));
});
});
@@ -195,16 +198,19 @@ describe('MetadataGenerator', () => {
const generator = new MetadataGenerator();
await generator.prepare(parsers);
// The parsed date combines 20250507 (May 7, 2025) and 171758 (17:17:58)
// interpreted in local time
expect(generator.generate(browseMedia, undefined, parsers)?.startDate).toEqual(
new Date('2025-05-07T17:17:58.000Z'),
new Date(2025, 4, 7, 17, 17, 58),
);
});
it('should incorporate parent metadata with a date format', async () => {
// Parent has a start date at local midnight on 2025-05-26
const parentBrowseMedia = createRichBrowseMedia({
title: '2025-05-26',
_metadata: {
startDate: new Date('2025-05-26T00:00:00.000Z'),
startDate: new Date(2025, 4, 26, 0, 0),
},
});
const childBrowseMedia = createBrowseMedia({
@@ -219,7 +225,7 @@ describe('MetadataGenerator', () => {
expect(
generator.generate(childBrowseMedia, parentBrowseMedia, [parser])?.startDate,
).toEqual(new Date('2025-05-26T22:42:00.000Z'));
).toEqual(new Date(2025, 4, 26, 22, 42));
});
});
});
@@ -1,3 +1,4 @@
import { format } from 'date-fns';
import { afterEach, describe, expect, it, vi } from 'vitest';
import { ViewItemManager } from '../../../src/card-controller/view/item-manager';
import { homeAssistantSignPath } from '../../../src/ha/sign-path.js';
@@ -189,7 +190,8 @@ describe('ViewItemManager', () => {
vi.mocked(api.getHASSManager().getHASS).mockReturnValue(createHASS());
const manager = new ViewItemManager(api);
const item = new TestViewMedia({ startTime: new Date('2025-05-03T17:41:00Z') });
const startTime = new Date('2025-05-03T17:41:00Z');
const item = new TestViewMedia({ startTime });
vi.mocked(api.getCameraManager().getMediaDownloadPath).mockResolvedValue({
sign: false,
@@ -197,7 +199,10 @@ describe('ViewItemManager', () => {
});
expect(await manager.download(item)).toBe(true);
expect(downloadURL).toBeCalledWith('foo', 'camera_id_2025-05-03-17-41-00.mp4');
// Use format() to generate expected filename timestamp (formats in local time)
const expectedFilename = `camera_id_${format(startTime, 'yyyy-MM-dd-HH-mm-ss')}.mp4`;
expect(downloadURL).toBeCalledWith('foo', expectedFilename);
});
it('should generate filename for snapshot', async () => {