immich/web/src/lib/modals/AssetChangeDateModal.spec.ts
Jason Rasmussen a16d233a0c
chore(web): sort imports (#27922)
* feat: sort imports

* fix: something?
2026-04-21 14:51:38 -04:00

68 lines
2.4 KiB
TypeScript

import { fireEvent, render, screen, waitFor } from '@testing-library/svelte';
import { DateTime } from 'luxon';
import { afterAll, beforeEach, describe, expect, test, vi } from 'vitest';
import { getAnimateMock } from '$lib/__mocks__/animate.mock';
import { getIntersectionObserverMock } from '$lib/__mocks__/intersection-observer.mock';
import { getVisualViewportMock } from '$lib/__mocks__/visual-viewport.mock';
import AssetChangeDateModal from './AssetChangeDateModal.svelte';
describe('AssetChangeDateModal component', () => {
const initialDate = DateTime.fromISO('2026-03-19T23:31:30.112');
const initialTimeZone = 'Europe/Lisbon';
const onClose = vi.fn();
const getDateInput = async () => (await screen.findByDisplayValue('2026-03-19T23:31:30.112')) as HTMLInputElement;
const getTimeZoneInput = () => screen.getByRole('combobox', { name: /timezone/i }) as HTMLInputElement;
beforeEach(() => {
vi.stubGlobal('IntersectionObserver', getIntersectionObserverMock());
vi.stubGlobal('visualViewport', getVisualViewportMock());
vi.resetAllMocks();
Element.prototype.animate = getAnimateMock();
});
afterAll(async () => {
await waitFor(() => {
expect(document.body.style.pointerEvents).not.toBe('none');
});
});
test('preserves the selected timezone when changing the datetime', async () => {
render(AssetChangeDateModal, {
props: {
initialDate,
initialTimeZone,
timezoneInput: true,
asset: { id: 'asset-id' } as never,
onClose,
},
});
const timezoneInput = getTimeZoneInput();
const datetimeInput = await getDateInput();
const initialTimezoneValue = timezoneInput.value;
await fireEvent.focus(timezoneInput);
await fireEvent.input(timezoneInput, { target: { value: 'Pacific/Pitcairn' } });
const option = await screen.findByText(/Pacific\/Pitcairn/i);
await fireEvent.click(option);
expect(timezoneInput.value).toBe('Pacific/Pitcairn (-08:00)');
expect(timezoneInput.value).not.toBe(initialTimezoneValue);
const beforeDatetime = datetimeInput.value;
await fireEvent.input(datetimeInput, {
target: { value: '2026-03-19T23:31:31.113' },
});
await fireEvent.change(datetimeInput, {
target: { value: '2026-03-19T23:31:31.113' },
});
expect(datetimeInput.value).not.toBe(beforeDatetime);
expect(timezoneInput.value).toBe('Pacific/Pitcairn (-08:00)');
});
});