mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
* Standarize e2e for addDashbaord e2e flow
* WIP: Duplicate e2e dashboard flows and smoke test for scene e2e tests
* Fix autoformatting mistake for bash file
* Enable dashboardScene using local storage and only for the scene folder
* Add missing folders
* Set the feature toggle in the before of all tests
* Revert "Standarize e2e for addDashbaord e2e flow"
This reverts commit 6b9ea9d5a4
.
* Add missing e2e selectors to NavToolbarActions, and modify addDashboard scene flow
* e2e: panels_smokescreen.spec.ts migrated
* e2e smokeTestSceneario migrated
* Start migrating dashbaord-suite e2e
* WIP create variable types
* adjust tests for scenes
* restore dashboard json file
* update scenes version
* restore pkg/build/wire/internal/wire/testdata modifications
* finalising test adjusments
* restore pkg/build/wire/internal/wire/testdata files
* add latest scenes version and update tests
* add drone setup for dashboard scenes tests
* update to latest scenes version
* adjust drone errors
* adjust indentation in drone yml file
* drone adjustments
* add github workflow to run scenes e2e
* restore drone file
* adjust github workflow
* wip: github workflow adjustments
* test remove gpu
* bump
* undo formating changes
* wip: github workflow debugging
* adjusting flaky tests
* update to latest scenes
* clean up workflow file
* adjust flaky test
* clean up pr
* finalise worflow logic and add to codeowners
* clean up launching old arch dashboards e2e separately
---------
Co-authored-by: Sergej-Vlasov <sergej.s.vlasov@gmail.com>
Co-authored-by: Jeff Levin <jeff@levinology.com>
141 lines
4.4 KiB
TypeScript
141 lines
4.4 KiB
TypeScript
import { e2e } from '../utils';
|
|
|
|
import { makeNewDashboardRequestBody } from './utils/makeDashboard';
|
|
|
|
const NUM_ROOT_FOLDERS = 60;
|
|
const NUM_ROOT_DASHBOARDS = 60;
|
|
const NUM_NESTED_FOLDERS = 60;
|
|
const NUM_NESTED_DASHBOARDS = 60;
|
|
|
|
// TODO enable this test when nested folders goes live
|
|
describe.skip('Dashboard browse (nested)', () => {
|
|
const dashboardUIDsToCleanUp: string[] = [];
|
|
const folderUIDsToCleanUp: string[] = [];
|
|
|
|
// Add nested folder structure
|
|
before(() => {
|
|
e2e.flows.login(Cypress.env('USERNAME'), Cypress.env('PASSWORD'), false);
|
|
|
|
// Add root folders
|
|
for (let i = 0; i < NUM_ROOT_FOLDERS; i++) {
|
|
cy.request({
|
|
method: 'POST',
|
|
url: '/api/folders',
|
|
body: {
|
|
title: `Root folder ${i.toString().padStart(2, '0')}`,
|
|
},
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
},
|
|
}).then((response) => {
|
|
folderUIDsToCleanUp.push(response.body.uid);
|
|
});
|
|
}
|
|
|
|
// Add root dashboards
|
|
for (let i = 0; i < NUM_ROOT_DASHBOARDS; i++) {
|
|
cy.request({
|
|
method: 'POST',
|
|
url: '/api/dashboards/db',
|
|
body: makeNewDashboardRequestBody(`Root dashboard ${i.toString().padStart(2, '0')}`),
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
},
|
|
}).then((response) => {
|
|
dashboardUIDsToCleanUp.push(response.body.uid);
|
|
});
|
|
}
|
|
|
|
// Add folder with children
|
|
cy.request({
|
|
method: 'POST',
|
|
url: '/api/folders',
|
|
body: {
|
|
title: 'A root folder with children',
|
|
},
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
},
|
|
}).then((response) => {
|
|
const folderUid = response.body.uid;
|
|
folderUIDsToCleanUp.push(folderUid);
|
|
// Add nested folders
|
|
for (let i = 0; i < NUM_NESTED_FOLDERS; i++) {
|
|
cy.request({
|
|
method: 'POST',
|
|
url: '/api/folders',
|
|
body: {
|
|
title: `Nested folder ${i.toString().padStart(2, '0')}`,
|
|
parentUid: folderUid,
|
|
},
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
},
|
|
});
|
|
}
|
|
// Add nested dashboards
|
|
for (let i = 0; i < NUM_NESTED_DASHBOARDS; i++) {
|
|
cy.request({
|
|
method: 'POST',
|
|
url: '/api/dashboards/db',
|
|
body: makeNewDashboardRequestBody(`Nested dashboard ${i.toString().padStart(2, '0')}`, folderUid),
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
},
|
|
});
|
|
}
|
|
});
|
|
});
|
|
|
|
// Remove nested folder structure
|
|
after(() => {
|
|
// Clean up root dashboards
|
|
for (const dashboardUID of dashboardUIDsToCleanUp) {
|
|
e2e.flows.deleteDashboard({
|
|
uid: dashboardUID,
|
|
quick: true,
|
|
title: '',
|
|
});
|
|
}
|
|
// Clean up root folders (cascading delete will remove any nested folders and dashboards)
|
|
for (const folderUID of folderUIDsToCleanUp) {
|
|
cy.request({
|
|
method: 'DELETE',
|
|
url: `/api/folders/${folderUID}`,
|
|
qs: {
|
|
forceDeleteRules: false,
|
|
},
|
|
});
|
|
}
|
|
});
|
|
|
|
it('pagination works correctly for folders and root', () => {
|
|
e2e.pages.Dashboards.visit();
|
|
|
|
cy.contains('A root folder with children').should('be.visible');
|
|
|
|
// Expand A root folder with children
|
|
cy.get('[aria-label="Expand folder A root folder with children"]').click();
|
|
cy.contains('Nested folder 00').should('be.visible');
|
|
|
|
// Scroll the page and check visibility of next set of items
|
|
e2e.pages.BrowseDashboards.table.body().find('> div').scrollTo(0, 1700);
|
|
cy.contains('Nested folder 59').should('be.visible');
|
|
cy.contains('Nested dashboard 00').should('be.visible');
|
|
|
|
// Scroll the page and check visibility of next set of items
|
|
e2e.pages.BrowseDashboards.table.body().find('> div').scrollTo(0, 3800);
|
|
cy.contains('Nested dashboard 59').should('be.visible');
|
|
cy.contains('Root folder 00').should('be.visible');
|
|
|
|
// Scroll the page and check visibility of next set of items
|
|
e2e.pages.BrowseDashboards.table.body().find('> div').scrollTo(0, 5900);
|
|
cy.contains('Root folder 59').should('be.visible');
|
|
cy.contains('Root dashboard 00').should('be.visible');
|
|
|
|
// Scroll the page and check visibility of next set of items
|
|
e2e.pages.BrowseDashboards.table.body().find('> div').scrollTo(0, 8000);
|
|
cy.contains('Root dashboard 59').should('be.visible');
|
|
});
|
|
});
|