mirror of
https://github.com/immich-app/immich.git
synced 2026-04-25 02:19:58 -04:00
68 lines
2.4 KiB
TypeScript
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)');
|
|
});
|
|
});
|