diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 00000000..1377d78a --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "$schema": "http://json.schemastore.org/prettierrc", + "extends": "@pega/prettier-config", + "printWidth": 150, + "singleQuote": true, + "trailingComma": "none" +} diff --git a/src/app/_samples/full-portal/top-app-mashup/top-app-mashup.component.html b/src/app/_samples/full-portal/top-app-mashup/top-app-mashup.component.html index e21808a2..717a25fc 100644 --- a/src/app/_samples/full-portal/top-app-mashup/top-app-mashup.component.html +++ b/src/app/_samples/full-portal/top-app-mashup/top-app-mashup.component.html @@ -1,5 +1,5 @@
-
+
Default portal ( {{ defaultPortalName }} ) for current operator is not compatible with SDK.

Please select one of the portals available to the operator's access group:
diff --git a/src/app/_services/server-config.service.ts b/src/app/_services/server-config.service.ts index 5517ccbf..405006d5 100644 --- a/src/app/_services/server-config.service.ts +++ b/src/app/_services/server-config.service.ts @@ -3,7 +3,7 @@ import { Utils } from '../_helpers/utils'; import { endpoints } from '../_services/endpoints'; @Injectable({ - providedIn: 'root', + providedIn: 'root' }) export class ServerConfigService { PCore: any; @@ -130,14 +130,14 @@ export class ServerConfigService { const arExcludedPortals = serverConfig['excludePortals']; let headers = { Authorization: Utils.sdkGetAuthHeader(), - 'Content-Type': 'application/json', + 'Content-Type': 'application/json' }; // Using v1 API here as v2 data_views is not able to access same data page currently. Should move to avoid having this logic to find // a default portal or constellation portal and rather have Constellation JS Engine API just load the default portal - fetch(`${serverUrl}${appAliasPath}${endpoints.API}${endpoints.DATA}/${dataPageName}`, { + fetch(`${serverUrl}${appAliasPath}/${endpoints.API}${endpoints.DATA}/${dataPageName}`, { method: 'GET', - headers, + headers }) .then((response) => { if (response.ok && response.status === 200) { diff --git a/tests/config.js b/tests/config.js index c5e550ee..7c73567e 100644 --- a/tests/config.js +++ b/tests/config.js @@ -1,28 +1,32 @@ // require('lighthouse/lighthouse-core/config/lr-desktop-config.js'); const config = { - baseUrl: "http://localhost:3500/portal", + baseUrl: 'http://localhost:3500/portal', apps: { mediaCo: { rep: { - username: "rep@mediaco", - password: "pega", + username: 'rep@mediaco', + password: 'pega' }, manager: { - username: "manager@mediaco", - password: "pega", + username: 'manager@mediaco', + password: 'pega' }, tech: { - username: "tech@mediaco", - password: "pega", + username: 'tech@mediaco', + password: 'pega' }, + admin: { + username: 'admin@mediaco', + password: 'pega' + } }, digv2: { user: { - username: "user.digv2", - password: "pega", - }, - }, + username: 'user.digv2', + password: 'pega' + } + } }, testsetting: { // Enable network throttling(Default is false) @@ -43,8 +47,8 @@ const config = { width: 1920, height: 1080, headless: true, - devtools: false, - }, + devtools: false + } }; exports.config = config; diff --git a/tests/e2e/MediaCo/portal.spec.js b/tests/e2e/MediaCo/portal.spec.js index 7caf5be4..9fca502c 100644 --- a/tests/e2e/MediaCo/portal.spec.js +++ b/tests/e2e/MediaCo/portal.spec.js @@ -1,21 +1,17 @@ -const path = require("path"); -const { test, expect } = require("@playwright/test"); -const config = require("../../config"); -const common = require("../../common"); -const endpoints = require("../../../sdk-config.json"); +const path = require('path'); +const { test, expect } = require('@playwright/test'); +const config = require('../../config'); +const common = require('../../common'); +const endpoints = require('../../../sdk-config.json'); test.beforeEach(async ({ page }) => { await page.setViewportSize({ width: 1920, height: 1080 }); - await page.goto("http://localhost:3500/portal", { waitUntil: "networkidle" }); + await page.goto('http://localhost:3500/portal', { waitUntil: 'networkidle' }); }); let caseID; -test.describe("E2E test", () => { - test("should login, create and send for discount", async ({ page }) => { - await common.Login( - config.config.apps.mediaCo.rep.username, - config.config.apps.mediaCo.rep.password, - page - ); +test.describe('E2E test', () => { + test('should login, create and send for discount', async ({ page }) => { + await common.Login(config.config.apps.mediaCo.rep.username, config.config.apps.mediaCo.rep.password, page); const announcementBanner = page.locator('h2:has-text("Announcements")'); await expect(announcementBanner).toBeVisible(); @@ -23,147 +19,105 @@ test.describe("E2E test", () => { const worklist = page.locator('div[id="worklist"]:has-text("My Worklist")'); await expect(worklist).toBeVisible(); - const navbar = page.locator("app-navbar"); + const navbar = page.locator('app-navbar'); await navbar.locator('div[class="psdk-appshell-nav"]').hover(); const createCase = page.locator('mat-list-item[id="create-case-button"]'); await createCase.click(); - const newServiceCase = await page.locator( - 'mat-list-item[id="case-list-item"] > span:has-text("New Service")' - ); + const newServiceCase = await page.locator('mat-list-item[id="case-list-item"] > span:has-text("New Service")'); await newServiceCase.click(); - const firstNameInput = page.locator( - 'input[data-test-id="BC910F8BDF70F29374F496F05BE0330C"]' - ); + const firstNameInput = page.locator('input[data-test-id="BC910F8BDF70F29374F496F05BE0330C"]'); await firstNameInput.click(); - await firstNameInput.type("John"); + await firstNameInput.type('John'); - const middleNameInput = page.locator( - 'input[data-test-id="D3691D297D95C48EF1A2B7D6523EF3F0"]' - ); + const middleNameInput = page.locator('input[data-test-id="D3691D297D95C48EF1A2B7D6523EF3F0"]'); await middleNameInput.click(); - await middleNameInput.type(""); + await middleNameInput.type(''); - const lastNameInput = page.locator( - 'input[data-test-id="77587239BF4C54EA493C7033E1DBF636"]' - ); + const lastNameInput = page.locator('input[data-test-id="77587239BF4C54EA493C7033E1DBF636"]'); await lastNameInput.click(); - await lastNameInput.type("Doe"); + await lastNameInput.type('Doe'); - const suffix = page.locator( - 'input[data-test-id="56E6DDD1CB6CEC596B433440DFB21C17"]' - ); + const suffix = page.locator('input[data-test-id="56E6DDD1CB6CEC596B433440DFB21C17"]'); await suffix.click(); await page.locator('mat-option:has-text("Jr")').click(); - const emailInput = page.locator( - 'input[data-test-id="CE8AE9DA5B7CD6C3DF2929543A9AF92D"]' - ); + const emailInput = page.locator('input[data-test-id="CE8AE9DA5B7CD6C3DF2929543A9AF92D"]'); await emailInput.click(); - await emailInput.type("john@doe.com"); + await emailInput.type('john@doe.com'); - const serviceDateInput = page.locator( - 'input[data-test-id="E0BA356AE552ACD4326D51E61F4279AC"]' - ); + const serviceDateInput = page.locator('input[data-test-id="E0BA356AE552ACD4326D51E61F4279AC"]'); await serviceDateInput.click(); const futureDate = common.getFutureDate(); await serviceDateInput.type(futureDate); await page.locator('button:has-text("submit")').click(); - const streetInput = page.locator( - 'input[data-test-id="D61EBDD8A0C0CD57C22455E9F0918C65"]' - ); + const streetInput = page.locator('input[data-test-id="D61EBDD8A0C0CD57C22455E9F0918C65"]'); await streetInput.click(); - await streetInput.type("Main St"); + await streetInput.type('Main St'); - const cityInput = page.locator( - 'input[data-test-id="57D056ED0984166336B7879C2AF3657F"]' - ); + const cityInput = page.locator('input[data-test-id="57D056ED0984166336B7879C2AF3657F"]'); await cityInput.click(); - await cityInput.type("Cambridge"); + await cityInput.type('Cambridge'); caseID = await page.locator('div[id="caseId"]').textContent(); - const state = page.locator( - 'mat-select[data-test-id="46A2A41CC6E552044816A2D04634545D"]' - ); + const state = page.locator('mat-select[data-test-id="46A2A41CC6E552044816A2D04634545D"]'); await state.click(); await page.locator('mat-option:has-text("MA")').click(); - const postalCodeInput = page.locator( - 'input[data-test-id="572ED696F21038E6CC6C86BB272A3222"]' - ); + const postalCodeInput = page.locator('input[data-test-id="572ED696F21038E6CC6C86BB272A3222"]'); await postalCodeInput.click(); - await postalCodeInput.type("02142"); + await postalCodeInput.type('02142'); - const phone = page.locator( - 'ngx-mat-intl-tel-input[data-test-id="1F8261D17452A959E013666C5DF45E07"]' - ); - const countrySelector = phone.locator("button.country-selector"); + const phone = page.locator('ngx-mat-intl-tel-input[data-test-id="1F8261D17452A959E013666C5DF45E07"]'); + const countrySelector = phone.locator('button.country-selector'); await countrySelector.click(); - await page.locator("div.flag.US >> nth=0").click(); - await phone.locator('input[type="tel"]').type("(201) 555-0123"); + await page.locator('div.flag.US >> nth=0').click(); + await phone.locator('input[type="tel"]').type('(201) 555-0123'); await page.locator('button:has-text("submit")').click(); - const tvPackage = page.locator( - 'mat-checkbox[data-test-id="0B3244CEB2CE9879260EB560BD7A811E"]' - ); + const tvPackage = page.locator('mat-checkbox[data-test-id="0B3244CEB2CE9879260EB560BD7A811E"]'); await tvPackage.click(); - await page.locator("text=Premium").click(); + await page.locator('text=Premium').click(); - const internetPackage = page.locator( - 'mat-checkbox[data-test-id="C05A1E5DECC321D9792E9A9E15184BE5"]' - ); + const internetPackage = page.locator('mat-checkbox[data-test-id="C05A1E5DECC321D9792E9A9E15184BE5"]'); await internetPackage.click(); - await page.locator("text=300 Mbps").click(); + await page.locator('text=300 Mbps').click(); - const phonePackage = page.locator( - 'mat-checkbox[data-test-id="7CF3F86883596E49D8D7298CC5B928A2"]' - ); + const phonePackage = page.locator('mat-checkbox[data-test-id="7CF3F86883596E49D8D7298CC5B928A2"]'); await phonePackage.click(); - await page.locator("text=International Full").click(); + await page.locator('text=International Full').click(); await page.locator('button:has-text("submit")').click(); - const otherNotes = page.locator( - 'textarea[data-test-id="F4C6F851B00D5518BF888815DE279ABA"]' - ); + const otherNotes = page.locator('textarea[data-test-id="F4C6F851B00D5518BF888815DE279ABA"]'); await otherNotes.click(); - await otherNotes.type("Thanks for the service!"); + await otherNotes.type('Thanks for the service!'); - const sendToMgr = page.locator( - 'mat-checkbox[data-test-id="C3B43E79AEC2D689F0CF97BD6AFB7DC4"]' - ); + const sendToMgr = page.locator('mat-checkbox[data-test-id="C3B43E79AEC2D689F0CF97BD6AFB7DC4"]'); await sendToMgr.click(); - const currentCaseID = await page - .locator('div[id="current-caseID"]') - .textContent(); - const filePath = path.join(__dirname, "../../../src/assets/cableinfo.png"); - const attachInputId = await page - .locator('div[id="attachment-container"] >> input') - .getAttribute("id"); + const currentCaseID = await page.locator('div[id="current-caseID"]').textContent(); + const filePath = path.join(__dirname, '../../../src/assets/cableinfo.png'); + const attachInputId = await page.locator('div[id="attachment-container"] >> input').getAttribute('id'); await page.setInputFiles(`#${attachInputId}`, filePath); - const PCoreVersion = await page.evaluate(() => - window.PCore.getPCoreVersion() - ); + const PCoreVersion = await page.evaluate(() => window.PCore.getPCoreVersion()); await Promise.all([ page.waitForResponse( `${endpoints.serverConfig.infinityRestServerUrl}${ - endpoints.serverConfig.appAlias - ? `/app/${endpoints.serverConfig.appAlias}` - : "" + endpoints.serverConfig.appAlias ? `/app/${endpoints.serverConfig.appAlias}` : '' }/api/application/v2/attachments/upload` - ), + ) ]); await page.locator('button:has-text("submit")').click(); @@ -171,36 +125,20 @@ test.describe("E2E test", () => { await Promise.all([ page.waitForResponse( `${endpoints.serverConfig.infinityRestServerUrl}${ - endpoints.serverConfig.appAlias - ? `/app/${endpoints.serverConfig.appAlias}` - : "" - }/api/application/v2/cases/${currentCaseID}/attachments${ - PCoreVersion.includes("8.23") ? "?includeThumbnail=false" : "" - }` - ), + endpoints.serverConfig.appAlias ? `/app/${endpoints.serverConfig.appAlias}` : '' + }/api/application/v2/cases/${currentCaseID}/attachments${PCoreVersion.includes('8.23') ? '?includeThumbnail=false' : ''}` + ) ]); - const attachmentCount = await page - .locator('div[id="attachments-count"]') - .textContent(); + const attachmentCount = await page.locator('div[id="attachments-count"]').textContent(); await expect(Number(attachmentCount)).toBeGreaterThan(0); // Click text=Thank you! The next step in this case has been routed appropriately. - await page - .locator( - "text=Thank you! The next step in this case has been routed appropriately." - ) - .click(); + await page.locator('text=Thank you! The next step in this case has been routed appropriately.').click(); }, 10000); - test("should enter a discount value($) and send to tech", async ({ - page, - }) => { - await common.Login( - config.config.apps.mediaCo.manager.username, - config.config.apps.mediaCo.manager.password, - page - ); + test('should enter a discount value($) and send to tech', async ({ page }) => { + await common.Login(config.config.apps.mediaCo.manager.username, config.config.apps.mediaCo.manager.password, page); const announcementBanner = page.locator('h2:has-text("Announcements")'); await expect(announcementBanner).toBeVisible(); @@ -211,29 +149,17 @@ test.describe("E2E test", () => { const caseButton = page.locator(`span:has-text('${caseID}')`); await caseButton.click(); - const mgrDiscountInput = page.locator( - 'input[data-test-id="D69ECA63310344EDB0D0F9881CF9B662"]' - ); + const mgrDiscountInput = page.locator('input[data-test-id="D69ECA63310344EDB0D0F9881CF9B662"]'); - await mgrDiscountInput.type("20"); + await mgrDiscountInput.type('20'); await page.locator('button:has-text("submit")').click(); - await page - .locator( - "text=Thank you! The next step in this case has been routed appropriately." - ) - .click(); + await page.locator('text=Thank you! The next step in this case has been routed appropriately.').click(); }, 10000); - test("should modify(if required) the actual services/packages to be installed and resolve the case", async ({ - page, - }) => { - await common.Login( - config.config.apps.mediaCo.tech.username, - config.config.apps.mediaCo.tech.password, - page - ); + test('should modify(if required) the actual services/packages to be installed and resolve the case', async ({ page }) => { + await common.Login(config.config.apps.mediaCo.tech.username, config.config.apps.mediaCo.tech.password, page); const announcementBanner = page.locator('h2:has-text("Announcements")'); await expect(announcementBanner).toBeVisible(); @@ -244,19 +170,29 @@ test.describe("E2E test", () => { const caseButton = page.locator(`span:has-text('${caseID}')`); await caseButton.click(); - const tvConnected = page.locator( - 'mat-checkbox[data-test-id="EEF2AA5E42FD9F0FB0A44EA0B2D52921"]' - ); + const tvConnected = page.locator('mat-checkbox[data-test-id="EEF2AA5E42FD9F0FB0A44EA0B2D52921"]'); await tvConnected.click(); - const internetConnected = page.locator( - 'mat-checkbox[data-test-id="C43FA5D99B9290C0885E058F641CAB8D"]' - ); + const internetConnected = page.locator('mat-checkbox[data-test-id="C43FA5D99B9290C0885E058F641CAB8D"]'); await internetConnected.click(); await page.locator('button:has-text("submit")').click(); - await page.locator("text=RESOLVED-COMPLETED").click(); + await page.locator('text=RESOLVED-COMPLETED').click(); + }, 10000); + + test('should show available portals for admin login', async ({ page }) => { + await common.Login(config.config.apps.mediaCo.admin.username, config.config.apps.mediaCo.admin.password, page); + + const defaultPortalErrorMessage = page.locator('div[data-test-id="defaultPortalErrorMessage"]'); + await expect(defaultPortalErrorMessage).toBeVisible(); + + const mediaCoBtn = page.locator('div[class="portal-list-item"]:has-text("MediaCo")'); + await expect(mediaCoBtn).toBeVisible(); + await mediaCoBtn.click(); + + const announcementBanner = page.locator('h2:has-text("Announcements")'); + await expect(announcementBanner).toBeVisible(); }, 10000); });