144 lines
4.5 KiB
TypeScript
144 lines
4.5 KiB
TypeScript
|
import { Page, test, expect } from '@playwright/test';
|
||
|
import { loginApi } from '../fixtures/common';
|
||
|
import ROUTES from 'constants/routes';
|
||
|
import dashboardsListEmptyResponse from '../fixtures/api/dashboard/getDashboardListEmpty200.json';
|
||
|
import createNewDashboardPostResponse from '../fixtures/api/dashboard/createNewDashboardPost200.json';
|
||
|
import queryRangeSuccessResponse from '../fixtures/api/traces/queryRange200.json';
|
||
|
import getIndividualDashboardResponse from '../fixtures/api/dashboard/getIndividualDashboard200.json';
|
||
|
import putNewDashboardResponse from '../fixtures/api/dashboard/putNewDashboardUpdate200.json';
|
||
|
import putDashboardTimeSeriesResponse from '../fixtures/api/dashboard/putDashboardWithTimeSeries200.json';
|
||
|
import dashboardGetCallWithTimeSeriesWidgetResponse from '../fixtures/api/dashboard/dashboardGetCallWithTimeSeriesWidget200.json';
|
||
|
import {
|
||
|
addPanelID,
|
||
|
configureDashboardDescriptonID,
|
||
|
configureDashboardNameID,
|
||
|
configureDashboardSettings,
|
||
|
dashboardDescription,
|
||
|
dashboardHomePageDesc,
|
||
|
dashboardHomePageTitle,
|
||
|
dashboardName,
|
||
|
dashboardsListAndCreate,
|
||
|
getDashboardsListEndpoint,
|
||
|
getIndividualDashboard,
|
||
|
getIndividualDashboardsEndpoint,
|
||
|
getTimeSeriesQueryData,
|
||
|
newDashboardBtnID,
|
||
|
saveConfigureDashboardID,
|
||
|
timeSeriesGraphName,
|
||
|
timeSeriesPanelID,
|
||
|
} from './utils';
|
||
|
|
||
|
let page: Page;
|
||
|
|
||
|
test.describe('Dashboards Landing Page', () => {
|
||
|
test.beforeEach(async ({ baseURL, browser }) => {
|
||
|
const context = await browser.newContext({
|
||
|
storageState: 'tests/auth.json',
|
||
|
});
|
||
|
const newPage = await context.newPage();
|
||
|
|
||
|
await loginApi(newPage);
|
||
|
|
||
|
await newPage.goto(`${baseURL}${ROUTES.APPLICATION}`);
|
||
|
|
||
|
page = newPage;
|
||
|
});
|
||
|
|
||
|
test('Create a new dashboard and configure the name and description', async ({}) => {
|
||
|
// render the dashboards list page with empty response
|
||
|
await dashboardsListAndCreate(page, dashboardsListEmptyResponse);
|
||
|
|
||
|
// navigate to the dashboards landing page
|
||
|
await page.locator(`li[data-menu-id*="/dashboard"]`).click();
|
||
|
|
||
|
await page.waitForRequest(`**/${getDashboardsListEndpoint}`);
|
||
|
|
||
|
// without data we should have no data rendering
|
||
|
const noDataText = await page.getByText('No data');
|
||
|
|
||
|
await expect(noDataText).toBeVisible();
|
||
|
|
||
|
// create a new dashboard
|
||
|
await page.locator(`data-testid=${newDashboardBtnID}`).click();
|
||
|
|
||
|
await dashboardsListAndCreate(page, createNewDashboardPostResponse);
|
||
|
|
||
|
await getIndividualDashboard(page, getIndividualDashboardResponse);
|
||
|
|
||
|
await page.locator(`li[data-menu-id*="Create"]`).click();
|
||
|
|
||
|
await page.waitForRequest(`**/${getIndividualDashboardsEndpoint}`);
|
||
|
|
||
|
await page.locator(`data-testid=${configureDashboardSettings}`).click();
|
||
|
|
||
|
const dashboardNameInput = await page.locator(
|
||
|
`data-testid=${configureDashboardNameID}`,
|
||
|
);
|
||
|
|
||
|
// edit the name of the dashboard
|
||
|
await dashboardNameInput.fill('');
|
||
|
|
||
|
await dashboardNameInput.fill(`${dashboardName}`);
|
||
|
|
||
|
// edit the description of the dashboard
|
||
|
const dashboardDescInput = await page.locator(
|
||
|
`data-testid=${configureDashboardDescriptonID}`,
|
||
|
);
|
||
|
await dashboardDescInput.fill('');
|
||
|
|
||
|
await dashboardDescInput.fill(`${dashboardDescription}`);
|
||
|
|
||
|
await getIndividualDashboard(page, putNewDashboardResponse);
|
||
|
|
||
|
await page.locator(`data-testid=${saveConfigureDashboardID}`).click();
|
||
|
|
||
|
await page.locator(`svg[data-icon="close"]`).click();
|
||
|
|
||
|
// save the configs and check for updated values
|
||
|
const dashboardTitle = await page
|
||
|
.locator(`data-testid=${dashboardHomePageTitle}`)
|
||
|
.textContent();
|
||
|
|
||
|
expect(dashboardTitle).toBe(`${dashboardName}`);
|
||
|
|
||
|
const dashboardDesc = await page
|
||
|
.locator(`data-testid=${dashboardHomePageDesc}`)
|
||
|
.textContent();
|
||
|
|
||
|
expect(dashboardDesc).toBe(`${dashboardDescription}`);
|
||
|
|
||
|
await page.locator(`data-testid=${addPanelID}`).click();
|
||
|
|
||
|
await getIndividualDashboard(page, putDashboardTimeSeriesResponse, true);
|
||
|
|
||
|
await getTimeSeriesQueryData(page, queryRangeSuccessResponse);
|
||
|
|
||
|
await page.locator(`id=${timeSeriesPanelID}`).click();
|
||
|
|
||
|
await page.waitForRequest(`**/${getIndividualDashboardsEndpoint}`);
|
||
|
|
||
|
const panelTitle = await page.getByText('Panel Title').isVisible();
|
||
|
|
||
|
await expect(panelTitle).toBeTruthy();
|
||
|
|
||
|
await page.getByPlaceholder('Title').type(`${timeSeriesGraphName}`);
|
||
|
|
||
|
await page.locator('data-testid=new-widget-save').click();
|
||
|
|
||
|
await getIndividualDashboard(
|
||
|
page,
|
||
|
dashboardGetCallWithTimeSeriesWidgetResponse,
|
||
|
);
|
||
|
|
||
|
await page.locator('span:has-text("OK")').click();
|
||
|
|
||
|
await page.waitForLoadState('networkidle');
|
||
|
|
||
|
const timeSeriesWidget = await await page.locator(
|
||
|
`data-testid=${timeSeriesGraphName}`,
|
||
|
);
|
||
|
|
||
|
await expect(timeSeriesWidget).toBeTruthy();
|
||
|
});
|
||
|
});
|