mirror of
https://github.com/grafana/grafana.git
synced 2025-07-28 14:02:15 +08:00
101 lines
4.1 KiB
TypeScript
101 lines
4.1 KiB
TypeScript
import { test, expect } from '@grafana/plugin-e2e';
|
|
|
|
const DASHBOARD_UID = '5SdHCasdf';
|
|
|
|
const USER = 'dashboard-timepicker-test';
|
|
const PASSWORD = 'dashboard-timepicker-test';
|
|
|
|
// Separate user to isolate changes from other tests
|
|
test.use({
|
|
user: {
|
|
user: USER,
|
|
password: PASSWORD,
|
|
},
|
|
storageState: {
|
|
cookies: [],
|
|
origins: [],
|
|
},
|
|
});
|
|
|
|
test.describe(
|
|
'Dashboard timepicker',
|
|
{
|
|
tag: ['@dashboards'],
|
|
},
|
|
() => {
|
|
test('Shows the correct calendar days with custom timezone set via preferences', async ({
|
|
createUser,
|
|
page,
|
|
gotoDashboardPage,
|
|
dashboardPage,
|
|
selectors,
|
|
}) => {
|
|
await createUser();
|
|
// login manually for now
|
|
await page.getByTestId(selectors.pages.Login.username).fill(USER);
|
|
await page.getByTestId(selectors.pages.Login.password).fill(PASSWORD);
|
|
await page.getByTestId(selectors.pages.Login.submit).click();
|
|
await expect(page.getByTestId(selectors.components.NavToolbar.commandPaletteTrigger)).toBeVisible();
|
|
|
|
// Set user preferences for timezone
|
|
await page.goto('/profile');
|
|
await page.getByTestId(selectors.components.TimeZonePicker.containerV2).click();
|
|
await page.getByRole('option', { name: 'Asia/Tokyo' }).click();
|
|
await page.getByTestId(selectors.components.UserProfile.preferencesSaveButton).click();
|
|
// wait for the page to reload before trying to navigate, otherwise this can cause flakes
|
|
// see e.g. https://github.com/microsoft/playwright/issues/21451#issuecomment-1502251404
|
|
await page.waitForURL('/profile');
|
|
|
|
// Open dashboard with time range from 8th to end of 10th.
|
|
// Will be Tokyo time because of above preference
|
|
await gotoDashboardPage({
|
|
uid: DASHBOARD_UID,
|
|
queryParams: new URLSearchParams({
|
|
timezone: 'Default',
|
|
}),
|
|
});
|
|
await dashboardPage.getByGrafanaSelector(selectors.components.TimePicker.openButton).click();
|
|
await dashboardPage.getByGrafanaSelector(selectors.components.TimePicker.fromField).fill('2022-06-08 00:00:00');
|
|
await dashboardPage.getByGrafanaSelector(selectors.components.TimePicker.toField).fill('2022-06-10 23:59:59');
|
|
await dashboardPage.getByGrafanaSelector(selectors.components.TimePicker.calendar.openButton).first().click();
|
|
|
|
// Assert that the calendar shows 08 and 09 and 10 as selected days
|
|
const activeTiles = page.locator('.react-calendar__tile--active, .react-calendar__tile--hasActive');
|
|
await expect(activeTiles).toHaveCount(3);
|
|
});
|
|
|
|
test('Shows the correct calendar days with custom timezone set via time picker', async ({
|
|
createUser,
|
|
page,
|
|
gotoDashboardPage,
|
|
dashboardPage,
|
|
selectors,
|
|
}) => {
|
|
await createUser();
|
|
// login manually for now
|
|
await page.getByTestId(selectors.pages.Login.username).fill(USER);
|
|
await page.getByTestId(selectors.pages.Login.password).fill(PASSWORD);
|
|
await page.getByTestId(selectors.pages.Login.submit).click();
|
|
await expect(page.getByTestId(selectors.components.NavToolbar.commandPaletteTrigger)).toBeVisible();
|
|
|
|
// Open dashboard with time range from 2022-06-08 00:00:00 to 2022-06-10 23:59:59 in Tokyo time
|
|
await gotoDashboardPage({
|
|
uid: DASHBOARD_UID,
|
|
queryParams: new URLSearchParams({
|
|
timezone: 'Asia/Tokyo',
|
|
}),
|
|
});
|
|
|
|
// Open dashboard with time range from 8th to end of 10th.
|
|
await dashboardPage.getByGrafanaSelector(selectors.components.TimePicker.openButton).click();
|
|
await dashboardPage.getByGrafanaSelector(selectors.components.TimePicker.fromField).fill('2022-06-08 00:00:00');
|
|
await dashboardPage.getByGrafanaSelector(selectors.components.TimePicker.toField).fill('2022-06-10 23:59:59');
|
|
await dashboardPage.getByGrafanaSelector(selectors.components.TimePicker.calendar.openButton).first().click();
|
|
|
|
// Assert that the calendar shows 08 and 09 and 10 as selected days
|
|
const activeTiles = page.locator('.react-calendar__tile--active, .react-calendar__tile--hasActive');
|
|
await expect(activeTiles).toHaveCount(3);
|
|
});
|
|
}
|
|
);
|