From dd73d48ffde1fc7d74a32f40fbc5f029de10c667 Mon Sep 17 00:00:00 2001 From: noahspannbauer Date: Thu, 30 May 2024 22:15:43 -0500 Subject: [PATCH] Feature/3 pilots page and drawer (#17) * adding pilots page and drawer component * adding pilot page and pilot drawer --- app/package.json | 5 + app/public/noahspan-logo.png | Bin 0 -> 22165 bytes app/src/components/pilots/Pilots.tsx | 59 +++++- app/src/components/siteNav/SiteNav.tsx | 23 ++- app/src/index.css | 9 + app/src/main.tsx | 1 + package-lock.json | 113 ++++++++++- package.json | 3 - tests/.gitignore | 1 + tests/cucumber.mjs | 17 ++ tests/e2e/features/pilots/pilots.feature | 14 ++ tests/e2e/pages/common.page.ts | 28 +++ tests/e2e/pages/pilots.page.ts | 26 +++ tests/e2e/steps/common.steps.ts | 31 +++ tests/e2e/steps/pilots.steps.ts | 35 ++++ tests/e2e/support/auth/read.json | 195 ++++++++++++++++++ tests/e2e/support/auth/write.json | 245 +++++++++++++++++++++++ tests/e2e/support/config.ts | 2 +- tests/e2e/support/hooks.ts | 57 ++++++ tests/e2e/support/report.ts | 22 ++ tests/package.json | 6 +- 21 files changed, 878 insertions(+), 14 deletions(-) create mode 100644 app/public/noahspan-logo.png create mode 100644 tests/.gitignore create mode 100644 tests/e2e/features/pilots/pilots.feature create mode 100644 tests/e2e/pages/common.page.ts create mode 100644 tests/e2e/pages/pilots.page.ts create mode 100644 tests/e2e/steps/common.steps.ts create mode 100644 tests/e2e/steps/pilots.steps.ts create mode 100644 tests/e2e/support/auth/read.json create mode 100644 tests/e2e/support/auth/write.json diff --git a/app/package.json b/app/package.json index b9062cf..9a35b68 100644 --- a/app/package.json +++ b/app/package.json @@ -11,7 +11,12 @@ }, "dependencies": { "@azure/msal-react": "^2.0.15", + "@fortawesome/fontawesome-svg-core": "^6.5.2", + "@fortawesome/free-regular-svg-icons": "^6.5.2", + "@fortawesome/free-solid-svg-icons": "^6.5.2", + "@fortawesome/react-fontawesome": "^0.2.2", "@nextui-org/react": "^2.3.6", + "@noahspan/noahspan-components": "^0.2.4", "axios": "^1.7.2", "framer-motion": "^11.1.7", "react": "^18.2.0", diff --git a/app/public/noahspan-logo.png b/app/public/noahspan-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..c4cce0cf0dd0fe5e6747d0c8daaf61e06311dc14 GIT binary patch literal 22165 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 JP3#(R>ffeIOH=>= literal 0 HcmV?d00001 diff --git a/app/src/components/pilots/Pilots.tsx b/app/src/components/pilots/Pilots.tsx index 8bd5df7..2344bfa 100644 --- a/app/src/components/pilots/Pilots.tsx +++ b/app/src/components/pilots/Pilots.tsx @@ -1,12 +1,65 @@ +import { useState } from 'react'; import SiteNav from '../siteNav/SiteNav'; import PilotForm from '../pilotForm/PilotForm'; +import { Button } from '@nextui-org/react'; +import { + Drawer, + DrawerBody, + DrawerContent, + DrawerFooter, + DrawerHeader +} from '@noahspan/noahspan-components'; +import { faPlus } from '@fortawesome/free-solid-svg-icons'; +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; const Pilots: React.FC = () => { + const [isDrawerOpen, setIsDrawerOpen] = useState(false); + const onOpenCloseDrawer = () => { + setIsDrawerOpen(!isDrawerOpen); + }; + return ( -
+
-
- +
+

Pilots

+ + + + +

Add Pilot

+
+ + + + +
+
+ +
+
+ +
+
+
+
+
); diff --git a/app/src/components/siteNav/SiteNav.tsx b/app/src/components/siteNav/SiteNav.tsx index 22cb5ee..78eed5d 100644 --- a/app/src/components/siteNav/SiteNav.tsx +++ b/app/src/components/siteNav/SiteNav.tsx @@ -10,6 +10,7 @@ import { import { Link as ReactRouterLink } from 'react-router-dom'; import { useIsAuthenticated, useMsal } from '@azure/msal-react'; import { useAppContext } from '../../hooks/appContext/UseAppContext'; +import { Logo, Plane } from '@noahspan/noahspan-components'; const SiteNav: React.FC = () => { const isAuthenticated = useIsAuthenticated(); @@ -22,8 +23,18 @@ const SiteNav: React.FC = () => { console.log(accounts); return ( - - Site Logo Goes Here + + + + + {appContext.state.featureFlags.find( @@ -37,7 +48,13 @@ const SiteNav: React.FC = () => { {!isAuthenticated && ( - )} diff --git a/app/src/index.css b/app/src/index.css index b5c61c9..0f4754e 100644 --- a/app/src/index.css +++ b/app/src/index.css @@ -1,3 +1,12 @@ @tailwind base; @tailwind components; @tailwind utilities; + +@layer base { + h1 { + @apply text-2xl font-bold leading-7 text-gray-900; + } + h2 { + @apply text-2xl font-bold leading-7 text-gray-900; + } +} diff --git a/app/src/main.tsx b/app/src/main.tsx index 26d4d2f..f0abece 100644 --- a/app/src/main.tsx +++ b/app/src/main.tsx @@ -7,6 +7,7 @@ import App from './App.tsx'; import { BrowserRouter } from 'react-router-dom'; import AppContextProvider from './context/appContext/AppContextProvider.tsx'; import './index.css'; +import '@noahspan/noahspan-components/noahspan-components.css'; const configuration: Configuration = { auth: { diff --git a/package-lock.json b/package-lock.json index 32ccef8..fa4eafb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,9 +12,6 @@ "app", "tests" ], - "dependencies": { - "@azure/app-configuration": "^1.6.0" - }, "devDependencies": { "@typescript-eslint/eslint-plugin": "^7.2.0", "@typescript-eslint/parser": "^7.2.0", @@ -66,7 +63,12 @@ "version": "0.1.0", "dependencies": { "@azure/msal-react": "^2.0.15", + "@fortawesome/fontawesome-svg-core": "^6.5.2", + "@fortawesome/free-regular-svg-icons": "^6.5.2", + "@fortawesome/free-solid-svg-icons": "^6.5.2", + "@fortawesome/react-fontawesome": "^0.2.2", "@nextui-org/react": "^2.3.6", + "@noahspan/noahspan-components": "^0.2.4", "axios": "^1.7.2", "framer-motion": "^11.1.7", "react": "^18.2.0", @@ -2070,6 +2072,75 @@ "tslib": "^2.4.0" } }, + "node_modules/@fortawesome/fontawesome-common-types": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.5.2.tgz", + "integrity": "sha512-gBxPg3aVO6J0kpfHNILc+NMhXnqHumFxOmjYCFfOiLZfwhnnfhtsdA2hfJlDnj+8PjAs6kKQPenOTKj3Rf7zHw==", + "hasInstallScript": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/fontawesome-svg-core": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.5.2.tgz", + "integrity": "sha512-5CdaCBGl8Rh9ohNdxeeTMxIj8oc3KNBgIeLMvJosBMdslK/UnEB8rzyDRrbKdL1kDweqBPo4GT9wvnakHWucZw==", + "hasInstallScript": true, + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.5.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/free-brands-svg-icons": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-6.5.2.tgz", + "integrity": "sha512-zi5FNYdmKLnEc0jc0uuHH17kz/hfYTg4Uei0wMGzcoCL/4d3WM3u1VMc0iGGa31HuhV5i7ZK8ZlTCQrHqRHSGQ==", + "hasInstallScript": true, + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.5.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/free-regular-svg-icons": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.5.2.tgz", + "integrity": "sha512-iabw/f5f8Uy2nTRtJ13XZTS1O5+t+anvlamJ3zJGLEVE2pKsAWhPv2lq01uQlfgCX7VaveT3EVs515cCN9jRbw==", + "hasInstallScript": true, + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.5.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/free-solid-svg-icons": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.5.2.tgz", + "integrity": "sha512-QWFZYXFE7O1Gr1dTIp+D6UcFUF0qElOnZptpi7PBUMylJh+vFmIedVe1Ir6RM1t2tEQLLSV1k7bR4o92M+uqlw==", + "hasInstallScript": true, + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.5.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/react-fontawesome": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.2.2.tgz", + "integrity": "sha512-EnkrprPNqI6SXJl//m29hpaNzOp1bruISWaOiRtkMi/xSvHJlzc2j2JAYS7egxt/EbjSNV/k6Xy0AQI6vB2+1g==", + "dependencies": { + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "@fortawesome/fontawesome-svg-core": "~1 || ~6", + "react": ">=16.3" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.14", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", @@ -4402,6 +4473,27 @@ "resolved": "app", "link": true }, + "node_modules/@noahspan/noahspan-components": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@noahspan/noahspan-components/-/noahspan-components-0.2.4.tgz", + "integrity": "sha512-wj5j83HTIv2fXsGyA2OwO3zBhaiwoPV/rE+4CUxU4Lj/3swzhw2LL+Rzq7SWUzwYux0r+YQjzKXg+Mix+jueYQ==", + "dependencies": { + "@fortawesome/fontawesome-svg-core": "^6.5.2", + "@fortawesome/free-brands-svg-icons": "^6.5.2", + "@fortawesome/free-regular-svg-icons": "^6.5.2", + "@fortawesome/free-solid-svg-icons": "^6.5.2", + "@fortawesome/react-fontawesome": "^0.2.0", + "@nextui-org/react": "^2.3.6", + "framer-motion": "^11.1.9" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0" + } + }, "node_modules/@noahspan/noahspan-modules": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/@noahspan/noahspan-modules/-/noahspan-modules-0.1.2.tgz", @@ -12328,6 +12420,21 @@ "node": ">= 6" } }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, "node_modules/property-expr": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-2.0.6.tgz", diff --git a/package.json b/package.json index a5e3470..7476a9f 100644 --- a/package.json +++ b/package.json @@ -24,8 +24,5 @@ }, "lint-staged": { "**/*": "prettier --write \"**/src/**/*.ts\" \"**/test/**/*.ts\" --ignore-unknown" - }, - "dependencies": { - "@azure/app-configuration": "^1.6.0" } } diff --git a/tests/.gitignore b/tests/.gitignore new file mode 100644 index 0000000..7e3f35c --- /dev/null +++ b/tests/.gitignore @@ -0,0 +1 @@ +e2e/results \ No newline at end of file diff --git a/tests/cucumber.mjs b/tests/cucumber.mjs index e69de29..f13371b 100644 --- a/tests/cucumber.mjs +++ b/tests/cucumber.mjs @@ -0,0 +1,17 @@ +import dotenv from 'dotenv'; + +dotenv.config({ path: '.env' }); + +const config = { + requireModule: ['ts-node/register'], + require: ['e2e/support/hooks.ts', 'e2e/steps/*.steps.ts'], + format: [ + 'progress-bar', + 'json:e2e/results/report/report.json', + 'rerun:e2e/results/@rerun.txt' + ], + formatOptions: { snippetInterface: 'async-await' }, + parallel: Number(process.env.PARALLEL) ? Number(process.env.PARALLEL) : 1 +}; + +export default config; diff --git a/tests/e2e/features/pilots/pilots.feature b/tests/e2e/features/pilots/pilots.feature new file mode 100644 index 0000000..62b17f4 --- /dev/null +++ b/tests/e2e/features/pilots/pilots.feature @@ -0,0 +1,14 @@ +@pilots +Feature: Pilots + + Background: Navigate to the Pilots page + Given the user is on the homepage + When the user clicks the "Pilots" navbar link + Then the user is on the "Pilots" page + + Scenario: Cancel Add Pilot drawer + Given the user is on the "Pilots" page + When the user clicks the New button + Then the pilot drawer is visible + When the user clicks the pilot drawer cancel button + Then the pilot drawer is no longer visible \ No newline at end of file diff --git a/tests/e2e/pages/common.page.ts b/tests/e2e/pages/common.page.ts new file mode 100644 index 0000000..33e061c --- /dev/null +++ b/tests/e2e/pages/common.page.ts @@ -0,0 +1,28 @@ +import { Locator, Page } from '@playwright/test'; +import { config } from '../support/config'; + +export class CommonPage { + page: Page; + loginLink: Locator; + navbarLinks: Locator; + pageHeading: Locator; + + constructor(page: Page) { + this.page = page; + this.loginLink = page.getByTestId('login-link'); + this.navbarLinks = page.getByTestId('flying-navbar').getByRole('link'); + this.pageHeading = page.getByRole('heading'); + } + + public async goto() { + await this.page.goto(config.baseUrl); + } + + public async clickLoginLink() { + await this.loginLink.click(); + } + + public async clickNavbarLink(navbarLinkName: string) { + await this.navbarLinks.filter({ hasText: navbarLinkName }); + } +} diff --git a/tests/e2e/pages/pilots.page.ts b/tests/e2e/pages/pilots.page.ts new file mode 100644 index 0000000..0162e3c --- /dev/null +++ b/tests/e2e/pages/pilots.page.ts @@ -0,0 +1,26 @@ +import { Locator, Page } from '@playwright/test'; +import { config } from '../support/config'; + +export class PilotsPage { + page: Page; + newButton: Locator; + pilotDrawer: Locator; + pilotDrawerCancelButton: Locator; + + constructor(page: Page) { + this.page = page; + this.newButton = page.getByTestId('new-pilot-button'); + this.pilotDrawer = page.getByTestId('pilot-drawer'); + this.pilotDrawerCancelButton = page.getByTestId( + 'pilot-drawer-cancel-button' + ); + } + + public async clickNewButton() { + await this.newButton.click(); + } + + public async clickPilotDrawerCancelButton() { + await this.pilotDrawerCancelButton.click(); + } +} diff --git a/tests/e2e/steps/common.steps.ts b/tests/e2e/steps/common.steps.ts new file mode 100644 index 0000000..399f7fe --- /dev/null +++ b/tests/e2e/steps/common.steps.ts @@ -0,0 +1,31 @@ +import { ICustomWorld } from '../support/world'; +import { Given, When, Then } from '@cucumber/cucumber'; +import { config } from '../support/config'; +import { expect } from '@playwright/test'; +import { CommonPage } from '../pages/common.page'; + +Given('the user is on the homepage', async function (this: ICustomWorld) { + const commonPage = new CommonPage(this.page!); + + await commonPage.goto(); +}); + +When( + 'the user clicks the {string} navbar link', + async function (this: ICustomWorld, navbarLinkName: string) { + const commonPage = new CommonPage(this.page!); + + await commonPage.clickNavbarLink(navbarLinkName); + } +); + +Then( + 'the user is on the {string} page', + async function (this: ICustomWorld, pageHeadingText: string) { + const commonPage = new CommonPage(this.page!); + + await expect( + commonPage.pageHeading.filter({ hasText: pageHeadingText }) + ).toHaveText('Pilots'); + } +); diff --git a/tests/e2e/steps/pilots.steps.ts b/tests/e2e/steps/pilots.steps.ts new file mode 100644 index 0000000..2809c8f --- /dev/null +++ b/tests/e2e/steps/pilots.steps.ts @@ -0,0 +1,35 @@ +import { ICustomWorld } from '../support/world'; +import { Given, Then, When } from '@cucumber/cucumber'; +import { config } from '../support/config'; +import { expect } from '@playwright/test'; +import { PilotsPage } from '../pages/pilots.page'; + +When('the user clicks the New button', async function (this: ICustomWorld) { + const pilotsPage = new PilotsPage(this.page!); + + await pilotsPage.clickNewButton(); +}); + +When( + 'the user clicks the pilot drawer cancel button', + async function (this: ICustomWorld) { + const pilotsPage = new PilotsPage(this.page!); + + await pilotsPage.clickPilotDrawerCancelButton(); + } +); + +Then('the pilot drawer is visible', async function (this: ICustomWorld) { + const pilotsPage = new PilotsPage(this.page!); + + await expect(pilotsPage.pilotDrawer).toBeVisible(); +}); + +Then( + 'the pilot drawer is no longer visible', + async function (this: ICustomWorld) { + const pilotsPage = new PilotsPage(this.page!); + + await expect(pilotsPage.pilotDrawer).not.toBeVisible(); + } +); diff --git a/tests/e2e/support/auth/read.json b/tests/e2e/support/auth/read.json new file mode 100644 index 0000000..c2f5309 --- /dev/null +++ b/tests/e2e/support/auth/read.json @@ -0,0 +1,195 @@ +{ + "cookies": [ + { + "name": "esctx-ljf1P4LvjbI", + "value": "AQABCQEAAADnfolhJpSnRYB1SVj-Hgd8TWnAti-t1CIVyn4HTaxc2XQAG6lqgm5UGG9zZ6aTsn3KL3KwVvwPlDyWdHoTqciPQEvzdolOwb7gWVPqdWfUL0VVLPvSrH450zcVBA-UL8YPFdtxw21bwn-SFvQXtTs8uvR6GGJsJfTlqzxx8Kvp6yAA", + "domain": ".login.microsoftonline.com", + "path": "/", + "expires": 1717034520.24429, + "httpOnly": true, + "secure": true, + "sameSite": "None" + }, + { + "name": "x-ms-gateway-slice", + "value": "estsfd", + "domain": "login.microsoftonline.com", + "path": "/", + "expires": -1, + "httpOnly": true, + "secure": true, + "sameSite": "None" + }, + { + "name": "stsservicecookie", + "value": "estsfd", + "domain": "login.microsoftonline.com", + "path": "/", + "expires": -1, + "httpOnly": true, + "secure": true, + "sameSite": "None" + }, + { + "name": "AADSSO", + "value": "NA|NoExtension", + "domain": ".login.microsoftonline.com", + "path": "/", + "expires": -1, + "httpOnly": false, + "secure": true, + "sameSite": "None" + }, + { + "name": "SSOCOOKIEPULLED", + "value": "1", + "domain": "login.microsoftonline.com", + "path": "/", + "expires": 1717033079, + "httpOnly": false, + "secure": true, + "sameSite": "None" + }, + { + "name": "esctx-WlUBojxe7EE", + "value": "AQABCQEAAADnfolhJpSnRYB1SVj-Hgd8LQYOKD7XbJ28P6Z_MV7kLlohBtx-jqFtxm_SSIng5cJy9uUflVqhkPSmacEheabIyuIGzST_c33rBXi0S8xgC41e-Zu2fhCFEnqcqRL87nj_cBqblMB2kNThZ7M-9uqC8I7WJxdwByo3fVKFr8_OEiAA", + "domain": ".login.microsoftonline.com", + "path": "/", + "expires": 1717034519.611161, + "httpOnly": true, + "secure": true, + "sameSite": "None" + }, + { + "name": "brcap", + "value": "0", + "domain": ".login.microsoftonline.com", + "path": "/", + "expires": 1750729019, + "httpOnly": false, + "secure": true, + "sameSite": "None" + }, + { + "name": "wlidperf", + "value": "FR=L&ST=1717033036323", + "domain": ".microsoftonline.com", + "path": "/", + "expires": 1750729036, + "httpOnly": false, + "secure": true, + "sameSite": "None" + }, + { + "name": "ESTSAUTHLIGHT", + "value": "+c9e68190-019f-41a9-bcb2-a342d2ffaca4", + "domain": "login.microsoftonline.com", + "path": "/", + "expires": -1, + "httpOnly": false, + "secure": true, + "sameSite": "None" + }, + { + "name": "esctx", + "value": "PAQABBwEAAADnfolhJpSnRYB1SVj-Hgd8UIN4Cdn7PYdlVvq1XBRR5XuuP5PJGrywv6VoauNOofrWVKbZoTGJc07rARSTQOfTgrLsS2bA5gI13qGJeVme3n4_qnUfhU_nGkweMbheT2pwidKT_uXRP6WxWXwpyEjTRN_k2AEmQCKrWnARm0MyO8hqZfMWpjSu6-6HdA3PxGsgAA", + "domain": ".login.microsoftonline.com", + "path": "/", + "expires": -1, + "httpOnly": true, + "secure": true, + "sameSite": "None" + }, + { + "name": "esctx-pQvAYCeysek", + "value": "AQABCQEAAADnfolhJpSnRYB1SVj-Hgd8H2-WoEzYDEcBbs3HMkOHNUVTpjEcCLiaIoUbGNA3uWRTjdkf1aQUbpLE4ku2AIEtnsRcRChVNFaF5Mfa-iPpFesrUdqaL0V9U-484-1jVy3HwpNH4bwpH-aoB1KI4xAxeJAdujqZqe69goLiNrZt4iAA", + "domain": ".login.microsoftonline.com", + "path": "/", + "expires": 1717034537.496481, + "httpOnly": true, + "secure": true, + "sameSite": "None" + }, + { + "name": "uaid", + "value": "06fe72e1d1ae4a8bad7e6014202a3913", + "domain": ".login.live.com", + "path": "/", + "expires": -1, + "httpOnly": true, + "secure": true, + "sameSite": "None" + }, + { + "name": "MSPRequ", + "value": "id=N<=1717033036&co=0", + "domain": ".login.live.com", + "path": "/", + "expires": -1, + "httpOnly": true, + "secure": true, + "sameSite": "None" + }, + { + "name": "ESTSAUTHPERSISTENT", + "value": "0.AXcALmUjDxVLD0KZHj1vx2mjHUUqVtMNBZpPuu0El8cVaSR3AAA.AgABFwQAAADnfolhJpSnRYB1SVj-Hgd8AgDs_wUA9P-YEY-b7d127C-cvQuXU-okGFV6Bl9_A_yxThodV0oCny0S92cxFRr1fkk6N6QxE8_B2DNQZ4U8tyDbYn25M3cKuH2KXqo0M601DBzIDkNvnyQN35xU-G9Yh8U1HkhnjOSeII2fZBk56-1tZrV-ivzjIeQeedOs_04FtjfB9G6pub-JTDlx8NCOK-3T56A39cbO6f3uighR6wItEuul1ArYlhAIhxf1LgjoPKXbsrhrg2whlksnMNgnylWLRvR24QDiqH6i7Pm6K-2Czxnaq4M2mf1za-vtoR1gTEVDI12njnfTSSroDd8IpLB89WY7_O1uhTThswHL81caYLd0B6K-UmawPY0HH9XxjeB3fzUyobTURBDyv8Kl6_WHKuOrH8f2GW9JqwZZr0sXWZKfhmtqy7El19R6vnigFtOo0wUL8e3SSZV3tTB3fis31cjgGQ-VYqiJqPW90cf3pHgTf-iRDGwCOp2sc93T51ZOhrqSxHK2zSK_iX70a3QR-D9YYR7Inqi11LFWuNxnCOq9TgC9WSgRe-4vhWTXfGO2DB7tJlQuplwiNBq9-Md5X579l1FD", + "domain": ".login.microsoftonline.com", + "path": "/", + "expires": 1724809039.632935, + "httpOnly": true, + "secure": true, + "sameSite": "None" + }, + { + "name": "ESTSAUTH", + "value": "0.AXcALmUjDxVLD0KZHj1vx2mjHUUqVtMNBZpPuu0El8cVaSR3AAA.AgABFwQAAADnfolhJpSnRYB1SVj-Hgd8AgDs_wUA9P9PQzpL9ewclx9R8lP7jVbeAYG8GtIZaMY3fpJb6tViHgrt2i4T2Hw9XKr-tVg68HsAONh9126lpQ", + "domain": ".login.microsoftonline.com", + "path": "/", + "expires": -1, + "httpOnly": true, + "secure": true, + "sameSite": "None" + }, + { + "name": "buid", + "value": "0.AXcALmUjDxVLD0KZHj1vx2mjHUUqVtMNBZpPuu0El8cVaSR3AAA.AQABGgEAAADnfolhJpSnRYB1SVj-Hgd8nPNt4hKw4Sbl4pz8ODy7iASMy5l3Cp5niRXWyO2N-GFUVcvftqEhy9NqLvt9tsb26JY2wkqr0hQIYf3akDIepL9GuczwHlQN61odPfQJphiCxcy6ZJ_ybgeNCBsKeAlF1zkRYyfuJioWYEFyAXviXSkKJBqxbxbaD-yHhsPLoDIgAA", + "domain": "login.microsoftonline.com", + "path": "/", + "expires": 1719625039.633177, + "httpOnly": true, + "secure": true, + "sameSite": "None" + }, + { + "name": "CCState", + "value": "RWhJS0VONG0zVXQ4VFU1SnRsMWZra1QySldNPQ==", + "domain": ".login.microsoftonline.com", + "path": "/", + "expires": 1717897039.63325, + "httpOnly": true, + "secure": true, + "sameSite": "None" + }, + { + "name": "SignInStateCookie", + "value": "CAgABFgIAAADnfolhJpSnRYB1SVj-Hgd8AgDs_wUA9P_6MAoUQd6gAgbrnuM4I6vxj-Uv7XvCG4rE_U1mJU2DFokdMOEJCap5Hq62skJPAvoUS80HVkDr9pmbkWQohDcrv2jfkp2JRcmBs2BoKhDV5Nci-0h9AbnA6micsCMZxWXlnXbfVEnmyF2qiYY0zSJ5PAK9f6rH9OG5XBmJb-QxB8WY3Rdx990nu_ZYgfTtz3H4oRIgvajVUtBwrZwvLCUgpLIWe45HHA7cHcKZfiaRTMjTlmfhYx5T-KCaJLDWqVuVuQ", + "domain": ".login.microsoftonline.com", + "path": "/", + "expires": -1, + "httpOnly": true, + "secure": true, + "sameSite": "None" + }, + { + "name": "fpc", + "value": "Al_0vK2yLy9BsxW01vSqMjdYBhOdAQAAADvP6d0OAAAAlQhyDwEAAABLz-ndDgAAAGjYt1sBAAAATs_p3Q4AAAA", + "domain": "login.microsoftonline.com", + "path": "/", + "expires": 1719625039.633357, + "httpOnly": true, + "secure": true, + "sameSite": "None" + } + ], + "origins": [] +} diff --git a/tests/e2e/support/auth/write.json b/tests/e2e/support/auth/write.json new file mode 100644 index 0000000..fd8b60c --- /dev/null +++ b/tests/e2e/support/auth/write.json @@ -0,0 +1,245 @@ +{ + "cookies": [ + { + "name": "esctx-lZpsH7K0xs", + "value": "AQABCQEAAADnfolhJpSnRYB1SVj-Hgd8hZmykvokkKTJopdXhTSHymz1Q-9QXLZPVr3oBddbWQikcfHT9lQCtrCqzwlbDIMo_8YdqnVlLsd4q64cWWA8Ei_asi3Fg6a8RqNpHngAvysdiKxpsZ40BCiBtZbPVBuvMYCr_L29uPTRNdnXqZdWEiAA", + "domain": ".login.microsoftonline.com", + "path": "/", + "expires": 1717034316.401691, + "httpOnly": true, + "secure": true, + "sameSite": "None" + }, + { + "name": "x-ms-gateway-slice", + "value": "estsfd", + "domain": "login.microsoftonline.com", + "path": "/", + "expires": -1, + "httpOnly": true, + "secure": true, + "sameSite": "None" + }, + { + "name": "stsservicecookie", + "value": "estsfd", + "domain": "login.microsoftonline.com", + "path": "/", + "expires": -1, + "httpOnly": true, + "secure": true, + "sameSite": "None" + }, + { + "name": "AADSSO", + "value": "NA|NoExtension", + "domain": ".login.microsoftonline.com", + "path": "/", + "expires": -1, + "httpOnly": false, + "secure": true, + "sameSite": "None" + }, + { + "name": "SSOCOOKIEPULLED", + "value": "1", + "domain": "login.microsoftonline.com", + "path": "/", + "expires": 1717032875, + "httpOnly": false, + "secure": true, + "sameSite": "None" + }, + { + "name": "esctx-LHb5kGh6RUU", + "value": "AQABCQEAAADnfolhJpSnRYB1SVj-Hgd8o01qTziHeo5QXKa1lRZ8fAdaDGwf_s2N0OA44ej2RxDN4PS35C1XD9BBgnjTYj2m4KEQKStlrarsNx1V_AWWV1rXfLKuKQl53FTUHDkOnTAGps2pEOMqONOK8jkjcZAr4QdL-26MaLHMQqcWxV20tyAA", + "domain": ".login.microsoftonline.com", + "path": "/", + "expires": 1717034316.704943, + "httpOnly": true, + "secure": true, + "sameSite": "None" + }, + { + "name": "MicrosoftApplicationsTelemetryDeviceId", + "value": "920534cf-892b-4d4e-ba72-c841515afb37", + "domain": "login.microsoftonline.com", + "path": "/", + "expires": 1748568849.524212, + "httpOnly": false, + "secure": true, + "sameSite": "None" + }, + { + "name": "brcap", + "value": "0", + "domain": ".login.microsoftonline.com", + "path": "/", + "expires": 1750728816, + "httpOnly": false, + "secure": true, + "sameSite": "None" + }, + { + "name": "MC1", + "value": "GUID=dbb77480c2ff41e8a937520a317880e7&HASH=dbb7&LV=202405&V=4&LU=1717032821181", + "domain": ".microsoft.com", + "path": "/", + "expires": 1748568822.161277, + "httpOnly": false, + "secure": true, + "sameSite": "None" + }, + { + "name": "MS0", + "value": "31c8801b79e34bb983ebefbfda3ab931", + "domain": ".microsoft.com", + "path": "/", + "expires": 1717034622.161473, + "httpOnly": false, + "secure": true, + "sameSite": "None" + }, + { + "name": "MSFPC", + "value": "GUID=dbb77480c2ff41e8a937520a317880e7&HASH=dbb7&LV=202405&V=4&LU=1717032821181", + "domain": "login.microsoftonline.com", + "path": "/", + "expires": 1748568821.164214, + "httpOnly": false, + "secure": true, + "sameSite": "None" + }, + { + "name": "wlidperf", + "value": "FR=L&ST=1717032849241", + "domain": ".microsoftonline.com", + "path": "/", + "expires": 1750728849, + "httpOnly": false, + "secure": true, + "sameSite": "None" + }, + { + "name": "ESTSAUTHLIGHT", + "value": "+05efde93-b4f6-4ede-8c5c-fe47f4c5d7e5", + "domain": "login.microsoftonline.com", + "path": "/", + "expires": -1, + "httpOnly": false, + "secure": true, + "sameSite": "None" + }, + { + "name": "esctx", + "value": "PAQABBwEAAADnfolhJpSnRYB1SVj-Hgd8rrydzYKF9brJW_jQBufFdZx6ZGVeX4jXCGo6RNJS8TJWeO0kToxXJ0zDFWPvF2a2pJ3zN-NNFvr4wY1gTjIk6DrZCEnUrh8k7S7_XOVAibVHnqa-WBQqbzU5SlPiYiwPDSSIiECjEnLPhABvlbOdDU7zufgmJONNA7V4VBVGG5wgAA", + "domain": ".login.microsoftonline.com", + "path": "/", + "expires": -1, + "httpOnly": true, + "secure": true, + "sameSite": "None" + }, + { + "name": "esctx-60xcpVEzckI", + "value": "AQABCQEAAADnfolhJpSnRYB1SVj-Hgd8DW2ZkuQs5Rjax8TEQwS1kknBdNvzANuWbEd2_Om-37nyCV25djwAyERNOoFMRwJQ9k0NEtpUlFqkt0oeXrTNgHdBp9C-mC5ULKueywLaMjF28yicOKAdugcdKxuv3mgIQbQ2dcEryW1hV1nZARbPlSAA", + "domain": ".login.microsoftonline.com", + "path": "/", + "expires": 1717034350.405847, + "httpOnly": true, + "secure": true, + "sameSite": "None" + }, + { + "name": "uaid", + "value": "81e53585ebea44eea426512649fd69f0", + "domain": ".login.live.com", + "path": "/", + "expires": -1, + "httpOnly": true, + "secure": true, + "sameSite": "None" + }, + { + "name": "MSPRequ", + "value": "id=N<=1717032849&co=0", + "domain": ".login.live.com", + "path": "/", + "expires": -1, + "httpOnly": true, + "secure": true, + "sameSite": "None" + }, + { + "name": "ai_session", + "value": "iwsUpdj0G4S8ibK80pbceM|1717032816832|1717032850210", + "domain": "login.microsoftonline.com", + "path": "/", + "expires": 1717034650, + "httpOnly": false, + "secure": true, + "sameSite": "None" + }, + { + "name": "ESTSAUTHPERSISTENT", + "value": "0.AXcALmUjDxVLD0KZHj1vx2mjHUUqVtMNBZpPuu0El8cVaSR3AAA.AgABFwQAAADnfolhJpSnRYB1SVj-Hgd8AgDs_wUA9P-6GAHRVAPpbKtWmDljdtGF6pqwyoI9PycjNbG-koB1RMEzGuYciKDsQpI7AsY2aChCTNe3-oFSdDUkE3hPuHFdjDITEaF26D2LQ3zguY-oZWE8UGNGcOTt3mjJlRAxtlc9a8fFSsFYPOB72tDvLeJJs-sNAL6X9uSnelQ5PkTpS3ZGsxkoVBMike8p25Nqg0GG9jfjfHxQVxFWElU5w3kCuG-X-9lE5bh04AyuXuZl4-LEP6h9cXIu62VmpoP4aghvD94KsLk5opBB9G6KWw0S48I472wLTlB9KXlr207_Y1tMd3SDfU5du8FR4V8STEJskVACb0rNQKO_RLkmYEtQy-7b5JMTQBJUK4EpmJlg2ZOrAm29RYqH5OrqlRhSLLA6s-oB8e6bUH7IoM11TB2pqZHtiieevcJp6Nx3hZl8YDimmksgV5JGy4LnkgrvDm0Pug7GxfVYI-1OR8AKPfpuQhtK-DQ36uviuxvvst-tCSJkMS6V53gZEqw2zdKColGy1CZiS0c8UvdYix3rRDSnMF2x-tNxilY5QLPF_Gou629yYeMHl4XXgYOqQEkPX1ZA", + "domain": ".login.microsoftonline.com", + "path": "/", + "expires": 1724808853.484568, + "httpOnly": true, + "secure": true, + "sameSite": "None" + }, + { + "name": "ESTSAUTH", + "value": "0.AXcALmUjDxVLD0KZHj1vx2mjHUUqVtMNBZpPuu0El8cVaSR3AAA.AgABFwQAAADnfolhJpSnRYB1SVj-Hgd8AgDs_wUA9P9CE_JHzvX38y1LHqrv7IuyLFwZLcv6kZVF9onOFcyuApDDPaDrNRyS08qyKjnvGcjfNK0IJpKYiA", + "domain": ".login.microsoftonline.com", + "path": "/", + "expires": -1, + "httpOnly": true, + "secure": true, + "sameSite": "None" + }, + { + "name": "buid", + "value": "0.AXcALmUjDxVLD0KZHj1vx2mjHUUqVtMNBZpPuu0El8cVaSR3AAA.AQABGgEAAADnfolhJpSnRYB1SVj-Hgd8IMhpo6W56tEC0yxyzszi2xUdd4MJX_7AgOOuXWmuUZVqXq_i1ievY2R2lCwirhz08eGe82dFwoklNjcUHrPUcMT328XdFAo7oWwwLgvFA-at5ykBxuNOgtKeQtAFgmYypiN_-tDRnfgshJiuZzQF5vAI6Dov48i5vsKT_SGZzlAgAA", + "domain": "login.microsoftonline.com", + "path": "/", + "expires": 1719624853.484812, + "httpOnly": true, + "secure": true, + "sameSite": "None" + }, + { + "name": "CCState", + "value": "RWhJS0VBV0tQY1luNlZKRG42SUlTcjIvbVNZPQ==", + "domain": ".login.microsoftonline.com", + "path": "/", + "expires": 1717896853.484884, + "httpOnly": true, + "secure": true, + "sameSite": "None" + }, + { + "name": "SignInStateCookie", + "value": "CAgABFgIAAADnfolhJpSnRYB1SVj-Hgd8AgDs_wUA9P-plMVcqKu73BJxw7BAuaD9ZeURo12GdfU5mL5g21tUEwqex6EFBSy3_ET0yE1YN-0c7XhlDxSAe2ovqN68Vzidj1dXrUZ7MJtXspF7dVRptpXOkR5r0vTQzWqYlRgJmvpeNZqa_vT6SkFD7ywCMfAnxsSIlzxO3JV42jUzBJweIM0ToApGacyIrLgV_zqZnQmIbGvZPA1SVG40mZWC4pSwLIkhChzs8fqW2o6FaPVPOdsFCdaOywKHzVPF1YuIrWu4q64X", + "domain": ".login.microsoftonline.com", + "path": "/", + "expires": -1, + "httpOnly": true, + "secure": true, + "sameSite": "None" + }, + { + "name": "fpc", + "value": "AjBuUobXQy9MiI9Zk1zksURYBhOdAQAAAG_O6d0OAAAAm23tYAEAAACQzundDgAAAD8IlT4BAAAAk87p3Q4AAAA", + "domain": "login.microsoftonline.com", + "path": "/", + "expires": 1719624853.485045, + "httpOnly": true, + "secure": true, + "sameSite": "None" + } + ], + "origins": [] +} diff --git a/tests/e2e/support/config.ts b/tests/e2e/support/config.ts index d7ef84a..6ee8180 100644 --- a/tests/e2e/support/config.ts +++ b/tests/e2e/support/config.ts @@ -21,7 +21,7 @@ const desktopChrome = devices['Desktop Chrome']; export const config = { browser: process.env.BROWSER || 'chromium', browserOptions, - baseUrl: process.env.BASE_URL || 'http://localhost:3000', + baseUrl: process.env.BASE_URL || 'http://localhost:5173', username: process.env.TEST_USERNAME, password: process.env.TEST_PASSWORD, viewportHeight: process.env.VIEWPORT_HEIGHT || desktopChrome.viewport.height, diff --git a/tests/e2e/support/hooks.ts b/tests/e2e/support/hooks.ts index 9c178a4..0d7d2ea 100644 --- a/tests/e2e/support/hooks.ts +++ b/tests/e2e/support/hooks.ts @@ -22,6 +22,31 @@ import { ITestCaseHookParameter } from '@cucumber/cucumber/lib/support_code_libr import { ensureDir } from 'fs-extra'; const tracesDir = './e2e/results/traces'; +const getStorageState = ( + pickleName: string +): + | string + | { + cookies: { + name: string; + value: string; + domain: string; + path: string; + expires: number; + httpOnly: boolean; + secure: boolean; + sameSite: 'Strict' | 'Lax' | 'None'; + }[]; + origins: { + origin: string; + localStorage: { name: string; value: string }[]; + }[]; + } + | undefined => { + if (pickleName.endsWith('admin')) { + return './auth/write.json'; + } +}; let browser: ChromiumBrowser | FirefoxBrowser | WebKitBrowser; declare global { @@ -58,6 +83,37 @@ Before({ tags: '@debug' }, async function (this: ICustomWorld) { this.debug = true; }); +Before( + { tags: '@noAuth' }, + async function (this: ICustomWorld, { pickle }: ITestCaseHookParameter) { + const viewportSize: ViewportSize = { + height: Number(1080), + width: Number(1920) + }; + + this.startTime = new Date(); + this.testName = pickle.name.replace(/\W/g, '-'); + this.context = await browser.newContext({ + acceptDownloads: true, + viewport: viewportSize, + userAgent: config.userAgent + }); + + await this.context.tracing.start({ + screenshots: true, + snapshots: true + }); + + this.page = await this.context.newPage(); + this.page.on('console', async (msg: ConsoleMessage) => { + if (msg.type() === 'log') { + await this.attach(msg.text()); + } + }); + this.feature = pickle; + } +); + Before(async function (this: ICustomWorld, { pickle }: ITestCaseHookParameter) { const viewportSize: ViewportSize = { height: Number(1080), @@ -67,6 +123,7 @@ Before(async function (this: ICustomWorld, { pickle }: ITestCaseHookParameter) { this.startTime = new Date(); this.testName = pickle.name.replace(/\W/g, '-'); this.context = await browser.newContext({ + storageState: getStorageState(pickle.name), acceptDownloads: true, viewport: viewportSize, userAgent: config.userAgent diff --git a/tests/e2e/support/report.ts b/tests/e2e/support/report.ts index e69de29..47f4f3e 100644 --- a/tests/e2e/support/report.ts +++ b/tests/e2e/support/report.ts @@ -0,0 +1,22 @@ +const report = require('multiple-cucumber-html-reporter'); + +report.generate({ + jsonDir: './e2e/results/report', + reportPath: './e2e/results/report', + metadata: { + platform: { + name: 'ubuntu', + version: 'node 16.20.2' + } + }, + customData: { + title: 'Run info', + data: [ + { label: 'Project', value: 'Banner CDS' }, + { label: 'Release', value: `${process.env.RELEASE_NUMBER}` }, + { label: 'Run ID', value: `${process.env.RUN_ID}` }, + { label: 'Execution Start Time', value: `${process.env.TEST_START}` }, + { label: 'Execution End Time', value: `${process.env.TEST_END}` } + ] + } +}); diff --git a/tests/package.json b/tests/package.json index ce97c5b..0f67af2 100644 --- a/tests/package.json +++ b/tests/package.json @@ -4,7 +4,11 @@ "description": "", "main": "index.js", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" + "e2e": "cucumber-js ./e2e/features/**/*.feature", + "e2e:debug": "PWDEBUG=1 cucumber-js", + "e2e:feature": "cucumber-js", + "e2e:report": "node ./e2e/support/support.js", + "e2e:rerun": "cucumber-js ./e2e/results/@rerun.txt" }, "author": "", "license": "ISC",