From 1c4fd393b29f7c2b0da4539e345022a99f4d142e Mon Sep 17 00:00:00 2001 From: piotrk39 Date: Mon, 21 Oct 2024 13:38:49 +0200 Subject: [PATCH] Add test, testId and loader wait --- .../src/app/components/map/map.component.ts | 2 +- .../components/matrix/matrix.component.html | 1 + tests/e2e/Pages/DashboardPage.ts | 6 ++ tests/e2e/Pages/MapComponent.ts | 12 ++++ .../Map/MapFunctionalitiesNotrigger.spec.ts | 65 +++++++++++++++++++ 5 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 tests/e2e/tests/Map/MapFunctionalitiesNotrigger.spec.ts diff --git a/interfaces/IBF-dashboard/src/app/components/map/map.component.ts b/interfaces/IBF-dashboard/src/app/components/map/map.component.ts index e57ca26275..20ac4bccee 100644 --- a/interfaces/IBF-dashboard/src/app/components/map/map.component.ts +++ b/interfaces/IBF-dashboard/src/app/components/map/map.component.ts @@ -332,7 +332,7 @@ export class MapComponent implements AfterViewInit, OnDestroy { index === self.findIndex((t) => t.name === value.name), ); // deduplicate based on name (for e.g. waterpoints_internal) - let detailsString = `
${this.mapLegendService.getLegendTitle()} + let detailsString = `
${this.mapLegendService.getLegendTitle()}
`; diff --git a/interfaces/IBF-dashboard/src/app/components/matrix/matrix.component.html b/interfaces/IBF-dashboard/src/app/components/matrix/matrix.component.html index 2ba4ef3453..18938582ad 100644 --- a/interfaces/IBF-dashboard/src/app/components/matrix/matrix.component.html +++ b/interfaces/IBF-dashboard/src/app/components/matrix/matrix.component.html @@ -6,6 +6,7 @@ diff --git a/tests/e2e/Pages/DashboardPage.ts b/tests/e2e/Pages/DashboardPage.ts index 980498ae78..77f8670650 100644 --- a/tests/e2e/Pages/DashboardPage.ts +++ b/tests/e2e/Pages/DashboardPage.ts @@ -53,6 +53,12 @@ class DashboardPage { ); await this.droughtIcon.click(); } + + async waitForLoaderToDisappear() { + await this.page.waitForSelector('[data-testid=loader]', { + state: 'hidden', + }); + } } export default DashboardPage; diff --git a/tests/e2e/Pages/MapComponent.ts b/tests/e2e/Pages/MapComponent.ts index ecc497ed9d..d318647a6f 100644 --- a/tests/e2e/Pages/MapComponent.ts +++ b/tests/e2e/Pages/MapComponent.ts @@ -14,6 +14,8 @@ class MapComponent extends DashboardPage { readonly legend: Locator; readonly layerMenu: Locator; readonly adminBoundry: Locator; + readonly legendHeader: Locator; + readonly layerMenuToggle: Locator; constructor(page: Page) { super(page); @@ -35,6 +37,8 @@ class MapComponent extends DashboardPage { this.legend = this.page.getByTestId('map-legend'); this.layerMenu = this.page.getByTestId('layer-menu'); this.adminBoundry = this.page.locator('.leaflet-interactive'); + this.legendHeader = this.page.getByTestId('map-legend-header'); + this.layerMenuToggle = this.page.getByTestId('layer-menu-toggle-button'); } async mapComponentIsVisible() { @@ -115,6 +119,14 @@ class MapComponent extends DashboardPage { await expect(adminBoundaries.nth(i)).toBeVisible(); } } + + async clickLegendHeader() { + await this.legendHeader.click(); + } + + async clickLayerMenu() { + await this.layerMenuToggle.click(); + } } export default MapComponent; diff --git a/tests/e2e/tests/Map/MapFunctionalitiesNotrigger.spec.ts b/tests/e2e/tests/Map/MapFunctionalitiesNotrigger.spec.ts new file mode 100644 index 0000000000..4bcde0835b --- /dev/null +++ b/tests/e2e/tests/Map/MapFunctionalitiesNotrigger.spec.ts @@ -0,0 +1,65 @@ +import { test } from '@playwright/test'; +import DashboardPage from 'Pages/DashboardPage'; +import MapComponent from 'Pages/MapComponent'; +import UserStateComponent from 'Pages/UserStateComponent'; +import { qase } from 'playwright-qase-reporter'; +import { NoTriggerDataSet } from 'testData/testData.enum'; + +import { FloodsScenario } from '../../../../services/API-service/src/scripts/enum/mock-scenario.enum'; +import { + getAccessToken, + mockFloods, + resetDB, +} from '../../helpers/utility.helper'; +import LoginPage from '../../Pages/LoginPage'; + +let accessToken: string; + +test.beforeEach(async ({ page }) => { + // Login + const loginPage = new LoginPage(page); + accessToken = await getAccessToken(); + await resetDB(accessToken); + + // We should maybe create one mock for all different disaster types for now we can just use floods + await mockFloods( + FloodsScenario.NoTrigger, + NoTriggerDataSet.CountryCode, + accessToken, + ); + + await page.goto('/'); + await loginPage.login( + NoTriggerDataSet.UserMail, + NoTriggerDataSet.UserPassword, + ); +}); + +test( + qase(7, 'Verify Map functionality for no-triggered mode'), + async ({ page }) => { + const dashboard = new DashboardPage(page); + const userState = new UserStateComponent(page); + const map = new MapComponent(page); + + // Navigate to disaster type the data was mocked for + await dashboard.navigateToFloodDisasterType(); + // Assertions + await userState.headerComponentIsVisible({ + countryName: NoTriggerDataSet.CountryName, + }); + // Wait for the page to load + await dashboard.waitForLoaderToDisappear(); + await map.mapComponentIsVisible(); + + // Close the legend + await map.isLegendOpen({ legendOpen: true }); + await map.clickLegendHeader(); + await map.isLegendOpen({ legendOpen: false }); + + // Open the layer menu + await map.isLayerMenuOpen({ layerMenuOpen: false }); + await map.clickLayerMenu(); + await map.isLayerMenuOpen({ layerMenuOpen: true }); + }, +);