diff --git a/package-lock.json b/package-lock.json index b4658c648..901e06d58 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,23 +1,23 @@ { "name": "react-sdk", - "version": "23.1.10", + "version": "24.1.10", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "react-sdk", - "version": "23.1.10", + "version": "24.1.10", "dependencies": { "@date-io/dayjs": "^1.3.13", "@material-ui/core": "^4.12.3", "@material-ui/icons": "^4.11.2", "@material-ui/lab": "^4.0.0-alpha.60", "@material-ui/pickers": "^3.3.10", - "@pega/auth": "^0.2.2", + "@pega/auth": "^0.2.10", "@pega/cosmos-react-condition-builder": "^4.2.0", "@pega/cosmos-react-core": "^4.2.0", "@pega/cosmos-react-work": "^4.2.0", - "@pega/react-sdk-components": "~23.1.11", + "@pega/react-sdk-components": "~0.24.1", "@storybook/react-webpack5": "^7.6.7", "@tinymce/tinymce-react": "^4.3.2", "@types/styled-components": "^5.1.34", @@ -32,6 +32,7 @@ "react": "^17.0.2", "react-datepicker": "^4.25.0", "react-dom": "^17.0.2", + "react-number-format": "^5.4.0", "react-redux": "^7.2.4", "react-router-dom": "^5.3.4", "styled-components": "^6.1.8", @@ -44,13 +45,13 @@ "@kooneko/livereload-webpack-plugin": "^1.2.1", "@loadable/component": "^5.16.3", "@pega/configs": "^0.6.0", - "@pega/constellationjs": "~23.1.1", + "@pega/constellationjs": "24.1.0-test-20240610", "@pega/cspell-config": "^0.7.1", - "@pega/dx-component-builder-sdk": "~23.1.14", + "@pega/dx-component-builder-sdk": "~0.24.1", "@pega/eslint-config": "^0.7.1", "@pega/pcore-pconnect-typedefs": "~2.1.1", "@pega/prettier-config": "^0.6.0", - "@pega/react-sdk-overrides": "~23.1.11", + "@pega/react-sdk-overrides": "~0.24.1", "@pega/stylelint-config": "^0.7.1", "@pega/tsconfig": "^0.7.1", "@playwright/test": "^1.40.1", @@ -5390,9 +5391,9 @@ } }, "node_modules/@pega/auth": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@pega/auth/-/auth-0.2.2.tgz", - "integrity": "sha512-w8owvOqY/MV+spYHoR2v3gPpljQEPmbQ9QZcMqt4+OCGvBfnWIx5U6L3yyl1XqaYX3otRQ8WDxK2ou410wzdrQ==", + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/@pega/auth/-/auth-0.2.10.tgz", + "integrity": "sha512-yNWw1jPY6xH3wSy0IWmZfieXq5dMee5e8I0naxp0uNs3sXjE9Hzunftjl5G1Oy/OuylKSJ5srNZtk+wW7uAimg==", "dependencies": { "node-fetch": "^3.2.10", "open": "^8.4.2" @@ -5761,9 +5762,9 @@ "dev": true }, "node_modules/@pega/constellationjs": { - "version": "23.1.1", - "resolved": "https://registry.npmjs.org/@pega/constellationjs/-/constellationjs-23.1.1.tgz", - "integrity": "sha512-8exCJ8xT03iyQiJOhn7Ok1HmN3k7UZ72Z5FbOSVj3dtwFpuSH0DDsk4AT5hyKuqzNpYGjY9k1Mg2hyr4WA6kew==", + "version": "24.1.0-test-20240610", + "resolved": "https://registry.npmjs.org/@pega/constellationjs/-/constellationjs-24.1.0-test-20240610.tgz", + "integrity": "sha512-qolQyfMi1C0bI8YC5Ede7OLLThBD51KspO4wFbhgQ77NtBGPVCS72WziQiwLFHSiIL05yY2oeWL85JeVGpPbuQ==", "dev": true }, "node_modules/@pega/cosmos-react-condition-builder": { @@ -5995,9 +5996,9 @@ } }, "node_modules/@pega/dx-component-builder-sdk": { - "version": "23.1.14", - "resolved": "https://registry.npmjs.org/@pega/dx-component-builder-sdk/-/dx-component-builder-sdk-23.1.14.tgz", - "integrity": "sha512-2ogAd2dZ95vfRacGnmgiLJxsyoolubeORNpwpRjNidEBbEOhIkICgkB/QYbF0WI1puWO4Ean6M6sAY3wUtWtWA==", + "version": "0.24.1", + "resolved": "https://registry.npmjs.org/@pega/dx-component-builder-sdk/-/dx-component-builder-sdk-0.24.1.tgz", + "integrity": "sha512-HlMj/AHXjNNG7H3PKY9mtejLLbVG0NpV61ibSa89PjodRJ4eojXDOuRbWmKROAqluU9D8X4l+rDuzRBUe0YAqg==", "dev": true, "dependencies": { "@babel/core": "^7.23.7", @@ -6304,14 +6305,14 @@ } }, "node_modules/@pega/react-sdk-components": { - "version": "23.1.11", - "resolved": "https://registry.npmjs.org/@pega/react-sdk-components/-/react-sdk-components-23.1.11.tgz", - "integrity": "sha512-5IIMoNHTbaY1G3+y1pUlkLTRy2I42Qf3XjeFHDNcY383+kXymeaSyKc3mOireBAwsJz0Re8Ik92q4K6JRfx4xw==" + "version": "0.24.1", + "resolved": "https://registry.npmjs.org/@pega/react-sdk-components/-/react-sdk-components-0.24.1.tgz", + "integrity": "sha512-WLRwsWnbqn9L7YK4SW/2wrzY+uIHgPo25UlWFtcdFoM2GCs9yP9WkPJuopZaD6SaeQe9WwcbTNZdjnZ26OiKwg==" }, "node_modules/@pega/react-sdk-overrides": { - "version": "23.1.11", - "resolved": "https://registry.npmjs.org/@pega/react-sdk-overrides/-/react-sdk-overrides-23.1.11.tgz", - "integrity": "sha512-nuzWGr6Q/zJgIJ7mxUhObGY+D1FhmGB426qafCqy7F5GvkEfGPbScw/e8Vs2i2MqdtUA5qv45mxev+oDN/WkVw==", + "version": "0.24.1", + "resolved": "https://registry.npmjs.org/@pega/react-sdk-overrides/-/react-sdk-overrides-0.24.1.tgz", + "integrity": "sha512-4f3mIdS4BMM3xH45IENkADwsTQJGHBkGPS5vLIhhw4VNX6M7zp6IDeHvM+Xac2c6gl2XuJ2LQ3X3HGPfYbeWAw==", "dev": true }, "node_modules/@pega/stylelint-config": { @@ -32018,6 +32019,18 @@ "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==", "dev": true }, + "node_modules/react-number-format": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/react-number-format/-/react-number-format-5.4.0.tgz", + "integrity": "sha512-NWdICrqLhI7rAS8yUeLVd6Wr4cN7UjJ9IBTS0f/a9i7UB4x4Ti70kGnksBtZ7o4Z7YRbvCMMR/jQmkoOBa/4fg==", + "dependencies": { + "prop-types": "^15.7.2" + }, + "peerDependencies": { + "react": "^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/react-onclickoutside": { "version": "6.13.0", "resolved": "https://registry.npmjs.org/react-onclickoutside/-/react-onclickoutside-6.13.0.tgz", diff --git a/package.json b/package.json index d61a9e406..d37d97c82 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "react-sdk", - "version": "23.1.10", + "version": "24.1.10", "private": true, "scripts": { "_comment_SDK_install_build_run_commands": "The following are public commands to clean, install, build, and run the SDK", @@ -57,11 +57,11 @@ "@material-ui/icons": "^4.11.2", "@material-ui/lab": "^4.0.0-alpha.60", "@material-ui/pickers": "^3.3.10", - "@pega/auth": "^0.2.9", + "@pega/auth": "^0.2.10", "@pega/cosmos-react-condition-builder": "^4.2.0", "@pega/cosmos-react-core": "^4.2.0", "@pega/cosmos-react-work": "^4.2.0", - "@pega/react-sdk-components": "~23.1.11", + "@pega/react-sdk-components": "~0.24.1", "@storybook/react-webpack5": "^7.6.7", "@tinymce/tinymce-react": "^4.3.2", "@types/styled-components": "^5.1.34", @@ -76,6 +76,7 @@ "react": "^17.0.2", "react-datepicker": "^4.25.0", "react-dom": "^17.0.2", + "react-number-format": "^5.4.0", "react-redux": "^7.2.4", "react-router-dom": "^5.3.4", "styled-components": "^6.1.8", @@ -88,13 +89,13 @@ "@kooneko/livereload-webpack-plugin": "^1.2.1", "@loadable/component": "^5.16.3", "@pega/configs": "^0.6.0", - "@pega/constellationjs": "~23.1.1", + "@pega/constellationjs": "24.1.0-test-20240610", "@pega/cspell-config": "^0.7.1", - "@pega/dx-component-builder-sdk": "~23.1.14", + "@pega/dx-component-builder-sdk": "~0.24.1", "@pega/eslint-config": "^0.7.1", "@pega/pcore-pconnect-typedefs": "~2.1.1", "@pega/prettier-config": "^0.6.0", - "@pega/react-sdk-overrides": "~23.1.11", + "@pega/react-sdk-overrides": "~0.24.1", "@pega/stylelint-config": "^0.7.1", "@pega/tsconfig": "^0.7.1", "@playwright/test": "^1.40.1", diff --git a/tests/config.js b/tests/config.js index 5ffbb9503..091e683eb 100644 --- a/tests/config.js +++ b/tests/config.js @@ -21,6 +21,10 @@ const config = { user: { username: 'user.digv2', password: 'pega' + }, + localizedUser: { + username: 'localization@DigV2', + password: 'pega' } } }, diff --git a/tests/e2e/Digv2/ComplexFields/DataReference.spec.js b/tests/e2e/Digv2/ComplexFields/DataReference.spec.js index fc118a86e..0fa039153 100644 --- a/tests/e2e/Digv2/ComplexFields/DataReference.spec.js +++ b/tests/e2e/Digv2/ComplexFields/DataReference.spec.js @@ -199,6 +199,65 @@ test.describe('E2E test', () => { await page.locator('button:has-text("Previous")').click(); + /** MultiSelect mode type test */ + selectedSubCategory = page.locator('div[data-test-id="9463d5f18a8924b3200b56efaad63bda"]'); + await selectedSubCategory.click(); + await page.locator('li:has-text("Mode")').click(); + + selectedTestName = page.locator('div[data-test-id="6f64b45d01d11d8efd1693dfcb63b735"]'); + await selectedTestName.click(); + await page.locator('li:has-text("MultiSelect")').click(); + + /** Combo-Box mode type test */ + let displayAs = page.locator('div[data-test-id="4aa668349e0970901aa6b11528f95223"]'); + await displayAs.click(); + await page.locator('li:has-text("Combo-Box")').click(); + + const selectProducts = page.locator('div[role="combobox"]'); + await selectProducts.click(); + await page.locator('li:has-text("Mobile")').click(); + await page.locator('li:has-text("Telivision")').click(); + await expect(selectProducts).toBeVisible(); + + await page.locator('button:has-text("Next")').click(); + + assignment = page.locator('div[id="Assignment"]'); + + await expect(assignment.locator('td >> text="Mobile"')).toBeVisible(); + await expect(assignment.locator('td >> text="Telivision"')).toBeVisible(); + + await page.locator('button:has-text("Previous")').click(); + + await expect(selectProducts.locator('div[role="button"]:has-text("Mobile")')).toBeVisible(); + await expect(selectProducts.locator('div[role="button"]:has-text("Telivision")')).toBeVisible(); + + let deleteProduct = await selectProducts.locator('div[role="button"]:has-text("Mobile")'); + await deleteProduct.locator('svg[focusable="false"]').click(); + + await page.locator('button:has-text("Next")').click(); + + await expect(selectProducts.locator('div[role="button"]:has-text("Mobile")')).not.toBeVisible(); + + await page.locator('button:has-text("Previous")').click(); + + deleteProduct = await selectProducts.locator('div[role="button"]:has-text("Telivision")'); + await deleteProduct.locator('svg[focusable="false"]').click(); + + /** Checkbox group mode type test */ + displayAs = page.locator('div[data-test-id="4aa668349e0970901aa6b11528f95223"]'); + await displayAs.click(); + await page.locator('li:has-text("Checkbox group")').click(); + + await page.locator('label:has-text("Washing Machine")').click(); + await page.locator('label:has-text("Mobile")').click(); + + await page.locator('button:has-text("Next")').click(); + + await expect(assignment.locator('td >> text="Washing Machine"')).toBeVisible(); + await expect(assignment.locator('td >> text="Mobile"')).toBeVisible(); + + await page.locator('button:has-text("Previous")').click(); + /** Readonly mode type test */ selectedSubCategory = page.locator('div[data-test-id="9463d5f18a8924b3200b56efaad63bda"]'); await selectedSubCategory.click(); @@ -220,6 +279,37 @@ test.describe('E2E test', () => { // await expect(assignment.locator('input[value="75"]')).toBeVisible(); await expect(assignment.locator('input[value="9f2584c2-5cb4-4abe-a261-d68050ee0f66"]')).toBeVisible(); + await page.locator('button:has-text("Previous")').click(); + + /** Testing Sorting(both ascending and descending) */ + selectedSubCategory = page.locator('div[data-test-id="9463d5f18a8924b3200b56efaad63bda"]'); + await selectedSubCategory.click(); + await page.locator('li:has-text("Options")').click(); + + selectedTestName = page.locator('div[data-test-id="6f64b45d01d11d8efd1693dfcb63b735"]'); + await selectedTestName.click(); + await page.locator('li:has-text("ListOfRecords")').click(); + + await page.locator('span:has-text("Product Name")').click(); + + const table = page.locator('div[id="list-view"]'); + let tableCell = table.locator('tbody >> tr >> td >> nth=1'); + // "---" should come at the top in the ascending order, since it's a Falsy value + await expect(await tableCell.textContent()).toBe('---'); + + await page.locator('span:has-text("Product Name")').click(); + + tableCell = table.locator('tbody >> tr >> td >> nth=1'); + // "Luxury Product" should be at the top in the descending order + await expect(await tableCell.textContent()).toBe('Luxury Product'); + + const lastRow = table.locator('tbody >> tr >> nth=3'); + tableCell = lastRow.locator('td >> nth=1'); + // "---" should be at the bottom in the descending order + await expect(await tableCell.textContent()).toBe('---'); + + await page.locator('button:has-text("Next")').click(); + /** Submitting the case */ await page.locator('button:has-text("submit")').click(); }, 10000); diff --git a/tests/e2e/Digv2/ComplexFields/EmbeddedData.spec.js b/tests/e2e/Digv2/ComplexFields/EmbeddedData.spec.js index 54cf7db82..6f2fdf72d 100644 --- a/tests/e2e/Digv2/ComplexFields/EmbeddedData.spec.js +++ b/tests/e2e/Digv2/ComplexFields/EmbeddedData.spec.js @@ -401,8 +401,55 @@ test.describe('E2E test', () => { await expect(assignment.locator('span >> text="02142"')).toBeVisible(); await expect(assignment.locator('span >> text="+16175551212"')).toBeVisible(); + /** Testing Sorting(both ascending and descending) */ + selectedOption = page.locator('div[data-test-id="c6be2b6191e6660291b6b0c92bd2f0df"]'); + await selectedOption.click(); + await page.locator('li:has-text("ListOfRecords")').click(); + + selectedSubCategory = page.locator('div[data-test-id="9463d5f18a8924b3200b56efaad63bda"]'); + await selectedSubCategory.click(); + await page.locator('li:has-text("Table")').click(); + + /** Editable mode type tests */ + selectedTestName = page.locator('div[data-test-id="6f64b45d01d11d8efd1693dfcb63b735"]'); + await selectedTestName.click(); + await page.locator('li:has-text("Editable")').click(); + + selectEditMode = page.locator('div[data-test-id="80c1db3a7b228760228004b1a532c71e"]'); + await selectEditMode.click(); + await page.locator('li:has-text("Table rows")').click(); + + /** Creating row by clicking on `+Add` button */ + await page.locator('a:has-text("+ Add")').click(); + + /** Entering values in the second Row */ + await page.locator('input[data-test-id="202003240938510823869"] >> nth=1').fill('Global St'); + await page.locator('input[data-test-id="202003240938510831291"] >> nth=1').fill('Cambridge'); + await page.locator('input[data-test-id="202003240938510831411"] >> nth=1').fill('MA'); + await page.locator('input[data-test-id="202003240938510832734"] >> nth=1').fill('02142'); + + /** Creating row by clicking on `+Add` button */ + await page.locator('a:has-text("+ Add")').click(); + + /** Entering values in the third Row */ + await page.locator('input[data-test-id="202003240938510823869"] >> nth=2').fill(''); + await page.locator('input[data-test-id="202003240938510831291"] >> nth=2').fill('Cambridge'); + await page.locator('input[data-test-id="202003240938510831411"] >> nth=2').fill('MA'); + await page.locator('input[data-test-id="202003240938510832734"] >> nth=2').fill('02142'); + await page.locator('button:has-text("Next")').click(); + await page.locator('span:has-text("Street")').click(); + + const table = page.locator('div[id="simple-table-manual"]'); + let tableCell = table.locator('tbody >> tr >> td >> nth=0'); + await expect(await tableCell.textContent()).toBe('---'); + + await page.locator('span:has-text("Street")').click(); + + tableCell = table.locator('tbody >> tr >> td >> nth=0'); + await expect(await tableCell.textContent()).toBe('Main St'); + /** Submitting the case */ await page.locator('button:has-text("submit")').click(); }, 10000); diff --git a/tests/e2e/Digv2/FormFields/Boolean.spec.js b/tests/e2e/Digv2/FormFields/Boolean.spec.js index f05d4ec93..bb791270b 100644 --- a/tests/e2e/Digv2/FormFields/Boolean.spec.js +++ b/tests/e2e/Digv2/FormFields/Boolean.spec.js @@ -38,7 +38,10 @@ test.describe('E2E test', () => { await page.getByRole('option', { name: 'Required' }).click(); // Checking required boolean field + await expect(page.locator('div >> legend:has-text("Required Boolean")')).toBeVisible(); + await expect(page.locator('div >> p:has-text("Required field")')).toBeVisible(); const requiredBooleanLabel = page.locator('label[data-test-id="325f4eb20dc7c90a4fb697cd6c6bf0ea"]'); + await expect(await requiredBooleanLabel.locator('span').getByText('BooleanRequired')).toBeVisible(); requiredBooleanLabel.click(); // check required field requiredBooleanLabel.click(); // uncheck required field await expect(page.locator('p.Mui-error.Mui-required')).toBeVisible(); diff --git a/tests/e2e/Digv2/FormFields/Currency.spec.js b/tests/e2e/Digv2/FormFields/Currency.spec.js index 57f48bd7b..bffd134e2 100644 --- a/tests/e2e/Digv2/FormFields/Currency.spec.js +++ b/tests/e2e/Digv2/FormFields/Currency.spec.js @@ -42,9 +42,13 @@ test.describe('E2E test', () => { attributes = await common.getAttributes(notRequiredCurrency); await expect(attributes.includes('required')).toBeFalsy(); + await expect(page.locator('div >> label').filter({ hasText: 'Required Currency *' })).toBeVisible(); const requiredCurrency = page.locator('input[data-test-id="77af0bd660f2e0276e23a7db7d48235a"]'); + await requiredCurrency.pressSequentially('20'); + await notRequiredCurrency.click(); attributes = await common.getAttributes(requiredCurrency); await expect(attributes.includes('required')).toBeTruthy(); + await expect(await requiredCurrency.inputValue()).toBe('$20.00'); /** Selecting Disable from the Sub Category dropdown */ selectedSubCategory = page.locator('div[data-test-id="9463d5f18a8924b3200b56efaad63bda"]'); @@ -77,6 +81,7 @@ test.describe('E2E test', () => { const readonlyCurrency = page.locator('input[data-test-id="32bc05c9bac42b8d76ea72511afa89d0"]'); attributes = await common.getAttributes(readonlyCurrency); await expect(attributes.includes('readonly')).toBeTruthy(); + await expect(await readonlyCurrency.inputValue()).toBe('$20.00'); const editableCurrency = page.locator('input[data-test-id="837e53069fc48e63debdee7fa61fbc1a"]'); @@ -85,6 +90,13 @@ test.describe('E2E test', () => { attributes = await common.getAttributes(editableCurrency); await expect(attributes.includes('readonly')).toBeFalsy(); + const currencyAsDecimal = page.locator('input[data-test-id="a792300f2080cdbcf7a496220fa7a44e"]'); + attributes = await common.getAttributes(currencyAsDecimal); + await expect(attributes.includes('readonly')).toBeTruthy(); + await expect(await currencyAsDecimal.inputValue()).toBe('$20.00'); + const symbol = page.locator('div:has-text("currencyAsDecimal")'); + await expect(symbol.locator('p:has-text("$")')).toBeTruthy(); + /** Selecting Visibility from the Sub Category dropdown */ selectedSubCategory = page.locator('div[data-test-id="9463d5f18a8924b3200b56efaad63bda"]'); await selectedSubCategory.click(); diff --git a/tests/e2e/Digv2/FormFields/Decimal.spec.js b/tests/e2e/Digv2/FormFields/Decimal.spec.js index 5d9e866ed..1983e0be3 100644 --- a/tests/e2e/Digv2/FormFields/Decimal.spec.js +++ b/tests/e2e/Digv2/FormFields/Decimal.spec.js @@ -94,6 +94,11 @@ test.describe('E2E test', () => { attributes = await common.getAttributes(editableDecimal); await expect(attributes.includes('readonly')).toBeFalsy(); + const decimalAsCurrency = page.locator('input[data-test-id="9e438afab6d7ec67b5582bded10f5172"]'); + attributes = await common.getAttributes(decimalAsCurrency); + await expect(attributes.includes('readonly')).toBeTruthy(); + await expect(await decimalAsCurrency.inputValue()).toBe('$20'); + /** Selecting Visibility from the Sub Category dropdown */ selectedSubCategory = page.locator('div[data-test-id="9463d5f18a8924b3200b56efaad63bda"]'); await selectedSubCategory.click(); diff --git a/tests/e2e/Digv2/FormFields/Email.spec.js b/tests/e2e/Digv2/FormFields/Email.spec.js index f774a9346..b267c3b43 100644 --- a/tests/e2e/Digv2/FormFields/Email.spec.js +++ b/tests/e2e/Digv2/FormFields/Email.spec.js @@ -43,10 +43,18 @@ test.describe('E2E test', () => { /** Required tests */ const requiredEmail = page.locator('input[data-test-id="96fa7548c363cdd5adb29c2c2749e436"]'); - requiredEmail.fill('John@doe.com'); await expect(page.locator('p.Mui-error.Mui-required')).toBeHidden(); + /** Checking 'field label', 'placeholder', and 'helper text' */ + const requiredEmailFieldLabel = page.locator('text="Required Email"'); + await expect(requiredEmailFieldLabel && requiredEmailFieldLabel.locator('text="*"')).toBeVisible(); + + const placeholderValue = await requiredEmail.getAttribute('placeholder'); + await expect(placeholderValue).toBe('Email Placeholder'); + + await expect(page.locator('div[id="Assignment"] >> p:has-text("Email Helper Text")')).toBeVisible(); + attributes = await common.getAttributes(requiredEmail); await expect(attributes.includes('required')).toBeTruthy(); diff --git a/tests/e2e/Digv2/FormFields/Integer.spec.js b/tests/e2e/Digv2/FormFields/Integer.spec.js index f6c75f3b2..1e1f8a657 100644 --- a/tests/e2e/Digv2/FormFields/Integer.spec.js +++ b/tests/e2e/Digv2/FormFields/Integer.spec.js @@ -44,6 +44,9 @@ test.describe('E2E test', () => { requiredInteger.fill('10000'); attributes = await common.getAttributes(requiredInteger); await expect(attributes.includes('required')).toBeTruthy(); + await expect(await requiredInteger.getAttribute('placeholder')).toBe('Integer Placeholder'); + await expect(page.locator('div >> label').filter({ hasText: 'Required Integer *' })).toBeVisible(); + await expect(page.locator('div >> p:has-text("Integer HelperText")')).toBeVisible(); const notrequiredInteger = page.locator('input[data-test-id="898ba585340f471eecde6b5e798e4df9"]'); attributes = await common.getAttributes(notrequiredInteger); diff --git a/tests/e2e/Digv2/FormFields/OptionalAction.spec.js b/tests/e2e/Digv2/FormFields/OptionalAction.spec.js index 153b7dd1b..c01c4ccb9 100644 --- a/tests/e2e/Digv2/FormFields/OptionalAction.spec.js +++ b/tests/e2e/Digv2/FormFields/OptionalAction.spec.js @@ -6,7 +6,7 @@ const common = require('../../../common'); test.beforeEach(common.launchPortal); test.describe('E2E test', () => { - test('should login, create case and run the Email tests', async ({ page }) => { + test('should login, create case and run the Optional Action tests', async ({ page }) => { await common.login(config.config.apps.digv2.user.username, config.config.apps.digv2.user.password, page); /** Testing announcement banner presence */ diff --git a/tests/e2e/Digv2/FormFields/Percentage.spec.js b/tests/e2e/Digv2/FormFields/Percentage.spec.js index 10a1dcb9d..13f006796 100644 --- a/tests/e2e/Digv2/FormFields/Percentage.spec.js +++ b/tests/e2e/Digv2/FormFields/Percentage.spec.js @@ -40,14 +40,20 @@ test.describe('E2E test', () => { await page.locator('button:has-text("submit")').click(); /** Required tests */ - const requiredPercentage = page.locator('input[data-test-id="86a805ca8375ed5df057777df74dd085"]'); - attributes = await common.getAttributes(requiredPercentage); - await expect(attributes.includes('required')).toBeTruthy(); - const notrequiredPercentage = page.locator('input[data-test-id="b1de2a4d96400570b2f6de9defed1adc"]'); attributes = await common.getAttributes(notrequiredPercentage); await expect(attributes.includes('required')).toBeFalsy(); + const requiredPercentage = page.locator('input[data-test-id="86a805ca8375ed5df057777df74dd085"]'); + requiredPercentage.pressSequentially('10'); + notrequiredPercentage.click(); + attributes = await common.getAttributes(requiredPercentage); + await expect(attributes.includes('required')).toBeTruthy(); + await expect(attributes.includes('placeholder')).toBeTruthy(); + await expect(page.locator('div >> label').filter({ hasText: 'Required Percentage *' })).toBeVisible(); + await expect(page.locator('div >> p:has-text("Percentage helpertext")')).toBeVisible(); + await expect(await requiredPercentage.inputValue()).toBe('10%'); + /** Selecting Disable from the Sub Category dropdown */ selectedSubCategory = page.locator('div[data-test-id="9463d5f18a8924b3200b56efaad63bda"]'); await selectedSubCategory.click(); diff --git a/tests/e2e/Digv2/FormFields/Phone.spec.js b/tests/e2e/Digv2/FormFields/Phone.spec.js index 131b61148..dc2387d1c 100644 --- a/tests/e2e/Digv2/FormFields/Phone.spec.js +++ b/tests/e2e/Digv2/FormFields/Phone.spec.js @@ -39,6 +39,16 @@ test.describe('E2E test', () => { /** Required tests */ const requiredPhone = page.locator('div[data-test-id="af983eaa1b85b015a7654702abd0b249"] >> input'); + + /** Checking 'field label', 'placeholder', and 'helper text' */ + const requiredPhoneFieldLabel = page.locator('text="Required Phone"'); + await expect(requiredPhoneFieldLabel && requiredPhoneFieldLabel.locator('text="*"')).toBeVisible(); + + const placeholderValue = await requiredPhone.getAttribute('placeholder'); + await expect(placeholderValue).toBe('Phone Placeholder'); + + await expect(page.locator('div[id="Assignment"] >> p:has-text("Phone Helper Text")')).toBeVisible(); + attributes = await common.getAttributes(requiredPhone); await expect(attributes.includes('required')).toBeTruthy(); @@ -87,7 +97,7 @@ test.describe('E2E test', () => { await editablePhoneInput.pressSequentially('6175551212'); /** Validation tests */ - const validationMsg = 'Invalid Phone'; + const validationMsg = 'Enter a valid phone number'; await editablePhoneInput.clear(); await countrySelector.click(); await page.locator('text=United States+1 >> nth=0').click(); diff --git a/tests/e2e/Digv2/FormFields/Picklist.spec.js b/tests/e2e/Digv2/FormFields/Picklist.spec.js index 8ba3a1eef..bcac244d8 100644 --- a/tests/e2e/Digv2/FormFields/Picklist.spec.js +++ b/tests/e2e/Digv2/FormFields/Picklist.spec.js @@ -37,6 +37,12 @@ test.describe('E2E test', () => { await page.getByRole('option', { name: 'Dropdown' }).click(); const dropdown = page.locator('div[data-test-id="94cb322b7468c7827d336398e525827e"]'); + /** Checking 'placeholder' and 'helper text' */ + const placeholderValue = await dropdown.locator('input').getAttribute('placeholder'); + await expect(placeholderValue).toBe('Select...'); + + await expect(page.locator('div[id="Assignment"] >> p:has-text("Picklist Helper Text")')).toBeVisible(); + await dropdown.click(); await page.getByRole('option', { name: 'Massachusetts' }).click(); diff --git a/tests/e2e/Digv2/LandingPages/InlineDashboard.spec.js b/tests/e2e/Digv2/LandingPages/InlineDashboard.spec.js index d69287d42..73e3811d6 100644 --- a/tests/e2e/Digv2/LandingPages/InlineDashboard.spec.js +++ b/tests/e2e/Digv2/LandingPages/InlineDashboard.spec.js @@ -37,7 +37,6 @@ test.describe('E2E test', () => { const table = await page.locator('div[id="list-view"] >> nth=0'); const numOfRows = await table.locator('tbody >> tr').count(); - const responsePromise = page.waitForResponse('**/data_views/D_ComplexFieldsList'); /** Testing My Work List presence */ const myworkList = page.locator('h6:has-text("My Work List")'); await expect(myworkList).toBeVisible(); @@ -47,7 +46,7 @@ test.describe('E2E test', () => { const caseIdFilter = filters.locator('div:has-text("Case ID")'); caseIdFilter.locator('input').fill(caseID); - await responsePromise; + await page.waitForResponse('**/data_views/D_ComplexFieldsList'); await expect(table.locator(`td >> text=${caseID}`)).toBeVisible(); await expect(table.locator('td >> text="Complex Fields"')).toBeVisible(); diff --git a/tests/e2e/Digv2/Localization/Localization.spec.js b/tests/e2e/Digv2/Localization/Localization.spec.js new file mode 100644 index 000000000..8aeef2838 --- /dev/null +++ b/tests/e2e/Digv2/Localization/Localization.spec.js @@ -0,0 +1,124 @@ +const { test, expect } = require('@playwright/test'); + +const config = require('../../../config'); +const common = require('../../../common'); + +test.beforeEach(common.launchPortal); +/** Added tests for french locale (fr-FR) */ +test.describe('E2E test', () => { + test('should login, create case and test the localized values', async ({ page }) => { + await common.login(config.config.apps.digv2.localizedUser.username, config.config.apps.digv2.localizedUser.password, page); + + /** Testing announcement banner text */ + const announcementBanner = page.locator('h6:has-text("Anuncios")'); + await expect(announcementBanner).toBeVisible(); + + /** Testing worklist title */ + const worklist = page.locator('h6:has-text("Mi lista de trabajo")'); + await expect(worklist).toBeVisible(); + + /** Testing landing pages */ + expect(await page.locator('div[role="button"]:has-text("Hogar")')).toBeVisible(); // Home + expect(await page.locator('div[role="button"]:has-text("Panel de control en línea")')).toBeVisible(); // Inline Dashboard + + /** Creating a Complex Fields case-type */ + const complexFieldsCase = page.locator('div[role="button"]:has-text("Campos complejos")'); + await complexFieldsCase.click(); + + /** Testing Case summary */ + expect(await page.locator('div[id="case-name"]:has-text("Campos complejos")')).toBeVisible(); // case type + + expect(await page.locator('button[id="edit"]:has-text("Editar")')).toBeVisible(); // edit action + expect(await page.locator('button[id="actions-menu"]:has-text("Comportamiento")')).toBeVisible(); // actions menu + + const caseSummary = await page.locator('div[id="CaseSummary"]'); + expect(caseSummary.locator('input[value="Nuevo"]')).toBeVisible(); // case Status + + /** Testing Case history */ + const caseHistory = await page.locator('div[id="CaseHistory"]'); + await expect(caseHistory.locator('th >> text="Fecha"')).toBeVisible(); + await expect(caseHistory.locator('th >> text="Descripción"')).toBeVisible(); + await expect(caseHistory.locator('th >> text="Interpretado por"')).toBeVisible(); + + /** Testing Case view */ + const stages = await page.locator('div[id="Stages"]'); + await expect(stages.locator('li:has-text("Crear")')).toBeVisible(); + + const assignmentHeader = await page.locator('div[id="assignment-header"]'); + await expect(assignmentHeader.locator('h6:has-text("Seleccionar prueba")')).toBeVisible(); + await expect(assignmentHeader.locator('span:has-text("Tarea en")')).toBeVisible(); + + /** Testing action buttons */ + const assignment = await page.locator('div[id="Assignment"]'); + await expect(assignment.locator('button:has-text("Cancelar")')).toBeVisible(); + await expect(assignment.locator('button:has-text("Entregar")')).toBeVisible(); + + /** Selecting Embedded Data from the Category dropdown */ + const selectedCategory = page.locator('div[data-test-id="76729937a5eb6b0fd88c42581161facd"]'); + await selectedCategory.click(); + await page.locator('li:has-text("EmbeddedData")').click(); + + await page.locator('button:has-text("Entregar")').click(); + + /** Testing Multi step */ + await expect(assignment.locator('div[id="selected-label"]:has-text("Datos integrados")')).toBeVisible(); + + let selectedOption = page.locator('div[data-test-id="c6be2b6191e6660291b6b0c92bd2f0df"]'); + await selectedOption.click(); + await page.locator('li:has-text("ListOfRecords")').click(); + + let selectedSubCategory = page.locator('div[data-test-id="9463d5f18a8924b3200b56efaad63bda"]'); + await selectedSubCategory.click(); + await page.locator('li:has-text("FieldGroup")').click(); + + let selectedTestName = page.locator('div[data-test-id="6f64b45d01d11d8efd1693dfcb63b735"]'); + await selectedTestName.click(); + await page.locator('li:has-text("Editable")').click(); + + const phone = await page.locator('div[data-test-id="1f8261d17452a959e013666c5df45e07"]'); + expect(assignment.locator('label >> text="Número de teléfono"')).toBeVisible(); + + await page.locator('button:has-text("Next")').click(); + + await expect(assignment.locator('h3:has-text("Dirección de Envío")')).toBeVisible(); + + /** Testing table headers */ + await expect(assignment.locator('th >> text="Calle"')).toBeVisible(); + await expect(assignment.locator('th >> text="Ciudad"')).toBeVisible(); + await expect(assignment.locator('th >> text="Estado"')).toBeVisible(); + await expect(assignment.locator('th >> text="Código Postal"')).toBeVisible(); + await expect(assignment.locator('th >> text="Número de teléfono"')).toBeVisible(); + + /** Testing file utility */ + const fileUtility = await page.locator('div[id="file-utility"]'); + await expect(fileUtility.locator('div:has-text("Archivos adjuntos0")')).toBeVisible(); + await fileUtility.locator('button[id="long-button"]').click(); + + await expect(page.locator('li:has-text("Agregar archivos")')).toBeVisible(); + await expect(page.locator('li:has-text("Agregar enlaces")')).toBeVisible(); + + /** Testing Add files Modal */ + await page.locator('li:has-text("Agregar archivos")').click(); + await expect(fileUtility.locator('h3:has-text("Agregar archivos locales")')).toBeVisible(); + await expect(fileUtility.locator('button:has-text("Cancelar")')).toBeVisible(); + await expect(fileUtility.locator('button:has-text("Adjuntar archivos")')).toBeVisible(); + + fileUtility.locator('button:has-text("Cancelar")').click(); + await fileUtility.locator('button[id="long-button"]').click(); + + /** Testing Add links Modal */ + await page.locator('li:has-text("Agregar enlaces")').click(); + await expect(fileUtility.locator('h3:has-text("Agregar enlaces")')).toBeVisible(); + await expect(fileUtility.locator('div >> text="Añadir enlace"')).toBeVisible(); + + await expect(fileUtility.locator('button:has-text("Cancelar")')).toBeVisible(); + await expect(fileUtility.locator('button:has-text("Adjuntar enlaces")')).toBeVisible(); + await fileUtility.locator('button:has-text("Cancelar")').click(); + + await page.locator('div[id="person-icon"]').click(); + await page.locator('li:has-text("Desconectarse")').click(); + }, 10000); +}); + +const outputDir = './test-reports/e2e/DigV2/Localization/Localization'; +test.afterEach(async ({ page }) => await common.calculateCoverage(page, outputDir));