* #708 apply strictier linting rules and fix simple eslint bugs * #708 fix eslint errors relate to promise * #708 fix eslint import/no-extraneous-dependencies * #708 fix eslint errors of react-hook * #708 enable eslint check for typescript --------- Co-authored-by: lethemanh <lethemanh@lethemanhs-MacBook-Pro.local>
This commit is contained in:
@@ -1,134 +1,134 @@
|
||||
import { TimezoneSelector } from "@/components/Calendar/TimezoneSelector";
|
||||
import { cleanup, fireEvent, screen, waitFor } from "@testing-library/react";
|
||||
import { renderWithProviders } from "../../utils/Renderwithproviders";
|
||||
import { TimezoneSelector } from '@/components/Calendar/TimezoneSelector'
|
||||
import { cleanup, fireEvent, screen, waitFor } from '@testing-library/react'
|
||||
import { renderWithProviders } from '../../utils/Renderwithproviders'
|
||||
|
||||
describe("TimezoneSelector", () => {
|
||||
const mockOnChange = jest.fn();
|
||||
describe('TimezoneSelector', () => {
|
||||
const mockOnChange = jest.fn()
|
||||
|
||||
beforeEach(() => {
|
||||
jest.clearAllMocks();
|
||||
});
|
||||
jest.clearAllMocks()
|
||||
})
|
||||
|
||||
it("renders with initial timezone value", () => {
|
||||
it('renders with initial timezone value', () => {
|
||||
renderWithProviders(
|
||||
<TimezoneSelector
|
||||
referenceDate={new Date()}
|
||||
value="America/New_York"
|
||||
onChange={mockOnChange}
|
||||
/>
|
||||
);
|
||||
)
|
||||
|
||||
const button = screen.getByRole("button");
|
||||
expect(button).toBeInTheDocument();
|
||||
expect(button).toHaveTextContent(/UTC[-−][45]/i); // New York offset
|
||||
});
|
||||
const button = screen.getByRole('button')
|
||||
expect(button).toBeInTheDocument()
|
||||
expect(button).toHaveTextContent(/UTC[-−][45]/i) // New York offset
|
||||
})
|
||||
|
||||
it("opens popover when button is clicked", async () => {
|
||||
it('opens popover when button is clicked', async () => {
|
||||
renderWithProviders(
|
||||
<TimezoneSelector
|
||||
referenceDate={new Date()}
|
||||
value="Europe/Paris"
|
||||
onChange={mockOnChange}
|
||||
/>
|
||||
);
|
||||
)
|
||||
|
||||
const button = screen.getByRole("button");
|
||||
fireEvent.click(button);
|
||||
const button = screen.getByRole('button')
|
||||
fireEvent.click(button)
|
||||
|
||||
await waitFor(() => {
|
||||
expect(screen.getByRole("combobox")).toBeInTheDocument();
|
||||
});
|
||||
});
|
||||
expect(screen.getByRole('combobox')).toBeInTheDocument()
|
||||
})
|
||||
})
|
||||
|
||||
it("calls onChange when a new timezone is selected", async () => {
|
||||
it('calls onChange when a new timezone is selected', async () => {
|
||||
renderWithProviders(
|
||||
<TimezoneSelector
|
||||
referenceDate={new Date()}
|
||||
value="Europe/Paris"
|
||||
onChange={mockOnChange}
|
||||
/>
|
||||
);
|
||||
)
|
||||
|
||||
const button = screen.getByRole("button");
|
||||
fireEvent.click(button);
|
||||
const button = screen.getByRole('button')
|
||||
fireEvent.click(button)
|
||||
|
||||
await waitFor(() => {
|
||||
expect(screen.getByRole("combobox")).toBeInTheDocument();
|
||||
});
|
||||
expect(screen.getByRole('combobox')).toBeInTheDocument()
|
||||
})
|
||||
|
||||
const autocomplete = screen.getByRole("combobox");
|
||||
fireEvent.change(autocomplete, { target: { value: "Los Angeles" } });
|
||||
const autocomplete = screen.getByRole('combobox')
|
||||
fireEvent.change(autocomplete, { target: { value: 'Los Angeles' } })
|
||||
|
||||
// Find and click the Los Angeles option
|
||||
const option = await screen.findByText(/Los Angeles/i);
|
||||
fireEvent.click(option);
|
||||
const option = await screen.findByText(/Los Angeles/i)
|
||||
fireEvent.click(option)
|
||||
|
||||
expect(mockOnChange).toHaveBeenCalledWith("America/Los_Angeles");
|
||||
});
|
||||
expect(mockOnChange).toHaveBeenCalledWith('America/Los_Angeles')
|
||||
})
|
||||
|
||||
it("closes popover after timezone selection", async () => {
|
||||
it('closes popover after timezone selection', async () => {
|
||||
renderWithProviders(
|
||||
<TimezoneSelector
|
||||
referenceDate={new Date()}
|
||||
value="Europe/Paris"
|
||||
onChange={mockOnChange}
|
||||
/>
|
||||
);
|
||||
)
|
||||
|
||||
const button = screen.getByRole("button");
|
||||
fireEvent.click(button);
|
||||
const button = screen.getByRole('button')
|
||||
fireEvent.click(button)
|
||||
|
||||
await waitFor(() => {
|
||||
expect(screen.getByRole("combobox")).toBeInTheDocument();
|
||||
});
|
||||
expect(screen.getByRole('combobox')).toBeInTheDocument()
|
||||
})
|
||||
|
||||
const autocomplete = screen.getByRole("combobox");
|
||||
fireEvent.change(autocomplete, { target: { value: "Tokyo" } });
|
||||
const autocomplete = screen.getByRole('combobox')
|
||||
fireEvent.change(autocomplete, { target: { value: 'Tokyo' } })
|
||||
|
||||
const option = await screen.findByText(/Tokyo/i);
|
||||
fireEvent.click(option);
|
||||
const option = await screen.findByText(/Tokyo/i)
|
||||
fireEvent.click(option)
|
||||
|
||||
await waitFor(() => {
|
||||
expect(screen.queryByRole("combobox")).not.toBeInTheDocument();
|
||||
});
|
||||
});
|
||||
expect(screen.queryByRole('combobox')).not.toBeInTheDocument()
|
||||
})
|
||||
})
|
||||
|
||||
it("displays timezones with half-hour offsets correctly", () => {
|
||||
it('displays timezones with half-hour offsets correctly', () => {
|
||||
renderWithProviders(
|
||||
<TimezoneSelector
|
||||
referenceDate={new Date()}
|
||||
value="Asia/Kolkata"
|
||||
onChange={mockOnChange}
|
||||
/>
|
||||
);
|
||||
)
|
||||
|
||||
const button = screen.getByRole("button");
|
||||
expect(button).toHaveTextContent("UTC+5:30"); // India offset
|
||||
});
|
||||
const button = screen.getByRole('button')
|
||||
expect(button).toHaveTextContent('UTC+5:30') // India offset
|
||||
})
|
||||
|
||||
it("shows correct offset for Europe/Paris depending on daylight saving time", () => {
|
||||
it('shows correct offset for Europe/Paris depending on daylight saving time', () => {
|
||||
// Summer date (DST on)
|
||||
const summerDate = new Date("2025-07-15T12:00:00Z");
|
||||
const summerDate = new Date('2025-07-15T12:00:00Z')
|
||||
renderWithProviders(
|
||||
<TimezoneSelector
|
||||
value="Europe/Paris"
|
||||
onChange={mockOnChange}
|
||||
referenceDate={summerDate}
|
||||
/>
|
||||
);
|
||||
let button = screen.getByRole("button");
|
||||
expect(button).toHaveTextContent(/UTC\+2\b/);
|
||||
cleanup();
|
||||
)
|
||||
let button = screen.getByRole('button')
|
||||
expect(button).toHaveTextContent(/UTC\+2\b/)
|
||||
cleanup()
|
||||
// Rerender with a winter date (DST off)
|
||||
const winterDate = new Date("2025-01-15T12:00:00Z");
|
||||
const winterDate = new Date('2025-01-15T12:00:00Z')
|
||||
renderWithProviders(
|
||||
<TimezoneSelector
|
||||
value="Europe/Paris"
|
||||
onChange={mockOnChange}
|
||||
referenceDate={winterDate}
|
||||
/>
|
||||
);
|
||||
button = screen.getByRole("button");
|
||||
expect(button).toHaveTextContent(/UTC\+1\b/);
|
||||
});
|
||||
});
|
||||
)
|
||||
button = screen.getByRole('button')
|
||||
expect(button).toHaveTextContent(/UTC\+1\b/)
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user