1
0
forked from Cutlery/immich

37 lines
1.4 KiB
TypeScript

import { describe, expect, it } from '@jest/globals';
import { ExifDateTime } from 'exiftool-vendored';
import { exifTimeZone, exifToDate } from './date-time';
describe('converts exif date to JS date', () => {
it('returns null for invalid inputs', () => {
expect(exifToDate(undefined)).toBeNull();
expect(exifToDate('invalid')).toBeNull();
expect(exifToDate(new Date('invalid'))).toBeNull();
expect(exifToDate(ExifDateTime.fromEXIF('invalid'))).toBeNull();
});
it('returns a valid date object for valid inputs', () => {
const date = new Date('2023');
expect(exifToDate(date)).toBeInstanceOf(Date);
expect(exifToDate(date)?.toISOString()).toBe('2023-01-01T00:00:00.000Z');
expect(exifToDate('2023')).toBeInstanceOf(Date);
const exifDateTime = ExifDateTime.fromISO('2023-01-01T00:00:00.000Z');
expect(exifToDate(exifDateTime)).toBeInstanceOf(Date);
expect(exifToDate(exifDateTime)?.toISOString()).toBe('2023-01-01T00:00:00.000Z');
});
});
describe('extracts the timezone from a date', () => {
it('returns null for invalid inputs', () => {
expect(exifTimeZone(undefined)).toBeNull();
expect(exifTimeZone('')).toBeNull();
expect(exifTimeZone(new Date('2023'))).toBeNull();
expect(exifTimeZone(ExifDateTime.fromEXIF('invalid'))).toBeNull();
});
it('returns the timezone for valid inputs', () => {
expect(exifTimeZone(ExifDateTime.fromEXIF('2020:12:29 14:24:45.700-05:00'))).toBe('UTC-5');
});
});