diff --git a/cypress/e2e/safe-apps/apps_list.cy.js b/cypress/e2e/safe-apps/apps_list.cy.js index a6db25138e..5f75b9571e 100644 --- a/cypress/e2e/safe-apps/apps_list.cy.js +++ b/cypress/e2e/safe-apps/apps_list.cy.js @@ -5,73 +5,67 @@ import * as safeapps from '../pages/safeapps.pages' const myCustomAppTitle = 'Cypress Test App' const myCustomAppDescrAdded = 'Cypress Test App Description' -describe('The Safe Apps list', () => { +describe('Safe Apps tests', () => { before(() => { cy.clearLocalStorage() cy.visit(constants.TEST_SAFE_2 + constants.appsUrl, { failOnStatusCode: false }) main.acceptCookies() }) - describe('When searching apps', () => { - it('should filter the list by app name', () => { - // Wait for /safe-apps response - cy.intercept('GET', constants.appsEndpoint).then(() => { - safeapps.typeAppName(constants.appNames.walletConnect) - safeapps.verifyLinkName(safeapps.linkNames.logo) - }) - }) - - it('should filter the list by app description', () => { - safeapps.typeAppName(constants.appNames.customContract) + it('Verify app list can be filtered by app name [C56130]', () => { + // Wait for /safe-apps response + cy.intercept('GET', constants.appsEndpoint).then(() => { + safeapps.typeAppName(constants.appNames.walletConnect) safeapps.verifyLinkName(safeapps.linkNames.logo) }) + }) - it('should show a not found text when no match', () => { - safeapps.typeAppName(constants.appNames.noResults) - safeapps.verifyNoAppsTextPresent() - }) + it('Verify app list can be filtered by app description [C56131]', () => { + safeapps.typeAppName(constants.appNames.customContract) + safeapps.verifyLinkName(safeapps.linkNames.logo) }) - describe('When browsing the apps list', () => { - it('should allow to pin apps', () => { - safeapps.clearSearchAppInput() - safeapps.pinApp(safeapps.pinWalletConnectStr) - safeapps.pinApp(safeapps.transactionBuilderStr) - safeapps.clickOnBookmarkedAppsTab() - safeapps.verifyAppCount(2) - }) + it('Verify error message is displayed when no app found [C56132]', () => { + safeapps.typeAppName(constants.appNames.noResults) + safeapps.verifyNoAppsTextPresent() + }) - it('should allow to unpin apps', () => { - safeapps.pinApp(safeapps.pinWalletConnectStr) - safeapps.pinApp(safeapps.transactionBuilderStr) - safeapps.verifyAppCount(0) - }) + it('Verify apps can be pinned [C56133]', () => { + safeapps.clearSearchAppInput() + safeapps.pinApp(safeapps.pinWalletConnectStr) + safeapps.pinApp(safeapps.transactionBuilderStr) + safeapps.clickOnBookmarkedAppsTab() + safeapps.verifyAppCount(2) }) - describe('When adding a custom app', () => { - it('should show an error when the app manifest is invalid', () => { - cy.intercept('GET', constants.invalidAppUrl, { - name: constants.testAppData.name, - }) - safeapps.clickOnCustomAppsTab() - safeapps.clickOnAddCustomApp() - safeapps.typeCustomAppUrl(constants.invalidAppUrl) - safeapps.verifyAppNotSupportedMsg() - }) + it('Verify apps can be unpinned [C56134]', () => { + safeapps.pinApp(safeapps.pinWalletConnectStr) + safeapps.pinApp(safeapps.transactionBuilderStr) + safeapps.verifyAppCount(0) + }) - it('should be added to the list within the custom apps section', () => { - cy.intercept('GET', constants.validAppUrlJson, { - name: constants.testAppData.name, - description: constants.testAppData.descr, - icons: [{ src: 'logo.svg', sizes: 'any', type: 'image/svg+xml' }], - }) + it('Verify there is an error when the app manifest is invalid [C56135]', () => { + cy.intercept('GET', constants.invalidAppUrl, { + name: constants.testAppData.name, + }) + safeapps.clickOnCustomAppsTab() + safeapps.clickOnAddCustomApp() + safeapps.typeCustomAppUrl(constants.invalidAppUrl) + safeapps.verifyAppNotSupportedMsg() + }) - safeapps.typeCustomAppUrl(constants.validAppUrl) - safeapps.verifyAppTitle(myCustomAppTitle) - safeapps.acceptTC() - safeapps.clickOnAddBtn() - safeapps.verifyAppCount(1) - safeapps.verifyAppDescription(myCustomAppDescrAdded) + it('Verify an app can be added to the list within the custom apps section [C56136]', () => { + cy.intercept('GET', constants.validAppUrlJson, { + name: constants.testAppData.name, + description: constants.testAppData.descr, + icons: [{ src: 'logo.svg', sizes: 'any', type: 'image/svg+xml' }], }) + + safeapps.typeCustomAppUrl(constants.validAppUrl) + safeapps.verifyAppTitle(myCustomAppTitle) + safeapps.acceptTC() + safeapps.clickOnAddBtn() + safeapps.verifyAppCount(1) + safeapps.verifyAppDescription(myCustomAppDescrAdded) }) }) diff --git a/cypress/e2e/safe-apps/browser_permissions.cy.js b/cypress/e2e/safe-apps/browser_permissions.cy.js index fc11c368c6..f2623bd16f 100644 --- a/cypress/e2e/safe-apps/browser_permissions.cy.js +++ b/cypress/e2e/safe-apps/browser_permissions.cy.js @@ -2,34 +2,32 @@ import * as constants from '../../support/constants' import * as main from '../pages/main.page' import * as safeapps from '../pages/safeapps.pages' -describe('The Browser permissions system', () => { - describe('When the safe app requires permissions', () => { - beforeEach(() => { - cy.clearLocalStorage() - cy.fixture('safe-app').then((html) => { - cy.intercept('GET', `${constants.testAppUrl}/*`, html) - cy.intercept('GET', `*/manifest.json`, { - name: constants.testAppData.name, - description: constants.testAppData.descr, - icons: [{ src: 'logo.svg', sizes: 'any', type: 'image/svg+xml' }], - safe_apps_permissions: ['camera', 'microphone'], - }) +describe('Browser permissions tests', () => { + beforeEach(() => { + cy.clearLocalStorage() + cy.fixture('safe-app').then((html) => { + cy.intercept('GET', `${constants.testAppUrl}/*`, html) + cy.intercept('GET', `*/manifest.json`, { + name: constants.testAppData.name, + description: constants.testAppData.descr, + icons: [{ src: 'logo.svg', sizes: 'any', type: 'image/svg+xml' }], + safe_apps_permissions: ['camera', 'microphone'], }) }) + }) - it('should show a permissions slide to the user', () => { - cy.visitSafeApp(`${constants.testAppUrl}/app`) - safeapps.verifyCameraCheckBoxExists() - safeapps.verifyMicrofoneCheckBoxExists() - }) + it('Verify a permissions slide to the user is displayed [C56137]', () => { + cy.visitSafeApp(`${constants.testAppUrl}/app`) + safeapps.verifyCameraCheckBoxExists() + safeapps.verifyMicrofoneCheckBoxExists() + }) - it('should allow to change, accept and store the selection', () => { - main.acceptCookies() - safeapps.verifyMicrofoneCheckBoxExists().click() + it('Verify the selection can be changed, accepted and stored [C56138]', () => { + main.acceptCookies() + safeapps.verifyMicrofoneCheckBoxExists().click() - safeapps.clickOnContinueBtn().should(() => { - expect(window.localStorage.getItem(constants.BROWSER_PERMISSIONS_KEY)).to.eq(safeapps.localStorageItem) - }) + safeapps.clickOnContinueBtn().should(() => { + expect(window.localStorage.getItem(constants.BROWSER_PERMISSIONS_KEY)).to.eq(safeapps.localStorageItem) }) }) }) diff --git a/cypress/e2e/safe-apps/info_modal.cy.js b/cypress/e2e/safe-apps/info_modal.cy.js index 3ea79a148c..43420a923e 100644 --- a/cypress/e2e/safe-apps/info_modal.cy.js +++ b/cypress/e2e/safe-apps/info_modal.cy.js @@ -2,27 +2,25 @@ import * as constants from '../../support/constants' import * as main from '../pages/main.page' import * as safeapps from '../pages/safeapps.pages' -describe('The Safe Apps info modal', () => { +describe('Safe Apps info modal tests', () => { before(() => { cy.clearLocalStorage() cy.visit(constants.TEST_SAFE_2 + constants.appsUrl, { failOnStatusCode: false }) main.acceptCookies() }) - describe('when opening a Safe App', () => { - it('should show the disclaimer', () => { - safeapps.clickOnApp(safeapps.logoWalletConnect) - safeapps.clickOnOpenSafeAppBtn() - }) + it('Verify the disclaimer is displayed when a Safe App is opened [C56139]', () => { + safeapps.clickOnApp(safeapps.logoWalletConnect) + safeapps.clickOnOpenSafeAppBtn() + }) - it('should show the permissions slide if the app require permissions', () => { - safeapps.clickOnContinueBtn() - cy.wait(500) // wait for the animation to finish - safeapps.verifyCameraCheckBoxExists() - }) + it('Verify the permissions slide is shown if the app require permissions [C56140]', () => { + safeapps.clickOnContinueBtn() + cy.wait(500) // wait for the animation to finish + safeapps.verifyCameraCheckBoxExists() + }) - it('should store the permissions and consents decision when accepted', () => { - safeapps.storeAndVerifyPermissions() - }) + it('Verify the permissions and consents decision are stored when accepted [C56141]', () => { + safeapps.storeAndVerifyPermissions() }) }) diff --git a/cypress/e2e/safe-apps/permissions_settings.cy.js b/cypress/e2e/safe-apps/permissions_settings.cy.js index 629f117dc3..faf4e2ee3e 100644 --- a/cypress/e2e/safe-apps/permissions_settings.cy.js +++ b/cypress/e2e/safe-apps/permissions_settings.cy.js @@ -6,7 +6,7 @@ let $dapps = [] const app1 = 'https://app1.com' const app3 = 'https://app3.com' -describe('The Safe Apps permissions settings section', () => { +describe('Safe Apps permissions settings tests', () => { before(() => { cy.clearLocalStorage() cy.on('window:before:load', (window) => { @@ -49,18 +49,18 @@ describe('The Safe Apps permissions settings section', () => { main.acceptCookies() }) - it('should show the permissions configuration for each stored app', () => { + it('Verify for each stored app the permissions configuration is shown [C56142]', () => { cy.findAllByRole('heading', { level: 5 }).should('have.length', 4) }) - describe('For each app', () => { + describe('Permissions for each app', () => { before(() => { cy.get(safeapps.gridItem).then((items) => { $dapps = items }) }) - it('app1 should have camera, full screen and geo permissions', () => { + it('Verify that app1 has camera, full screen and geo permissions [C56143]', () => { const app1Data = [ 'app1', safeapps.permissionCheckboxNames.camera, @@ -74,7 +74,7 @@ describe('The Safe Apps permissions settings section', () => { main.verifyCheckboxeState(safeapps.permissionCheckboxes.fullscreen, 0, constants.checkboxStates.checked) }) - it('app2 should have address book and microphone permissions', () => { + it('Verify that app2 has address book and microphone permissions [C56144]', () => { const app2Data = [ 'app2', safeapps.permissionCheckboxNames.addressbook, @@ -86,21 +86,21 @@ describe('The Safe Apps permissions settings section', () => { main.verifyCheckboxeState(safeapps.permissionCheckboxes.addressbook, 0, constants.checkboxStates.checked) }) - it('app3 should have camera permissions', () => { + it('Verify that app3 has camera permissions [C56145]', () => { const app3Data = ['app3', safeapps.permissionCheckboxNames.camera] main.checkTextsExistWithinElement($dapps[2], app3Data) main.verifyCheckboxeState(safeapps.permissionCheckboxes.camera, 1, constants.checkboxStates.unchecked) }) - it('app4 should have address book permissions', () => { + it('Verify that app4 has address book permissions [C56146]', () => { const app4Data = ['app4', safeapps.permissionCheckboxNames.addressbook] main.checkTextsExistWithinElement($dapps[3], app4Data) main.verifyCheckboxeState(safeapps.permissionCheckboxes.addressbook, 1, constants.checkboxStates.checked) }) - it('should allow to allow all or clear all the checkboxes at once', () => { + it('Verify Allow all or Clear all the checkboxes at once is permitted [C56147]', () => { safeapps.uncheckAllPermissions($dapps[1]) main.verifyCheckboxeState(safeapps.permissionCheckboxes.addressbook, 0, constants.checkboxStates.unchecked) main.verifyCheckboxeState(safeapps.permissionCheckboxes.microphone, 0, constants.checkboxStates.unchecked) @@ -110,7 +110,7 @@ describe('The Safe Apps permissions settings section', () => { main.verifyCheckboxeState(safeapps.permissionCheckboxes.microphone, 0, constants.checkboxStates.checked) }) - it('should allow to remove apps and reflect it in the localStorage', () => { + it('Verify it is permitted to remove apps and reflect it in the localStorage [C56148]', () => { cy.wrap($dapps[0]).find('svg').last().click() cy.wrap($dapps[2]) .find('svg') diff --git a/cypress/e2e/safe-apps/preview_drawer.cy.js b/cypress/e2e/safe-apps/preview_drawer.cy.js index ed0b366935..dd4bc42d6e 100644 --- a/cypress/e2e/safe-apps/preview_drawer.cy.js +++ b/cypress/e2e/safe-apps/preview_drawer.cy.js @@ -2,28 +2,26 @@ import * as constants from '../../support/constants' import * as main from '../pages/main.page' import * as safeapps from '../pages/safeapps.pages' -describe('The Safe Apps info modal', () => { +describe('Safe Apps info modal tests', () => { before(() => { cy.clearLocalStorage() cy.visit(`/${constants.TEST_SAFE_2}/apps`, { failOnStatusCode: false }) main.acceptCookies() }) - describe('when opening a Safe App from the app list', () => { - it('should show the preview drawer', () => { - safeapps.clickOnApp(safeapps.logoWalletConnect) + it('Verify the preview drawer is displayed when opening a Safe App from the app list [C56149]', () => { + safeapps.clickOnApp(safeapps.logoWalletConnect) - cy.findByRole('presentation').within(() => { - safeapps.verifyPreviewWindow( - safeapps.walletConnectHeadlinePreview, - safeapps.connecttextPreview, - safeapps.availableNetworksPreview, - ) - safeapps.pinApp(safeapps.pinWalletConnectStr) - safeapps.pinApp(safeapps.pinWalletConnectStr, false) - safeapps.closePreviewWindow() - }) - cy.findByRole('presentation').should('not.exist') + cy.findByRole('presentation').within(() => { + safeapps.verifyPreviewWindow( + safeapps.walletConnectHeadlinePreview, + safeapps.connecttextPreview, + safeapps.availableNetworksPreview, + ) + safeapps.pinApp(safeapps.pinWalletConnectStr) + safeapps.pinApp(safeapps.pinWalletConnectStr, false) + safeapps.closePreviewWindow() }) + cy.findByRole('presentation').should('not.exist') }) }) diff --git a/cypress/e2e/safe-apps/safe_permissions.cy.js b/cypress/e2e/safe-apps/safe_permissions.cy.js index 33e4f74c49..5e4845f2ac 100644 --- a/cypress/e2e/safe-apps/safe_permissions.cy.js +++ b/cypress/e2e/safe-apps/safe_permissions.cy.js @@ -1,7 +1,7 @@ import * as constants from '../../support/constants' import * as safeapps from '../pages/safeapps.pages' -describe('The Safe permissions system', () => { +describe('Safe permissions system tests', () => { before(() => { cy.clearLocalStorage() }) @@ -16,56 +16,52 @@ describe('The Safe permissions system', () => { }) }) - describe('When requesting permissions with wallet_requestPermissions', () => { - it('should show the permissions prompt and return the permissions on accept', () => { - cy.visitSafeApp(constants.testAppUrl + constants.requestPermissionsUrl) - safeapps.verifyPermissionsRequestExists() - safeapps.verifyAccessToAddressBookExists() - safeapps.clickOnAcceptBtn() + it('Verify that requesting permissions with wallet_requestPermissions shows the permissions prompt and return the permissions on accept [C56150]', () => { + cy.visitSafeApp(constants.testAppUrl + constants.requestPermissionsUrl) + safeapps.verifyPermissionsRequestExists() + safeapps.verifyAccessToAddressBookExists() + safeapps.clickOnAcceptBtn() - cy.get('@safeAppsMessage').should('have.been.calledWithMatch', { - data: [ - { - invoker: constants.testAppUrl, - parentCapability: 'requestAddressBook', - date: Cypress.sinon.match.number, - caveats: [], - }, - ], - }) + cy.get('@safeAppsMessage').should('have.been.calledWithMatch', { + data: [ + { + invoker: constants.testAppUrl, + parentCapability: 'requestAddressBook', + date: Cypress.sinon.match.number, + caveats: [], + }, + ], }) }) - describe('When trying to get the current permissions with wallet_getPermissions', () => { - it('should return the current permissions', () => { - cy.on('window:before:load', (window) => { - window.localStorage.setItem( - constants.SAFE_PERMISSIONS_KEY, - JSON.stringify({ - [constants.testAppUrl]: [ - { - invoker: constants.testAppUrl, - parentCapability: 'requestAddressBook', - date: 1111111111111, - caveats: [], - }, - ], - }), - ) - }) + it('Verify that trying to get the current permissions with wallet_getPermissions returns the current permissions [C56151]', () => { + cy.on('window:before:load', (window) => { + window.localStorage.setItem( + constants.SAFE_PERMISSIONS_KEY, + JSON.stringify({ + [constants.testAppUrl]: [ + { + invoker: constants.testAppUrl, + parentCapability: 'requestAddressBook', + date: 1111111111111, + caveats: [], + }, + ], + }), + ) + }) - cy.visitSafeApp(constants.testAppUrl + constants.getPermissionsUrl) + cy.visitSafeApp(constants.testAppUrl + constants.getPermissionsUrl) - cy.get('@safeAppsMessage').should('have.been.calledWithMatch', { - data: [ - { - invoker: constants.testAppUrl, - parentCapability: 'requestAddressBook', - date: Cypress.sinon.match.number, - caveats: [], - }, - ], - }) + cy.get('@safeAppsMessage').should('have.been.calledWithMatch', { + data: [ + { + invoker: constants.testAppUrl, + parentCapability: 'requestAddressBook', + date: Cypress.sinon.match.number, + caveats: [], + }, + ], }) }) }) diff --git a/cypress/e2e/safe-apps/tx_modal.cy.js b/cypress/e2e/safe-apps/tx_modal.cy.js index abbaced9c2..f3ee050d00 100644 --- a/cypress/e2e/safe-apps/tx_modal.cy.js +++ b/cypress/e2e/safe-apps/tx_modal.cy.js @@ -4,7 +4,7 @@ import * as main from '../pages/main.page' const testAppName = 'Cypress Test App' const testAppDescr = 'Cypress Test App Description' -describe('The transaction modal', () => { +describe('Transaction modal tests', () => { before(() => { cy.clearLocalStorage() }) @@ -19,14 +19,16 @@ describe('The transaction modal', () => { }) }) - describe('When sending a transaction from an app', () => { - it('should show the transaction popup', { defaultCommandTimeout: 12000 }, () => { + it( + 'Verify that the transaction popup is displayed when sending a transaction from an app [C56152]', + { defaultCommandTimeout: 12000 }, + () => { cy.visitSafeApp(`${constants.testAppUrl}/dummy`) main.acceptCookies() cy.findByRole('dialog').within(() => { cy.findByText(testAppName) }) - }) - }) + }, + ) }) diff --git a/cypress/e2e/smoke/add_owner.cy.js b/cypress/e2e/smoke/add_owner.cy.js index e47893e9c1..af9ec0f9c8 100644 --- a/cypress/e2e/smoke/add_owner.cy.js +++ b/cypress/e2e/smoke/add_owner.cy.js @@ -3,8 +3,7 @@ import * as main from '../../e2e/pages/main.page' import * as owner from '../pages/owners.pages' import * as addressBook from '../pages/address_book.page' -// TODO: Need to add tests to testRail -describe('Adding an owner', () => { +describe('Add Owners tests', () => { beforeEach(() => { cy.visit(constants.setupUrl + constants.SEPOLIA_TEST_SAFE_1) cy.clearLocalStorage() @@ -12,100 +11,96 @@ describe('Adding an owner', () => { cy.contains(owner.safeAccountNonceStr, { timeout: 10000 }) }) - describe('Add new owner tests', () => { - it('Verify the presence of "Add Owner" button', () => { - owner.verifyAddOwnerBtnIsEnabled() - }) + it('Verify the presence of "Add Owner" button [C56017]', () => { + owner.verifyAddOwnerBtnIsEnabled() + }) - it('Verify “Add new owner” button tooltip displays correct message for Non-Owner', () => { - cy.visit(constants.setupUrl + constants.SEPOLIA_TEST_SAFE_2) - owner.hoverOverAddOwnerBtn() - owner.verifyTooltiptext(owner.nonOwnerErrorMsg) - }) + it('Verify “Add new owner” button tooltip displays correct message for Non-Owner [C56018]', () => { + cy.visit(constants.setupUrl + constants.SEPOLIA_TEST_SAFE_2) + owner.hoverOverAddOwnerBtn() + owner.verifyTooltiptext(owner.nonOwnerErrorMsg) + }) - it('Verify Tooltip displays correct message for disconnected user', () => { - owner.waitForConnectionStatus() - owner.clickOnWalletExpandMoreIcon() - owner.clickOnDisconnectBtn() - owner.hoverOverAddOwnerBtn() - owner.verifyTooltiptext(owner.disconnectedUserErrorMsg) - }) - it('Verify the Add New Owner Form can be opened', () => { - owner.waitForConnectionStatus() - owner.openAddOwnerWindow() - }) + it('Verify Tooltip displays correct message for disconnected user [C56019]', () => { + owner.waitForConnectionStatus() + owner.clickOnWalletExpandMoreIcon() + owner.clickOnDisconnectBtn() + owner.hoverOverAddOwnerBtn() + owner.verifyTooltiptext(owner.disconnectedUserErrorMsg) + }) - it('Verify error message displayed if character limit is exceeded in Name input', () => { - owner.waitForConnectionStatus() - owner.openAddOwnerWindow() - owner.typeOwnerName(main.generateRandomString(51)) - owner.verifyErrorMsgInvalidAddress(constants.addressBookErrrMsg.exceedChars) - }) + it('Verify the Add New Owner Form can be opened [C56020]', () => { + owner.waitForConnectionStatus() + owner.openAddOwnerWindow() + }) - it('Verify that the "Name" field is auto-filled with the relevant name from Address Book', () => { - cy.visit(constants.addressBookUrl + constants.SEPOLIA_TEST_SAFE_1) - addressBook.clickOnCreateEntryBtn() - addressBook.typeInName(constants.addresBookContacts.user1.name) - addressBook.typeInAddress(constants.addresBookContacts.user1.address) - addressBook.clickOnSaveEntryBtn() - addressBook.verifyNewEntryAdded( - constants.addresBookContacts.user1.name, - constants.addresBookContacts.user1.address, - ) - cy.visit(constants.setupUrl + constants.SEPOLIA_TEST_SAFE_1) - owner.waitForConnectionStatus() - owner.openAddOwnerWindow() - owner.typeOwnerAddress(constants.addresBookContacts.user1.address) - owner.selectNewOwner(constants.addresBookContacts.user1.name) - owner.verifyNewOwnerName(constants.addresBookContacts.user1.name) - }) + it('Verify error message displayed if character limit is exceeded in Name input [C56022]', () => { + owner.waitForConnectionStatus() + owner.openAddOwnerWindow() + owner.typeOwnerName(main.generateRandomString(51)) + owner.verifyErrorMsgInvalidAddress(constants.addressBookErrrMsg.exceedChars) + }) - it('Verify that Name field not mandatory', () => { - owner.waitForConnectionStatus() - owner.openAddOwnerWindow() - owner.typeOwnerAddress(constants.SEPOLIA_OWNER_2) - owner.clickOnNextBtn() - owner.verifyConfirmTransactionWindowDisplayed() - }) + it('Verify that the "Name" field is auto-filled with the relevant name from Address Book [C56023]', () => { + cy.visit(constants.addressBookUrl + constants.SEPOLIA_TEST_SAFE_1) + addressBook.clickOnCreateEntryBtn() + addressBook.typeInName(constants.addresBookContacts.user1.name) + addressBook.typeInAddress(constants.addresBookContacts.user1.address) + addressBook.clickOnSaveEntryBtn() + addressBook.verifyNewEntryAdded(constants.addresBookContacts.user1.name, constants.addresBookContacts.user1.address) + cy.visit(constants.setupUrl + constants.SEPOLIA_TEST_SAFE_1) + owner.waitForConnectionStatus() + owner.openAddOwnerWindow() + owner.typeOwnerAddress(constants.addresBookContacts.user1.address) + owner.selectNewOwner(constants.addresBookContacts.user1.name) + owner.verifyNewOwnerName(constants.addresBookContacts.user1.name) + }) - it('Verify relevant error messages are displayed in Address input ', () => { - owner.waitForConnectionStatus() - owner.openAddOwnerWindow() - owner.typeOwnerAddress(main.generateRandomString(10)) - owner.verifyErrorMsgInvalidAddress(constants.addressBookErrrMsg.invalidFormat) + it('Verify that Name field not mandatory [C56024]', () => { + owner.waitForConnectionStatus() + owner.openAddOwnerWindow() + owner.typeOwnerAddress(constants.SEPOLIA_OWNER_2) + owner.clickOnNextBtn() + owner.verifyConfirmTransactionWindowDisplayed() + }) - owner.typeOwnerAddress(constants.addresBookContacts.user1.address.toUpperCase()) - owner.verifyErrorMsgInvalidAddress(constants.addressBookErrrMsg.invalidChecksum) + it('Verify relevant error messages are displayed in Address input [C56025]', () => { + owner.waitForConnectionStatus() + owner.openAddOwnerWindow() + owner.typeOwnerAddress(main.generateRandomString(10)) + owner.verifyErrorMsgInvalidAddress(constants.addressBookErrrMsg.invalidFormat) - owner.typeOwnerAddress(constants.SEPOLIA_TEST_SAFE_1) - owner.verifyErrorMsgInvalidAddress(constants.addressBookErrrMsg.ownSafe) + owner.typeOwnerAddress(constants.addresBookContacts.user1.address.toUpperCase()) + owner.verifyErrorMsgInvalidAddress(constants.addressBookErrrMsg.invalidChecksum) - owner.typeOwnerAddress(constants.addresBookContacts.user1.address.replace('F', 'f')) - owner.verifyErrorMsgInvalidAddress(constants.addressBookErrrMsg.invalidChecksum) + owner.typeOwnerAddress(constants.SEPOLIA_TEST_SAFE_1) + owner.verifyErrorMsgInvalidAddress(constants.addressBookErrrMsg.ownSafe) - owner.typeOwnerAddress(constants.DEFAULT_OWNER_ADDRESS) - owner.verifyErrorMsgInvalidAddress(constants.addressBookErrrMsg.alreadyAdded) - }) + owner.typeOwnerAddress(constants.addresBookContacts.user1.address.replace('F', 'f')) + owner.verifyErrorMsgInvalidAddress(constants.addressBookErrrMsg.invalidChecksum) - it('Verify default threshold value. Verify correct threshold calculation', () => { - owner.waitForConnectionStatus() - owner.openAddOwnerWindow() - owner.typeOwnerAddress(constants.DEFAULT_OWNER_ADDRESS) - owner.verifyThreshold(1, 2) - }) + owner.typeOwnerAddress(constants.DEFAULT_OWNER_ADDRESS) + owner.verifyErrorMsgInvalidAddress(constants.addressBookErrrMsg.alreadyAdded) + }) + + it('Verify default threshold value. Verify correct threshold calculation [C56028]', () => { + owner.waitForConnectionStatus() + owner.openAddOwnerWindow() + owner.typeOwnerAddress(constants.DEFAULT_OWNER_ADDRESS) + owner.verifyThreshold(1, 2) + }) - it('Verify valid Address validation', () => { - owner.waitForConnectionStatus() - owner.openAddOwnerWindow() - owner.typeOwnerAddress(constants.SEPOLIA_OWNER_2) - owner.clickOnNextBtn() - owner.verifyConfirmTransactionWindowDisplayed() - cy.reload() - owner.waitForConnectionStatus() - owner.openAddOwnerWindow() - owner.typeOwnerAddress(constants.SEPOLIA_TEST_SAFE_2) - owner.clickOnNextBtn() - owner.verifyConfirmTransactionWindowDisplayed() - }) + it('Verify valid Address validation [C56027]', () => { + owner.waitForConnectionStatus() + owner.openAddOwnerWindow() + owner.typeOwnerAddress(constants.SEPOLIA_OWNER_2) + owner.clickOnNextBtn() + owner.verifyConfirmTransactionWindowDisplayed() + cy.reload() + owner.waitForConnectionStatus() + owner.openAddOwnerWindow() + owner.typeOwnerAddress(constants.SEPOLIA_TEST_SAFE_2) + owner.clickOnNextBtn() + owner.verifyConfirmTransactionWindowDisplayed() }) }) diff --git a/cypress/e2e/smoke/address_book.cy.js b/cypress/e2e/smoke/address_book.cy.js index 6fcabfe2e7..e8439857a4 100644 --- a/cypress/e2e/smoke/address_book.cy.js +++ b/cypress/e2e/smoke/address_book.cy.js @@ -15,69 +15,65 @@ describe('Address book tests', () => { main.acceptCookies() }) - describe('should add remove and edit entries in the address book', () => { - it('should add an entry', () => { - addressBook.clickOnCreateEntryBtn() - addressBook.typeInName(NAME) - addressBook.typeInAddress(constants.RECIPIENT_ADDRESS) - addressBook.clickOnSaveEntryBtn() - addressBook.verifyNewEntryAdded(NAME, constants.RECIPIENT_ADDRESS) - }) + it('Verify entry can be added [C56061]', () => { + addressBook.clickOnCreateEntryBtn() + addressBook.typeInName(NAME) + addressBook.typeInAddress(constants.RECIPIENT_ADDRESS) + addressBook.clickOnSaveEntryBtn() + addressBook.verifyNewEntryAdded(NAME, constants.RECIPIENT_ADDRESS) + }) - it('should save an edited entry name', () => { - addressBook.clickOnEditEntryBtn() - addressBook.typeInNameInput(EDITED_NAME) - addressBook.clickOnSaveButton() - addressBook.verifyNameWasChanged(NAME, EDITED_NAME) - }) + it('Verify entered entry in Name input can be saved [C56063]', () => { + addressBook.clickOnEditEntryBtn() + addressBook.typeInNameInput(EDITED_NAME) + addressBook.clickOnSaveButton() + addressBook.verifyNameWasChanged(NAME, EDITED_NAME) + }) - it('should delete an entry', () => { - // Click the delete button in the first entry - addressBook.clickDeleteEntryButton() - addressBook.clickDeleteEntryModalDeleteButton() - addressBook.verifyEditedNameNotExists(EDITED_NAME) - }) + it('Verify entry can be deleted [C56062]', () => { + // Click the delete button in the first entry + addressBook.clickDeleteEntryButton() + addressBook.clickDeleteEntryModalDeleteButton() + addressBook.verifyEditedNameNotExists(EDITED_NAME) }) - describe('should import and export address book files', () => { - it('should import an address book csv file', () => { - addressBook.clickOnImportFileBtn() - addressBook.importFile() - addressBook.verifyImportModalIsClosed() - addressBook.verifyDataImported(constants.GOERLI_CSV_ENTRY.name, constants.GOERLI_CSV_ENTRY.address) - }) + it('Verify csv file can be imported (Goerli) [C56064]', () => { + addressBook.clickOnImportFileBtn() + addressBook.importFile() + addressBook.verifyImportModalIsClosed() + addressBook.verifyDataImported(constants.GOERLI_CSV_ENTRY.name, constants.GOERLI_CSV_ENTRY.address) + }) - it.skip('should find Gnosis Chain imported address', () => { - // Go to a Safe on Gnosis Chain - cy.get('header') - .contains(/^G(ö|oe)rli$/) - .click() - cy.contains('Gnosis Chain').click() + it.skip('Verify Gnosis Chain imported address can be found [C56066]', () => { + // Go to a Safe on Gnosis Chain + cy.get('header') + .contains(/^G(ö|oe)rli$/) + .click() + cy.contains('Gnosis Chain').click() - // Navigate to the Address Book page - cy.visit(`/address-book?safe=${constants.GNO_TEST_SAFE}`) + // Navigate to the Address Book page + cy.visit(`/address-book?safe=${constants.GNO_TEST_SAFE}`) - // Waits for the Address Book table to be in the page - cy.contains('p', 'Address book').should('be.visible') + // Waits for the Address Book table to be in the page + cy.contains('p', 'Address book').should('be.visible') - // Finds the imported Gnosis Chain address - cy.contains(constants.GNO_CSV_ENTRY.name).should('exist') - cy.contains(constants.GNO_CSV_ENTRY.address).should('exist') - }) + // Finds the imported Gnosis Chain address + cy.contains(constants.GNO_CSV_ENTRY.name).should('exist') + cy.contains(constants.GNO_CSV_ENTRY.address).should('exist') + }) - it('should download correctly the address book file', () => { - // Download the export file - const date = format(new Date(), 'yyyy-MM-dd', { timeZone: 'UTC' }) - const fileName = `safe-address-book-${date}.csv` //name that is given to the file automatically + it('Verify the address book file can be downloaded [C56065]', () => { + // Download the export file + const date = format(new Date(), 'yyyy-MM-dd', { timeZone: 'UTC' }) + const fileName = `safe-address-book-${date}.csv` //name that is given to the file automatically - addressBook.clickOnExportFileBtn() - //This is the submit button for the Export modal. It requires an actuall class or testId to differentiate - //from the Export button at the top of the AB table - addressBook.confirmExport() + addressBook.clickOnExportFileBtn() + //This is the submit button for the Export modal. It requires an actuall class or testId to differentiate + //from the Export button at the top of the AB table + addressBook.confirmExport() - const downloadsFolder = Cypress.config('downloadsFolder') - //File reading is failing in the CI. Can be tested locally - cy.readFile(path.join(downloadsFolder, fileName)).should('exist') - }) + const downloadsFolder = Cypress.config('downloadsFolder') + //File reading is failing in the CI. Can be tested locally + cy.readFile(path.join(downloadsFolder, fileName)).should('exist') }) }) diff --git a/cypress/e2e/smoke/assets.cy.js b/cypress/e2e/smoke/assets.cy.js index 3d075c1927..075ac1bd20 100644 --- a/cypress/e2e/smoke/assets.cy.js +++ b/cypress/e2e/smoke/assets.cy.js @@ -17,15 +17,15 @@ describe('Assets tests', () => { balances.acceptSpamWarning() }) - it('Verify that the token tab is selected by default and the table is visible', () => { + it('Verify that the token tab is selected by default and the table is visible [C56039]', () => { balances.verifyTokensTabIsSelected('true') }) - it('Verify that the native token is visible', () => { + it('Verify that the native token is visible [C56040]', () => { balances.verifyTokenIsPresent(constants.tokenNames.sepoliaEther) }) - it('Verify that non-native tokens are present and have balance', () => { + it('Verify that non-native tokens are present and have balance [C56041]', () => { balances.selectTokenList(balances.tokenListOptions.allTokens) balances.verifyBalance(balances.currencyDaiCap, TOKEN_AMOUNT_COLUMN, balances.currencyDaiAlttext) balances.verifyTokenBalanceFormat( @@ -82,7 +82,7 @@ describe('Assets tests', () => { ) }) - it('Verify that every token except the native token has a "go to blockexplorer link"', () => { + it('Verify that every token except the native token has a "go to blockexplorer link" [C56042]', () => { balances.selectTokenList(balances.tokenListOptions.allTokens) // Specifying true for Sepolia. Will delete the flag once completely migrate to Sepolia balances.verifyAssetNameHasExplorerLink(balances.currencyUSDC, ASSET_NAME_COLUMN, true) @@ -94,7 +94,7 @@ describe('Assets tests', () => { balances.verifyAssetExplorerLinkNotAvailable(constants.tokenNames.sepoliaEther, ASSET_NAME_COLUMN) }) - it('Verify that the default currency and the changing effects', () => { + it('Verify the default Fiat currency and the effects after changing it [C56043]', () => { balances.selectTokenList(balances.tokenListOptions.allTokens) balances.verifyFirstRowDoesNotContainCurrency(balances.currencyEUR, FIAT_AMOUNT_COLUMN) balances.verifyFirstRowContainsCurrency(balances.currencyUSD, FIAT_AMOUNT_COLUMN) @@ -104,13 +104,13 @@ describe('Assets tests', () => { balances.verifyFirstRowContainsCurrency(balances.currencyEUR, FIAT_AMOUNT_COLUMN) }) - it('Verify that a tool tip is shown pointing to "Token list" dropdown', () => { + it('Verify that a tool tip is shown pointing to "Token list" dropdown [C56044]', () => { //Spam warning message is removed in beforeEach hook cy.reload() balances.verifySpamWarningNotdisplayed() }) - it('Verify that Token list dropdown down options show/hide spam tokens', () => { + it('Verify that Token list dropdown down options show/hide spam tokens [C56045]', () => { let spamTokens = [ balances.currencyAave, balances.currencyTestTokenA, @@ -126,20 +126,20 @@ describe('Assets tests', () => { main.verifyValuesExist(balances.tokenListTable, spamTokens) }) - it('Verify that "Hide token" button is present and opens the "Hide tokens menu"', () => { + it('Verify that "Hide token" button is present and opens the "Hide tokens menu" [C56046]', () => { balances.selectTokenList(balances.tokenListOptions.allTokens) balances.openHideTokenMenu() balances.verifyEachRowHasCheckbox() }) - it('Verify that checking the checkboxes increases the token selected counter', () => { + it('Verify that checking the checkboxes increases the token selected counter [C56047]', () => { balances.selectTokenList(balances.tokenListOptions.allTokens) balances.openHideTokenMenu() balances.clickOnTokenCheckbox(balances.currencyLink) balances.checkTokenCounter(1) }) - it('Verify that selecting tokens and saving hides them from the table', () => { + it('Verify that selecting tokens and saving hides them from the table [C56048]', () => { balances.selectTokenList(balances.tokenListOptions.allTokens) balances.openHideTokenMenu() balances.clickOnTokenCheckbox(balances.currencyLink) @@ -147,7 +147,7 @@ describe('Assets tests', () => { main.verifyValuesDoNotExist(balances.tokenListTable, [balances.currencyLink]) }) - it('Verify that Cancel closes the menu and does not change the table status', () => { + it('Verify that Cancel closes the menu and does not change the table status [C56049]', () => { balances.selectTokenList(balances.tokenListOptions.allTokens) balances.openHideTokenMenu() balances.clickOnTokenCheckbox(balances.currencyLink) @@ -161,7 +161,7 @@ describe('Assets tests', () => { main.verifyValuesDoNotExist(balances.tokenListTable, [balances.currencyLink, balances.currencyAave]) }) - it('Verify that Deselect All unchecks all tokens from the list', () => { + it('Verify that Deselect All unchecks all tokens from the list [C56050]', () => { balances.selectTokenList(balances.tokenListOptions.allTokens) balances.openHideTokenMenu() balances.clickOnTokenCheckbox(balances.currencyLink) @@ -170,7 +170,7 @@ describe('Assets tests', () => { balances.verifyEachRowHasCheckbox(constants.checkboxStates.unchecked) }) - it('Verify the Hidden tokens counter works for spam tokens', () => { + it('Verify the Hidden tokens counter works for spam tokens [C56051]', () => { balances.selectTokenList(balances.tokenListOptions.allTokens) balances.openHideTokenMenu() balances.clickOnTokenCheckbox(balances.currencyLink) @@ -178,19 +178,19 @@ describe('Assets tests', () => { balances.checkHiddenTokenBtnCounter(1) }) - it('Verify the Hidden tokens counter works for native tokens', () => { + it('Verify the Hidden tokens counter works for native tokens [C56056]', () => { balances.openHideTokenMenu() balances.clickOnTokenCheckbox(constants.tokenNames.sepoliaEther) balances.saveHiddenTokenSelection() balances.checkHiddenTokenBtnCounter(1) }) - it('Verify you can hide tokens from the eye icon in the table rows', () => { + it('Verify you can hide tokens from the eye icon in the table rows [C56053]', () => { balances.selectTokenList(balances.tokenListOptions.allTokens) balances.hideAsset(balances.currencyLink) }) - it('Verify the sorting of "Assets" and "Balance" in the table', () => { + it('Verify the sorting of "Assets" and "Balance" in the table [C56052]', () => { balances.selectTokenList(balances.tokenListOptions.allTokens) balances.verifyTableRows(7) balances.clickOnTokenNameSortBtn() @@ -203,12 +203,12 @@ describe('Assets tests', () => { balances.verifyTokenBalanceOrder('descending') }) - it('Verify that clicking the button with an owner opens the Send funds form ', () => { + it('Verify that clicking the button with an owner opens the Send funds form [C56055]', () => { balances.selectTokenList(balances.tokenListOptions.allTokens) balances.clickOnSendBtn(0) }) - it('Verify that the Send button shows when hovering a row', () => { + it('Verify that the Send button shows when hovering a row [C56054]', () => { owner.clickOnWalletExpandMoreIcon() owner.clickOnDisconnectBtn() balances.selectTokenList(balances.tokenListOptions.allTokens) diff --git a/cypress/e2e/smoke/balances.cy.js b/cypress/e2e/smoke/balances.cy.js index 9c3a924922..70efad56d5 100644 --- a/cypress/e2e/smoke/balances.cy.js +++ b/cypress/e2e/smoke/balances.cy.js @@ -7,7 +7,7 @@ const ASSET_NAME_COLUMN = 0 const TOKEN_AMOUNT_COLUMN = 1 const FIAT_AMOUNT_COLUMN = 2 -describe('Assets > Coins', () => { +describe('Balance tests', () => { // Fiat balance regex const fiatRegex = balances.fiatRegex @@ -28,111 +28,103 @@ describe('Assets > Coins', () => { cy.get(balances.balanceSingleRow).should('have.length', ASSETS_LENGTH) }) - describe('should have different tokens', () => { - it('should have Dai', () => { - balances.verityTokenAltImageIsVisible(balances.currencyDai, balances.currencyDaiAlttext) - balances.verifyAssetNameHasExplorerLink(balances.currencyDai, ASSET_NAME_COLUMN) - balances.verifyBalance(balances.currencyDai, TOKEN_AMOUNT_COLUMN, balances.currencyDaiAlttext) - }) - - it('should have Wrapped Ether', () => { - balances.verityTokenAltImageIsVisible(balances.currencyEther, balances.currencyEtherAlttext) - balances.verifyAssetNameHasExplorerLink(balances.currencyEther, ASSET_NAME_COLUMN) - balances.verifyBalance(balances.currencyEther, TOKEN_AMOUNT_COLUMN, balances.currencyEtherAlttext) - }) - - it('should have USD Coin', () => { - balances.verityTokenAltImageIsVisible(balances.currencyUSDCoin, balances.currencyUSDAlttext) - balances.verifyAssetNameHasExplorerLink(balances.currencyUSDCoin, ASSET_NAME_COLUMN) - balances.verifyBalance(balances.currencyUSDCoin, TOKEN_AMOUNT_COLUMN, balances.currencyUSDAlttext) - }) + it('Verify that token is present: Dai [C56074]', () => { + balances.verityTokenAltImageIsVisible(balances.currencyDai, balances.currencyDaiAlttext) + balances.verifyAssetNameHasExplorerLink(balances.currencyDai, ASSET_NAME_COLUMN) + balances.verifyBalance(balances.currencyDai, TOKEN_AMOUNT_COLUMN, balances.currencyDaiAlttext) }) - describe('values should be formatted as per locale', () => { - it('should have Token and Fiat balances formated as per specification', () => { - balances.verifyTokenBalanceFormat( - balances.currencyDai, - balances.currentcyDaiFormat, - TOKEN_AMOUNT_COLUMN, - FIAT_AMOUNT_COLUMN, - fiatRegex, - ) - - balances.verifyTokenBalanceFormat( - balances.currencyEther, - balances.currentcyEtherFormat, - TOKEN_AMOUNT_COLUMN, - FIAT_AMOUNT_COLUMN, - fiatRegex, - ) - - balances.verifyTokenBalanceFormat( - balances.currencyGörliEther, - balances.currentcyGörliEtherFormat, - TOKEN_AMOUNT_COLUMN, - FIAT_AMOUNT_COLUMN, - fiatRegex, - ) - - balances.verifyTokenBalanceFormat( - balances.currencyUniswap, - balances.currentcyUniswapFormat, - TOKEN_AMOUNT_COLUMN, - FIAT_AMOUNT_COLUMN, - fiatRegex, - ) - - balances.verifyTokenBalanceFormat( - balances.currencyUSDCoin, - balances.currentcyUSDFormat, - TOKEN_AMOUNT_COLUMN, - FIAT_AMOUNT_COLUMN, - fiatRegex, - ) - - balances.verifyTokenBalanceFormat( - balances.currencyGnosis, - balances.currentcyGnosisFormat, - TOKEN_AMOUNT_COLUMN, - FIAT_AMOUNT_COLUMN, - fiatRegex, - ) - - balances.verifyTokenBalanceFormat( - balances.currencyOx, - balances.currentcyOxFormat, - TOKEN_AMOUNT_COLUMN, - FIAT_AMOUNT_COLUMN, - fiatRegex, - ) - }) + it('Verify that token is present: Wrapped Ether [C56075]', () => { + balances.verityTokenAltImageIsVisible(balances.currencyEther, balances.currencyEtherAlttext) + balances.verifyAssetNameHasExplorerLink(balances.currencyEther, ASSET_NAME_COLUMN) + balances.verifyBalance(balances.currencyEther, TOKEN_AMOUNT_COLUMN, balances.currencyEtherAlttext) }) - describe('fiat currency can be changed', () => { - it('should have USD as default currency', () => { - balances.verifyFirstRowDoesNotContainCurrency(balances.currencyEUR, FIAT_AMOUNT_COLUMN) - balances.verifyFirstRowContainsCurrency(balances.currencyUSD, FIAT_AMOUNT_COLUMN) - }) - - it('should allow changing the currency to EUR', () => { - balances.clickOnCurrencyDropdown() - balances.selectCurrency(balances.currencyEUR) - balances.verifyFirstRowDoesNotContainCurrency(balances.currencyUSD, FIAT_AMOUNT_COLUMN) - balances.verifyFirstRowContainsCurrency(balances.currencyEUR, FIAT_AMOUNT_COLUMN) - }) + it('Verify that token is present: USD Coin [C56076]', () => { + balances.verityTokenAltImageIsVisible(balances.currencyUSDCoin, balances.currencyUSDAlttext) + balances.verifyAssetNameHasExplorerLink(balances.currencyUSDCoin, ASSET_NAME_COLUMN) + balances.verifyBalance(balances.currencyUSDCoin, TOKEN_AMOUNT_COLUMN, balances.currencyUSDAlttext) }) - describe('tokens can be manually hidden', () => { - it('hide single token', () => { - balances.hideAsset(balances.currencyDai) - }) - - it('unhide hidden token', () => { - balances.openHideTokenMenu() - balances.clickOnTokenCheckbox(balances.currencyDai) - balances.saveHiddenTokenSelection() - balances.verifyTokenIsVisible(balances.currencyDai) - balances.verifyMenuButtonLabelIsDefault() - }) + it('Verify Token and Fiat balances formatted as per specification [C56077]', () => { + balances.verifyTokenBalanceFormat( + balances.currencyDai, + balances.currentcyDaiFormat, + TOKEN_AMOUNT_COLUMN, + FIAT_AMOUNT_COLUMN, + fiatRegex, + ) + + balances.verifyTokenBalanceFormat( + balances.currencyEther, + balances.currentcyEtherFormat, + TOKEN_AMOUNT_COLUMN, + FIAT_AMOUNT_COLUMN, + fiatRegex, + ) + + balances.verifyTokenBalanceFormat( + balances.currencyGörliEther, + balances.currentcyGörliEtherFormat, + TOKEN_AMOUNT_COLUMN, + FIAT_AMOUNT_COLUMN, + fiatRegex, + ) + + balances.verifyTokenBalanceFormat( + balances.currencyUniswap, + balances.currentcyUniswapFormat, + TOKEN_AMOUNT_COLUMN, + FIAT_AMOUNT_COLUMN, + fiatRegex, + ) + + balances.verifyTokenBalanceFormat( + balances.currencyUSDCoin, + balances.currentcyUSDFormat, + TOKEN_AMOUNT_COLUMN, + FIAT_AMOUNT_COLUMN, + fiatRegex, + ) + + balances.verifyTokenBalanceFormat( + balances.currencyGnosis, + balances.currentcyGnosisFormat, + TOKEN_AMOUNT_COLUMN, + FIAT_AMOUNT_COLUMN, + fiatRegex, + ) + + balances.verifyTokenBalanceFormat( + balances.currencyOx, + balances.currentcyOxFormat, + TOKEN_AMOUNT_COLUMN, + FIAT_AMOUNT_COLUMN, + fiatRegex, + ) + }) + + it('Verify USD is default currency [C56078]', () => { + balances.verifyFirstRowDoesNotContainCurrency(balances.currencyEUR, FIAT_AMOUNT_COLUMN) + balances.verifyFirstRowContainsCurrency(balances.currencyUSD, FIAT_AMOUNT_COLUMN) + }) + + it('Verify currency can be changed to EUR [C56079]', () => { + balances.clickOnCurrencyDropdown() + balances.selectCurrency(balances.currencyEUR) + balances.verifyFirstRowDoesNotContainCurrency(balances.currencyUSD, FIAT_AMOUNT_COLUMN) + balances.verifyFirstRowContainsCurrency(balances.currencyEUR, FIAT_AMOUNT_COLUMN) + }) + + it('Verify a token can be hidden [C56080]', () => { + balances.hideAsset(balances.currencyDai) + }) + + it('Verify a token can be unhidden [C56081]', () => { + balances.openHideTokenMenu() + balances.clickOnTokenCheckbox(balances.currencyDai) + balances.saveHiddenTokenSelection() + balances.verifyTokenIsVisible(balances.currencyDai) + balances.verifyMenuButtonLabelIsDefault() }) }) diff --git a/cypress/e2e/smoke/balances_pagination.cy.js b/cypress/e2e/smoke/balances_pagination.cy.js index 63202a9bd4..e480bf61b4 100644 --- a/cypress/e2e/smoke/balances_pagination.cy.js +++ b/cypress/e2e/smoke/balances_pagination.cy.js @@ -3,7 +3,7 @@ import * as balances from '../pages/balances.pages' const ASSETS_LENGTH = 8 -describe('Balance pagination tests', () => { +describe('Balance tests', () => { before(() => { cy.clearLocalStorage() // Open the Safe used for testing @@ -18,7 +18,7 @@ describe('Balance pagination tests', () => { cy.contains('div', 'All tokens').click() }) - it('should allow changing rows per page and navigate to next and previous page', () => { + it('Verify a user can change rows per page and navigate to next and previous page [C56073]', () => { balances.verifyInitialTableState() balances.changeTo10RowsPerPage() balances.verifyTableHas10Rows() diff --git a/cypress/e2e/smoke/batch_tx.cy.js b/cypress/e2e/smoke/batch_tx.cy.js index ef9baa461b..c1c367d17f 100644 --- a/cypress/e2e/smoke/batch_tx.cy.js +++ b/cypress/e2e/smoke/batch_tx.cy.js @@ -6,7 +6,7 @@ const currentNonce = 3 const funds_first_tx = '0.001' const funds_second_tx = '0.002' -describe('Create batch transaction', () => { +describe('Batch transaction tests', () => { before(() => { cy.clearLocalStorage() cy.visit(constants.homeUrl + constants.TEST_SAFE) @@ -14,17 +14,17 @@ describe('Create batch transaction', () => { cy.contains(constants.goerlyE2EWallet, { timeout: 10000 }) }) - it('Should open an empty batch list', () => { + it('Verify empty batch list can be opened [C56082]', () => { batch.openBatchtransactionsModal() batch.openNewTransactionModal() }) - it('Should see the add batch button in a transaction form', () => { + it('Verify the Add batch button is present in a transaction form [C56084]', () => { //The "true" is to validate that the add to batch button is not visible if "Yes, execute" is selected batch.addToBatch(constants.EOA, currentNonce, funds_first_tx, true) }) - it('Should see the transaction being added to the batch', () => { + it('Verify a transaction can be added to the batch [C56085]', () => { cy.contains(batch.transactionAddedToBatchStr).should('be.visible') //The batch button in the header shows the transaction count batch.verifyBatchIconCount(1) @@ -32,7 +32,7 @@ describe('Create batch transaction', () => { batch.verifyAmountTransactionsInBatch(1) }) - it('Should add a second transaction to the batch', () => { + it('Verify a second transaction can be added to the batch [C56086]', () => { batch.openNewTransactionModal() batch.addToBatch(constants.EOA, currentNonce, funds_second_tx) batch.verifyBatchIconCount(2) @@ -40,11 +40,7 @@ describe('Create batch transaction', () => { batch.verifyAmountTransactionsInBatch(2) }) - it.skip('Should swap transactions order', () => { - //TODO - }) - - it('Should confirm the batch and see 2 transactions in the form', () => { + it('Verify the batch can be confirmed and related transactions exist in the form [C56088]', () => { batch.clickOnConfirmBatchBtn() batch.verifyBatchTransactionsCount(2) cy.contains(funds_first_tx).parents('ul').as('TransactionList') @@ -52,7 +48,7 @@ describe('Create batch transaction', () => { cy.get('@TransactionList').find('li').eq(1).find('span').eq(0).contains(funds_second_tx) }) - it('Should remove a transaction from the batch', () => { + it('Verify a transaction can be removed from the batch [C56089]', () => { batch.clickOnBatchCounter() cy.contains(batch.batchedTransactionsStr).should('be.visible').parents('aside').find('ul > li').as('BatchList') cy.get('@BatchList').find(batch.deleteTransactionbtn).eq(0).click() diff --git a/cypress/e2e/smoke/beamer.cy.js b/cypress/e2e/smoke/beamer.cy.js index 412a8b5d8a..034e70e9e5 100644 --- a/cypress/e2e/smoke/beamer.cy.js +++ b/cypress/e2e/smoke/beamer.cy.js @@ -2,14 +2,14 @@ import * as constants from '../../support/constants' import * as addressbook from '../pages/address_book.page' import * as main from '../../e2e/pages/main.page' -describe('Beamer', () => { +describe('Beamer tests', () => { before(() => { cy.clearLocalStorage() cy.visit(constants.addressBookUrl + constants.GOERLI_TEST_SAFE) main.acceptCookies() }) - it.skip('should require accept "Updates" cookies to display Beamer', () => { + it.skip('Verify "Updates" cookie acceptance is required before displaying Beamer [C56090]', () => { addressbook.clickOnWhatsNewBtn() addressbook.acceptBeamerCookies() addressbook.verifyBeamerIsChecked() diff --git a/cypress/e2e/smoke/create_safe_simple.cy.js b/cypress/e2e/smoke/create_safe_simple.cy.js index a135d89ddb..9dc90f4723 100644 --- a/cypress/e2e/smoke/create_safe_simple.cy.js +++ b/cypress/e2e/smoke/create_safe_simple.cy.js @@ -4,14 +4,14 @@ import * as createwallet from '../pages/create_wallet.pages' import * as owner from '../pages/owners.pages' -describe('Create Safe tests', () => { +describe('Safe creation tests', () => { beforeEach(() => { cy.visit(constants.createNewSafeSepoliaUrl) cy.clearLocalStorage() main.acceptCookies() }) - it('C55742: Verify a Wallet can be connected', () => { + it('Verify a Wallet can be connected [C56101]', () => { owner.waitForConnectionStatus() cy.visit(constants.welcomeUrl) owner.clickOnWalletExpandMoreIcon() @@ -21,7 +21,7 @@ describe('Create Safe tests', () => { createwallet.connectWallet() }) - it('C55743: Verify Next button is disabled until switching to network is done', () => { + it('Verify Next button is disabled until switching to network is done [C56102]', () => { owner.waitForConnectionStatus() createwallet.selectNetwork(constants.networks.ethereum) createwallet.checkNetworkChangeWarningMsg() @@ -30,44 +30,44 @@ describe('Create Safe tests', () => { createwallet.verifyNextBtnIsEnabled() }) - it('C32378: Verify that a new Wallet has default name related to the selected network', () => { + it('Verify that a new Wallet has default name related to the selected network [C56099]', () => { owner.waitForConnectionStatus() createwallet.verifyDefaultWalletName(createwallet.defaltSepoliaPlaceholder) }) - it('C4790: Verify error message is displayed if wallet name input exceeds 50 characters', () => { + it('Verify error message is displayed if wallet name input exceeds 50 characters [C56098]', () => { owner.waitForConnectionStatus() createwallet.typeWalletName(main.generateRandomString(51)) owner.verifyErrorMsgInvalidAddress(constants.addressBookErrrMsg.exceedChars) }) - it('C55744: Verify there is no error message is displayed if wallet name input contains less than 50 characters', () => { + it('Verify there is no error message is displayed if wallet name input contains less than 50 characters [C56100]', () => { owner.waitForConnectionStatus() createwallet.typeWalletName(main.generateRandomString(50)) owner.verifyValidWalletName(constants.addressBookErrrMsg.exceedChars) }) - it('C852: Verify current connected account is shown as default owner', () => { + it('Verify current connected account is shown as default owner [C56091]', () => { owner.waitForConnectionStatus() owner.clickOnNextBtn() owner.verifyExistingOwnerAddress(0, constants.DEFAULT_OWNER_ADDRESS) }) - it('C4791: Verify error message is displayed if owner name input exceeds 50 characters', () => { + it('Verify error message is displayed if owner name input exceeds 50 characters [C56092]', () => { owner.waitForConnectionStatus() owner.clickOnNextBtn() owner.typeExistingOwnerName(0, main.generateRandomString(51)) owner.verifyErrorMsgInvalidAddress(constants.addressBookErrrMsg.exceedChars) }) - it('C55745: Verify there is no error message is displayed if owner name input contains less than 50 characters', () => { + it('Verify there is no error message is displayed if owner name input contains less than 50 characters [C56093]', () => { owner.waitForConnectionStatus() owner.clickOnNextBtn() owner.typeExistingOwnerName(0, main.generateRandomString(50)) owner.verifyValidWalletName(constants.addressBookErrrMsg.exceedChars) }) - it('C55746: Verify Add and Remove Owner Row works as expected', () => { + it('Verify Add and Remove Owner Row works as expected [C56094]', () => { owner.waitForConnectionStatus() owner.clickOnNextBtn() createwallet.clickOnAddNewOwnerBtn() @@ -80,7 +80,7 @@ describe('Create Safe tests', () => { owner.verifyNumberOfOwners(2) }) - it('C55748: Verify Threshold Setup', () => { + it('Verify Threshold Setup [C56096]', () => { owner.waitForConnectionStatus() owner.clickOnNextBtn() createwallet.clickOnAddNewOwnerBtn() @@ -93,7 +93,7 @@ describe('Create Safe tests', () => { owner.verifyThresholdLimit(1, 2) }) - it('C55749: Verify data persistence', () => { + it('Verify data persistence [C56103]', () => { const ownerName = 'David' owner.waitForConnectionStatus() createwallet.typeWalletName(createwallet.walletName) @@ -123,13 +123,13 @@ describe('Create Safe tests', () => { createwallet.verifyEstimatedFeeInSummaryStep() }) - it('C55750: Verify tip is displayed on right side for threshold 1/1', () => { + it('Verify tip is displayed on right side for threshold 1/1 [C56097]', () => { owner.waitForConnectionStatus() owner.clickOnNextBtn() createwallet.verifyPolicy1_1() }) - it('C55747: Verify address input validation rules', () => { + it('Verify address input validation rules [C56095]', () => { owner.waitForConnectionStatus() owner.clickOnNextBtn() createwallet.clickOnAddNewOwnerBtn() diff --git a/cypress/e2e/smoke/create_tx.cy.js b/cypress/e2e/smoke/create_tx.cy.js index 0e1dab05cb..b79a6afac8 100644 --- a/cypress/e2e/smoke/create_tx.cy.js +++ b/cypress/e2e/smoke/create_tx.cy.js @@ -5,14 +5,14 @@ import * as createtx from '../../e2e/pages/create_tx.pages' const sendValue = 0.00002 const currentNonce = 3 -describe('Queue a transaction on 1/N', () => { +describe('Create transactions tests', () => { before(() => { cy.clearLocalStorage() cy.visit(constants.homeUrl + constants.TEST_SAFE) main.acceptCookies() }) - it('should create a new send token transaction', () => { + it('Verify a new send token transaction can be created [C56104]', () => { createtx.clickOnNewtransactionBtn() createtx.clickOnSendTokensBtn() createtx.typeRecipientAddress(constants.EOA) @@ -23,7 +23,7 @@ describe('Queue a transaction on 1/N', () => { createtx.clickOnNextBtn() }) - it('should review, edit and submit the tx', () => { + it('Verify a transaction can be reviewed, edited and submitted [C56105]', () => { createtx.verifySubmitBtnIsEnabled() cy.wait(1000) createtx.verifyNativeTokenTransfer() @@ -36,7 +36,7 @@ describe('Queue a transaction on 1/N', () => { createtx.clickOnSignTransactionBtn() }) - it('should click on the notification and see the transaction queued', () => { + it('Verify that clicking on notification shows the transaction in queue [C56106]', () => { createtx.waitForProposeRequest() createtx.clickViewTransaction() createtx.verifySingleTxPage() diff --git a/cypress/e2e/smoke/dashboard.cy.js b/cypress/e2e/smoke/dashboard.cy.js index f4ce1b6ec1..73a52ebca8 100644 --- a/cypress/e2e/smoke/dashboard.cy.js +++ b/cypress/e2e/smoke/dashboard.cy.js @@ -2,7 +2,7 @@ import * as constants from '../../support/constants' import * as dashboard from '../pages/dashboard.pages' import * as main from '../pages/main.page' -describe('Dashboard', () => { +describe('Dashboard tests', () => { before(() => { cy.clearLocalStorage() cy.visit(constants.homeUrl + constants.TEST_SAFE) @@ -10,19 +10,19 @@ describe('Dashboard', () => { dashboard.verifyConnectTransactStrIsVisible() }) - it('should display the overview widget', () => { + it('Verify the overview widget is displayed [C56107]', () => { dashboard.verifyOverviewWidgetData() }) - it('should display the tx queue widget', () => { + it('Verify the transaction queue widget is displayed [C56108]', () => { dashboard.verifyTxQueueWidget() }) - it('should display the featured Safe Apps', () => { + it('Verify the featured Safe Apps are displayed [C56109]', () => { dashboard.verifyFeaturedAppsSection() }) - it('should show the Safe Apps Section', () => { + it('Verify the Safe Apps Section is displayed [C56110]', () => { dashboard.verifySafeAppsSection() }) }) diff --git a/cypress/e2e/smoke/import_export_data.cy.js b/cypress/e2e/smoke/import_export_data.cy.js index 55ea6fedae..4d3c405991 100644 --- a/cypress/e2e/smoke/import_export_data.cy.js +++ b/cypress/e2e/smoke/import_export_data.cy.js @@ -3,7 +3,7 @@ import * as file from '../pages/import_export.pages' import * as main from '../pages/main.page' import * as constants from '../../support/constants' -describe('Import Export Data', () => { +describe('Import Export Data tests', () => { before(() => { cy.clearLocalStorage() cy.visit(constants.welcomeUrl) @@ -11,7 +11,7 @@ describe('Import Export Data', () => { file.verifyImportBtnIsVisible() }) - it('Uploads test file and access safe', () => { + it('Verify Safe can be accessed after test file upload [C56111]', () => { const filePath = '../fixtures/data_import.json' const safe = 'safe 1 goerli' @@ -23,12 +23,12 @@ describe('Import Export Data', () => { file.clickOnClosePushNotificationsBanner() }) - it("Verify safe's address book imported data", () => { + it('Verify address book imported data [C56112]', () => { file.clickOnAddressBookBtn() file.verifyImportedAddressBookData() }) - it('Verify pinned apps', () => { + it('Verify pinned apps [C56113]', () => { const appNames = ['Drain Account', 'Transaction Builder'] file.clickOnAppsBtn() @@ -36,7 +36,7 @@ describe('Import Export Data', () => { file.verifyAppsAreVisible(appNames) }) - it('Verify imported data in settings', () => { + it('Verify imported data in settings [C56114]', () => { const unchecked = [file.prependChainPrefixStr, file.copyAddressStr] const checked = [file.darkModeStr] file.clickOnSettingsBtn() @@ -45,7 +45,7 @@ describe('Import Export Data', () => { file.verifyCheckboxes(checked, true) }) - it('Verifies data for export in Data tab', () => { + it('Verifies data for export in Data tab [C56115]', () => { file.clickOnShowMoreTabsBtn() file.verifDataTabBtnIsVisible() file.clickOnDataTab() diff --git a/cypress/e2e/smoke/landing.cy.js b/cypress/e2e/smoke/landing.cy.js index 751f1e6cfa..5482541966 100644 --- a/cypress/e2e/smoke/landing.cy.js +++ b/cypress/e2e/smoke/landing.cy.js @@ -1,6 +1,6 @@ import * as constants from '../../support/constants' -describe('Landing page', () => { - it('redirects to welcome page', () => { +describe('Landing page tests', () => { + it('Verify a user will be redirected to welcome page [C56116]', () => { cy.clearLocalStorage() cy.visit('/') cy.url().should('include', constants.welcomeUrl) diff --git a/cypress/e2e/smoke/load_safe.cy.js b/cypress/e2e/smoke/load_safe.cy.js index b346898ccb..4ea6015380 100644 --- a/cypress/e2e/smoke/load_safe.cy.js +++ b/cypress/e2e/smoke/load_safe.cy.js @@ -18,7 +18,7 @@ const INVALID_ADDRESS_ERROR_MSG = 'Address given is not a valid Safe address' const OWNER_ENS_DEFAULT_NAME = 'test20.eth' const OWNER_ADDRESS = constants.EOA -describe('Load existing Safe', () => { +describe('Load Safe tests', () => { before(() => { cy.clearLocalStorage() cy.visit(constants.welcomeUrl) @@ -27,7 +27,7 @@ describe('Load existing Safe', () => { cy.wait(2000) }) - it('should allow choosing the network where the Safe exists', () => { + it('Verify a network can be selected in the Safe [C56117]', () => { safe.clickNetworkSelector(constants.networks.goerli) safe.selectPolygon() cy.wait(2000) @@ -35,7 +35,7 @@ describe('Load existing Safe', () => { safe.selectGoerli() }) - it('should accept name the Safe', () => { + it('Verify only valid Safe name can be accepted [C56118]', () => { // alias the address input label cy.get('input[name="address"]').parent().prev('label').as('addressLabel') @@ -64,26 +64,17 @@ describe('Load existing Safe', () => { safe.clickOnNextBtn() }) - // TODO: register the goerli ENS for the Safe owner when possible - it.skip('should resolve ENS names for Safe owners', () => { - // Finds ENS name as one of the owners (give some time to the resolver) - cy.findByPlaceholderText(OWNER_ENS_DEFAULT_NAME, { timeout: 20000 }) - .parents('.MuiGrid-container') - // Name is matched by the correct address - .contains(OWNER_ADDRESS) - }) - - it('should set custom name in the first owner', () => { + it('Verify custom name in the first owner an be set [C56120]', () => { createwallet.typeOwnerName(testOwnerName, 0) safe.clickOnNextBtn() }) - it('should have Safe and owner names in the Review step', () => { + it('Verify Safe and owner names are displayed in the Review step [C56121]', () => { safe.verifyDataInReviewSection(testSafeName, testOwnerName) safe.clickOnAddBtn() }) - it('should load successfully the custom Safe name', () => { + it('Verify the custom Safe name is successfully loaded [C56122]', () => { main.verifyHomeSafeUrl(constants.GOERLI_TEST_SAFE) safe.veriySidebarSafeNameIsVisible(testSafeName) safe.verifyOwnerNamePresentInSettings(testOwnerName) diff --git a/cypress/e2e/smoke/nfts.cy.js b/cypress/e2e/smoke/nfts.cy.js index 55205fadb6..b677686f8d 100644 --- a/cypress/e2e/smoke/nfts.cy.js +++ b/cypress/e2e/smoke/nfts.cy.js @@ -7,7 +7,7 @@ const nftsAddress = '0x0000...816D' const nftsTokenID = 'Kitaro World #261' const nftsLink = 'https://testnets.opensea.io/assets/0x000000000faE8c6069596c9C805A1975C657816D/443' -describe('Assets > NFTs', () => { +describe('NFTs tests', () => { before(() => { cy.clearLocalStorage() cy.visit(constants.balanceNftsUrl + constants.GOERLI_TEST_SAFE) @@ -15,37 +15,35 @@ describe('Assets > NFTs', () => { cy.contains(constants.goerlyE2EWallet) }) - describe('should have NFTs', () => { - it('should have NFTs in the table', () => { - nfts.verifyNFTNumber(5) - }) + it('Verify that NFTs exist in the table [C56123]', () => { + nfts.verifyNFTNumber(5) + }) - it('should have info in the NFT row', () => { - nfts.verifyDataInTable(nftsName, nftsAddress, nftsTokenID, nftsLink) - }) + it('Verify NFT row contains data [C56124]', () => { + nfts.verifyDataInTable(nftsName, nftsAddress, nftsTokenID, nftsLink) + }) - it('should open an NFT preview', () => { - nfts.openFirstNFT() - nfts.verifyNameInNFTModal(nftsTokenID) - nfts.preventBaseMainnetGoerliFromBeingSelected() - nfts.verifyNFTModalLink(nftsLink) - nfts.closeNFTModal() - }) + it('Verify NFT preview window can be opened [C56125]', () => { + nfts.openFirstNFT() + nfts.verifyNameInNFTModal(nftsTokenID) + nfts.preventBaseMainnetGoerliFromBeingSelected() + nfts.verifyNFTModalLink(nftsLink) + nfts.closeNFTModal() + }) - it('should not open an NFT preview for NFTs without one', () => { - nfts.clickOnThirdNFT() - nfts.verifyNFTModalDoesNotExist() - }) + it('Verify NFT open does not open if no NFT exits [C56126]', () => { + nfts.clickOnThirdNFT() + nfts.verifyNFTModalDoesNotExist() + }) - it('should select and send multiple NFTs', () => { - nfts.verifyInitialNFTData() - nfts.selectNFTs(3) - nfts.deselectNFTs([2], 3) - nfts.sendNFT(2) - nfts.verifyNFTModalData() - nfts.typeRecipientAddress(constants.GOERLI_TEST_SAFE) - nfts.clikOnNextBtn() - nfts.verifyReviewModalData(2) - }) + it('Verify multipls NFTs can be selected and reviewed [C56127]', () => { + nfts.verifyInitialNFTData() + nfts.selectNFTs(3) + nfts.deselectNFTs([2], 3) + nfts.sendNFT(2) + nfts.verifyNFTModalData() + nfts.typeRecipientAddress(constants.GOERLI_TEST_SAFE) + nfts.clikOnNextBtn() + nfts.verifyReviewModalData(2) }) }) diff --git a/cypress/e2e/smoke/remove_owner.cy.js b/cypress/e2e/smoke/remove_owner.cy.js index ccadce800e..bb00c61d9d 100644 --- a/cypress/e2e/smoke/remove_owner.cy.js +++ b/cypress/e2e/smoke/remove_owner.cy.js @@ -2,7 +2,7 @@ import * as constants from '../../support/constants' import * as main from '../../e2e/pages/main.page' import * as owner from '../pages/owners.pages' -describe('Remove an owner tests', () => { +describe('Remove Owners tests', () => { beforeEach(() => { cy.visit(constants.setupUrl + constants.SEPOLIA_TEST_SAFE_1) cy.clearLocalStorage() @@ -10,19 +10,19 @@ describe('Remove an owner tests', () => { cy.contains(owner.safeAccountNonceStr, { timeout: 10000 }) }) - it('Verify that "Remove" icon is visible', () => { + it('Verify that "Remove" icon is visible [C56030]', () => { cy.visit(constants.setupUrl + constants.SEPOLIA_TEST_SAFE_3) owner.verifyRemoveBtnIsEnabled().should('have.length', 2) }) - it('Verify Tooltip displays correct message for Non-Owner', () => { + it('Verify Tooltip displays correct message for Non-Owner [C56037]', () => { cy.visit(constants.setupUrl + constants.SEPOLIA_TEST_SAFE_4) owner.waitForConnectionStatus() owner.hoverOverDeleteOwnerBtn(0) owner.verifyTooltipLabel(owner.nonOwnerErrorMsg) }) - it('Verify Tooltip displays correct message for disconnected user', () => { + it('Verify Tooltip displays correct message for disconnected user [C56031]', () => { cy.visit(constants.setupUrl + constants.SEPOLIA_TEST_SAFE_3) owner.waitForConnectionStatus() owner.clickOnWalletExpandMoreIcon() @@ -31,13 +31,13 @@ describe('Remove an owner tests', () => { owner.verifyTooltipLabel(owner.disconnectedUserErrorMsg) }) - it('Verify owner removal form can be opened', () => { + it('Verify owner removal form can be opened [C56032]', () => { cy.visit(constants.setupUrl + constants.SEPOLIA_TEST_SAFE_3) owner.waitForConnectionStatus() owner.openRemoveOwnerWindow(1) }) - it('Verify threshold input displays the upper limit as the current safe number of owners minus one', () => { + it('Verify threshold input displays the upper limit as the current safe number of owners minus one [C56033]', () => { cy.visit(constants.setupUrl + constants.SEPOLIA_TEST_SAFE_3) owner.waitForConnectionStatus() owner.openRemoveOwnerWindow(1) @@ -45,7 +45,7 @@ describe('Remove an owner tests', () => { owner.getThresholdOptions().should('have.length', 1) }) - it('Verify owner deletion confirmation is displayed ', () => { + it('Verify owner deletion confirmation is displayed [C56034]', () => { cy.visit(constants.setupUrl + constants.SEPOLIA_TEST_SAFE_3) owner.waitForConnectionStatus() owner.openRemoveOwnerWindow(1) diff --git a/cypress/e2e/smoke/replace_owner.cy.js b/cypress/e2e/smoke/replace_owner.cy.js index dab3cd3e59..d16935dc93 100644 --- a/cypress/e2e/smoke/replace_owner.cy.js +++ b/cypress/e2e/smoke/replace_owner.cy.js @@ -3,7 +3,7 @@ import * as main from '../../e2e/pages/main.page' import * as owner from '../pages/owners.pages' import * as addressBook from '../pages/address_book.page' -describe('Replace an owner tests', () => { +describe('Replace Owners tests', () => { beforeEach(() => { cy.visit(constants.setupUrl + constants.SEPOLIA_TEST_SAFE_1) cy.clearLocalStorage() @@ -11,18 +11,18 @@ describe('Replace an owner tests', () => { cy.contains(owner.safeAccountNonceStr, { timeout: 10000 }) }) - it('Verify that "Replace" icon is visible', () => { + it('Verify that "Replace" icon is visible [C55998]', () => { owner.verifyReplaceBtnIsEnabled() }) - it('Verify Tooltip displays correct message for Non-Owner', () => { + it('Verify Tooltip displays correct message for Non-Owner [C56016]', () => { cy.visit(constants.setupUrl + constants.SEPOLIA_TEST_SAFE_2) owner.waitForConnectionStatus() owner.hoverOverReplaceOwnerBtn() owner.verifyTooltipLabel(owner.nonOwnerErrorMsg) }) - it('Verify Tooltip displays correct message for disconnected user', () => { + it('Verify Tooltip displays correct message for disconnected user [C56006]', () => { owner.waitForConnectionStatus() owner.clickOnWalletExpandMoreIcon() owner.clickOnDisconnectBtn() @@ -30,19 +30,19 @@ describe('Replace an owner tests', () => { owner.verifyTooltipLabel(owner.disconnectedUserErrorMsg) }) - it('Verify that the owner replacement form is opened', () => { + it('Verify that the owner replacement form is opened [C56007]', () => { owner.waitForConnectionStatus() owner.openReplaceOwnerWindow() }) - it('Verify max characters in name field', () => { + it('Verify max characters in name field [C56008]', () => { owner.waitForConnectionStatus() owner.openReplaceOwnerWindow() owner.typeOwnerName(main.generateRandomString(51)) owner.verifyErrorMsgInvalidAddress(constants.addressBookErrrMsg.exceedChars) }) - it('Verify that Address input auto-fills with related value', () => { + it('Verify that Address input auto-fills with related value [C56009]', () => { cy.visit(constants.addressBookUrl + constants.SEPOLIA_TEST_SAFE_1) addressBook.clickOnCreateEntryBtn() addressBook.typeInName(constants.addresBookContacts.user1.name) @@ -57,7 +57,7 @@ describe('Replace an owner tests', () => { owner.verifyNewOwnerName(constants.addresBookContacts.user1.name) }) - it('Verify that Name field not mandatory. Verify confirmation for owner replacement is displayed', () => { + it('Verify that Name field not mandatory. Verify confirmation for owner replacement is displayed [C56011]', () => { owner.waitForConnectionStatus() owner.openReplaceOwnerWindow() owner.typeOwnerAddress(constants.SEPOLIA_OWNER_2) @@ -65,7 +65,7 @@ describe('Replace an owner tests', () => { owner.verifyConfirmTransactionWindowDisplayed() }) - it('Verify that Name field not mandatory', () => { + it('Verify relevant error messages are displayed in Address input [C56012]', () => { owner.waitForConnectionStatus() owner.openReplaceOwnerWindow() owner.typeOwnerAddress(main.generateRandomString(10)) diff --git a/cypress/e2e/smoke/tx_history.cy.js b/cypress/e2e/smoke/tx_history.cy.js index 482840fc1e..a379ac27c5 100644 --- a/cypress/e2e/smoke/tx_history.cy.js +++ b/cypress/e2e/smoke/tx_history.cy.js @@ -10,7 +10,7 @@ const str1 = 'True' const str2 = '1337' const str3 = '5688' -describe('Transaction history', () => { +describe('Transaction history tests', () => { before(() => { cy.clearLocalStorage() // Go to the test Safe transaction history @@ -18,7 +18,7 @@ describe('Transaction history', () => { main.acceptCookies() }) - it('should display October 9th transactions', () => { + it('Verify October 9th transactions are displayed [C56128]', () => { const DATE = 'Oct 9, 2022' const NEXT_DATE_LABEL = 'Feb 8, 2022' const amount = '0.25 GOR' @@ -101,7 +101,7 @@ describe('Transaction history', () => { }) }) - it('should expand/collapse all actions', () => { + it('Verify all actions can be expanded/collapsed [C56129]', () => { createTx.clickOnTransactionExpandableItem('Mar 24, 2023', () => { createTx.verifyTransactionStrNotVible(str1) createTx.verifyTransactionStrNotVible(str2)