grafana/e2e-playwright/dashboards-suite/dashboard-share-externally-...

192 lines
6.8 KiB
TypeScript

import { test, expect } from '@grafana/plugin-e2e';
test.use({
featureToggles: {
scenes: true,
newDashboardSharingComponent: true,
},
});
const DASHBOARD_UID = 'd41dbaa2-a39e-4536-ab2b-caca52f1a9c8';
const DASHBOARD_UID_2 = 'edediimbjhdz4b';
test.describe(
'Shared dashboards',
{
tag: ['@dashboards'],
},
() => {
test('Close share externally drawer', async ({ page, gotoDashboardPage, selectors }) => {
const dashboardPage = await gotoDashboardPage({ uid: DASHBOARD_UID });
// Open share externally drawer
await dashboardPage.getByGrafanaSelector(selectors.pages.Dashboard.DashNav.newShareButton.arrowMenu).click();
await dashboardPage
.getByGrafanaSelector(selectors.pages.Dashboard.DashNav.newShareButton.menu.shareExternally)
.click();
await expect(page).toHaveURL(/.*shareView=public_dashboard.*/);
await expect(
dashboardPage.getByGrafanaSelector(selectors.pages.ShareDashboardDrawer.ShareExternally.container)
).toBeVisible();
await dashboardPage
.getByGrafanaSelector(selectors.pages.ShareDashboardDrawer.ShareExternally.Creation.PublicShare.cancelButton)
.click();
await expect(page).not.toHaveURL(/.*shareView=public_dashboard.*/);
await expect(
dashboardPage.getByGrafanaSelector(selectors.pages.ShareDashboardDrawer.ShareExternally.container)
).toBeHidden();
});
test('Create and disable a shared dashboard and check API', async ({
page,
gotoDashboardPage,
selectors,
request,
}) => {
const dashboardPage = await gotoDashboardPage({ uid: DASHBOARD_UID_2 });
// Open share externally drawer
await dashboardPage.getByGrafanaSelector(selectors.pages.Dashboard.DashNav.newShareButton.arrowMenu).click();
await dashboardPage
.getByGrafanaSelector(selectors.pages.Dashboard.DashNav.newShareButton.menu.shareExternally)
.click();
// Create button should be disabled
await expect(
dashboardPage.getByGrafanaSelector(
selectors.pages.ShareDashboardDrawer.ShareExternally.Creation.PublicShare.createButton
)
).toBeDisabled();
// Create flow shouldn't show these elements
await expect(
dashboardPage.getByGrafanaSelector(
selectors.pages.ShareDashboardDrawer.ShareExternally.Configuration.enableTimeRangeSwitch
)
).toBeHidden();
await expect(
dashboardPage.getByGrafanaSelector(
selectors.pages.ShareDashboardDrawer.ShareExternally.Configuration.enableAnnotationsSwitch
)
).toBeHidden();
await expect(
dashboardPage.getByGrafanaSelector(
selectors.pages.ShareDashboardDrawer.ShareExternally.Configuration.copyUrlButton
)
).toBeHidden();
await expect(
dashboardPage.getByGrafanaSelector(
selectors.pages.ShareDashboardDrawer.ShareExternally.Configuration.revokeAccessButton
)
).toBeHidden();
await expect(
dashboardPage.getByGrafanaSelector(
selectors.pages.ShareDashboardDrawer.ShareExternally.Configuration.toggleAccessButton
)
).toBeHidden();
// Acknowledge checkbox
await expect(
dashboardPage.getByGrafanaSelector(
selectors.pages.ShareDashboardDrawer.ShareExternally.Creation.willBePublicCheckbox
)
).toBeEnabled();
await dashboardPage
.getByGrafanaSelector(selectors.pages.ShareDashboardDrawer.ShareExternally.Creation.willBePublicCheckbox)
.click({ force: true });
// Create shared dashboard
const createResponse = page.waitForResponse(
(response) =>
response.url().includes(`/api/dashboards/uid/${DASHBOARD_UID_2}/public-dashboards`) &&
response.request().method() === 'POST'
);
await expect(
dashboardPage.getByGrafanaSelector(
selectors.pages.ShareDashboardDrawer.ShareExternally.Creation.PublicShare.createButton
)
).toBeEnabled();
await dashboardPage
.getByGrafanaSelector(selectors.pages.ShareDashboardDrawer.ShareExternally.Creation.PublicShare.createButton)
.click();
let response = await createResponse;
let publicDashboard = await response.json();
// Test API access with the created dashboard
let apiResponse = await request.get(`/api/public/dashboards/${publicDashboard.accessToken}`);
expect(apiResponse.status()).toBe(200);
// These elements shouldn't be rendered after creating public dashboard
await expect(
dashboardPage.getByGrafanaSelector(
selectors.pages.ShareDashboardDrawer.ShareExternally.Creation.willBePublicCheckbox
)
).toBeHidden();
await expect(
dashboardPage.getByGrafanaSelector(
selectors.pages.ShareDashboardDrawer.ShareExternally.Creation.PublicShare.createButton
)
).toBeHidden();
// These elements should be rendered
await expect(
dashboardPage.getByGrafanaSelector(
selectors.pages.ShareDashboardDrawer.ShareExternally.Configuration.enableTimeRangeSwitch
)
).toBeVisible();
await expect(
dashboardPage.getByGrafanaSelector(
selectors.pages.ShareDashboardDrawer.ShareExternally.Configuration.enableAnnotationsSwitch
)
).toBeVisible();
await expect(
dashboardPage.getByGrafanaSelector(
selectors.pages.ShareDashboardDrawer.ShareExternally.Configuration.copyUrlButton
)
).toBeVisible();
await expect(
dashboardPage.getByGrafanaSelector(
selectors.pages.ShareDashboardDrawer.ShareExternally.Configuration.revokeAccessButton
)
).toBeVisible();
await expect(
dashboardPage.getByGrafanaSelector(
selectors.pages.ShareDashboardDrawer.ShareExternally.Configuration.toggleAccessButton
)
).toBeVisible();
// Switch off enabling toggle
const updateResponse = page.waitForResponse(
(response) =>
response.url().includes(`/api/dashboards/uid/${DASHBOARD_UID_2}/public-dashboards/`) &&
response.request().method() === 'PATCH'
);
await expect(
dashboardPage.getByGrafanaSelector(
selectors.pages.ShareDashboardDrawer.ShareExternally.Configuration.toggleAccessButton
)
).toBeEnabled();
await dashboardPage
.getByGrafanaSelector(selectors.pages.ShareDashboardDrawer.ShareExternally.Configuration.toggleAccessButton)
.click({ force: true });
response = await updateResponse;
expect(response.status()).toBe(200);
publicDashboard = await response.json();
// Test that API access is now forbidden
apiResponse = await request.get(`/api/public/dashboards/${publicDashboard.accessToken}`);
expect(apiResponse.status()).toBe(403);
});
}
);