diff --git a/grafana-plugin/e2e-tests/schedules/scheduleView.test.ts b/grafana-plugin/e2e-tests/schedules/scheduleView.test.ts index 0f27f47a..a76025b6 100644 --- a/grafana-plugin/e2e-tests/schedules/scheduleView.test.ts +++ b/grafana-plugin/e2e-tests/schedules/scheduleView.test.ts @@ -1,31 +1,42 @@ +import semver from 'semver'; + import { scheduleViewToDaysInOneRow } from 'models/schedule/schedule.helpers'; import { ScheduleView } from 'models/schedule/schedule.types'; import { HTML_ID } from 'utils/DOM'; -import { expect, test } from '../fixtures'; +import { expect, Page, test } from '../fixtures'; import { generateRandomValue } from '../utils/forms'; import { createOnCallSchedule } from '../utils/schedule'; -test.skip('schedule view (week/2 weeks/month) toggler works', async ({ adminRolePage }) => { +const getNumberOfWeekdaysInFinalSchedule = async (page: Page) => + await page.locator(`#${HTML_ID.SCHEDULE_FINAL}`).getByTestId('schedule-weekday').count(); +const getScheduleViewRadioButtonLocator = (page: Page, view: ScheduleView) => + page + .getByTestId('schedule-view-picker') + [semver.lt(process.env.CURRENT_GRAFANA_VERSION, '10.2.0') ? 'getByText' : 'getByLabel'](view, { exact: true }); + +test('schedule view (week/2 weeks/month) toggler works', async ({ adminRolePage }) => { const { page, userName } = adminRolePage; const onCallScheduleName = generateRandomValue(); await createOnCallSchedule(page, onCallScheduleName, userName); // ScheduleView.OneWeek is selected by default - expect(await page.getByLabel(ScheduleView.OneWeek, { exact: true }).isChecked()).toBe(true); + expect(await getScheduleViewRadioButtonLocator(page, ScheduleView.OneWeek).isChecked()).toBe(true); - expect(await page.locator(`#${HTML_ID.SCHEDULE_FINAL} .TEST_weekday`).count()).toStrictEqual( + expect(await getNumberOfWeekdaysInFinalSchedule(page)).toStrictEqual( scheduleViewToDaysInOneRow[ScheduleView.OneWeek] ); - await page.getByLabel(ScheduleView.TwoWeeks, { exact: true }).click(); - expect(await page.getByLabel(ScheduleView.TwoWeeks, { exact: true }).isChecked()).toBe(true); - expect(await page.locator(`#${HTML_ID.SCHEDULE_FINAL} .TEST_weekday`).count()).toStrictEqual( + await getScheduleViewRadioButtonLocator(page, ScheduleView.TwoWeeks).click(); + await page.waitForTimeout(1000); + expect(await getScheduleViewRadioButtonLocator(page, ScheduleView.TwoWeeks).isChecked()).toBe(true); + expect(await getNumberOfWeekdaysInFinalSchedule(page)).toStrictEqual( scheduleViewToDaysInOneRow[ScheduleView.TwoWeeks] ); - await page.getByLabel(ScheduleView.OneMonth, { exact: true }).click(); - expect(await page.getByLabel(ScheduleView.OneMonth, { exact: true }).isChecked()).toBe(true); - expect(await page.locator(`#${HTML_ID.SCHEDULE_FINAL} .TEST_weekday`).count()).toBeGreaterThanOrEqual(28); + await getScheduleViewRadioButtonLocator(page, ScheduleView.OneMonth).click(); + await page.waitForTimeout(1000); + expect(await getScheduleViewRadioButtonLocator(page, ScheduleView.OneMonth).isChecked()).toBe(true); + expect(await getNumberOfWeekdaysInFinalSchedule(page)).toBeGreaterThanOrEqual(28); }); diff --git a/grafana-plugin/src/containers/TimelineMarks/TimelineMarks.tsx b/grafana-plugin/src/containers/TimelineMarks/TimelineMarks.tsx index 9685b667..c14c3cc4 100644 --- a/grafana-plugin/src/containers/TimelineMarks/TimelineMarks.tsx +++ b/grafana-plugin/src/containers/TimelineMarks/TimelineMarks.tsx @@ -84,7 +84,8 @@ export const TimelineMarks: FC = observer((props) => { return (
diff --git a/grafana-plugin/src/pages/schedule/Schedule.tsx b/grafana-plugin/src/pages/schedule/Schedule.tsx index 6264504e..997cbb30 100644 --- a/grafana-plugin/src/pages/schedule/Schedule.tsx +++ b/grafana-plugin/src/pages/schedule/Schedule.tsx @@ -356,28 +356,30 @@ class _SchedulePage extends React.Component - { - scheduleStore.setScheduleView(value); - if (value === ScheduleView.OneMonth) { - timezoneStore.setCalendarStartDate( - getCalendarStartDate( - timezoneStore.calendarStartDate.endOf('isoWeek').startOf('month'), - value, - timezoneStore.selectedTimezoneOffset - ) - ); - } +
+ { + scheduleStore.setScheduleView(value); + if (value === ScheduleView.OneMonth) { + timezoneStore.setCalendarStartDate( + getCalendarStartDate( + timezoneStore.calendarStartDate.endOf('isoWeek').startOf('month'), + value, + timezoneStore.selectedTimezoneOffset + ) + ); + } - scheduleStore.refreshEvents(scheduleId); - }} - /> + scheduleStore.refreshEvents(scheduleId); + }} + /> +
this.setState({ filters: value })}