mirror of https://github.com/grafana/grafana.git
192 lines
6.8 KiB
TypeScript
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);
|
||
|
});
|
||
|
}
|
||
|
);
|