# What this PR does Related to https://github.com/grafana/irm/pull/137 (**NOTE**: should only be merged after those changed are back-merged here into `grafana/oncall`) ## Which issue(s) this PR closes Also, fixes https://github.com/grafana/oncall/issues/5028 --------- Co-authored-by: Dominik <dominik.broj@grafana.com>
70 lines
3 KiB
TypeScript
70 lines
3 KiB
TypeScript
import dayjs from 'dayjs';
|
|
|
|
import { test, expect, Locator } from '../fixtures';
|
|
import { isGrafanaVersionGreaterThan, MOSCOW_TIMEZONE } from '../utils/constants';
|
|
import { clickButton, generateRandomValue } from '../utils/forms';
|
|
import { setTimezoneInProfile } from '../utils/grafanaProfile';
|
|
import { createOnCallSchedule, getOverrideFormDateInputs } from '../utils/schedule';
|
|
|
|
test('Default dates in override creation modal are set to today', async ({ adminRolePage }) => {
|
|
const { page, userName } = adminRolePage;
|
|
|
|
const onCallScheduleName = generateRandomValue();
|
|
await createOnCallSchedule(page, onCallScheduleName, userName);
|
|
|
|
await page.clock.setFixedTime(new Date().setHours(12, 0, 0, 0));
|
|
await page.getByTestId('timezone-select').locator('svg').click();
|
|
await (isGrafanaVersionGreaterThan('11.0.0') ? page.getByRole('option') : page.getByLabel('Select option'))
|
|
.getByText(/^GMT$/)
|
|
.click();
|
|
|
|
await clickButton({ page, buttonText: 'Add override' });
|
|
|
|
const overrideFormDateInputs = await getOverrideFormDateInputs(page);
|
|
|
|
const expectedStart = dayjs().startOf('day'); // start of today
|
|
const expectedEnd = expectedStart.add(1, 'day'); // end of today
|
|
|
|
expect(overrideFormDateInputs.start.isSame(expectedStart)).toBe(true);
|
|
expect(overrideFormDateInputs.end.isSame(expectedEnd)).toBe(true);
|
|
});
|
|
|
|
test('Fills in override time and reacts to timezone change', async ({ adminRolePage }) => {
|
|
const { page, userName } = adminRolePage;
|
|
|
|
await setTimezoneInProfile(page, MOSCOW_TIMEZONE); // UTC+3
|
|
|
|
const onCallScheduleName = generateRandomValue();
|
|
await createOnCallSchedule(page, onCallScheduleName, userName, false);
|
|
|
|
await clickButton({ page, buttonText: 'Add override' });
|
|
|
|
const overrideStartEl = page.getByTestId('override-start');
|
|
await changeDatePickerTime(overrideStartEl, '02');
|
|
await expect(overrideStartEl.getByTestId('date-time-picker').getByRole('textbox')).toHaveValue('02:00');
|
|
|
|
const overrideEndEl = page.getByTestId('override-end');
|
|
await changeDatePickerTime(overrideEndEl, '12');
|
|
await expect(overrideEndEl.getByTestId('date-time-picker').getByRole('textbox')).toHaveValue('12:00');
|
|
|
|
await page.getByRole('dialog').click(); // clear focus
|
|
|
|
await page.getByTestId('timezone-select').locator('svg').click();
|
|
await page.getByText('GMT', { exact: true }).click();
|
|
|
|
// expect times to go back by -3
|
|
await expect(overrideStartEl.getByTestId('date-time-picker').getByRole('textbox')).toHaveValue('23:00');
|
|
await expect(overrideEndEl.getByTestId('date-time-picker').getByRole('textbox')).toHaveValue('09:00');
|
|
|
|
async function changeDatePickerTime(element: Locator, value: string) {
|
|
await element.getByTestId('date-time-picker').getByRole('textbox').click();
|
|
|
|
// set minutes to {value}
|
|
await page.getByRole('button', { name: value }).first().click();
|
|
|
|
// Old way
|
|
// await page.locator('.rc-time-picker-panel').getByRole('button', { name: value }).first().click();
|
|
// set seconds to 00
|
|
await page.getByRole('button', { name: '00' }).nth(1).click();
|
|
}
|
|
});
|