diff --git a/e2e/cloud-plugins-suite/azure-monitor.spec.ts b/e2e/cloud-plugins-suite/azure-monitor.spec.ts index 602aaad78ea..0150c7aea57 100644 --- a/e2e/cloud-plugins-suite/azure-monitor.spec.ts +++ b/e2e/cloud-plugins-suite/azure-monitor.spec.ts @@ -155,10 +155,11 @@ const storageAcctName = 'azmonteststorage'; const logAnalyticsName = 'az-mon-test-logs'; const applicationInsightsName = 'az-mon-test-ai-a'; -e2e.scenario({ - describeName: 'Add Azure Monitor datasource', - itName: 'fills out datasource connection configuration', - scenario: () => { +describe('Azure monitor datasource', () => { + before(() => { + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD')); + + // Add datasource // This variable will be set in CI const CI = e2e.env('CI'); if (CI) { @@ -186,13 +187,18 @@ e2e.scenario({ }); } e2e.setScenarioContext({ addedDataSources: [] }); - }, -}); + }); + + beforeEach(() => { + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD')); + }); + + after(() => { + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD')); + e2e.flows.revertAllChanges(); + }); -e2e.scenario({ - describeName: 'Create dashboard and add a panel for each query type', - itName: 'create dashboard, add panel for metrics, log analytics, ARG, and traces queries', - scenario: () => { + it('create dashboard, add panel for metrics, log analytics, ARG, and traces queries', () => { e2e.flows.addDashboard({ timeRange: { from: 'now-6h', @@ -277,13 +283,9 @@ e2e.scenario({ }, timeout: 10000, }); - }, -}); + }); -e2e.scenario({ - describeName: 'Create dashboard with template variables', - itName: 'creates a dashboard that includes a template variable', - scenario: () => { + it('creates a dashboard that includes a template variable', () => { e2e.flows.addDashboard({ timeRange: { from: 'now-6h', @@ -343,13 +345,9 @@ e2e.scenario({ }, timeout: 10000, }); - }, -}); + }); -e2e.scenario({ - describeName: 'Create dashboard with annotation', - itName: 'creates a dashboard that includes an annotation', - scenario: () => { + it.skip('creates a dashboard that includes an annotation', () => { e2e.flows.addDashboard({ timeRange: { from: '2022-10-03 00:00:00', @@ -382,14 +380,5 @@ e2e.scenario({ e2eSelectors.queryEditor.metricsQueryEditor.metricName.input().find('input').type('Used capacity{enter}'); }, }); - }, - skipScenario: true, -}); - -e2e.scenario({ - describeName: 'Remove datasource', - itName: 'remove azure monitor datasource', - scenario: () => { - e2e.flows.deleteDataSource({ name: dataSourceName, id: '', quick: true }); - }, + }); }); diff --git a/e2e/dashboards-suite/Repeating_a_panel_horizontally.spec.ts b/e2e/dashboards-suite/Repeating_a_panel_horizontally.spec.ts index 4212adc66a4..4ceb2461de4 100644 --- a/e2e/dashboards-suite/Repeating_a_panel_horizontally.spec.ts +++ b/e2e/dashboards-suite/Repeating_a_panel_horizontally.spec.ts @@ -3,7 +3,7 @@ const PAGE_UNDER_TEST = 'WVpf2jp7z/repeating-a-panel-horizontally'; describe('Repeating a panel horizontally', () => { beforeEach(() => { - e2e.flows.login('admin', 'admin'); + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD')); }); it('should be able to repeat a panel horizontally', () => { diff --git a/e2e/dashboards-suite/Repeating_a_panel_vertically.spec.ts b/e2e/dashboards-suite/Repeating_a_panel_vertically.spec.ts index e681f058b7c..4000fed8baa 100644 --- a/e2e/dashboards-suite/Repeating_a_panel_vertically.spec.ts +++ b/e2e/dashboards-suite/Repeating_a_panel_vertically.spec.ts @@ -3,7 +3,7 @@ const PAGE_UNDER_TEST = 'OY8Ghjt7k/repeating-a-panel-vertically'; describe('Repeating a panel vertically', () => { beforeEach(() => { - e2e.flows.login('admin', 'admin'); + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD')); }); it('should be able to repeat a panel vertically', () => { diff --git a/e2e/dashboards-suite/Repeating_an_empty_row.spec.ts b/e2e/dashboards-suite/Repeating_an_empty_row.spec.ts index bb6746c68cf..a650f870837 100644 --- a/e2e/dashboards-suite/Repeating_an_empty_row.spec.ts +++ b/e2e/dashboards-suite/Repeating_an_empty_row.spec.ts @@ -3,7 +3,7 @@ const PAGE_UNDER_TEST = 'dtpl2Ctnk/repeating-an-empty-row'; describe('Repeating empty rows', () => { beforeEach(() => { - e2e.flows.login('admin', 'admin'); + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD')); }); it('should be able to repeat empty rows vertically', () => { diff --git a/e2e/dashboards-suite/dashboard-browse-nested.spec.ts b/e2e/dashboards-suite/dashboard-browse-nested.spec.ts index bafa64ad2c9..58699c27536 100644 --- a/e2e/dashboards-suite/dashboard-browse-nested.spec.ts +++ b/e2e/dashboards-suite/dashboard-browse-nested.spec.ts @@ -14,7 +14,7 @@ describe.skip('Dashboard browse (nested)', () => { // Add nested folder structure before(() => { - e2e.flows.login('admin', 'admin'); + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD'), false); // Add root folders for (let i = 0; i < NUM_ROOT_FOLDERS; i++) { diff --git a/e2e/dashboards-suite/dashboard-browse.spec.ts b/e2e/dashboards-suite/dashboard-browse.spec.ts index 175874607ee..1d699ccb4fa 100644 --- a/e2e/dashboards-suite/dashboard-browse.spec.ts +++ b/e2e/dashboards-suite/dashboard-browse.spec.ts @@ -1,13 +1,12 @@ import testDashboard from '../dashboards/TestDashboard.json'; import { e2e } from '../utils'; -e2e.scenario({ - describeName: 'Dashboard browse', - itName: 'Basic folder view test', - addScenarioDataSource: false, - addScenarioDashBoard: false, - skipScenario: false, - scenario: () => { +describe('Dashboard browse', () => { + beforeEach(() => { + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD')); + }); + + it('Basic folder view test', () => { e2e.flows.importDashboard(testDashboard, 1000, true); e2e.pages.Dashboards.visit(); @@ -20,5 +19,5 @@ e2e.scenario({ e2e.components.Search.folderContent('General').should('be.visible'); e2e.components.Search.dashboardItem('E2E Test - Import Dashboard').should('be.visible'); - }, + }); }); diff --git a/e2e/dashboards-suite/dashboard-public-create.spec.ts b/e2e/dashboards-suite/dashboard-public-create.spec.ts index d8988a46740..df0b6109dd4 100644 --- a/e2e/dashboards-suite/dashboard-public-create.spec.ts +++ b/e2e/dashboards-suite/dashboard-public-create.spec.ts @@ -1,12 +1,11 @@ import { e2e } from '../utils'; -e2e.scenario({ - describeName: 'Create a public dashboard', - itName: 'Create a public dashboard', - addScenarioDataSource: false, - addScenarioDashBoard: false, - skipScenario: false, - scenario: () => { +describe('Public dashboards', () => { + beforeEach(() => { + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD')); + }); + + it('Create a public dashboard', () => { // Opening a dashboard without template variables cy.intercept({ pathname: '/api/ds/query', @@ -60,16 +59,9 @@ e2e.scenario({ // There elements should be rendered once the Settings dropdown is opened e2e.pages.ShareDashboardModal.PublicDashboard.EnableAnnotationsSwitch().should('exist'); e2e.pages.ShareDashboardModal.PublicDashboard.EnableTimeRangeSwitch().should('exist'); - }, -}); + }); -e2e.scenario({ - describeName: 'Open a public dashboard', - itName: 'Open a public dashboard', - addScenarioDataSource: false, - addScenarioDashBoard: false, - skipScenario: false, - scenario: () => { + it('Open a public dashboard', () => { // Opening a dashboard without template variables cy.intercept({ method: 'POST', @@ -110,16 +102,9 @@ e2e.scenario({ expect(resp.status).to.eq(200); }); }); - }, -}); + }); -e2e.scenario({ - describeName: 'Disable a public dashboard', - itName: 'Disable a public dashboard', - addScenarioDataSource: false, - addScenarioDashBoard: false, - skipScenario: false, - scenario: () => { + it('Disable a public dashboard', () => { // Opening a dashboard without template variables cy.intercept({ method: 'POST', @@ -159,7 +144,7 @@ e2e.scenario({ expect(resp.status).to.eq(403); }); }); - }, + }); }); const getPublicDashboardAPIUrl = (url: string): string => { diff --git a/e2e/dashboards-suite/dashboard-public-templating.spec.ts b/e2e/dashboards-suite/dashboard-public-templating.spec.ts index fbe3c7f5b48..c9f6fea259c 100644 --- a/e2e/dashboards-suite/dashboard-public-templating.spec.ts +++ b/e2e/dashboards-suite/dashboard-public-templating.spec.ts @@ -1,12 +1,11 @@ import { e2e } from '../utils'; -e2e.scenario({ - describeName: 'Create a public dashboard with template variables shows a template variable warning', - itName: 'Create a public dashboard with template variables shows a template variable warning', - addScenarioDataSource: false, - addScenarioDashBoard: false, - skipScenario: false, - scenario: () => { +describe('Create a public dashboard with template variables shows a template variable warning', () => { + beforeEach(() => { + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD')); + }); + + it('Create a public dashboard with template variables shows a template variable warning', () => { // Opening a dashboard with template variables e2e.flows.openDashboard({ uid: 'HYaGDGIMk' }); @@ -26,5 +25,5 @@ e2e.scenario({ e2e.pages.ShareDashboardModal.PublicDashboard.CreateButton().should('exist'); e2e.pages.ShareDashboardModal.PublicDashboard.PauseSwitch().should('not.exist'); - }, + }); }); diff --git a/e2e/dashboards-suite/dashboard-templating.spec.ts b/e2e/dashboards-suite/dashboard-templating.spec.ts index e1307d0466a..0921832c3f1 100644 --- a/e2e/dashboards-suite/dashboard-templating.spec.ts +++ b/e2e/dashboards-suite/dashboard-templating.spec.ts @@ -1,12 +1,11 @@ import { e2e } from '../utils'; -e2e.scenario({ - describeName: 'Dashboard templating', - itName: 'Verify variable interpolation works', - addScenarioDataSource: false, - addScenarioDashBoard: false, - skipScenario: false, - scenario: () => { +describe('Dashboard templating', () => { + beforeEach(() => { + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD')); + }); + + it('Verify variable interpolation works', () => { // Open dashboard global variables and interpolation e2e.flows.openDashboard({ uid: 'HYaGDGIMk' }); @@ -57,5 +56,5 @@ e2e.scenario({ 'href', 'https://example.com/?from=now-6h&to=now' ); - }, + }); }); diff --git a/e2e/dashboards-suite/dashboard-time-zone.spec.ts b/e2e/dashboards-suite/dashboard-time-zone.spec.ts index 3d1f2712ca0..5fdba7ed81d 100644 --- a/e2e/dashboards-suite/dashboard-time-zone.spec.ts +++ b/e2e/dashboards-suite/dashboard-time-zone.spec.ts @@ -11,13 +11,12 @@ import { import { e2e } from '../utils'; -e2e.scenario({ - describeName: 'Dashboard time zone support', - itName: 'Tests dashboard time zone scenarios', - addScenarioDataSource: false, - addScenarioDashBoard: false, - skipScenario: true, - scenario: () => { +describe('Dashboard time zone support', () => { + beforeEach(() => { + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD')); + }); + + it('Tests dashboard time zone scenarios', () => { e2e.flows.openDashboard({ uid: '5SdHCasdf' }); const fromTimeZone = 'UTC'; @@ -38,15 +37,15 @@ e2e.scenario({ for (const title of panelsToCheck) { e2e.components.Panels.Panel.title(title) .should('be.visible') - .within(() => + .within(() => { + e2e.components.Panels.Visualization.Graph.xAxis.labels().should('be.visible'); e2e.components.Panels.Visualization.Graph.xAxis .labels() - .should('be.visible') .last() .should((element) => { timesInUtc[title] = element.text(); - }) - ); + }); + }); } e2e.components.PageToolbar.item('Dashboard settings').click(); @@ -80,16 +79,9 @@ e2e.scenario({ }) ); } - }, -}); + }); -e2e.scenario({ - describeName: 'Dashboard time zone support', - itName: 'Tests relative timezone support and overrides', - addScenarioDataSource: false, - addScenarioDashBoard: false, - skipScenario: false, - scenario: () => { + it('Tests relative timezone support and overrides', () => { // Open dashboard e2e.flows.openDashboard({ uid: 'd41dbaa2-a39e-4536-ab2b-caca52f1a9c8', @@ -201,7 +193,7 @@ e2e.scenario({ .within(() => { cy.contains('[role="row"]', '00:00:00').should('be.visible'); }); - }, + }); }); const isTimeCorrect = (inUtc: string, inTz: string, offset: number): boolean => { diff --git a/e2e/dashboards-suite/dashboard-timepicker.spec.ts b/e2e/dashboards-suite/dashboard-timepicker.spec.ts index 740c9400ec6..658da61d932 100644 --- a/e2e/dashboards-suite/dashboard-timepicker.spec.ts +++ b/e2e/dashboards-suite/dashboard-timepicker.spec.ts @@ -1,12 +1,11 @@ import { e2e } from '../utils'; -e2e.scenario({ - describeName: 'Dashboard timepicker', - itName: 'Shows the correct calendar days with custom timezone set via preferences', - addScenarioDataSource: false, - addScenarioDashBoard: false, - skipScenario: false, - scenario: () => { +describe('Dashboard timepicker', () => { + beforeEach(() => { + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD')); + }); + + it('Shows the correct calendar days with custom timezone set via preferences', () => { e2e.flows.setUserPreferences({ timezone: 'Asia/Tokyo', }); @@ -26,16 +25,9 @@ e2e.scenario({ e2e.components.TimePicker.openButton().click(); e2e.components.TimePicker.calendar.openButton().first().click(); cy.get('.react-calendar__tile--active, .react-calendar__tile--hasActive').should('have.length', 3); - }, -}); + }); -e2e.scenario({ - describeName: 'Dashboard timepicker', - itName: 'Shows the correct calendar days with custom timezone set via time picker', - addScenarioDataSource: false, - addScenarioDashBoard: false, - skipScenario: false, - scenario: () => { + it('Shows the correct calendar days with custom timezone set via time picker', () => { // Open dashboard with time range from 2022-06-08 00:00:00 to 2022-06-10 23:59:59 in Tokyo time e2e.flows.openDashboard({ uid: '5SdHCasdf', @@ -50,5 +42,5 @@ e2e.scenario({ e2e.components.TimePicker.openButton().click(); e2e.components.TimePicker.calendar.openButton().first().click(); cy.get('.react-calendar__tile--active, .react-calendar__tile--hasActive').should('have.length', 3); - }, + }); }); diff --git a/e2e/dashboards-suite/import-dashboard.spec.ts b/e2e/dashboards-suite/import-dashboard.spec.ts index bcd2622448b..e6f75ac7a39 100644 --- a/e2e/dashboards-suite/import-dashboard.spec.ts +++ b/e2e/dashboards-suite/import-dashboard.spec.ts @@ -1,13 +1,12 @@ import testDashboard from '../dashboards/TestDashboard.json'; import { e2e } from '../utils'; -e2e.scenario({ - describeName: 'Import Dashboards Test', - itName: 'Ensure you can import a number of json test dashboards from a specific test directory', - addScenarioDataSource: false, - addScenarioDashBoard: false, - skipScenario: false, - scenario: () => { +describe('Import Dashboards Test', () => { + beforeEach(() => { + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD')); + }); + + it('Ensure you can import a number of json test dashboards from a specific test directory', () => { e2e.flows.importDashboard(testDashboard, 1000); - }, + }); }); diff --git a/e2e/dashboards-suite/load-options-from-url.spec.ts b/e2e/dashboards-suite/load-options-from-url.spec.ts index bef36320aaf..74b3e28597c 100644 --- a/e2e/dashboards-suite/load-options-from-url.spec.ts +++ b/e2e/dashboards-suite/load-options-from-url.spec.ts @@ -3,8 +3,11 @@ import { e2e } from '../utils'; const PAGE_UNDER_TEST = '-Y-tnEDWk/templating-nested-template-variables'; describe('Variables - Load options from Url', () => { + beforeEach(() => { + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD')); + }); + it('default options should be correct', () => { - e2e.flows.login('admin', 'admin'); e2e.flows.openDashboard({ uid: PAGE_UNDER_TEST }); cy.intercept({ method: 'POST', @@ -54,7 +57,6 @@ describe('Variables - Load options from Url', () => { }); it('options set in url should load correct options', () => { - e2e.flows.login('admin', 'admin'); e2e.flows.openDashboard({ uid: `${PAGE_UNDER_TEST}?orgId=1&var-datacenter=B&var-server=BB&var-pod=BBB` }); cy.intercept({ method: 'POST', @@ -104,7 +106,6 @@ describe('Variables - Load options from Url', () => { }); it('options set in url that do not exist should load correct options', () => { - e2e.flows.login('admin', 'admin'); // @ts-ignore some typing issue cy.on('uncaught:exception', (err) => { if (err.stack?.indexOf("Couldn't find any field of type string in the results.") !== -1) { diff --git a/e2e/dashboards-suite/new-constant-variable.spec.ts b/e2e/dashboards-suite/new-constant-variable.spec.ts index f920e54360e..2c92a246047 100644 --- a/e2e/dashboards-suite/new-constant-variable.spec.ts +++ b/e2e/dashboards-suite/new-constant-variable.spec.ts @@ -4,8 +4,11 @@ const PAGE_UNDER_TEST = 'kVi2Gex7z/test-variable-output'; const DASHBOARD_NAME = 'Test variable output'; describe('Variables - Constant', () => { + beforeEach(() => { + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD')); + }); + it('can add a new constant variable', () => { - e2e.flows.login('admin', 'admin'); e2e.flows.openDashboard({ uid: `${PAGE_UNDER_TEST}?orgId=1&editview=templating` }); cy.contains(DASHBOARD_NAME).should('be.visible'); diff --git a/e2e/dashboards-suite/new-custom-variable.spec.ts b/e2e/dashboards-suite/new-custom-variable.spec.ts index dd8bd271d5c..78da657609f 100644 --- a/e2e/dashboards-suite/new-custom-variable.spec.ts +++ b/e2e/dashboards-suite/new-custom-variable.spec.ts @@ -20,8 +20,11 @@ function assertPreviewValues(expectedValues: string[]) { } describe('Variables - Custom', () => { + beforeEach(() => { + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD')); + }); + it('can add a custom template variable', () => { - e2e.flows.login('admin', 'admin'); e2e.flows.openDashboard({ uid: `${PAGE_UNDER_TEST}?orgId=1&editview=templating` }); cy.contains(DASHBOARD_NAME).should('be.visible'); @@ -41,7 +44,6 @@ describe('Variables - Custom', () => { }); it('can add a custom template variable with labels', () => { - e2e.flows.login('admin', 'admin'); e2e.flows.openDashboard({ uid: `${PAGE_UNDER_TEST}?orgId=1&editview=templating` }); cy.contains(DASHBOARD_NAME).should('be.visible'); diff --git a/e2e/dashboards-suite/new-datasource-variable.spec.ts b/e2e/dashboards-suite/new-datasource-variable.spec.ts index 9fcb9f4468e..909ac610726 100644 --- a/e2e/dashboards-suite/new-datasource-variable.spec.ts +++ b/e2e/dashboards-suite/new-datasource-variable.spec.ts @@ -4,8 +4,11 @@ const PAGE_UNDER_TEST = 'kVi2Gex7z/test-variable-output'; const DASHBOARD_NAME = 'Test variable output'; describe('Variables - Datasource', () => { + beforeEach(() => { + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD')); + }); + it('can add a new datasource variable', () => { - e2e.flows.login('admin', 'admin'); e2e.flows.openDashboard({ uid: `${PAGE_UNDER_TEST}?orgId=1&editview=templating` }); cy.contains(DASHBOARD_NAME).should('be.visible'); diff --git a/e2e/dashboards-suite/new-interval-variable.spec.ts b/e2e/dashboards-suite/new-interval-variable.spec.ts index d748326a81b..498bc53f4b2 100644 --- a/e2e/dashboards-suite/new-interval-variable.spec.ts +++ b/e2e/dashboards-suite/new-interval-variable.spec.ts @@ -11,8 +11,11 @@ function assertPreviewValues(expectedValues: string[]) { } describe('Variables - Interval', () => { + beforeEach(() => { + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD')); + }); + it('can add a new interval variable', () => { - e2e.flows.login('admin', 'admin'); e2e.flows.openDashboard({ uid: `${PAGE_UNDER_TEST}?orgId=1&editview=templating` }); cy.contains(DASHBOARD_NAME).should('be.visible'); diff --git a/e2e/dashboards-suite/new-query-variable.spec.ts b/e2e/dashboards-suite/new-query-variable.spec.ts index 80932b0acc7..e2eca601fad 100644 --- a/e2e/dashboards-suite/new-query-variable.spec.ts +++ b/e2e/dashboards-suite/new-query-variable.spec.ts @@ -4,8 +4,11 @@ const PAGE_UNDER_TEST = '-Y-tnEDWk/templating-nested-template-variables'; const DASHBOARD_NAME = 'Templating - Nested Template Variables'; describe('Variables - Query - Add variable', () => { + beforeEach(() => { + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD')); + }); + it('query variable should be default and default fields should be correct', () => { - e2e.flows.login('admin', 'admin'); e2e.flows.openDashboard({ uid: `${PAGE_UNDER_TEST}?orgId=1&editview=templating` }); cy.contains(DASHBOARD_NAME).should('be.visible'); @@ -70,7 +73,6 @@ describe('Variables - Query - Add variable', () => { }); it('adding a single value query variable', () => { - e2e.flows.login('admin', 'admin'); e2e.flows.openDashboard({ uid: `${PAGE_UNDER_TEST}?orgId=1&editview=templating` }); cy.contains(DASHBOARD_NAME).should('be.visible'); @@ -118,7 +120,6 @@ describe('Variables - Query - Add variable', () => { }); it('adding a multi value query variable', () => { - e2e.flows.login('admin', 'admin'); e2e.flows.openDashboard({ uid: `${PAGE_UNDER_TEST}?orgId=1&editview=templating` }); cy.contains(DASHBOARD_NAME).should('be.visible'); diff --git a/e2e/dashboards-suite/new-text-box-variable.spec.ts b/e2e/dashboards-suite/new-text-box-variable.spec.ts index a029e06e73b..3e0373420bd 100644 --- a/e2e/dashboards-suite/new-text-box-variable.spec.ts +++ b/e2e/dashboards-suite/new-text-box-variable.spec.ts @@ -4,8 +4,11 @@ const PAGE_UNDER_TEST = 'kVi2Gex7z/test-variable-output'; const DASHBOARD_NAME = 'Test variable output'; describe('Variables - Text box', () => { + beforeEach(() => { + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD')); + }); + it('can add a new text box variable', () => { - e2e.flows.login('admin', 'admin'); e2e.flows.openDashboard({ uid: `${PAGE_UNDER_TEST}?orgId=1&editview=templating` }); cy.contains(DASHBOARD_NAME).should('be.visible'); diff --git a/e2e/dashboards-suite/set-options-from-ui.spec.ts b/e2e/dashboards-suite/set-options-from-ui.spec.ts index a1f35a0ea83..06dc122cd5a 100644 --- a/e2e/dashboards-suite/set-options-from-ui.spec.ts +++ b/e2e/dashboards-suite/set-options-from-ui.spec.ts @@ -3,8 +3,11 @@ import { e2e } from '../utils'; const PAGE_UNDER_TEST = '-Y-tnEDWk/templating-nested-template-variables'; describe('Variables - Set options from ui', () => { + beforeEach(() => { + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD')); + }); + it('clicking a value that is not part of dependents options should change these to All', () => { - e2e.flows.login('admin', 'admin'); e2e.flows.openDashboard({ uid: `${PAGE_UNDER_TEST}?orgId=1&var-datacenter=A&var-server=AA&var-pod=AAA` }); e2e.pages.Dashboard.SubMenu.submenuItemValueDropDownValueLinkTexts('A').should('be.visible').click(); @@ -50,7 +53,6 @@ describe('Variables - Set options from ui', () => { }); it('adding a value that is not part of dependents options should add the new values dependant options', () => { - e2e.flows.login('admin', 'admin'); e2e.flows.openDashboard({ uid: `${PAGE_UNDER_TEST}?orgId=1&var-datacenter=A&var-server=AA&var-pod=AAA` }); cy.intercept({ pathname: '/api/ds/query', @@ -100,7 +102,6 @@ describe('Variables - Set options from ui', () => { }); it('removing a value that is part of dependents options should remove the new values dependant options', () => { - e2e.flows.login('admin', 'admin'); e2e.flows.openDashboard({ uid: `${PAGE_UNDER_TEST}?orgId=1&var-datacenter=A&var-datacenter=B&var-server=AA&var-server=BB&var-pod=AAA&var-pod=BBB`, }); diff --git a/e2e/dashboards-suite/templating-dashboard-links-and-variables.spec.ts b/e2e/dashboards-suite/templating-dashboard-links-and-variables.spec.ts index c94cffe0266..05e4e533f9c 100644 --- a/e2e/dashboards-suite/templating-dashboard-links-and-variables.spec.ts +++ b/e2e/dashboards-suite/templating-dashboard-links-and-variables.spec.ts @@ -1,12 +1,11 @@ import { e2e } from '../utils'; -e2e.scenario({ - describeName: 'Templating', - itName: 'Tests dashboard links and variables in links', - addScenarioDataSource: false, - addScenarioDashBoard: false, - skipScenario: false, - scenario: () => { +describe('Templating', () => { + beforeEach(() => { + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD')); + }); + + it('Tests dashboard links and variables in links', () => { cy.intercept({ method: 'GET', url: '/api/search?tag=templating&limit=100', @@ -51,5 +50,5 @@ e2e.scenario({ // verify all links, should have p2 value verifyLinks('p2'); - }, + }); }); diff --git a/e2e/dashboards-suite/textbox-variables.spec.ts b/e2e/dashboards-suite/textbox-variables.spec.ts index 472e863e918..ff8ab8e2700 100644 --- a/e2e/dashboards-suite/textbox-variables.spec.ts +++ b/e2e/dashboards-suite/textbox-variables.spec.ts @@ -3,15 +3,17 @@ import { e2e } from '../utils'; const PAGE_UNDER_TEST = 'AejrN1AMz'; describe('TextBox - load options scenarios', function () { + beforeEach(() => { + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD')); + }); + it('default options should be correct', function () { - e2e.flows.login('admin', 'admin'); e2e.flows.openDashboard({ uid: `${PAGE_UNDER_TEST}/templating-textbox-e2e-scenarios?orgId=1` }); validateTextboxAndMarkup('default value'); }); it('loading variable from url should be correct', function () { - e2e.flows.login('admin', 'admin'); e2e.flows.openDashboard({ uid: `${PAGE_UNDER_TEST}/templating-textbox-e2e-scenarios?orgId=1&var-text=not default value`, }); @@ -21,6 +23,10 @@ describe('TextBox - load options scenarios', function () { }); describe.skip('TextBox - change query scenarios', function () { + beforeEach(() => { + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD')); + }); + it('when changing the query value and not saving current as default should revert query value', function () { copyExistingDashboard(); @@ -71,6 +77,10 @@ describe.skip('TextBox - change query scenarios', function () { }); describe.skip('TextBox - change picker value scenarios', function () { + beforeEach(() => { + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD')); + }); + it('when changing the input value and not saving current as default should revert query value', function () { copyExistingDashboard(); @@ -115,7 +125,6 @@ describe.skip('TextBox - change picker value scenarios', function () { }); function copyExistingDashboard() { - e2e.flows.login('admin', 'admin'); cy.intercept({ method: 'GET', url: '/api/search?query=&type=dash-folder&permission=Edit', diff --git a/e2e/datagrid-suite/datagrid-data-change.spec.ts b/e2e/datagrid-suite/datagrid-data-change.spec.ts index e5bfba9dc82..2c9811a7be7 100644 --- a/e2e/datagrid-suite/datagrid-data-change.spec.ts +++ b/e2e/datagrid-suite/datagrid-data-change.spec.ts @@ -3,13 +3,12 @@ import { e2e } from '../utils'; const DASHBOARD_ID = 'c01bf42b-b783-4447-a304-8554cee1843b'; const DATAGRID_SELECT_SERIES = 'Datagrid Select series'; -e2e.scenario({ - describeName: 'Datagrid data changes', - itName: 'Tests changing data in the grid', - addScenarioDataSource: false, - addScenarioDashBoard: false, - skipScenario: false, - scenario: () => { +describe('Datagrid data changes', () => { + beforeEach(() => { + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD')); + }); + + it('Tests changing data in the grid', () => { e2e.flows.openDashboard({ uid: DASHBOARD_ID, queryParams: { editPanel: 1 } }); // Check that the data is series A @@ -32,5 +31,5 @@ e2e.scenario({ cy.get('[data-testid="data-testid Confirm Modal Danger Button"]').click(); cy.get('[data-testid="query-editor-row"]').contains('Snapshot'); - }, + }); }); diff --git a/e2e/datagrid-suite/datagrid-editing-features.spec.ts b/e2e/datagrid-suite/datagrid-editing-features.spec.ts index f5508a2e424..aa928944f57 100644 --- a/e2e/datagrid-suite/datagrid-editing-features.spec.ts +++ b/e2e/datagrid-suite/datagrid-editing-features.spec.ts @@ -3,13 +3,12 @@ import { e2e } from '../utils'; const DASHBOARD_ID = 'c01bf42b-b783-4447-a304-8554cee1843b'; const DATAGRID_CANVAS = 'data-grid-canvas'; -e2e.scenario({ - describeName: 'Datagrid data changes', - itName: 'Tests changing data in the grid', - addScenarioDataSource: false, - addScenarioDashBoard: false, - skipScenario: false, - scenario: () => { +describe('Datagrid data changes', () => { + beforeEach(() => { + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD')); + }); + + it('Tests changing data in the grid', () => { e2e.flows.openDashboard({ uid: DASHBOARD_ID, queryParams: { editPanel: 1 } }); // Edit datagrid which triggers a snapshot query @@ -155,5 +154,5 @@ e2e.scenario({ cy.get('body').type('Val{enter}'); cy.get(`[data-testid="${DATAGRID_CANVAS}"] tbody tr`).contains('Val'); cy.get(`[data-testid="${DATAGRID_CANVAS}"] tbody tr`).should('have.length', 8); - }, + }); }); diff --git a/e2e/e2e-flow-suite/00-panel-menu-extension.spec.ts b/e2e/e2e-flow-suite/00-panel-menu-extension.spec.ts index f9aefed5283..c3381d95d05 100644 --- a/e2e/e2e-flow-suite/00-panel-menu-extension.spec.ts +++ b/e2e/e2e-flow-suite/00-panel-menu-extension.spec.ts @@ -1,17 +1,16 @@ import { e2e } from '../utils'; -e2e.scenario({ - describeName: 'Panel menu ui extension flow', - itName: 'Should be possible to click extension menu item', - addScenarioDataSource: false, - addScenarioDashBoard: false, - skipScenario: false, - scenario: () => { +describe('Panel menu ui extension flow', () => { + beforeEach(() => { + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD')); + }); + + it('Should be possible to click extension menu item', () => { const panelTitle = 'Random walk series'; const extensionTitle = 'Copy'; e2e.flows.openDashboard({ uid: '5SdHCasdf' }); e2e.flows.openPanelMenuExtension(extensionTitle, panelTitle); e2e.flows.assertSuccessNotification(); - }, + }); }); diff --git a/e2e/geomap-suite/geomap-layer-types.spec.ts b/e2e/geomap-suite/geomap-layer-types.spec.ts index b401d206ab7..45526a0a59d 100644 --- a/e2e/geomap-suite/geomap-layer-types.spec.ts +++ b/e2e/geomap-suite/geomap-layer-types.spec.ts @@ -6,13 +6,12 @@ const MAP_LAYERS_TYPE = 'Map layers Layer type'; const MAP_LAYERS_DATA = 'Map layers Data'; const MAP_LAYERS_GEOJSON = 'Map layers GeoJSON URL'; -e2e.scenario({ - describeName: 'Geomap layer types', - itName: 'Tests changing the layer type', - addScenarioDataSource: false, - addScenarioDashBoard: false, - skipScenario: false, - scenario: () => { +describe('Geomap layer types', () => { + beforeEach(() => { + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD')); + }); + + it('Tests changing the layer type', () => { e2e.flows.openDashboard({ uid: DASHBOARD_ID, queryParams: { editPanel: 1 } }); cy.get('[data-testid="layer-drag-drop-list"]').should('be.visible'); e2e.components.PanelEditor.OptionsPane.fieldLabel(MAP_LAYERS_TYPE).should('be.visible'); @@ -57,16 +56,9 @@ e2e.scenario({ e2e.components.PanelEditor.OptionsPane.fieldLabel('Map layers URL template').should('be.visible'); e2e.components.PanelEditor.OptionsPane.fieldLabel('Map layers Attribution').should('be.visible'); e2e.components.PanelEditor.General.content().should('be.visible'); - }, -}); + }); -e2e.scenario({ - describeName: 'Geomap layer types (alpha)', - itName: 'Tests changing the layer type (alpha)', - addScenarioDataSource: false, - addScenarioDashBoard: false, - skipScenario: true, - scenario: () => { + it.skip('Tests changing the layer type (alpha)', () => { e2e.flows.openDashboard({ uid: DASHBOARD_ID, queryParams: { editPanel: 1 } }); cy.get('[data-testid="layer-drag-drop-list"]').should('be.visible'); e2e.components.PanelEditor.OptionsPane.fieldLabel(MAP_LAYERS_TYPE).should('be.visible'); @@ -103,5 +95,5 @@ e2e.scenario({ e2e.components.PanelEditor.OptionsPane.fieldLabel('Map layers Style').should('be.visible'); e2e.components.PanelEditor.OptionsPane.fieldLabel('Map layers Line width').should('be.visible'); e2e.components.PanelEditor.General.content().should('be.visible'); - }, + }); }); diff --git a/e2e/geomap-suite/geomap-map-controls.spec.ts b/e2e/geomap-suite/geomap-map-controls.spec.ts index d2dd8cc7a93..f6e6e9b94b9 100644 --- a/e2e/geomap-suite/geomap-map-controls.spec.ts +++ b/e2e/geomap-suite/geomap-map-controls.spec.ts @@ -1,13 +1,12 @@ import { e2e } from '../utils'; const DASHBOARD_ID = 'P2jR04WVk'; -e2e.scenario({ - describeName: 'Geomap map controls options', - itName: 'Tests map controls options', - addScenarioDataSource: false, - addScenarioDashBoard: false, - skipScenario: false, - scenario: () => { +describe('Geomap layer controls options', () => { + beforeEach(() => { + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD')); + }); + + it('Tests map controls options', () => { e2e.flows.openDashboard({ uid: DASHBOARD_ID, queryParams: { editPanel: 1 } }); // Show zoom @@ -31,5 +30,5 @@ e2e.scenario({ // Show debug cy.get('input[id="controls.showDebug"]').check({ force: true }); e2e.components.DebugOverlay.wrapper().should('exist'); - }, + }); }); diff --git a/e2e/geomap-suite/geomap-spatial-operations-transform.spec.ts b/e2e/geomap-suite/geomap-spatial-operations-transform.spec.ts index 238fecc207d..2c9baa0c3ce 100644 --- a/e2e/geomap-suite/geomap-spatial-operations-transform.spec.ts +++ b/e2e/geomap-suite/geomap-spatial-operations-transform.spec.ts @@ -2,13 +2,12 @@ import { e2e } from '../utils'; const DASHBOARD_ID = 'P2jR04WVk'; -e2e.scenario({ - describeName: 'Geomap spatial operations - auto transforms', - itName: 'Tests location auto option', - addScenarioDataSource: false, - addScenarioDashBoard: false, - skipScenario: false, - scenario: () => { +describe('Geomap spatial operations', () => { + beforeEach(() => { + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD')); + }); + + it('Tests location auto option', () => { e2e.flows.openDashboard({ uid: DASHBOARD_ID, queryParams: { editPanel: 1 } }); e2e.components.Tab.title('Transform').should('be.visible').click(); @@ -25,16 +24,9 @@ e2e.scenario({ .within(() => { cy.contains('Point').should('be.visible'); }); - }, -}); + }); -e2e.scenario({ - describeName: 'Geomap spatial operations - coords transforms ', - itName: 'Tests location coords option', - addScenarioDataSource: false, - addScenarioDashBoard: false, - skipScenario: false, - scenario: () => { + it('Tests location coords option', () => { e2e.flows.openDashboard({ uid: DASHBOARD_ID, queryParams: { editPanel: 1 } }); e2e.components.Tab.title('Transform').should('be.visible').click(); @@ -56,16 +48,9 @@ e2e.scenario({ .within(() => { cy.contains('Point').should('be.visible'); }); - }, -}); + }); -e2e.scenario({ - describeName: 'Geomap spatial operations - geohash transforms ', - itName: 'Tests geoshash field column appears in table view', - addScenarioDataSource: false, - addScenarioDashBoard: false, - skipScenario: false, - scenario: () => { + it('Tests geoshash field column appears in table view', () => { e2e.flows.openDashboard({ uid: DASHBOARD_ID, queryParams: { editPanel: 1 } }); e2e.components.Tab.title('Transform').should('be.visible').click(); @@ -84,16 +69,9 @@ e2e.scenario({ .within(() => { cy.contains('State 1').should('be.visible'); }); - }, -}); + }); -e2e.scenario({ - describeName: 'Geomap spatial operations - lookup transforms ', - itName: 'Tests location lookup option', - addScenarioDataSource: false, - addScenarioDashBoard: false, - skipScenario: false, - scenario: () => { + it('Tests location lookup option', () => { e2e.flows.openDashboard({ uid: DASHBOARD_ID, queryParams: { editPanel: 1 } }); e2e.components.Tab.title('Transform').should('be.visible').click(); @@ -115,5 +93,5 @@ e2e.scenario({ .within(() => { cy.contains('Geometry').should('be.visible'); }); - }, + }); }); diff --git a/e2e/panels-suite/panelEdit_base.spec.ts b/e2e/panels-suite/panelEdit_base.spec.ts index 814a28bd084..37fa8695e27 100644 --- a/e2e/panels-suite/panelEdit_base.spec.ts +++ b/e2e/panels-suite/panelEdit_base.spec.ts @@ -2,13 +2,12 @@ import { e2e } from '../utils'; const PANEL_UNDER_TEST = 'Lines 500 data points'; -e2e.scenario({ - describeName: 'Panel edit tests', - itName: 'Tests various Panel edit scenarios', - addScenarioDataSource: false, - addScenarioDashBoard: false, - skipScenario: false, - scenario: () => { +describe('Panel edit tests', () => { + beforeEach(() => { + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD')); + }); + + it('Tests various Panel edit scenarios', () => { cy.intercept({ pathname: '/api/ds/query', }).as('query'); @@ -107,5 +106,5 @@ e2e.scenario({ // Field & Overrides tabs (need to switch to React based vis, i.e. Table) e2e.components.PanelEditor.OptionsPane.fieldLabel('Table Show table header').should('be.visible'); e2e.components.PanelEditor.OptionsPane.fieldLabel('Table Column width').should('be.visible'); - }, + }); }); diff --git a/e2e/panels-suite/panelEdit_queries.spec.ts b/e2e/panels-suite/panelEdit_queries.spec.ts index 088b04c9d6c..f4f99f926cd 100644 --- a/e2e/panels-suite/panelEdit_queries.spec.ts +++ b/e2e/panels-suite/panelEdit_queries.spec.ts @@ -2,13 +2,12 @@ import { e2e } from '../utils'; const flakyTimeout = 10000; -e2e.scenario({ - describeName: 'Panel edit tests - queries', - itName: 'Testes various Panel edit queries scenarios', - addScenarioDataSource: false, - addScenarioDashBoard: false, - skipScenario: false, - scenario: () => { +describe('Panel edit tests - queries', () => { + beforeEach(() => { + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD')); + }); + + it('Tests various Panel edit queries scenarios', () => { e2e.flows.openDashboard({ uid: '5SdHCadmz', queryParams: { editPanel: 3 } }); // New panel editor opens when navigating from Panel menu @@ -84,7 +83,7 @@ e2e.scenario({ expect(resultIds.has('A:')).equals(true); expect(resultIds.has('B:')).equals(true); }); - }, + }); }); const expectInspectorResultAndClose = (expectCallBack: (keys: JQuery) => void) => { diff --git a/e2e/panels-suite/panelEdit_transforms.spec.ts b/e2e/panels-suite/panelEdit_transforms.spec.ts index fa0a43d21b8..94aa4b0fe8f 100644 --- a/e2e/panels-suite/panelEdit_transforms.spec.ts +++ b/e2e/panels-suite/panelEdit_transforms.spec.ts @@ -1,16 +1,15 @@ import { e2e } from '../utils'; -e2e.scenario({ - describeName: 'Panel edit tests - transformations', - itName: 'Tests transformations editor', - addScenarioDataSource: false, - addScenarioDashBoard: false, - skipScenario: false, - scenario: () => { +describe('Panel edit tests - transformations', () => { + beforeEach(() => { + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD')); + }); + + it('Tests transformations editor', () => { e2e.flows.openDashboard({ uid: '5SdHCadmz', queryParams: { editPanel: 3 } }); e2e.components.Tab.title('Transform').should('be.visible').click(); e2e.components.TransformTab.newTransform('Reduce').scrollIntoView().should('be.visible').click(); e2e.components.Transforms.Reduce.calculationsLabel().should('be.visible'); - }, + }); }); diff --git a/e2e/shared/smokeTestScenario.ts b/e2e/shared/smokeTestScenario.ts index 4b4634adad8..17be9ad0e05 100644 --- a/e2e/shared/smokeTestScenario.ts +++ b/e2e/shared/smokeTestScenario.ts @@ -1,33 +1,38 @@ import { e2e } from '../utils'; -export const smokeTestScenario = { - describeName: 'Smoke tests', - itName: 'Login scenario, create test data source, dashboard, panel, and export scenario', - addScenarioDataSource: true, - addScenarioDashBoard: true, - skipScenario: false, - loginViaApi: false, - scenario: () => { - // wait for time to be set to account for any layout shift - cy.contains('2020-01-01 00:00:00 to 2020-01-01 06:00:00').should('be.visible'); - e2e.components.PageToolbar.itemButton('Add button').click(); - e2e.components.PageToolbar.itemButton('Add new visualization menu item').click(); - - e2e.components.DataSource.TestData.QueryTab.scenarioSelectContainer() - .should('be.visible') - .within(() => { - cy.get('input[id*="test-data-scenario-select-"]').should('be.visible').click(); - }); - - cy.contains('CSV Metric Values').scrollIntoView().should('be.visible').click(); - - // Make sure the graph renders via checking legend - e2e.components.VizLegend.seriesName('A-series').should('be.visible'); - - // Expand options section - e2e.components.PanelEditor.applyButton(); - - // Make sure panel is & visualization is added to dashboard - e2e.components.VizLegend.seriesName('A-series').should('be.visible'); - }, -}; +export const smokeTestScenario = () => + describe('Smoke tests', () => { + before(() => { + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD'), false); + e2e.flows.addDataSource(); + e2e.flows.addDashboard(); + }); + + after(() => { + e2e.flows.revertAllChanges(); + }); + + it('Login scenario, create test data source, dashboard, panel, and export scenario', () => { + // wait for time to be set to account for any layout shift + cy.contains('2020-01-01 00:00:00 to 2020-01-01 06:00:00').should('be.visible'); + e2e.components.PageToolbar.itemButton('Add button').click(); + e2e.components.PageToolbar.itemButton('Add new visualization menu item').click(); + + e2e.components.DataSource.TestData.QueryTab.scenarioSelectContainer() + .should('be.visible') + .within(() => { + cy.get('input[id*="test-data-scenario-select-"]').should('be.visible').click(); + }); + + cy.contains('CSV Metric Values').scrollIntoView().should('be.visible').click(); + + // Make sure the graph renders via checking legend + e2e.components.VizLegend.seriesName('A-series').should('be.visible'); + + // Expand options section + e2e.components.PanelEditor.applyButton(); + + // Make sure panel is & visualization is added to dashboard + e2e.components.VizLegend.seriesName('A-series').should('be.visible'); + }); + }); diff --git a/e2e/smoke-tests-suite/1-smoketests.spec.ts b/e2e/smoke-tests-suite/1-smoketests.spec.ts index 5d6d2f08ebb..b66a6eee28f 100644 --- a/e2e/smoke-tests-suite/1-smoketests.spec.ts +++ b/e2e/smoke-tests-suite/1-smoketests.spec.ts @@ -1,4 +1,3 @@ import { smokeTestScenario } from '../shared/smokeTestScenario'; -import { e2e } from '../utils'; -e2e.scenario(smokeTestScenario); +smokeTestScenario(); diff --git a/e2e/smoke-tests-suite/panels_smokescreen.spec.ts b/e2e/smoke-tests-suite/panels_smokescreen.spec.ts index 9c4a8d26d73..bdd71e8b34f 100644 --- a/e2e/smoke-tests-suite/panels_smokescreen.spec.ts +++ b/e2e/smoke-tests-suite/panels_smokescreen.spec.ts @@ -2,13 +2,16 @@ import { GrafanaBootConfig } from '@grafana/runtime'; import { e2e } from '../utils'; -e2e.scenario({ - describeName: 'Panels smokescreen', - itName: 'Tests each panel type in the panel edit view to ensure no crash', - addScenarioDataSource: false, - addScenarioDashBoard: false, - skipScenario: false, - scenario: () => { +describe('Panels smokescreen', () => { + beforeEach(() => { + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD'), false); + }); + + after(() => { + e2e.flows.revertAllChanges(); + }); + + it('Tests each panel type in the panel edit view to ensure no crash', () => { e2e.flows.addDashboard(); // TODO: Try and use e2e.flows.addPanel() instead of block below @@ -40,5 +43,5 @@ e2e.scenario({ } }); }); - }, + }); }); diff --git a/e2e/sql-suite/mysql.spec.ts b/e2e/sql-suite/mysql.spec.ts index 06ac300a0db..4b6ad31af6f 100644 --- a/e2e/sql-suite/mysql.spec.ts +++ b/e2e/sql-suite/mysql.spec.ts @@ -8,9 +8,11 @@ const tableNameWithSpecialCharacter = tablesResponse.results.tables.frames[0].da const normalTableName = tablesResponse.results.tables.frames[0].data.values[0][0]; describe('MySQL datasource', () => { - it('code editor autocomplete should handle table name escaping/quoting', () => { - e2e.flows.login('admin', 'admin'); + beforeEach(() => { + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD')); + }); + it('code editor autocomplete should handle table name escaping/quoting', () => { cy.intercept( 'POST', { diff --git a/e2e/utils/flows/importDashboards.ts b/e2e/utils/flows/importDashboards.ts index b61d1344786..7434aeb11e9 100644 --- a/e2e/utils/flows/importDashboards.ts +++ b/e2e/utils/flows/importDashboards.ts @@ -1,5 +1,3 @@ -import { e2e } from '../index'; - import { importDashboard, Dashboard } from './importDashboard'; /** diff --git a/e2e/utils/index.ts b/e2e/utils/index.ts index 301693a59a2..afa8fe78112 100644 --- a/e2e/utils/index.ts +++ b/e2e/utils/index.ts @@ -3,7 +3,6 @@ import { E2ESelectors, Selectors, selectors } from '@grafana/e2e-selectors'; import * as flows from './flows'; import { e2eFactory } from './support'; import { benchmark } from './support/benchmark'; -import { e2eScenario, ScenarioArguments } from './support/scenario'; import { getScenarioContext, setScenarioContext } from './support/scenarioContext'; import * as typings from './typings'; @@ -12,7 +11,6 @@ export const e2e = { config: () => Cypress.config(), blobToBase64String: (blob: Blob) => Cypress.Blob.blobToBase64String(blob), imgSrcToBlob: (url: string) => Cypress.Blob.imgSrcToBlob(url), - scenario: (args: ScenarioArguments) => e2eScenario(args), benchmark, pages: e2eFactory({ selectors: selectors.pages }), typings, diff --git a/e2e/utils/support/localStorage.ts b/e2e/utils/support/localStorage.ts index 3c4735c4777..8ff921fb5ea 100644 --- a/e2e/utils/support/localStorage.ts +++ b/e2e/utils/support/localStorage.ts @@ -1,5 +1,3 @@ -import { e2e } from '../index'; - // @todo this actually returns type `Cypress.Chainable` const get = (key: string): any => cy.wrap({ getLocalStorage: () => localStorage.getItem(key) }, { log: false }).invoke('getLocalStorage'); diff --git a/e2e/utils/support/scenario.ts b/e2e/utils/support/scenario.ts deleted file mode 100644 index df84b006d4d..00000000000 --- a/e2e/utils/support/scenario.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { e2e } from '../'; - -export interface ScenarioArguments { - describeName: string; - itName: string; - scenario: Function; - skipScenario?: boolean; - addScenarioDataSource?: boolean; - addScenarioDashBoard?: boolean; - loginViaApi?: boolean; -} - -export const e2eScenario = ({ - describeName, - itName, - scenario, - skipScenario = false, - addScenarioDataSource = false, - addScenarioDashBoard = false, - loginViaApi = true, -}: ScenarioArguments) => { - describe(describeName, () => { - if (skipScenario) { - it.skip(itName, () => scenario()); - } else { - before(() => { - cy.session( - 'login', - () => { - e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD'), loginViaApi); - }, - { - cacheAcrossSpecs: true, - } - ); - e2e.flows.setDefaultUserPreferences(); - }); - - beforeEach(() => { - if (addScenarioDataSource) { - e2e.flows.addDataSource(); - } - if (addScenarioDashBoard) { - e2e.flows.addDashboard(); - } - }); - - afterEach(() => e2e.flows.revertAllChanges()); - - it(itName, () => scenario()); - } - }); -}; diff --git a/e2e/utils/support/scenarioContext.ts b/e2e/utils/support/scenarioContext.ts index 59dd9ce7448..eeb09ced3c4 100644 --- a/e2e/utils/support/scenarioContext.ts +++ b/e2e/utils/support/scenarioContext.ts @@ -1,6 +1,5 @@ import { DeleteDashboardConfig } from '../flows/deleteDashboard'; import { DeleteDataSourceConfig } from '../flows/deleteDataSource'; -import { e2e } from '../index'; export interface ScenarioContext { addedDashboards: DeleteDashboardConfig[]; diff --git a/e2e/various-suite/bar-gauge.spec.ts b/e2e/various-suite/bar-gauge.spec.ts index 9a79a406734..b793faa4be6 100644 --- a/e2e/various-suite/bar-gauge.spec.ts +++ b/e2e/various-suite/bar-gauge.spec.ts @@ -2,18 +2,17 @@ import { selectors } from '@grafana/e2e-selectors'; import { e2e } from '../utils'; -e2e.scenario({ - describeName: 'Bar Gauge Panel', - itName: 'Bar Gauge rendering e2e tests', - addScenarioDataSource: false, - addScenarioDashBoard: false, - skipScenario: false, - scenario: () => { +describe('Bar Gauge Panel', () => { + beforeEach(() => { + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD')); + }); + + it('Bar Gauge rendering e2e tests', () => { // open Panel Tests - Bar Gauge e2e.flows.openDashboard({ uid: 'O6f11TZWk' }); cy.get(`[data-panelid=6] [data-testid^="${selectors.components.Panels.Visualization.BarGauge.valueV2}"]`) .should('have.css', 'color', 'rgb(242, 73, 92)') .contains('100'); - }, + }); }); diff --git a/e2e/various-suite/exemplars.spec.ts b/e2e/various-suite/exemplars.spec.ts index 221aa30aee0..87c3ff6feaa 100644 --- a/e2e/various-suite/exemplars.spec.ts +++ b/e2e/various-suite/exemplars.spec.ts @@ -19,7 +19,7 @@ const addDataSource = () => { describe('Exemplars', () => { beforeEach(() => { - e2e.flows.login('admin', 'admin'); + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD')); cy.request({ url: `${e2e.env('BASE_URL')}/api/datasources/name/${dataSourceName}`, failOnStatusCode: false }).then( (response) => { diff --git a/e2e/various-suite/explore.spec.ts b/e2e/various-suite/explore.spec.ts index a3fb8f92e09..964f428fff3 100644 --- a/e2e/various-suite/explore.spec.ts +++ b/e2e/various-suite/explore.spec.ts @@ -1,12 +1,11 @@ import { e2e } from '../utils'; -e2e.scenario({ - describeName: 'Explore', - itName: 'Basic path through Explore.', - addScenarioDataSource: false, - addScenarioDashBoard: false, - skipScenario: false, - scenario: () => { +describe('Explore', () => { + beforeEach(() => { + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD')); + }); + + it('Basic path through Explore.', () => { e2e.pages.Explore.visit(); e2e.pages.Explore.General.container().should('have.length', 1); e2e.components.RefreshPicker.runButtonV2().should('have.length', 1); @@ -39,5 +38,5 @@ e2e.scenario({ cy.get('button[title="Delete query"]').each((button) => { button.trigger('click'); }); - }, + }); }); diff --git a/e2e/various-suite/filter-annotations.spec.ts b/e2e/various-suite/filter-annotations.spec.ts index 5a84b23ee97..6651fb30659 100644 --- a/e2e/various-suite/filter-annotations.spec.ts +++ b/e2e/various-suite/filter-annotations.spec.ts @@ -1,13 +1,12 @@ import { e2e } from '../utils'; const DASHBOARD_ID = 'ed155665'; -e2e.scenario({ - describeName: 'Annotations filtering', - itName: 'Tests switching filter type updates the UI accordingly', - addScenarioDataSource: false, - addScenarioDashBoard: false, - skipScenario: false, - scenario: () => { +describe('Annotations filtering', () => { + beforeEach(() => { + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD')); + }); + + it('Tests switching filter type updates the UI accordingly', () => { e2e.flows.openDashboard({ uid: DASHBOARD_ID }); e2e.components.PageToolbar.item('Dashboard settings').click(); @@ -57,5 +56,5 @@ e2e.scenario({ .within(() => { e2e.pages.Dashboard.Annotations.marker().should('exist').should('have.length', 4); }); - }, + }); }); diff --git a/e2e/various-suite/gauge.spec.ts b/e2e/various-suite/gauge.spec.ts index 07d7ed2cf8e..2b5d47ba958 100644 --- a/e2e/various-suite/gauge.spec.ts +++ b/e2e/various-suite/gauge.spec.ts @@ -1,12 +1,11 @@ import { e2e } from '../utils'; -e2e.scenario({ - describeName: 'Gauge Panel', - itName: 'Gauge rendering e2e tests', - addScenarioDataSource: false, - addScenarioDashBoard: false, - skipScenario: false, - scenario: () => { +describe('Gauge Panel', () => { + beforeEach(() => { + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD')); + }); + + it('Gauge rendering e2e tests', () => { // open Panel Tests - Gauge e2e.flows.openDashboard({ uid: '_5rDmaQiz' }); @@ -17,5 +16,5 @@ e2e.scenario({ // check that no panel errors exist e2e.components.Panels.Panel.headerCornerInfo('error').should('not.exist'); - }, + }); }); diff --git a/e2e/various-suite/graph-auto-migrate.spec.ts b/e2e/various-suite/graph-auto-migrate.spec.ts index 891953a9501..0437a9d63e2 100644 --- a/e2e/various-suite/graph-auto-migrate.spec.ts +++ b/e2e/various-suite/graph-auto-migrate.spec.ts @@ -2,13 +2,12 @@ import { e2e } from '../utils'; const DASHBOARD_ID = 'XMjIZPmik'; const DASHBOARD_NAME = 'Panel Tests - Graph Time Regions'; -e2e.scenario({ - describeName: 'Auto-migrate graph panel', - itName: 'Annotation markers exist for time regions', - addScenarioDataSource: false, - addScenarioDashBoard: false, - skipScenario: false, - scenario: () => { +describe('Auto-migrate graph panel', () => { + beforeEach(() => { + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD')); + }); + + it('Annotation markers exist for time regions', () => { e2e.flows.openDashboard({ uid: DASHBOARD_ID }); cy.contains(DASHBOARD_NAME).should('be.visible'); cy.contains('uplot-main-div').should('not.exist'); @@ -48,5 +47,5 @@ e2e.scenario({ .within(() => { e2e.pages.Dashboard.Annotations.marker().should('exist'); }); - }, + }); }); diff --git a/e2e/various-suite/inspect-drawer.spec.ts b/e2e/various-suite/inspect-drawer.spec.ts index dbcad4d946d..a3000a94db4 100644 --- a/e2e/various-suite/inspect-drawer.spec.ts +++ b/e2e/various-suite/inspect-drawer.spec.ts @@ -2,13 +2,12 @@ import { e2e } from '../utils'; const PANEL_UNDER_TEST = 'Value reducers 1'; -e2e.scenario({ - describeName: 'Inspect drawer tests', - itName: 'Tests various Inspect Drawer scenarios', - addScenarioDataSource: false, - addScenarioDashBoard: false, - skipScenario: false, - scenario: () => { +describe('Inspect drawer tests', () => { + beforeEach(() => { + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD')); + }); + + it('Tests various Inspect Drawer scenarios', () => { // @ts-ignore some typing issue cy.on('uncaught:exception', (err) => { if (err.stack?.indexOf("TypeError: Cannot read property 'getText' of null") !== -1) { @@ -59,7 +58,7 @@ e2e.scenario({ }); e2e.components.PanelInspector.Query.content().should('be.visible'); - }, + }); }); const expectDrawerTabsAndContent = () => { diff --git a/e2e/various-suite/loki-editor.spec.ts b/e2e/various-suite/loki-editor.spec.ts index bd388f66dc2..e17bc6158a1 100644 --- a/e2e/various-suite/loki-editor.spec.ts +++ b/e2e/various-suite/loki-editor.spec.ts @@ -12,13 +12,16 @@ const addDataSource = () => { }); }; -e2e.scenario({ - describeName: 'Loki Query Editor', - itName: 'Autocomplete features should work as expected.', - addScenarioDataSource: false, - addScenarioDashBoard: false, - skipScenario: false, - scenario: () => { +describe('Loki Query Editor', () => { + beforeEach(() => { + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD')); + }); + + afterEach(() => { + e2e.flows.revertAllChanges(); + }); + + it('Autocomplete features should work as expected.', () => { addDataSource(); cy.intercept(/labels?/, (req) => { @@ -84,5 +87,5 @@ e2e.scenario({ e2e.components.QueryField.container().type('{selectall}av'); cy.contains('avg').should('be.visible'); cy.contains('avg_over_time').should('be.visible'); - }, + }); }); diff --git a/e2e/various-suite/loki-query-builder.spec.ts b/e2e/various-suite/loki-query-builder.spec.ts index acb7e41aa23..0f2656927aa 100644 --- a/e2e/various-suite/loki-query-builder.spec.ts +++ b/e2e/various-suite/loki-query-builder.spec.ts @@ -17,7 +17,7 @@ const finalQuery = 'rate({instance=~"instance1|instance2"} | logfmt | __error__= describe('Loki query builder', () => { beforeEach(() => { - e2e.flows.login('admin', 'admin'); + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD')); cy.request({ url: `${e2e.env('BASE_URL')}/api/datasources/name/${dataSourceName}`, failOnStatusCode: false }).then( (response) => { diff --git a/e2e/various-suite/pie-chart.spec.ts b/e2e/various-suite/pie-chart.spec.ts index b642bba5abd..076974956be 100644 --- a/e2e/various-suite/pie-chart.spec.ts +++ b/e2e/various-suite/pie-chart.spec.ts @@ -2,13 +2,12 @@ import { selectors } from '@grafana/e2e-selectors'; import { e2e } from '../utils'; -e2e.scenario({ - describeName: 'Pie Chart Panel', - itName: 'Pie Chart rendering e2e tests', - addScenarioDataSource: false, - addScenarioDashBoard: false, - skipScenario: false, - scenario: () => { +describe('Pie Chart Panel', () => { + beforeEach(() => { + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD')); + }); + + it('Pie Chart rendering e2e tests', () => { // open Panel Tests - Pie Chart e2e.flows.openDashboard({ uid: 'lVE-2YFMz' }); @@ -16,5 +15,5 @@ e2e.scenario({ 'have.length', 5 ); - }, + }); }); diff --git a/e2e/various-suite/query-editor.spec.ts b/e2e/various-suite/query-editor.spec.ts index 6a534d1330d..b8a65d23690 100644 --- a/e2e/various-suite/query-editor.spec.ts +++ b/e2e/various-suite/query-editor.spec.ts @@ -1,12 +1,11 @@ import { e2e } from '../utils'; -e2e.scenario({ - describeName: 'Query editor', - itName: 'Undo should work in query editor for prometheus -- test CI.', - addScenarioDataSource: false, - addScenarioDashBoard: false, - skipScenario: false, - scenario: () => { +describe('Query editor', () => { + beforeEach(() => { + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD')); + }); + + it('Undo should work in query editor for prometheus -- test CI.', () => { e2e.pages.Explore.visit(); e2e.components.DataSourcePicker.container().should('be.visible').click(); @@ -31,5 +30,5 @@ e2e.scenario({ cy.contains(queryText).should('be.visible'); e2e.components.Alert.alertV2('error').should('not.be.visible'); - }, + }); }); diff --git a/e2e/various-suite/select-focus.spec.ts b/e2e/various-suite/select-focus.spec.ts index affcea31611..5288c2ce0a3 100644 --- a/e2e/various-suite/select-focus.spec.ts +++ b/e2e/various-suite/select-focus.spec.ts @@ -1,12 +1,11 @@ import { e2e } from '../utils'; -e2e.scenario({ - describeName: 'Select focus/unfocus tests', - itName: 'Tests select focus/unfocus scenarios', - addScenarioDataSource: false, - addScenarioDashBoard: false, - skipScenario: false, - scenario: () => { +describe('Select focus/unfocus tests', () => { + beforeEach(() => { + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD')); + }); + + it('Tests select focus/unfocus scenarios', () => { e2e.flows.openDashboard({ uid: '5SdHCadmz' }); e2e.components.PageToolbar.item('Dashboard settings').click(); @@ -31,5 +30,5 @@ e2e.scenario({ .within(() => { cy.get('#dashboard-folder-input').should('exist').should('not.have.focus'); }); - }, + }); }); diff --git a/e2e/various-suite/solo-route.spec.ts b/e2e/various-suite/solo-route.spec.ts index 16b5f00b2ed..b6db23367ae 100644 --- a/e2e/various-suite/solo-route.spec.ts +++ b/e2e/various-suite/solo-route.spec.ts @@ -1,15 +1,14 @@ import { e2e } from '../utils'; -e2e.scenario({ - describeName: 'Solo Route', - itName: 'Can view panels with shared queries in fullsceen', - addScenarioDataSource: false, - addScenarioDashBoard: false, - skipScenario: false, - scenario: () => { +describe('Solo Route', () => { + beforeEach(() => { + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD')); + }); + + it('Can view panels with shared queries in fullsceen', () => { // open Panel Tests - Bar Gauge e2e.pages.SoloPanel.visit('ZqZnVvFZz/datasource-tests-shared-queries?orgId=1&panelId=4'); cy.get('canvas').should('have.length', 6); - }, + }); }); diff --git a/e2e/various-suite/trace-view-scrolling.spec.ts b/e2e/various-suite/trace-view-scrolling.spec.ts index 1c64ac8cb7c..5a3cab21ec7 100644 --- a/e2e/various-suite/trace-view-scrolling.spec.ts +++ b/e2e/various-suite/trace-view-scrolling.spec.ts @@ -1,8 +1,11 @@ import { e2e } from '../utils'; describe('Trace view', () => { + beforeEach(() => { + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD')); + }); + it('Can lazy load big traces', () => { - e2e.flows.login('admin', 'admin'); cy.intercept('GET', '**/api/traces/trace', { fixture: 'long-trace-response.json', }).as('longTrace'); diff --git a/e2e/various-suite/visualization-suggestions.spec.ts b/e2e/various-suite/visualization-suggestions.spec.ts index 422c0388ef1..2ab0f4eb5c3 100644 --- a/e2e/various-suite/visualization-suggestions.spec.ts +++ b/e2e/various-suite/visualization-suggestions.spec.ts @@ -1,12 +1,11 @@ import { e2e } from '../utils'; -e2e.scenario({ - describeName: 'Visualization suggestions', - itName: 'Should be shown and clickable', - addScenarioDataSource: false, - addScenarioDashBoard: false, - skipScenario: false, - scenario: () => { +describe('Visualization suggestions', () => { + beforeEach(() => { + e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD')); + }); + + it('Should be shown and clickable', () => { e2e.flows.openDashboard({ uid: 'aBXrJ0R7z', queryParams: { editPanel: 9 } }); // Try visualization suggestions @@ -25,5 +24,5 @@ e2e.scenario({ // Select a visualisation e2e.components.VisualizationPreview.card('Table').click(); e2e.components.Panels.Visualization.Table.header().should('be.visible'); - }, + }); }); diff --git a/e2e/verify/specs/smoketests.spec.ts b/e2e/verify/specs/smoketests.spec.ts index 84e63bc5a4f..39409d544ba 100644 --- a/e2e/verify/specs/smoketests.spec.ts +++ b/e2e/verify/specs/smoketests.spec.ts @@ -1,4 +1,3 @@ import { smokeTestScenario } from '../../shared/smokeTestScenario'; -import { e2e } from '../../utils'; -e2e.scenario(smokeTestScenario); +smokeTestScenario();