|
|
|
@@ -98,180 +98,125 @@ async function setupEventPopover(
|
|
|
|
|
/>,
|
|
|
|
|
preloadedState
|
|
|
|
|
);
|
|
|
|
|
act(() => {
|
|
|
|
|
fireEvent.change(screen.getByRole("textbox", { name: /title/i }), {
|
|
|
|
|
target: { value: "Meeting" },
|
|
|
|
|
});
|
|
|
|
|
fireEvent.click(screen.getByLabelText("All day"));
|
|
|
|
|
fireEvent.change(screen.getByLabelText("Start"), {
|
|
|
|
|
target: {
|
|
|
|
|
value: (overrides?.start ?? "2025-07-18T00:00:00.000Z").split("T")[0],
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
fireEvent.change(screen.getByLabelText("End"), {
|
|
|
|
|
target: {
|
|
|
|
|
value: (overrides?.end ?? "2025-07-19T00:00:00.000Z").split("T")[0],
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
const showMoreButton = screen.queryByText("Show More");
|
|
|
|
|
if (showMoreButton) {
|
|
|
|
|
fireEvent.click(showMoreButton);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
const select = screen.getByLabelText(/repeat/i);
|
|
|
|
|
userEvent.click(select);
|
|
|
|
|
|
|
|
|
|
return jest.spyOn(apiUtils, "api");
|
|
|
|
|
// Fill in title
|
|
|
|
|
const titleInput = screen.getByLabelText("Title");
|
|
|
|
|
fireEvent.change(titleInput, { target: { value: "Meeting" } });
|
|
|
|
|
|
|
|
|
|
// Click Show More to expand the dialog
|
|
|
|
|
const showMoreButton = screen.getByText("Show More");
|
|
|
|
|
fireEvent.click(showMoreButton);
|
|
|
|
|
|
|
|
|
|
// Check Repeat checkbox to show repeat options
|
|
|
|
|
const repeatCheckbox = screen.getByLabelText("Repeat");
|
|
|
|
|
fireEvent.click(repeatCheckbox);
|
|
|
|
|
|
|
|
|
|
// Wait for RepeatEvent component to be rendered
|
|
|
|
|
await waitFor(() => {
|
|
|
|
|
expect(screen.getByText("Day(s)")).toBeInTheDocument();
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async function expectRRule(expected: any) {
|
|
|
|
|
const spyAPi = jest.spyOn(apiUtils, "api");
|
|
|
|
|
|
|
|
|
|
async function expectRRule(expected: Partial<RepetitionObject>) {
|
|
|
|
|
const spy = jest
|
|
|
|
|
.spyOn(eventThunks, "putEventAsync")
|
|
|
|
|
.mockImplementation((payload) => () => Promise.resolve(payload) as any);
|
|
|
|
|
const saveButton = screen.getByRole("button", { name: /save/i });
|
|
|
|
|
act(() => fireEvent.click(saveButton));
|
|
|
|
|
await waitFor(() => expect(spy).toHaveBeenCalled());
|
|
|
|
|
|
|
|
|
|
await waitFor(() => {
|
|
|
|
|
expect(spyAPi).toHaveBeenCalled();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const receivedPayload: string =
|
|
|
|
|
spyAPi.mock.calls[0][1]?.body?.toString() ?? "";
|
|
|
|
|
const [, , [vevent]] = JSON.parse(receivedPayload);
|
|
|
|
|
const rrule = vevent[1].find(([name]: any) => name === "rrule");
|
|
|
|
|
|
|
|
|
|
if (rrule[3].byday) {
|
|
|
|
|
expect({
|
|
|
|
|
...rrule[3],
|
|
|
|
|
byday: rrule[3].byday.sort(),
|
|
|
|
|
}).toEqual({
|
|
|
|
|
...expected,
|
|
|
|
|
byday: expected.byday.sort(),
|
|
|
|
|
});
|
|
|
|
|
} else {
|
|
|
|
|
expect(rrule[3]).toEqual(expected);
|
|
|
|
|
}
|
|
|
|
|
const received = spy.mock.calls[0][0];
|
|
|
|
|
expect(received.newEvent.repetition).toMatchObject(expected);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
describe("RepeatEvent", () => {
|
|
|
|
|
it("renders with no repetition by default", () => {
|
|
|
|
|
setupRepeatEvent();
|
|
|
|
|
expect(screen.getByText(/Repeat every/i)).toBeInTheDocument();
|
|
|
|
|
// Check that the select exists and has default value
|
|
|
|
|
const select = screen.getByRole("combobox");
|
|
|
|
|
expect(select).toBeInTheDocument();
|
|
|
|
|
describe("RepeatEvent Component", () => {
|
|
|
|
|
beforeEach(() => {
|
|
|
|
|
jest.clearAllMocks();
|
|
|
|
|
jest.restoreAllMocks();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it("allows selecting repetition frequency", async () => {
|
|
|
|
|
it("renders with no repetition by default", () => {
|
|
|
|
|
const { setRepetition } = setupRepeatEvent();
|
|
|
|
|
const select = screen.getByRole("combobox");
|
|
|
|
|
act(() => {
|
|
|
|
|
userEvent.click(select);
|
|
|
|
|
});
|
|
|
|
|
await waitFor(async () =>
|
|
|
|
|
userEvent.click(await screen.findByText(/repeat weekly/i))
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
// Check that interval input shows default value
|
|
|
|
|
const intervalInput = screen.getByDisplayValue("1");
|
|
|
|
|
expect(intervalInput).toBeInTheDocument();
|
|
|
|
|
|
|
|
|
|
// Check that frequency dropdown shows default value
|
|
|
|
|
const frequencySelect = screen.getByRole("combobox");
|
|
|
|
|
expect(frequencySelect).toBeInTheDocument();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it("allows selecting repetition frequency", () => {
|
|
|
|
|
const { setRepetition } = setupRepeatEvent();
|
|
|
|
|
|
|
|
|
|
// Click on frequency dropdown
|
|
|
|
|
const frequencySelect = screen.getByRole("combobox");
|
|
|
|
|
fireEvent.mouseDown(frequencySelect);
|
|
|
|
|
|
|
|
|
|
// Select Week(s)
|
|
|
|
|
const weeklyOption = screen.getByText("Week(s)");
|
|
|
|
|
fireEvent.click(weeklyOption);
|
|
|
|
|
|
|
|
|
|
expect(setRepetition).toHaveBeenCalledWith(
|
|
|
|
|
expect.objectContaining({ freq: "weekly" })
|
|
|
|
|
);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it("renders interval input when frequency is selected", () => {
|
|
|
|
|
setupRepeatEvent({ freq: "daily", interval: 2 });
|
|
|
|
|
expect(screen.getByText(/Repeat every/i)).toBeInTheDocument();
|
|
|
|
|
expect(screen.getByDisplayValue("2")).toBeInTheDocument();
|
|
|
|
|
setupRepeatEvent({ freq: "daily" });
|
|
|
|
|
|
|
|
|
|
const intervalInput = screen.getByDisplayValue("1");
|
|
|
|
|
expect(intervalInput).toBeInTheDocument();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it("updates interval value", () => {
|
|
|
|
|
const { setRepetition } = setupRepeatEvent({ freq: "daily", interval: 1 });
|
|
|
|
|
const input = screen.getByDisplayValue("1");
|
|
|
|
|
fireEvent.change(input, { target: { value: "5" } });
|
|
|
|
|
const { setRepetition } = setupRepeatEvent();
|
|
|
|
|
|
|
|
|
|
const intervalInput = screen.getByDisplayValue("1");
|
|
|
|
|
fireEvent.change(intervalInput, { target: { value: "3" } });
|
|
|
|
|
|
|
|
|
|
expect(setRepetition).toHaveBeenCalledWith(
|
|
|
|
|
expect.objectContaining({ interval: 5 })
|
|
|
|
|
expect.objectContaining({ interval: 3 })
|
|
|
|
|
);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it("toggles day selection for weekly frequency", () => {
|
|
|
|
|
const { setRepetition } = setupRepeatEvent({
|
|
|
|
|
freq: "weekly",
|
|
|
|
|
selectedDays: [],
|
|
|
|
|
});
|
|
|
|
|
act(() => {
|
|
|
|
|
const mondayCheckbox = screen.getByLabelText("MO");
|
|
|
|
|
fireEvent.click(mondayCheckbox);
|
|
|
|
|
});
|
|
|
|
|
const { setRepetition } = setupRepeatEvent({ freq: "weekly" });
|
|
|
|
|
|
|
|
|
|
const mondayCheckbox = screen.getByLabelText("MO");
|
|
|
|
|
fireEvent.click(mondayCheckbox);
|
|
|
|
|
|
|
|
|
|
expect(setRepetition).toHaveBeenCalledWith(
|
|
|
|
|
expect.objectContaining({ selectedDays: ["MO"] })
|
|
|
|
|
);
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
describe("Repeat Event API calls", () => {
|
|
|
|
|
describe("Repeat Event Integration Tests", () => {
|
|
|
|
|
beforeEach(() => {
|
|
|
|
|
jest.clearAllMocks();
|
|
|
|
|
jest.restoreAllMocks();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it("sends correct CalendarEvent payload", async () => {
|
|
|
|
|
setupEventPopover();
|
|
|
|
|
|
|
|
|
|
userEvent.click(await screen.findByText(/repeat weekly/i));
|
|
|
|
|
|
|
|
|
|
const spy = jest
|
|
|
|
|
.spyOn(eventThunks, "putEventAsync")
|
|
|
|
|
.mockImplementation((payload) => () => Promise.resolve(payload) as any);
|
|
|
|
|
const saveButton = screen.getByRole("button", { name: /save/i });
|
|
|
|
|
act(() => fireEvent.click(saveButton));
|
|
|
|
|
await waitFor(() => expect(spy).toHaveBeenCalled());
|
|
|
|
|
|
|
|
|
|
const received = spy.mock.calls[0][0];
|
|
|
|
|
expect(received.cal).toEqual(
|
|
|
|
|
preloadedState.calendars.list["667037022b752d0026472254/cal1"]
|
|
|
|
|
);
|
|
|
|
|
expect(received.newEvent.title).toBe("Meeting");
|
|
|
|
|
expect(
|
|
|
|
|
formatDateToYYYYMMDDTHHMMSS(new Date(received.newEvent.start)).split(
|
|
|
|
|
"T"
|
|
|
|
|
)[0]
|
|
|
|
|
).toBe("20250718");
|
|
|
|
|
expect(
|
|
|
|
|
formatDateToYYYYMMDDTHHMMSS(
|
|
|
|
|
new Date(received.newEvent.end || new Date())
|
|
|
|
|
).split("T")[0]
|
|
|
|
|
).toBe("20250719");
|
|
|
|
|
expect(received.newEvent.organizer).toEqual(
|
|
|
|
|
preloadedState.user.organiserData
|
|
|
|
|
);
|
|
|
|
|
const day = new Date(received.newEvent.start)
|
|
|
|
|
.toLocaleString("en-UK", {
|
|
|
|
|
weekday: "short",
|
|
|
|
|
})
|
|
|
|
|
.slice(0, 2)
|
|
|
|
|
.toUpperCase();
|
|
|
|
|
|
|
|
|
|
expect(received.newEvent.repetition).toEqual({
|
|
|
|
|
freq: "weekly",
|
|
|
|
|
selectedDays: [day],
|
|
|
|
|
});
|
|
|
|
|
expect(received.newEvent.color).toEqual(
|
|
|
|
|
preloadedState.calendars.list["667037022b752d0026472254/cal1"].color
|
|
|
|
|
);
|
|
|
|
|
expect(mockOnClose).toHaveBeenCalledWith({}, "backdropClick");
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it("sends correct API payload for repeat daily", async () => {
|
|
|
|
|
it("sends correct CalendarEvent payload for daily repeat", async () => {
|
|
|
|
|
await setupEventPopover();
|
|
|
|
|
|
|
|
|
|
userEvent.click(await screen.findByText(/repeat daily/i));
|
|
|
|
|
// When Repeat checkbox is checked, repetition is set to empty object
|
|
|
|
|
// We need to set the frequency manually
|
|
|
|
|
const frequencySelect = screen.getByText("Day(s)");
|
|
|
|
|
fireEvent.mouseDown(frequencySelect);
|
|
|
|
|
const dailyOption = screen.getByRole("option", { name: "Day(s)" });
|
|
|
|
|
fireEvent.click(dailyOption);
|
|
|
|
|
|
|
|
|
|
await expectRRule({ freq: "daily" });
|
|
|
|
|
await expectRRule({ freq: "daily", interval: 1 });
|
|
|
|
|
expect(mockOnClose).toHaveBeenCalledWith({}, "backdropClick");
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it("sends correct API payload for repeat daily with 2 day interval", async () => {
|
|
|
|
|
await setupEventPopover();
|
|
|
|
|
|
|
|
|
|
userEvent.click(await screen.findByText(/repeat daily/i));
|
|
|
|
|
// Set interval to 2
|
|
|
|
|
const intervalInput = screen.getByDisplayValue("1");
|
|
|
|
|
fireEvent.change(intervalInput, { target: { value: "2" } });
|
|
|
|
|
|
|
|
|
@@ -282,94 +227,138 @@ describe("Repeat Event API calls", () => {
|
|
|
|
|
it("sends correct API payload for repeat daily for 5 repetitions", async () => {
|
|
|
|
|
await setupEventPopover();
|
|
|
|
|
|
|
|
|
|
userEvent.click(await screen.findByText(/repeat daily/i));
|
|
|
|
|
userEvent.click(screen.getByLabelText(/after/i));
|
|
|
|
|
const input = screen.getAllByRole("spinbutton")[1];
|
|
|
|
|
fireEvent.change(input, { target: { value: "5" } });
|
|
|
|
|
// Select "After" end option
|
|
|
|
|
const afterRadio = screen.getByLabelText(/after/i);
|
|
|
|
|
fireEvent.click(afterRadio);
|
|
|
|
|
|
|
|
|
|
// Set occurrences to 5
|
|
|
|
|
const occurrencesInput = screen.getAllByRole("spinbutton")[1];
|
|
|
|
|
fireEvent.change(occurrencesInput, { target: { value: "5" } });
|
|
|
|
|
|
|
|
|
|
await expectRRule({ freq: "daily", count: 5 });
|
|
|
|
|
await expectRRule({ freq: "daily", interval: 1, occurrences: 5 });
|
|
|
|
|
expect(mockOnClose).toHaveBeenCalledWith({}, "backdropClick");
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it("sends correct API payload for repeat daily until now+5days", async () => {
|
|
|
|
|
it("sends correct API payload for repeat daily until specific date", async () => {
|
|
|
|
|
await setupEventPopover();
|
|
|
|
|
|
|
|
|
|
userEvent.click(await screen.findByText(/repeat daily/i));
|
|
|
|
|
userEvent.click(screen.getAllByLabelText(/on/i)[3]);
|
|
|
|
|
// Select "On" end option
|
|
|
|
|
const onRadio = screen.getByLabelText(/on/i);
|
|
|
|
|
fireEvent.click(onRadio);
|
|
|
|
|
|
|
|
|
|
// Set end date
|
|
|
|
|
const endDateInput = screen.getByTestId("end-date");
|
|
|
|
|
fireEvent.change(endDateInput, { target: { value: "2025-12-31" } });
|
|
|
|
|
|
|
|
|
|
const untilInput = screen.getByTestId("end-date");
|
|
|
|
|
const futureDate = new Date();
|
|
|
|
|
futureDate.setDate(futureDate.getDate() + 5);
|
|
|
|
|
await expectRRule({ freq: "daily", interval: 1, endDate: "2025-12-31" });
|
|
|
|
|
expect(mockOnClose).toHaveBeenCalledWith({}, "backdropClick");
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
fireEvent.change(untilInput, {
|
|
|
|
|
target: { value: futureDate.toISOString().split("T")[0] },
|
|
|
|
|
});
|
|
|
|
|
await expectRRule({
|
|
|
|
|
freq: "daily",
|
|
|
|
|
until: futureDate.toISOString().split("T")[0],
|
|
|
|
|
it("sends correct API payload for repeat weekly on specific days", async () => {
|
|
|
|
|
await setupEventPopover();
|
|
|
|
|
|
|
|
|
|
// Select Week(s) frequency
|
|
|
|
|
const frequencySelect = screen.getByText("Day(s)");
|
|
|
|
|
fireEvent.mouseDown(frequencySelect);
|
|
|
|
|
const weeklyOption = screen.getByRole("option", { name: "Week(s)" });
|
|
|
|
|
fireEvent.click(weeklyOption);
|
|
|
|
|
|
|
|
|
|
// Select Thursday
|
|
|
|
|
const thursdayCheckbox = screen.getByLabelText("TH");
|
|
|
|
|
fireEvent.click(thursdayCheckbox);
|
|
|
|
|
|
|
|
|
|
await expectRRule({
|
|
|
|
|
freq: "weekly",
|
|
|
|
|
interval: 1,
|
|
|
|
|
selectedDays: ["FR", "TH"]
|
|
|
|
|
});
|
|
|
|
|
expect(mockOnClose).toHaveBeenCalledWith({}, "backdropClick");
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it("sends correct API payload for repeat weekly on Thursday and event day (Friday)", async () => {
|
|
|
|
|
it("sends correct API payload for repeat weekly with 3 week interval", async () => {
|
|
|
|
|
await setupEventPopover();
|
|
|
|
|
|
|
|
|
|
userEvent.click(await screen.findByText(/repeat weekly/i));
|
|
|
|
|
userEvent.click(screen.getByLabelText("TH"));
|
|
|
|
|
|
|
|
|
|
await expectRRule({ freq: "weekly", byday: ["TH", "FR"] });
|
|
|
|
|
expect(mockOnClose).toHaveBeenCalledWith({}, "backdropClick");
|
|
|
|
|
});
|
|
|
|
|
it("sends correct API payload for repeat weekly on Thursday and event day (Friday) and an interval of 3 weeks", async () => {
|
|
|
|
|
await setupEventPopover();
|
|
|
|
|
|
|
|
|
|
userEvent.click(await screen.findByText(/repeat weekly/i));
|
|
|
|
|
|
|
|
|
|
userEvent.click(screen.getByLabelText("TH"));
|
|
|
|
|
// Select Week(s) frequency
|
|
|
|
|
const frequencySelect = screen.getByText("Day(s)");
|
|
|
|
|
fireEvent.mouseDown(frequencySelect);
|
|
|
|
|
const weeklyOption = screen.getByRole("option", { name: "Week(s)" });
|
|
|
|
|
fireEvent.click(weeklyOption);
|
|
|
|
|
|
|
|
|
|
// Set interval to 3
|
|
|
|
|
const intervalInput = screen.getByDisplayValue("1");
|
|
|
|
|
fireEvent.change(intervalInput, { target: { value: "3" } });
|
|
|
|
|
|
|
|
|
|
await expectRRule({ freq: "weekly", byday: ["TH", "FR"], interval: 3 });
|
|
|
|
|
await expectRRule({ freq: "weekly", interval: 3 });
|
|
|
|
|
expect(mockOnClose).toHaveBeenCalledWith({}, "backdropClick");
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it("sends correct API payload for repeat monthly", async () => {
|
|
|
|
|
await setupEventPopover();
|
|
|
|
|
|
|
|
|
|
userEvent.click(await screen.findByText(/repeat monthly/i));
|
|
|
|
|
// Select Month(s) frequency
|
|
|
|
|
const frequencySelect = screen.getByText("Day(s)");
|
|
|
|
|
fireEvent.mouseDown(frequencySelect);
|
|
|
|
|
const monthlyOption = screen.getByRole("option", { name: "Month(s)" });
|
|
|
|
|
fireEvent.click(monthlyOption);
|
|
|
|
|
|
|
|
|
|
await expectRRule({ freq: "monthly" });
|
|
|
|
|
await expectRRule({ freq: "monthly", interval: 1 });
|
|
|
|
|
expect(mockOnClose).toHaveBeenCalledWith({}, "backdropClick");
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it("sends correct API payload for repeat monthly and end after 5 occurrences", async () => {
|
|
|
|
|
await setupEventPopover();
|
|
|
|
|
|
|
|
|
|
userEvent.click(await screen.findByText(/repeat monthly/i));
|
|
|
|
|
userEvent.click(screen.getByLabelText(/after/i));
|
|
|
|
|
const input = screen.getAllByRole("spinbutton")[1];
|
|
|
|
|
fireEvent.change(input, { target: { value: "5" } });
|
|
|
|
|
await expectRRule({ freq: "monthly", count: 5 });
|
|
|
|
|
// Select Month(s) frequency
|
|
|
|
|
const frequencySelect = screen.getByText("Day(s)");
|
|
|
|
|
fireEvent.mouseDown(frequencySelect);
|
|
|
|
|
const monthlyOption = screen.getByRole("option", { name: "Month(s)" });
|
|
|
|
|
fireEvent.click(monthlyOption);
|
|
|
|
|
|
|
|
|
|
// Select "After" end option
|
|
|
|
|
const afterRadio = screen.getByLabelText(/after/i);
|
|
|
|
|
fireEvent.click(afterRadio);
|
|
|
|
|
|
|
|
|
|
// Set occurrences to 5
|
|
|
|
|
const occurrencesInput = screen.getAllByRole("spinbutton")[1];
|
|
|
|
|
fireEvent.change(occurrencesInput, { target: { value: "5" } });
|
|
|
|
|
|
|
|
|
|
await expectRRule({ freq: "monthly", interval: 1, occurrences: 5 });
|
|
|
|
|
expect(mockOnClose).toHaveBeenCalledWith({}, "backdropClick");
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it("sends correct API payload for repeat yearly", async () => {
|
|
|
|
|
await setupEventPopover();
|
|
|
|
|
|
|
|
|
|
userEvent.click(await screen.findByText(/repeat yearly/i));
|
|
|
|
|
// Select Year(s) frequency
|
|
|
|
|
const frequencySelect = screen.getByText("Day(s)");
|
|
|
|
|
fireEvent.mouseDown(frequencySelect);
|
|
|
|
|
const yearlyOption = screen.getByRole("option", { name: "Year(s)" });
|
|
|
|
|
fireEvent.click(yearlyOption);
|
|
|
|
|
|
|
|
|
|
await expectRRule({ freq: "yearly" });
|
|
|
|
|
await expectRRule({ freq: "yearly", interval: 1 });
|
|
|
|
|
expect(mockOnClose).toHaveBeenCalledWith({}, "backdropClick");
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it("sends correct API payload for repeat yearly, but user first choose to end after 5 occurrences then changed mind and chose to not end", async () => {
|
|
|
|
|
it("sends correct API payload for repeat yearly with end option changes", async () => {
|
|
|
|
|
await setupEventPopover();
|
|
|
|
|
|
|
|
|
|
userEvent.click(await screen.findByText(/repeat yearly/i));
|
|
|
|
|
userEvent.click(screen.getByLabelText(/after/i));
|
|
|
|
|
const input = screen.getAllByRole("spinbutton")[1];
|
|
|
|
|
fireEvent.change(input, { target: { value: "5" } });
|
|
|
|
|
userEvent.click(screen.getByLabelText(/never/i));
|
|
|
|
|
// Select Year(s) frequency
|
|
|
|
|
const frequencySelect = screen.getByText("Day(s)");
|
|
|
|
|
fireEvent.mouseDown(frequencySelect);
|
|
|
|
|
const yearlyOption = screen.getByRole("option", { name: "Year(s)" });
|
|
|
|
|
fireEvent.click(yearlyOption);
|
|
|
|
|
|
|
|
|
|
await expectRRule({ freq: "yearly" });
|
|
|
|
|
// First choose "After" with 5 occurrences
|
|
|
|
|
const afterRadio = screen.getByLabelText(/after/i);
|
|
|
|
|
fireEvent.click(afterRadio);
|
|
|
|
|
const occurrencesInput = screen.getAllByRole("spinbutton")[1];
|
|
|
|
|
fireEvent.change(occurrencesInput, { target: { value: "5" } });
|
|
|
|
|
|
|
|
|
|
// Then change mind and choose "Never"
|
|
|
|
|
const neverRadio = screen.getByLabelText(/never/i);
|
|
|
|
|
fireEvent.click(neverRadio);
|
|
|
|
|
|
|
|
|
|
await expectRRule({ freq: "yearly", interval: 1, occurrences: 0, endDate: "" });
|
|
|
|
|
expect(mockOnClose).toHaveBeenCalledWith({}, "backdropClick");
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
});
|