smoke.test.ts 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import { Browser, Page, Target } from 'puppeteer-core';
  2. import { e2eScenario, constants, takeScreenShot, compareScreenShots } from '@grafana/toolkit';
  3. import { addDataSourcePage } from 'e2e-test/pages/datasources/addDataSourcePage';
  4. import { editDataSourcePage } from 'e2e-test/pages/datasources/editDataSourcePage';
  5. import { dataSourcesPage } from 'e2e-test/pages/datasources/dataSources';
  6. import { createDashboardPage } from 'e2e-test/pages/dashboards/createDashboardPage';
  7. import { saveDashboardModal } from 'e2e-test/pages/dashboards/saveDashboardModal';
  8. import { dashboardsPageFactory } from 'e2e-test/pages/dashboards/dashboardsPage';
  9. import { panel } from 'e2e-test/pages/panels/panel';
  10. import { editPanelPage } from 'e2e-test/pages/panels/editPanel';
  11. import { sharePanelModal } from 'e2e-test/pages/panels/sharePanelModal';
  12. e2eScenario(
  13. 'Login scenario, create test data source, dashboard, panel, and export scenario',
  14. 'should pass',
  15. async (browser: Browser, page: Page) => {
  16. // Add TestData DB
  17. await addDataSourcePage.init(page);
  18. await addDataSourcePage.navigateTo();
  19. await addDataSourcePage.pageObjects.testDataDB.exists();
  20. await addDataSourcePage.pageObjects.testDataDB.click();
  21. await editDataSourcePage.init(page);
  22. await editDataSourcePage.waitForNavigation();
  23. await editDataSourcePage.pageObjects.saveAndTest.click();
  24. await editDataSourcePage.pageObjects.alert.exists();
  25. await editDataSourcePage.pageObjects.alertMessage.containsText('Data source is working');
  26. // Verify that data source is listed
  27. const url = await editDataSourcePage.getUrlWithoutBaseUrl();
  28. const expectedUrl = url.substring(1, url.length - 1);
  29. const selector = `a[href="${expectedUrl}"]`;
  30. await dataSourcesPage.init(page);
  31. await dataSourcesPage.navigateTo();
  32. await dataSourcesPage.expectSelector({ selector });
  33. // Create a new Dashboard
  34. await createDashboardPage.init(page);
  35. await createDashboardPage.navigateTo();
  36. await createDashboardPage.pageObjects.addQuery.click();
  37. await editPanelPage.init(page);
  38. await editPanelPage.waitForNavigation();
  39. await editPanelPage.pageObjects.queriesTab.click();
  40. await editPanelPage.pageObjects.scenarioSelect.select('string:csv_metric_values');
  41. await editPanelPage.pageObjects.visualizationTab.click();
  42. await editPanelPage.pageObjects.showXAxis.click();
  43. await editPanelPage.pageObjects.saveDashboard.click();
  44. // Confirm save modal
  45. await saveDashboardModal.init(page);
  46. await saveDashboardModal.expectSelector({ selector: 'save-dashboard-as-modal' });
  47. const dashboardTitle = new Date().toISOString();
  48. await saveDashboardModal.pageObjects.name.enter(dashboardTitle);
  49. await saveDashboardModal.pageObjects.save.click();
  50. await saveDashboardModal.pageObjects.success.exists();
  51. // Share the dashboard
  52. const dashboardsPage = dashboardsPageFactory(dashboardTitle);
  53. await dashboardsPage.init(page);
  54. await dashboardsPage.navigateTo();
  55. await dashboardsPage.pageObjects.dashboard.exists();
  56. await dashboardsPage.pageObjects.dashboard.click();
  57. await panel.init(page);
  58. await panel.pageObjects.panelTitle.click();
  59. await panel.pageObjects.share.click();
  60. // Verify that a new tab is opened
  61. const targetPromise = new Promise(resolve => browser.once('targetcreated', resolve));
  62. await sharePanelModal.init(page);
  63. await sharePanelModal.pageObjects.directLinkRenderedImage.click();
  64. const newTarget: Target = (await targetPromise) as Target;
  65. expect(newTarget.url()).toContain(`${constants.baseUrl}/render/d-solo`);
  66. // Take snapshot of page
  67. const newPage = await newTarget.page();
  68. const fileName = 'smoke-test-scenario';
  69. await takeScreenShot(newPage, fileName);
  70. await compareScreenShots(fileName);
  71. }
  72. );