diff --git a/cypress/e2e/prodhealthcheck/add_owner.cy.js b/cypress/e2e/prodhealthcheck/add_owner.cy.js new file mode 100644 index 0000000000..23695d0165 --- /dev/null +++ b/cypress/e2e/prodhealthcheck/add_owner.cy.js @@ -0,0 +1,33 @@ +import * as constants from '../../support/constants' +import * as main from '../../e2e/pages/main.page' +import * as owner from '../pages/owners.pages' +import { getSafes, CATEGORIES } from '../../support/safes/safesHandler.js' +import * as wallet from '../../support/utils/wallet.js' + +let staticSafes = [] +const walletCredentials = JSON.parse(Cypress.env('CYPRESS_WALLET_CREDENTIALS')) +const signer = walletCredentials.OWNER_4_PRIVATE_KEY + +describe('Add Owners tests', () => { + before(async () => { + staticSafes = await getSafes(CATEGORIES.static) + }) + + beforeEach(() => { + cy.visit(constants.prodbaseUrl + constants.setupUrl + staticSafes.SEP_STATIC_SAFE_4) + cy.clearLocalStorage() + main.acceptCookies() + cy.contains(owner.safeAccountNonceStr, { timeout: 10000 }) + }) + + // TODO: Added to prod + it('Verify add owner button is disabled for disconnected user', () => { + owner.verifyAddOwnerBtnIsDisabled() + }) + + // TODO: Added to prod + it.skip('Verify the Add New Owner Form can be opened', () => { + wallet.connectSigner(signer) + owner.openAddOwnerWindow() + }) +}) diff --git a/cypress/e2e/prodhealthcheck/create_tx.cy.js b/cypress/e2e/prodhealthcheck/create_tx.cy.js new file mode 100644 index 0000000000..9e36b14b7a --- /dev/null +++ b/cypress/e2e/prodhealthcheck/create_tx.cy.js @@ -0,0 +1,48 @@ +import * as constants from '../../support/constants' +import * as main from '../../e2e/pages/main.page' +import * as createtx from '../../e2e/pages/create_tx.pages' +import { getSafes, CATEGORIES } from '../../support/safes/safesHandler.js' +import * as wallet from '../../support/utils/wallet.js' + +let staticSafes = [] + +const sendValue = 0.00002 + +const walletCredentials = JSON.parse(Cypress.env('CYPRESS_WALLET_CREDENTIALS')) +const signer = walletCredentials.OWNER_4_PRIVATE_KEY + +function happyPathToStepTwo() { + createtx.typeRecipientAddress(constants.EOA) + createtx.clickOnTokenselectorAndSelectSepoliaEth() + createtx.setSendValue(sendValue) + createtx.clickOnNextBtn() +} + +describe.skip('Create transactions tests', () => { + before(async () => { + staticSafes = await getSafes(CATEGORIES.static) + }) + + beforeEach(() => { + cy.clearLocalStorage() + cy.visit(constants.prodbaseUrl + constants.BALANCE_URL + staticSafes.SEP_STATIC_SAFE_6) + main.acceptCookies() + wallet.connectSigner(signer) + createtx.clickOnNewtransactionBtn() + createtx.clickOnSendTokensBtn() + }) + + // TODO: Added to prod + it('Verify submitting a tx and that clicking on notification shows the transaction in queue', () => { + happyPathToStepTwo() + createtx.verifySubmitBtnIsEnabled() + createtx.changeNonce(14) + cy.wait(1000) + createtx.clickOnSignTransactionBtn() + createtx.waitForProposeRequest() + createtx.clickViewTransaction() + createtx.verifySingleTxPage() + createtx.verifyQueueLabel() + createtx.verifyTransactionSummary(sendValue) + }) +}) diff --git a/cypress/e2e/prodhealthcheck/load_safe.cy.js b/cypress/e2e/prodhealthcheck/load_safe.cy.js new file mode 100644 index 0000000000..c9e78740ca --- /dev/null +++ b/cypress/e2e/prodhealthcheck/load_safe.cy.js @@ -0,0 +1,45 @@ +import 'cypress-file-upload' +import * as constants from '../../support/constants' +import * as main from '../pages/main.page' +import * as safe from '../pages/load_safe.pages' +import * as createwallet from '../pages/create_wallet.pages' +import { getSafes, CATEGORIES } from '../../support/safes/safesHandler.js' + +let staticSafes = [] + +const testSafeName = 'Test safe name' +const testOwnerName = 'Test Owner Name' +// TODO +const SAFE_ENS_NAME = 'test20.eth' +const SAFE_ENS_NAME_TRANSLATED = constants.EOA + +const EOA_ADDRESS = constants.EOA + +const INVALID_ADDRESS_ERROR_MSG = 'Address given is not a valid Safe address' + +// TODO +const OWNER_ENS_DEFAULT_NAME = 'test20.eth' +const OWNER_ADDRESS = constants.EOA + +describe('Load Safe tests', () => { + before(async () => { + staticSafes = await getSafes(CATEGORIES.static) + }) + + beforeEach(() => { + cy.clearLocalStorage() + cy.visit(constants.prodbaseUrl + constants.loadNewSafeSepoliaUrl) + main.acceptCookies() + cy.wait(2000) + }) + + // TODO: Added to prod + it('Verify Safe and owner names are displayed in the Review step', () => { + safe.inputNameAndAddress(testSafeName, staticSafes.SEP_STATIC_SAFE_4) + safe.clickOnNextBtn() + createwallet.typeOwnerName(testOwnerName, 0) + safe.clickOnNextBtn() + safe.verifyDataInReviewSection(testSafeName, testOwnerName) + safe.clickOnAddBtn() + }) +}) diff --git a/cypress/e2e/prodhealthcheck/messages_onchain.cy.js b/cypress/e2e/prodhealthcheck/messages_onchain.cy.js new file mode 100644 index 0000000000..1db0a3c90a --- /dev/null +++ b/cypress/e2e/prodhealthcheck/messages_onchain.cy.js @@ -0,0 +1,30 @@ +import * as constants from '../../support/constants.js' +import * as main from '../pages/main.page.js' +import * as createTx from '../pages/create_tx.pages.js' +import * as msg_data from '../../fixtures/txmessages_data.json' +import { getSafes, CATEGORIES } from '../../support/safes/safesHandler.js' + +let staticSafes = [] + +const typeMessagesOnchain = msg_data.type.onChain + +describe('Onchain Messages tests', () => { + before(async () => { + staticSafes = await getSafes(CATEGORIES.static) + }) + + beforeEach(() => { + cy.clearLocalStorage() + cy.visit(constants.prodbaseUrl + constants.transactionsHistoryUrl + staticSafes.SEP_STATIC_SAFE_10) + main.acceptCookies() + }) + + // TODO: Added to prod + it('Verify summary for signed on-chain message', () => { + createTx.verifySummaryByName( + typeMessagesOnchain.contractName, + [typeMessagesOnchain.success, typeMessagesOnchain.signMessage], + typeMessagesOnchain.altTmage, + ) + }) +}) diff --git a/cypress/e2e/prodhealthcheck/nfts.cy.js b/cypress/e2e/prodhealthcheck/nfts.cy.js new file mode 100644 index 0000000000..8056c7ac37 --- /dev/null +++ b/cypress/e2e/prodhealthcheck/nfts.cy.js @@ -0,0 +1,89 @@ +import * as constants from '../../support/constants' +import * as main from '../pages/main.page' +import * as nfts from '../pages/nfts.pages' +import * as createTx from '../pages/create_tx.pages' +import { getSafes, CATEGORIES } from '../../support/safes/safesHandler.js' +import * as wallet from '../../support/utils/wallet.js' + +const singleNFT = ['safeTransferFrom'] +const multipleNFT = ['multiSend'] +const multipleNFTAction = 'safeTransferFrom' +const NFTSentName = 'GTT #22' + +let nftsSafes, + staticSafes = [] + +const walletCredentials = JSON.parse(Cypress.env('CYPRESS_WALLET_CREDENTIALS')) +const signer = walletCredentials.OWNER_4_PRIVATE_KEY + +describe.skip('NFTs tests', () => { + before(() => { + getSafes(CATEGORIES.nfts) + .then((nfts) => { + nftsSafes = nfts + return getSafes(CATEGORIES.static) + }) + .then((statics) => { + staticSafes = statics + }) + }) + + beforeEach(() => { + cy.clearLocalStorage() + cy.visit(constants.prodbaseUrl + constants.balanceNftsUrl + staticSafes.SEP_STATIC_SAFE_2) + main.acceptCookies() + wallet.connectSigner(signer) + nfts.waitForNftItems(2) + }) + + // TODO: Added to prod + // TODO: Add Sign action + it('Verify multipls NFTs can be selected and reviewed', () => { + nfts.verifyInitialNFTData() + nfts.selectNFTs(3) + nfts.deselectNFTs([2], 3) + nfts.sendNFT() + nfts.verifyNFTModalData() + nfts.typeRecipientAddress(staticSafes.SEP_STATIC_SAFE_1) + nfts.clikOnNextBtn() + nfts.verifyReviewModalData(2) + }) + + // TODO: Added to prod + it('Verify that when 2 NFTs are selected, actions and tx details are correct in Review step', () => { + nfts.verifyInitialNFTData() + nfts.selectNFTs(2) + nfts.sendNFT() + nfts.typeRecipientAddress(staticSafes.SEP_STATIC_SAFE_1) + nfts.clikOnNextBtn() + nfts.verifyTxDetails(multipleNFT) + nfts.verifyCountOfActions(2) + nfts.verifyActionName(0, multipleNFTAction) + nfts.verifyActionName(1, multipleNFTAction) + }) + + // TODO: Added to prod + it('Verify Send button is disabled for non-owner', () => { + cy.visit(constants.balanceNftsUrl + nftsSafes.SEP_NFT_SAFE_2) + nfts.verifyInitialNFTData() + nfts.selectNFTs(1) + nfts.verifySendNFTBtnDisabled() + }) + + // TODO: Added to prod + it('Verify Send NFT transaction has been created', () => { + cy.visit(constants.balanceNftsUrl + nftsSafes.SEP_NFT_SAFE_1) + nfts.verifyInitialNFTData() + nfts.selectNFTs(1) + nfts.sendNFT() + nfts.typeRecipientAddress(staticSafes.SEP_STATIC_SAFE_1) + createTx.changeNonce(2) + nfts.clikOnNextBtn() + createTx.clickOnSignTransactionBtn() + createTx.waitForProposeRequest() + createTx.clickViewTransaction() + createTx.verifySingleTxPage() + createTx.verifyQueueLabel() + createTx.verifyTransactionStrExists(NFTSentName) + }) +}) diff --git a/cypress/e2e/prodhealthcheck/remove_owner.cy.js b/cypress/e2e/prodhealthcheck/remove_owner.cy.js new file mode 100644 index 0000000000..f13a21feab --- /dev/null +++ b/cypress/e2e/prodhealthcheck/remove_owner.cy.js @@ -0,0 +1,43 @@ +import * as constants from '../../support/constants' +import * as main from '../../e2e/pages/main.page' +import * as owner from '../pages/owners.pages' +import * as createwallet from '../pages/create_wallet.pages' +import * as createTx from '../pages/create_tx.pages.js' +import { getSafes, CATEGORIES } from '../../support/safes/safesHandler.js' +import * as wallet from '../../support/utils/wallet.js' + +let staticSafes = [] +const walletCredentials = JSON.parse(Cypress.env('CYPRESS_WALLET_CREDENTIALS')) +const signer = walletCredentials.OWNER_4_PRIVATE_KEY + +describe('Remove Owners tests', () => { + before(async () => { + staticSafes = await getSafes(CATEGORIES.static) + }) + + beforeEach(() => { + cy.visit(constants.prodbaseUrl + constants.setupUrl + staticSafes.SEP_STATIC_SAFE_13) + main.waitForHistoryCallToComplete() + cy.clearLocalStorage() + main.acceptCookies() + cy.contains(owner.safeAccountNonceStr, { timeout: 10000 }) + }) + + // TODO: Added to prod + it.skip('Verify owner deletion transaction has been created', () => { + wallet.connectSigner(signer) + owner.waitForConnectionStatus() + owner.openRemoveOwnerWindow(1) + cy.wait(3000) + createwallet.clickOnNextBtn() + //This method creates the @removedAddress alias + owner.getAddressToBeRemoved() + owner.verifyOwnerDeletionWindowDisplayed() + createTx.changeNonce(10) + createTx.clickOnSignTransactionBtn() + createTx.waitForProposeRequest() + createTx.clickViewTransaction() + createTx.clickOnTransactionItemByName('removeOwner') + createTx.verifyTxDestinationAddress('@removedAddress') + }) +}) diff --git a/cypress/e2e/prodhealthcheck/sidebar.cy.js b/cypress/e2e/prodhealthcheck/sidebar.cy.js new file mode 100644 index 0000000000..00d642eb0d --- /dev/null +++ b/cypress/e2e/prodhealthcheck/sidebar.cy.js @@ -0,0 +1,45 @@ +import * as constants from '../../support/constants' +import * as main from '../pages/main.page' +import * as sideBar from '../pages/sidebar.pages' +import * as navigation from '../pages/navigation.page' +import { getSafes, CATEGORIES } from '../../support/safes/safesHandler.js' +import * as wallet from '../../support/utils/wallet.js' + +let staticSafes = [] +const walletCredentials = JSON.parse(Cypress.env('CYPRESS_WALLET_CREDENTIALS')) +const signer = walletCredentials.OWNER_4_PRIVATE_KEY + +describe('Sidebar tests', () => { + before(async () => { + staticSafes = await getSafes(CATEGORIES.static) + }) + + beforeEach(() => { + cy.visit(constants.prodbaseUrl + constants.homeUrl + staticSafes.SEP_STATIC_SAFE_9) + cy.clearLocalStorage() + main.acceptCookies() + }) + + // TODO: Added to prod + it('Verify current safe details', () => { + sideBar.verifySafeHeaderDetails(sideBar.testSafeHeaderDetails) + }) + + // TODO: Added to prod + it.skip('Verify New transaction button enabled for owners', () => { + wallet.connectSigner(signer) + sideBar.verifyNewTxBtnStatus(constants.enabledStates.enabled) + }) + + // TODO: Added to prod + it.skip('Verify New transaction button enabled for beneficiaries who are non-owners', () => { + cy.visit(constants.prodbaseUrl + constants.homeUrl + staticSafes.SEP_STATIC_SAFE_11) + wallet.connectSigner(signer) + sideBar.verifyNewTxBtnStatus(constants.enabledStates.enabled) + }) + + // TODO: Added to prod + it('Verify New Transaction button disabled for non-owners', () => { + main.verifyElementsCount(navigation.newTxBtn, 0) + }) +}) diff --git a/cypress/e2e/prodhealthcheck/sidebar_3.cy.js b/cypress/e2e/prodhealthcheck/sidebar_3.cy.js new file mode 100644 index 0000000000..28c051d9b6 --- /dev/null +++ b/cypress/e2e/prodhealthcheck/sidebar_3.cy.js @@ -0,0 +1,75 @@ +import * as constants from '../../support/constants.js' +import * as main from '../pages/main.page.js' +import * as sideBar from '../pages/sidebar.pages.js' +import { getSafes, CATEGORIES } from '../../support/safes/safesHandler.js' +import * as wallet from '../../support/utils/wallet.js' +import * as navigation from '../pages/navigation.page.js' +import * as owner from '../pages/owners.pages.js' + +let staticSafes = [] +const walletCredentials = JSON.parse(Cypress.env('CYPRESS_WALLET_CREDENTIALS')) +const signer = walletCredentials.OWNER_4_PRIVATE_KEY +const signer1 = walletCredentials.OWNER_1_PRIVATE_KEY +const signer2 = walletCredentials.OWNER_3_PRIVATE_KEY + +describe.skip('Sidebar tests 3', () => { + before(async () => { + staticSafes = await getSafes(CATEGORIES.static) + }) + + beforeEach(() => { + cy.clearLocalStorage() + }) + + // TODO: Added to prod + it('Verify the "My accounts" counter at the top is counting all safes the user owns', () => { + cy.visit(constants.prodbaseUrl + constants.BALANCE_URL + staticSafes.SEP_STATIC_SAFE_9) + main.acceptCookies() + cy.intercept('GET', constants.safeListEndpoint, { + 11155111: [sideBar.sideBarSafes.safe1, sideBar.sideBarSafes.safe2], + }) + wallet.connectSigner(signer) + sideBar.openSidebar() + sideBar.checkMyAccountCounter(2) + }) + + // TODO: Added to prod + it('Verify pending signature is displayed in sidebar for unsigned tx', () => { + cy.visit(constants.prodbaseUrl + constants.BALANCE_URL + staticSafes.SEP_STATIC_SAFE_7) + main.acceptCookies() + wallet.connectSigner(signer) + cy.intercept('GET', constants.safeListEndpoint, { + 11155111: [sideBar.sideBarSafesPendingActions.safe1], + }) + sideBar.openSidebar() + sideBar.verifyTxToConfirmDoesNotExist() + + cy.get('body').click() + + owner.clickOnWalletExpandMoreIcon() + navigation.clickOnDisconnectBtn() + cy.intercept('GET', constants.safeListEndpoint, { + 11155111: [sideBar.sideBarSafesPendingActions.safe1], + }) + wallet.connectSigner(signer2) + sideBar.openSidebar() + sideBar.verifyAddedSafesExist([sideBar.sideBarSafesPendingActions.safe1short]) + sideBar.checkTxToConfirm(1) + }) + + // TODO: Added to prod + it('Verify balance exists in a tx in sidebar', () => { + cy.visit(constants.prodbaseUrl + constants.BALANCE_URL + staticSafes.SEP_STATIC_SAFE_7) + main.acceptCookies() + wallet.connectSigner(signer) + owner.clickOnWalletExpandMoreIcon() + navigation.clickOnDisconnectBtn() + wallet.connectSigner(signer) + cy.intercept('GET', constants.safeListEndpoint, { + 11155111: [sideBar.sideBarSafesPendingActions.safe1], + }) + sideBar.openSidebar() + sideBar.verifyTxToConfirmDoesNotExist() + sideBar.checkBalanceExists() + }) +}) diff --git a/cypress/e2e/prodhealthcheck/spending_limits.cy.js b/cypress/e2e/prodhealthcheck/spending_limits.cy.js new file mode 100644 index 0000000000..a8e4a8364f --- /dev/null +++ b/cypress/e2e/prodhealthcheck/spending_limits.cy.js @@ -0,0 +1,57 @@ +import * as constants from '../../support/constants' +import * as main from '../pages/main.page' +import * as spendinglimit from '../pages/spending_limits.pages' +import * as navigation from '../pages/navigation.page' +import * as tx from '../pages/create_tx.pages' +import { getSafes, CATEGORIES } from '../../support/safes/safesHandler.js' +import * as wallet from '../../support/utils/wallet.js' + +let staticSafes = [] +const walletCredentials = JSON.parse(Cypress.env('CYPRESS_WALLET_CREDENTIALS')) +const signer = walletCredentials.OWNER_4_PRIVATE_KEY +const signerAddress = walletCredentials.OWNER_4_WALLET_ADDRESS + +const tokenAmount = 0.1 +const newTokenAmount = 0.001 +const spendingLimitBalance = '(0.15 ETH)' + +describe('Spending limits tests', () => { + before(async () => { + staticSafes = await getSafes(CATEGORIES.static) + }) + + beforeEach(() => { + cy.visit(constants.prodbaseUrl + constants.setupUrl + staticSafes.SEP_STATIC_SAFE_8) + cy.clearLocalStorage() + main.acceptCookies() + cy.get(spendinglimit.spendingLimitsSection).should('be.visible') + }) + + // TODO: Added to prod + it.skip('Verify that the Review step shows beneficiary, amount allowed, reset time', () => { + //Assume that default reset time is set to One time + wallet.connectSigner(signer) + spendinglimit.clickOnNewSpendingLimitBtn() + spendinglimit.enterBeneficiaryAddress(staticSafes.SEP_STATIC_SAFE_6) + spendinglimit.enterSpendingLimitAmount(0.1) + spendinglimit.clickOnNextBtn() + spendinglimit.checkReviewData( + tokenAmount, + staticSafes.SEP_STATIC_SAFE_6, + spendinglimit.timePeriodOptions.oneTime.split(' ').join('-'), + ) + }) + + // TODO: Added to prod + it('Verify values and trash icons are displayed in Beneficiary table', () => { + spendinglimit.verifyBeneficiaryTable() + }) + + // TODO: Added to prod + it.skip('Verify Spending limit option is available when selecting the corresponding token', () => { + wallet.connectSigner(signer) + navigation.clickOnNewTxBtn() + tx.clickOnSendTokensBtn() + spendinglimit.verifyTxOptionExist([spendinglimit.spendingLimitTxOption]) + }) +}) diff --git a/cypress/e2e/prodhealthcheck/swaps_history_2.cy.js b/cypress/e2e/prodhealthcheck/swaps_history_2.cy.js new file mode 100644 index 0000000000..845964ea2a --- /dev/null +++ b/cypress/e2e/prodhealthcheck/swaps_history_2.cy.js @@ -0,0 +1,72 @@ +import * as constants from '../../support/constants.js' +import * as main from '../pages/main.page.js' +import * as create_tx from '../pages/create_tx.pages.js' +import * as swaps_data from '../../fixtures/swaps_data.json' +import * as swaps from '../pages/swaps.pages.js' +import { getSafes, CATEGORIES } from '../../support/safes/safesHandler.js' + +let staticSafes = [] + +const swapsHistory = swaps_data.type.history + +describe('Swaps history tests 2', () => { + before(async () => { + staticSafes = await getSafes(CATEGORIES.static) + }) + + beforeEach(() => { + cy.clearLocalStorage() + }) + + // TODO: Added to prod + it('Verify swap buy operation with 2 actions: approve & swap', { defaultCommandTimeout: 30000 }, () => { + cy.visit( + constants.prodbaseUrl + constants.transactionUrl + staticSafes.SEP_STATIC_SAFE_1 + swaps.swapTxs.buy2actions, + ) + main.acceptCookies() + + const eq = swaps.createRegex(swapsHistory.oneGNOFull, 'COW') + const atMost = swaps.createRegex(swapsHistory.forAtMostCow, 'COW') + + create_tx.verifyExpandedDetails([ + swapsHistory.buyOrder, + swapsHistory.buy, + eq, + atMost, + swapsHistory.cow, + swapsHistory.expired, + swapsHistory.actionApprove, + swapsHistory.actionPreSignature, + ]) + }) + + // TODO: Added to prod + // TODO: Unskip after next release due to changes in design tx + it.skip( + 'Verify no decoding if tx was created using CowSwap safe-app in the history', + { defaultCommandTimeout: 30000 }, + () => { + cy.visit( + constants.prodbaseUrl + + constants.transactionUrl + + staticSafes.SEP_STATIC_SAFE_1 + + swaps.swapTxs.safeAppSwapOrder, + ) + main.acceptCookies() + main.verifyValuesDoNotExist('div', [ + swapsHistory.actionApproveG, + swapsHistory.actionDepositG, + swapsHistory.amount, + swapsHistory.executionPrice, + swapsHistory.surplus, + swapsHistory.expiry, + swapsHistory.oderId, + swapsHistory.status, + swapsHistory.forAtLeast, + swapsHistory.forAtMost, + ]) + main.verifyValuesDoNotExist(create_tx.transactionItem, [swapsHistory.title, swapsHistory.cow, swapsHistory.dai]) + main.verifyValuesExist(create_tx.transactionItem, [swapsHistory.actionPreSignatureG, swapsHistory.safeAppTitile]) + }, + ) +}) diff --git a/cypress/e2e/prodhealthcheck/swaps_tokens.cy.js b/cypress/e2e/prodhealthcheck/swaps_tokens.cy.js new file mode 100644 index 0000000000..47d6a064d7 --- /dev/null +++ b/cypress/e2e/prodhealthcheck/swaps_tokens.cy.js @@ -0,0 +1,50 @@ +import * as constants from '../../support/constants.js' +import * as main from '../pages/main.page.js' +import * as swaps from '../pages/swaps.pages.js' +import * as assets from '../pages/assets.pages.js' +import { getSafes, CATEGORIES } from '../../support/safes/safesHandler.js' +import * as wallet from '../../support/utils/wallet.js' + +let staticSafes = [] +const walletCredentials = JSON.parse(Cypress.env('CYPRESS_WALLET_CREDENTIALS')) +const signer = walletCredentials.OWNER_4_PRIVATE_KEY + +let iframeSelector = `iframe[src*="${constants.swapWidget}"]` + +describe('[SMOKE] Swaps token tests', () => { + before(async () => { + staticSafes = await getSafes(CATEGORIES.static) + }) + + beforeEach(() => { + cy.clearLocalStorage() + cy.visit(constants.prodbaseUrl + constants.BALANCE_URL + staticSafes.SEP_STATIC_SAFE_1) + main.acceptCookies() + }) + + // TODO: Added to prod + it.skip( + 'Verify that clicking the swap from assets tab, autofills that token automatically in the form', + { defaultCommandTimeout: 30000 }, + () => { + wallet.connectSigner(signer) + assets.selectTokenList(assets.tokenListOptions.allTokens) + + swaps.clickOnAssetSwapBtn(0) + swaps.acceptLegalDisclaimer() + cy.wait(2000) + main.getIframeBody(iframeSelector).within(() => { + swaps.verifySelectedInputCurrancy(swaps.swapTokens.eth) + }) + }, + ) + + // TODO: Added to prod + it('Verify swap button are displayed in assets table and dashboard', () => { + assets.selectTokenList(assets.tokenListOptions.allTokens) + main.verifyElementsCount(swaps.assetsSwapBtn, 4) + cy.visit(constants.homeUrl + staticSafes.SEP_STATIC_SAFE_1) + main.verifyElementsCount(swaps.assetsSwapBtn, 4) + main.verifyElementsCount(swaps.dashboardSwapBtn, 1) + }) +}) diff --git a/cypress/e2e/prodhealthcheck/tokens.cy.js b/cypress/e2e/prodhealthcheck/tokens.cy.js new file mode 100644 index 0000000000..b35572cd17 --- /dev/null +++ b/cypress/e2e/prodhealthcheck/tokens.cy.js @@ -0,0 +1,97 @@ +import * as constants from '../../support/constants' +import * as main from '../pages/main.page' +import * as assets from '../pages/assets.pages' +import { getSafes, CATEGORIES } from '../../support/safes/safesHandler.js' + +const ASSET_NAME_COLUMN = 0 +const TOKEN_AMOUNT_COLUMN = 1 +const FIAT_AMOUNT_COLUMN = 2 + +let staticSafes = [] + +describe('Tokens tests', () => { + const fiatRegex = assets.fiatRegex + + before(async () => { + staticSafes = await getSafes(CATEGORIES.static) + }) + beforeEach(() => { + cy.visit(constants.prodbaseUrl + constants.BALANCE_URL + staticSafes.SEP_STATIC_SAFE_2) + cy.clearLocalStorage() + main.acceptCookies() + }) + + // TODO: Added to prod + it('Verify that non-native tokens are present and have balance', () => { + assets.selectTokenList(assets.tokenListOptions.allTokens) + assets.verifyBalance(assets.currencyDaiCap, TOKEN_AMOUNT_COLUMN, assets.currencyDaiAlttext) + assets.verifyTokenBalanceFormat( + assets.currencyDaiCap, + assets.currencyDaiFormat_2, + TOKEN_AMOUNT_COLUMN, + FIAT_AMOUNT_COLUMN, + fiatRegex, + ) + + assets.verifyBalance(assets.currencyAave, TOKEN_AMOUNT_COLUMN, assets.currencyAaveAlttext) + assets.verifyTokenBalanceFormat( + assets.currencyAave, + assets.currentcyAaveFormat, + TOKEN_AMOUNT_COLUMN, + FIAT_AMOUNT_COLUMN, + fiatRegex, + ) + + assets.verifyBalance(assets.currencyLink, TOKEN_AMOUNT_COLUMN, assets.currencyLinkAlttext) + assets.verifyTokenBalanceFormat( + assets.currencyLink, + assets.currentcyLinkFormat, + TOKEN_AMOUNT_COLUMN, + FIAT_AMOUNT_COLUMN, + fiatRegex, + ) + + assets.verifyBalance(assets.currencyTestTokenA, TOKEN_AMOUNT_COLUMN, assets.currencyTestTokenAAlttext) + assets.verifyTokenBalanceFormat( + assets.currencyTestTokenA, + assets.currentcyTestTokenAFormat, + TOKEN_AMOUNT_COLUMN, + FIAT_AMOUNT_COLUMN, + fiatRegex, + ) + + assets.verifyBalance(assets.currencyTestTokenB, TOKEN_AMOUNT_COLUMN, assets.currencyTestTokenBAlttext) + assets.verifyTokenBalanceFormat( + assets.currencyTestTokenB, + assets.currentcyTestTokenBFormat, + TOKEN_AMOUNT_COLUMN, + FIAT_AMOUNT_COLUMN, + fiatRegex, + ) + + assets.verifyBalance(assets.currencyUSDC, TOKEN_AMOUNT_COLUMN, assets.currencyTestUSDCAlttext) + assets.verifyTokenBalanceFormat( + assets.currencyUSDC, + assets.currentcyTestUSDCFormat, + TOKEN_AMOUNT_COLUMN, + FIAT_AMOUNT_COLUMN, + fiatRegex, + ) + }) + + // TODO: Added to prod + //Include in smoke. + it('Verify that when owner is disconnected, Send button is disabled', () => { + assets.selectTokenList(assets.tokenListOptions.allTokens) + assets.showSendBtn(0) + assets.VerifySendButtonIsDisabled() + }) + + // TODO: Added to prod + it('Verify that when connected user is not owner, Send button is disabled', () => { + cy.visit(constants.prodbaseUrl + constants.BALANCE_URL + staticSafes.SEP_STATIC_SAFE_3) + assets.selectTokenList(assets.tokenListOptions.allTokens) + assets.showSendBtn(0) + assets.VerifySendButtonIsDisabled() + }) +}) diff --git a/cypress/e2e/prodhealthcheck/tx_history.cy.js b/cypress/e2e/prodhealthcheck/tx_history.cy.js new file mode 100644 index 0000000000..77482c11f7 --- /dev/null +++ b/cypress/e2e/prodhealthcheck/tx_history.cy.js @@ -0,0 +1,136 @@ +import * as constants from '../../support/constants' +import * as main from '../pages/main.page' +import * as createTx from '../pages/create_tx.pages' +import * as data from '../../fixtures/txhistory_data_data.json' +import { getSafes, CATEGORIES } from '../../support/safes/safesHandler.js' + +let staticSafes = [] + +const typeCreateAccount = data.type.accountCreation +const typeReceive = data.type.receive +const typeSend = data.type.send +const typeSpendingLimits = data.type.spendingLimits +const typeDeleteAllowance = data.type.deleteSpendingLimit +const typeSideActions = data.type.sideActions +const typeGeneral = data.type.general + +describe('Tx history tests 1', () => { + before(async () => { + staticSafes = await getSafes(CATEGORIES.static) + }) + + beforeEach(() => { + cy.clearLocalStorage() + cy.intercept( + 'GET', + `**${constants.stagingCGWChains}${constants.networkKeys.sepolia}/${ + constants.stagingCGWSafes + }${staticSafes.SEP_STATIC_SAFE_7.substring(4)}/transactions/history**`, + (req) => { + req.url = `https://safe-client.safe.global/v1/chains/11155111/safes/0x5912f6616c84024cD1aff0D5b55bb36F5180fFdb/transactions/history?timezone_offset=7200000&trusted=false&cursor=limit=100&offset=1` + req.continue() + }, + ).as('allTransactions') + + cy.visit(constants.prodbaseUrl + constants.transactionsHistoryUrl + staticSafes.SEP_STATIC_SAFE_7) + cy.wait('@allTransactions') + main.acceptCookies() + }) + + // TODO: Added to prod + // Account creation + it('Verify summary for account creation', () => { + createTx.verifySummaryByName( + typeCreateAccount.title, + [typeCreateAccount.actionsSummary, typeGeneral.statusOk], + typeCreateAccount.altTmage, + ) + }) + + // TODO: Added to prod + it('Verify exapanded details for account creation', () => { + createTx.clickOnTransactionItemByName(typeCreateAccount.title) + createTx.verifyExpandedDetails([ + typeCreateAccount.creator.actionTitle, + typeCreateAccount.creator.address, + typeCreateAccount.factory.actionTitle, + typeCreateAccount.factory.name, + typeCreateAccount.factory.address, + typeCreateAccount.masterCopy.actionTitle, + typeCreateAccount.masterCopy.name, + typeCreateAccount.masterCopy.address, + typeCreateAccount.transactionHash, + ]) + }) + + // TODO: Added to prod + // Token send + it('Verify exapanded details for token send', () => { + createTx.clickOnTransactionItemByName(typeSend.title, typeSend.summaryTxInfo) + createTx.verifyExpandedDetails([typeSend.sentTo, typeSend.recipientAddress, typeSend.transactionHash]) + createTx.verifyActionListExists([ + typeSideActions.created, + typeSideActions.confirmations, + typeSideActions.executedBy, + ]) + }) + + // TODO: Added to prod + // Spending limits + // TODO: Unskip after next release due to design tx + it.skip('Verify summary for setting spend limits', () => { + createTx.verifySummaryByName( + typeSpendingLimits.title, + typeSpendingLimits.summaryTxInfo, + [typeGeneral.statusOk], + typeSpendingLimits.altTmage, + ) + }) + + // TODO: Added to prod + // TODO: Unskip after next release due to design tx + it.skip('Verify exapanded details for initial spending limits setup', () => { + createTx.clickOnTransactionItemByName(typeSpendingLimits.title, typeSpendingLimits.summaryTxInfo) + createTx.verifyExpandedDetails( + [ + typeSpendingLimits.contractTitle, + typeSpendingLimits.call_multiSend, + typeSpendingLimits.transactionHash, + typeSpendingLimits.safeTxHash, + ], + createTx.delegateCallWarning, + ) + }) + + // TODO: Added to prod + // TODO: Unskip after next release due to design tx + it.skip('Verify that 3 actions exist in initial spending limits setup', () => { + createTx.clickOnTransactionItemByName(typeSpendingLimits.title, typeSpendingLimits.summaryTxInfo) + createTx.verifyActions([ + typeSpendingLimits.enableModule.title, + typeSpendingLimits.addDelegate.title, + typeSpendingLimits.setAllowance.title, + ]) + }) + + // Spending limit deletion + it('Verify exapanded details for allowance deletion', () => { + createTx.clickOnTransactionItemByName(typeDeleteAllowance.title, typeDeleteAllowance.summaryTxInfo) + createTx.verifyExpandedDetails([ + typeDeleteAllowance.description, + typeDeleteAllowance.beneficiary, + typeDeleteAllowance.beneficiaryAddress, + typeDeleteAllowance.transactionHash, + typeDeleteAllowance.safeTxHash, + typeDeleteAllowance.token, + typeDeleteAllowance.tokenName, + ]) + }) + + // TODO: Added to prod + it('Verify advanced details displayed in exapanded details for allowance deletion', () => { + createTx.clickOnTransactionItemByName(typeDeleteAllowance.title, typeDeleteAllowance.summaryTxInfo) + createTx.expandAdvancedDetails([typeDeleteAllowance.baseGas]) + createTx.collapseAdvancedDetails([typeDeleteAllowance.baseGas]) + }) +}) diff --git a/cypress/e2e/prodhealthcheck/tx_history_2.cy.js b/cypress/e2e/prodhealthcheck/tx_history_2.cy.js new file mode 100644 index 0000000000..aa7bd17692 --- /dev/null +++ b/cypress/e2e/prodhealthcheck/tx_history_2.cy.js @@ -0,0 +1,142 @@ +import * as constants from '../../support/constants' +import * as main from '../pages/main.page' +import * as createTx from '../pages/create_tx.pages' +import * as data from '../../fixtures/txhistory_data_data.json' +import { getSafes, CATEGORIES } from '../../support/safes/safesHandler.js' + +let staticSafes = [] + +const typeOnchainRejection = data.type.onchainRejection +const typeBatch = data.type.batchNativeTransfer +const typeAddOwner = data.type.addOwner +const typeChangeOwner = data.type.swapOwner +const typeRemoveOwner = data.type.removeOwner +const typeDisableOwner = data.type.disableModule +const typeChangeThreshold = data.type.changeThreshold +const typeSideActions = data.type.sideActions +const typeGeneral = data.type.general +const typeUntrustedToken = data.type.untrustedReceivedToken + +describe('Tx history tests 2', () => { + before(async () => { + staticSafes = await getSafes(CATEGORIES.static) + }) + + beforeEach(() => { + cy.clearLocalStorage() + cy.intercept( + 'GET', + `**${constants.stagingCGWChains}${constants.networkKeys.sepolia}/${ + constants.stagingCGWSafes + }${staticSafes.SEP_STATIC_SAFE_7.substring(4)}/transactions/history**`, + (req) => { + req.url = `https://safe-client.safe.global/v1/chains/11155111/safes/0x5912f6616c84024cD1aff0D5b55bb36F5180fFdb/transactions/history?timezone_offset=7200000&trusted=false&cursor=limit=100&offset=1` + req.continue() + }, + ).as('allTransactions') + + cy.visit(constants.prodbaseUrl + constants.transactionsHistoryUrl + staticSafes.SEP_STATIC_SAFE_7) + main.acceptCookies() + }) + + it('Verify number of transactions is correct', () => { + createTx.verifyNumberOfTransactions(20) + }) + + // TODO: Added to prod + // On-chain rejection + it('Verify exapanded details for on-chain rejection', () => { + createTx.clickOnTransactionItemByName(typeOnchainRejection.title) + createTx.verifyExpandedDetails([ + typeOnchainRejection.description, + typeOnchainRejection.transactionHash, + typeOnchainRejection.safeTxHash, + ]) + createTx.verifyActionListExists([ + typeSideActions.rejectionCreated, + typeSideActions.confirmations, + typeSideActions.executedBy, + ]) + }) + + // TODO: Added to prod + // Batch transaction + // TODO: Unskip after next release due to design tx + it.skip('Verify exapanded details for batch', () => { + createTx.clickOnTransactionItemByName(typeBatch.title, typeBatch.summaryTxInfo) + createTx.verifyExpandedDetails( + [typeBatch.contractTitle, typeBatch.transactionHash, typeBatch.safeTxHash], + createTx.delegateCallWarning, + ) + createTx.verifyActions([typeBatch.nativeTransfer.title]) + }) + + // TODO: Added to prod + // Add owner + it('Verify summary for adding owner', () => { + createTx.verifySummaryByName(typeAddOwner.title, [typeGeneral.statusOk], typeAddOwner.altImage) + }) + + // TODO: Added to prod + // Change owner + it('Verify summary for changing owner', () => { + createTx.verifySummaryByName(typeChangeOwner.title, [typeGeneral.statusOk], typeChangeOwner.altImage) + }) + + // TODO: Added to prod + it('Verify exapanded details for changing owner', () => { + createTx.clickOnTransactionItemByName(typeChangeOwner.title) + createTx.verifyExpandedDetails([ + typeChangeOwner.description, + typeChangeOwner.newOwner.actionTitile, + typeChangeOwner.newOwner.ownerAddress, + typeChangeOwner.oldOwner.actionTitile, + typeChangeOwner.oldOwner.ownerAddress, + + typeChangeOwner.transactionHash, + typeChangeOwner.safeTxHash, + ]) + }) + + // TODO: Added to prod + // Remove owner + it('Verify summary for removing owner', () => { + createTx.verifySummaryByName(typeRemoveOwner.title, [typeGeneral.statusOk], typeRemoveOwner.altImage) + }) + + // TODO: Added to prod + // Disbale module + it('Verify summary for disable module', () => { + createTx.verifySummaryByName(typeDisableOwner.title, [typeGeneral.statusOk], typeDisableOwner.altImage) + }) + + // TODO: Added to prod + // Change threshold + it('Verify summary for changing threshold', () => { + createTx.verifySummaryByName( + typeChangeThreshold.title, + [typeChangeThreshold.summaryTxInfo, typeGeneral.statusOk], + typeChangeThreshold.altImage, + ) + }) + + // TODO: Added to prod + it('Verify exapanded details for changing threshold', () => { + createTx.clickOnTransactionItemByName(typeChangeThreshold.title) + createTx.verifyExpandedDetails( + [ + typeChangeThreshold.requiredConfirmationsTitle, + typeChangeThreshold.transactionHash, + typeChangeThreshold.safeTxHash, + ], + createTx.policyChangeWarning, + ) + createTx.checkRequiredThreshold(2) + }) + + // TODO: Added to prod + it('Verify that sender address of untrusted token will not be copied until agreed in warning popup', () => { + createTx.clickOnTransactionItemByName(typeUntrustedToken.summaryTitle, typeUntrustedToken.summaryTxInfo) + createTx.verifyAddressNotCopied(0, typeUntrustedToken.senderAddress) + }) +}) diff --git a/cypress/e2e/regression/add_owner.cy.js b/cypress/e2e/regression/add_owner.cy.js index 6129ab561e..617eb43903 100644 --- a/cypress/e2e/regression/add_owner.cy.js +++ b/cypress/e2e/regression/add_owner.cy.js @@ -21,10 +21,12 @@ describe('Add Owners tests', () => { cy.contains(owner.safeAccountNonceStr, { timeout: 10000 }) }) + // TODO: Added to prod it('Verify add owner button is disabled for disconnected user', () => { owner.verifyAddOwnerBtnIsDisabled() }) + // TODO: Added to prod it('Verify the Add New Owner Form can be opened', () => { wallet.connectSigner(signer) owner.openAddOwnerWindow() diff --git a/cypress/e2e/regression/create_tx.cy.js b/cypress/e2e/regression/create_tx.cy.js index 9148283023..5ffc74b51b 100644 --- a/cypress/e2e/regression/create_tx.cy.js +++ b/cypress/e2e/regression/create_tx.cy.js @@ -32,6 +32,7 @@ describe('Create transactions tests', () => { createtx.clickOnSendTokensBtn() }) + // TODO: Added to prod it('Verify submitting a tx and that clicking on notification shows the transaction in queue', () => { happyPathToStepTwo() createtx.verifySubmitBtnIsEnabled() diff --git a/cypress/e2e/regression/load_safe.cy.js b/cypress/e2e/regression/load_safe.cy.js index 87533108d8..b58db3f77b 100644 --- a/cypress/e2e/regression/load_safe.cy.js +++ b/cypress/e2e/regression/load_safe.cy.js @@ -40,6 +40,7 @@ describe('Load Safe tests', () => { safe.clickOnNextBtn() }) + // TODO: Added to prod it('Verify Safe and owner names are displayed in the Review step', () => { safe.inputNameAndAddress(testSafeName, staticSafes.SEP_STATIC_SAFE_4) safe.clickOnNextBtn() diff --git a/cypress/e2e/regression/messages_onchain.cy.js b/cypress/e2e/regression/messages_onchain.cy.js index a96af1c72b..cadcbb04f1 100644 --- a/cypress/e2e/regression/messages_onchain.cy.js +++ b/cypress/e2e/regression/messages_onchain.cy.js @@ -39,6 +39,7 @@ describe('Onchain Messages tests', () => { ) }) + // TODO: Added to prod it('Verify summary for signed on-chain message', () => { createTx.verifySummaryByName( typeMessagesOnchain.contractName, diff --git a/cypress/e2e/regression/nfts.cy.js b/cypress/e2e/regression/nfts.cy.js index 17c471f520..a52b34423d 100644 --- a/cypress/e2e/regression/nfts.cy.js +++ b/cypress/e2e/regression/nfts.cy.js @@ -37,6 +37,7 @@ describe('NFTs tests', () => { nfts.waitForNftItems(2) }) + // TODO: Added to prod // TODO: Add Sign action it('Verify multipls NFTs can be selected and reviewed', () => { nfts.verifyInitialNFTData() @@ -59,6 +60,7 @@ describe('NFTs tests', () => { nfts.verifyCountOfActions(0) }) + // TODO: Added to prod it('Verify that when 2 NFTs are selected, actions and tx details are correct in Review step', () => { nfts.verifyInitialNFTData() nfts.selectNFTs(2) @@ -71,6 +73,7 @@ describe('NFTs tests', () => { nfts.verifyActionName(1, multipleNFTAction) }) + // TODO: Added to prod it('Verify Send button is disabled for non-owner', () => { cy.visit(constants.balanceNftsUrl + nftsSafes.SEP_NFT_SAFE_2) nfts.verifyInitialNFTData() @@ -85,6 +88,7 @@ describe('NFTs tests', () => { nfts.verifySendNFTBtnDisabled() }) + // TODO: Added to prod it('Verify Send NFT transaction has been created', () => { cy.visit(constants.balanceNftsUrl + nftsSafes.SEP_NFT_SAFE_1) nfts.verifyInitialNFTData() diff --git a/cypress/e2e/regression/remove_owner.cy.js b/cypress/e2e/regression/remove_owner.cy.js index 15b0e69632..df68bafa5d 100644 --- a/cypress/e2e/regression/remove_owner.cy.js +++ b/cypress/e2e/regression/remove_owner.cy.js @@ -49,6 +49,7 @@ describe('Remove Owners tests', () => { owner.getThresholdOptions().should('have.length', 1) }) + // TODO: Added to prod it('Verify owner deletion transaction has been created', () => { wallet.connectSigner(signer) owner.waitForConnectionStatus() diff --git a/cypress/e2e/regression/replace_owner.cy.js b/cypress/e2e/regression/replace_owner.cy.js index d96e2bdf96..ec4e6cd875 100644 --- a/cypress/e2e/regression/replace_owner.cy.js +++ b/cypress/e2e/regression/replace_owner.cy.js @@ -76,7 +76,8 @@ describe('Replace Owners tests', () => { owner.verifyErrorMsgInvalidAddress(constants.addressBookErrrMsg.alreadyAdded) }) - it("Verify 'Replace' tx is created", () => { + // TODO: Flaky. Fix ProposeTx request + it.skip("Verify 'Replace' tx is created", () => { cy.visit(constants.setupUrl + staticSafes.SEP_STATIC_SAFE_4) wallet.connectSigner(signer) owner.waitForConnectionStatus() diff --git a/cypress/e2e/regression/sidebar.cy.js b/cypress/e2e/regression/sidebar.cy.js index e59ff64c61..408ece39cb 100644 --- a/cypress/e2e/regression/sidebar.cy.js +++ b/cypress/e2e/regression/sidebar.cy.js @@ -24,6 +24,7 @@ describe('Sidebar tests', () => { sideBar.verifyNetworkIsDisplayed(constants.networks.sepolia) }) + // TODO: Added to prod it('Verify current safe details', () => { sideBar.verifySafeHeaderDetails(sideBar.testSafeHeaderDetails) }) @@ -37,17 +38,20 @@ describe('Sidebar tests', () => { sideBar.verifyEtherscanLinkExists() }) + // TODO: Added to prod it('Verify New transaction button enabled for owners', () => { wallet.connectSigner(signer) sideBar.verifyNewTxBtnStatus(constants.enabledStates.enabled) }) + // TODO: Added to prod it('Verify New transaction button enabled for beneficiaries who are non-owners', () => { cy.visit(constants.homeUrl + staticSafes.SEP_STATIC_SAFE_11) wallet.connectSigner(signer) sideBar.verifyNewTxBtnStatus(constants.enabledStates.enabled) }) + // TODO: Added to prod it('Verify New Transaction button disabled for non-owners', () => { main.verifyElementsCount(navigation.newTxBtn, 0) }) diff --git a/cypress/e2e/regression/sidebar_3.cy.js b/cypress/e2e/regression/sidebar_3.cy.js index 1d0ff1cac2..a761130c3d 100644 --- a/cypress/e2e/regression/sidebar_3.cy.js +++ b/cypress/e2e/regression/sidebar_3.cy.js @@ -89,6 +89,7 @@ describe('Sidebar tests 3', () => { main.checkButtonByTextExists(sideBar.exportBtnStr) }) + // TODO: Added to prod it('Verify the "My accounts" counter at the top is counting all safes the user owns', () => { cy.visit(constants.BALANCE_URL + staticSafes.SEP_STATIC_SAFE_9) main.acceptCookies() @@ -118,6 +119,7 @@ describe('Sidebar tests 3', () => { sideBar.verifyAddedSafesExist([sideBar.sideBarSafes.safe3short]) }) + // TODO: Added to prod it('Verify pending signature is displayed in sidebar for unsigned tx', () => { cy.visit(constants.BALANCE_URL + staticSafes.SEP_STATIC_SAFE_7) main.acceptCookies() @@ -141,6 +143,7 @@ describe('Sidebar tests 3', () => { sideBar.checkTxToConfirm(1) }) + // TODO: Added to prod it('Verify balance exists in a tx in sidebar', () => { cy.visit(constants.BALANCE_URL + staticSafes.SEP_STATIC_SAFE_7) main.acceptCookies() diff --git a/cypress/e2e/regression/spending_limits.cy.js b/cypress/e2e/regression/spending_limits.cy.js index f6512b321b..3b15be885f 100644 --- a/cypress/e2e/regression/spending_limits.cy.js +++ b/cypress/e2e/regression/spending_limits.cy.js @@ -49,6 +49,7 @@ describe('Spending limits tests', () => { spendinglimit.verifyDecodedTxSummary([spendinglimit.actionNames.setAllowance]) }) + // TODO: Added to prod it('Verify that the Review step shows beneficiary, amount allowed, reset time', () => { //Assume that default reset time is set to One time wallet.connectSigner(signer) @@ -63,10 +64,12 @@ describe('Spending limits tests', () => { ) }) + // TODO: Added to prod it('Verify values and trash icons are displayed in Beneficiary table', () => { spendinglimit.verifyBeneficiaryTable() }) + // TODO: Added to prod it('Verify Spending limit option is available when selecting the corresponding token', () => { wallet.connectSigner(signer) navigation.clickOnNewTxBtn() diff --git a/cypress/e2e/regression/swaps_history_2.cy.js b/cypress/e2e/regression/swaps_history_2.cy.js index 1f97be155a..03e113208b 100644 --- a/cypress/e2e/regression/swaps_history_2.cy.js +++ b/cypress/e2e/regression/swaps_history_2.cy.js @@ -35,6 +35,7 @@ describe('Swaps history tests 2', () => { ]) }) + // TODO: Added to prod it('Verify swap buy operation with 2 actions: approve & swap', { defaultCommandTimeout: 30000 }, () => { cy.visit(constants.transactionUrl + staticSafes.SEP_STATIC_SAFE_1 + swaps.swapTxs.buy2actions) main.acceptCookies() @@ -112,6 +113,7 @@ describe('Swaps history tests 2', () => { create_tx.verifyExpandedDetails([swapsHistory.sellOrder, swapsHistory.sell, usdc, eq, swapsHistory.filled]) }) + // TODO: Added to prod it( 'Verify no decoding if tx was created using CowSwap safe-app in the history', { defaultCommandTimeout: 30000 }, diff --git a/cypress/e2e/regression/swaps_tokens.cy.js b/cypress/e2e/regression/swaps_tokens.cy.js index b642b8f154..ff766dc20e 100644 --- a/cypress/e2e/regression/swaps_tokens.cy.js +++ b/cypress/e2e/regression/swaps_tokens.cy.js @@ -22,6 +22,7 @@ describe('[SMOKE] Swaps token tests', () => { main.acceptCookies() }) + // TODO: Added to prod it( 'Verify that clicking the swap from assets tab, autofills that token automatically in the form', { defaultCommandTimeout: 30000 }, @@ -38,6 +39,7 @@ describe('[SMOKE] Swaps token tests', () => { }, ) + // TODO: Added to prod it('Verify swap button are displayed in assets table and dashboard', () => { assets.selectTokenList(assets.tokenListOptions.allTokens) main.verifyElementsCount(swaps.assetsSwapBtn, 4) diff --git a/cypress/e2e/regression/tokens.cy.js b/cypress/e2e/regression/tokens.cy.js index e941adeca3..374d398189 100644 --- a/cypress/e2e/regression/tokens.cy.js +++ b/cypress/e2e/regression/tokens.cy.js @@ -21,6 +21,7 @@ describe('Tokens tests', () => { main.acceptCookies() }) + // TODO: Added to prod it('Verify that non-native tokens are present and have balance', () => { assets.selectTokenList(assets.tokenListOptions.allTokens) assets.verifyBalance(assets.currencyDaiCap, TOKEN_AMOUNT_COLUMN, assets.currencyDaiAlttext) @@ -170,6 +171,7 @@ describe('Tokens tests', () => { assets.verifyTokenBalanceOrder('descending') }) + // TODO: Added to prod //Include in smoke. it('Verify that when owner is disconnected, Send button is disabled', () => { assets.selectTokenList(assets.tokenListOptions.allTokens) @@ -177,6 +179,7 @@ describe('Tokens tests', () => { assets.VerifySendButtonIsDisabled() }) + // TODO: Added to prod it('Verify that when connected user is not owner, Send button is disabled', () => { cy.visit(constants.BALANCE_URL + staticSafes.SEP_STATIC_SAFE_3) assets.selectTokenList(assets.tokenListOptions.allTokens) diff --git a/cypress/e2e/regression/tx_history.cy.js b/cypress/e2e/regression/tx_history.cy.js index 1d67a207a4..eb154b0d6a 100644 --- a/cypress/e2e/regression/tx_history.cy.js +++ b/cypress/e2e/regression/tx_history.cy.js @@ -37,6 +37,7 @@ describe('Tx history tests 1', () => { main.acceptCookies() }) + // TODO: Added to prod // Account creation it('Verify summary for account creation', () => { createTx.verifySummaryByName( @@ -46,6 +47,7 @@ describe('Tx history tests 1', () => { ) }) + // TODO: Added to prod it('Verify exapanded details for account creation', () => { createTx.clickOnTransactionItemByName(typeCreateAccount.title) createTx.verifyExpandedDetails([ @@ -66,6 +68,7 @@ describe('Tx history tests 1', () => { createTx.verifyNumberOfExternalLinks(4) }) + // TODO: Added to prod // Token send it('Verify exapanded details for token send', () => { createTx.clickOnTransactionItemByName(typeSend.title, typeSend.summaryTxInfo) @@ -77,6 +80,7 @@ describe('Tx history tests 1', () => { ]) }) + // TODO: Added to prod // Spending limits it('Verify summary for setting spend limits', () => { createTx.verifySummaryByName( @@ -87,6 +91,7 @@ describe('Tx history tests 1', () => { ) }) + // TODO: Added to prod it('Verify exapanded details for initial spending limits setup', () => { createTx.clickOnTransactionItemByName(typeSpendingLimits.title, typeSpendingLimits.summaryTxInfo) createTx.verifyExpandedDetails( @@ -100,6 +105,7 @@ describe('Tx history tests 1', () => { ) }) + // TODO: Added to prod it('Verify that 3 actions exist in initial spending limits setup', () => { createTx.clickOnTransactionItemByName(typeSpendingLimits.title, typeSpendingLimits.summaryTxInfo) createTx.verifyActions([ @@ -144,6 +150,7 @@ describe('Tx history tests 1', () => { ]) }) + // TODO: Added to prod it('Verify advanced details displayed in exapanded details for allowance deletion', () => { createTx.clickOnTransactionItemByName(typeDeleteAllowance.title, typeDeleteAllowance.summaryTxInfo) createTx.expandAdvancedDetails([typeDeleteAllowance.baseGas]) diff --git a/cypress/e2e/regression/tx_history_2.cy.js b/cypress/e2e/regression/tx_history_2.cy.js index 22954e3fb0..409250449f 100644 --- a/cypress/e2e/regression/tx_history_2.cy.js +++ b/cypress/e2e/regression/tx_history_2.cy.js @@ -43,6 +43,7 @@ describe('Tx history tests 2', () => { createTx.verifyNumberOfTransactions(20) }) + // TODO: Added to prod // On-chain rejection it('Verify exapanded details for on-chain rejection', () => { createTx.clickOnTransactionItemByName(typeOnchainRejection.title) @@ -58,6 +59,7 @@ describe('Tx history tests 2', () => { ]) }) + // TODO: Added to prod // Batch transaction it('Verify exapanded details for batch', () => { createTx.clickOnTransactionItemByName(typeBatch.title, typeBatch.summaryTxInfo) @@ -68,6 +70,7 @@ describe('Tx history tests 2', () => { createTx.verifyActions([typeBatch.nativeTransfer.title]) }) + // TODO: Added to prod // Add owner it('Verify summary for adding owner', () => { createTx.verifySummaryByName(typeAddOwner.title, [typeGeneral.statusOk], typeAddOwner.altImage) @@ -87,11 +90,13 @@ describe('Tx history tests 2', () => { ) }) + // TODO: Added to prod // Change owner it('Verify summary for changing owner', () => { createTx.verifySummaryByName(typeChangeOwner.title, [typeGeneral.statusOk], typeChangeOwner.altImage) }) + // TODO: Added to prod it('Verify exapanded details for changing owner', () => { createTx.clickOnTransactionItemByName(typeChangeOwner.title) createTx.verifyExpandedDetails([ @@ -106,6 +111,7 @@ describe('Tx history tests 2', () => { ]) }) + // TODO: Added to prod // Remove owner it('Verify summary for removing owner', () => { createTx.verifySummaryByName(typeRemoveOwner.title, [typeGeneral.statusOk], typeRemoveOwner.altImage) @@ -126,6 +132,7 @@ describe('Tx history tests 2', () => { createTx.checkRequiredThreshold(1) }) + // TODO: Added to prod // Disbale module it('Verify summary for disable module', () => { createTx.verifySummaryByName(typeDisableOwner.title, [typeGeneral.statusOk], typeDisableOwner.altImage) @@ -141,6 +148,7 @@ describe('Tx history tests 2', () => { ]) }) + // TODO: Added to prod // Change threshold it('Verify summary for changing threshold', () => { createTx.verifySummaryByName( @@ -150,6 +158,7 @@ describe('Tx history tests 2', () => { ) }) + // TODO: Added to prod it('Verify exapanded details for changing threshold', () => { createTx.clickOnTransactionItemByName(typeChangeThreshold.title) createTx.verifyExpandedDetails( @@ -163,6 +172,7 @@ describe('Tx history tests 2', () => { createTx.checkRequiredThreshold(2) }) + // TODO: Added to prod it('Verify that sender address of untrusted token will not be copied until agreed in warning popup', () => { createTx.clickOnTransactionItemByName(typeUntrustedToken.summaryTitle, typeUntrustedToken.summaryTxInfo) createTx.verifyAddressNotCopied(0, typeUntrustedToken.senderAddress)