diff --git a/tauri-wallet/webdriver/.prettierrc.json b/tauri-wallet/webdriver/.prettierrc.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/tauri-wallet/webdriver/.prettierrc.json @@ -0,0 +1 @@ +{} diff --git a/tauri-wallet/webdriver/README.md b/tauri-wallet/webdriver/README.md index e527f85835..acd346ec57 100644 --- a/tauri-wallet/webdriver/README.md +++ b/tauri-wallet/webdriver/README.md @@ -5,75 +5,82 @@ SPDX-License-Identifier: Apache-2.0 # Nym Wallet Webdriverio testsuite -A webdriverio test suite implementation using tauri driver +A webdriverio test suite implementation using tauri driver with a page object model design. This is to provide quick iterative feedback on the UI of the nym wallet. Currently, tauri-driver is available to run on Windows and Linux machines. -## Installation prerequisites -* `Yarn` -* `NodeJS >= v16.8.0` -* `Rust & cargo >= v1.51` -* `tauri-driver` -* `That you have an existing mnemonic and you can login to the app` -* `Have the details listed below to provide the user-data.json file` +## Installation prerequisites +- `Yarn` +- `NodeJS >= v16.8.0` +- `Rust & cargo >= v1.56.1` +- `tauri-driver` +- `That you have an existing mnemonic and you can login to the app` +- `Have the details listed below to provide the user-data.json file` ## Key Information -* Please read the instructions on the `nym/tauri-wallet/README.md` in the root of the project on how to build the application -* Please ensure you have the relevant Webdriver kits installed on your machine - + +- Please read the instructions on the `nym/tauri-wallet/README.md` in the root of the project on how to build the application +- Please ensure you have the relevant Webdriver kits installed on your machine - + ``` linux: - sudo apt-get install -y webkit2gtk-driver - ``` - ``` - windows: + sudo apt-get install -y webkit2gtk-driver +``` + +``` +windows: download msedgedriver.exe from https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/ ``` -please visit [Tauri Studio](https://tauri.studio/en/docs/usage/guides/webdriver/introduction), this will specify the additional drivers you need -* The path to run the application is set in the `wdio.conf.js` which lives in the root directory -* Before running the suite you need to build the application and check that the application has -built successfully, if so, you will have an executable sitting in the target directory in `tauri-wallet/target/*/nym_wallet` (refer to point 1) -* The suite will not be able to detect elements on screen if you select a release build, however you can run tests against a release target +please visit [Tauri Studio](https://tauri.studio/en/docs/usage/guides/webdriver/introduction), this will specify the additional drivers you need + +- The path to run the application is set in the `wdio.conf.js` which lives in the root directory +- Before running the suite you need to build the application and check that the application has + built successfully, if so, you will have an executable sitting in the target directory in `tauri-wallet/target/*/nym_wallet` (refer to point 1) +- The suite will not be able to detect elements on screen if you select a release build, however you can run tests against a release target ## Installation & usage -* `test excution happens inside /webdriver directory` -* `test data needs to be provided inside the user-data.json` -* `check the wdio.conf.cjs to see the test execution along with the path location of the binary` + +- `test excution happens inside /webdriver directory` +- `test data needs to be provided inside the user-data.json` +- `check the wdio.conf.cjs to see the test execution along with the path location of the binary` + ``` -example: +example: //mnemonic is a base64 enconded value, which is your 24 character passphrase, these values are for illustration purposes - { - "mnemonic" : "dGhpcyBpcyBhIHBhc3NwaHJhc2UK", - "punk_address" : "punk1f3dzkhmunma5ze5q952daxca6371989189", - "receiver_address" : "punk1p0ce82jxxglpmutvhq4mdwgcwf4avm5n1821982", + { + "mnemonic" : "dGhpcyBpcyBhIHBhc3NwaHJhc2UK", + "punk_address" : "punk1f3dzkhmunma5ze5q952daxca6371989189", + "receiver_address" : "punk1p0ce82jxxglpmutvhq4mdwgcwf4avm5n1821982", "amount_to_send" : "1", "identity_key_to_delegate_mix_node": "value", "identity_key_to_delegate_gateway" : "value", "delegate_amount" : "1" } ``` -* `yarn test:runall` - the first test run will take some time to spin up be patient -* You can run tests individually by passing through the script situated in the package.json for example `yarn test:newuser` + +- `yarn test:runall` - the first test run will take some time to spin up be patient +- You can run tests individually by passing through the script situated in the package.json for example `yarn test:newuser` Tests are categorised and run by their pages, they follow a sequential flow, if one test case fails before the next execution it may derail the next test. //todo improve in near future ## Test reporting + Currently the tests use allure reporting, the configuration can be altered in the `wdio.conf.cjs`. At present it takes snapshots of any failing tests, the test output run can be seen in the allure-results directory Tests ouput: -* -* + +- +- If any tests fail in their test run it will produce the stack trace error along with the test in question ## TODO -*Disclaimer*: Still WIP - +_Disclaimer_: Still WIP Implement error handling/ beforeTest() - validating json file exists with data for test execution - Currently this is dev'd against a Linux based OS, not tested against windows yet. diff --git a/tauri-wallet/webdriver/babel.config.js b/tauri-wallet/webdriver/babel.config.js index 8073490996..723cec7c52 100644 --- a/tauri-wallet/webdriver/babel.config.js +++ b/tauri-wallet/webdriver/babel.config.js @@ -1,12 +1,12 @@ module.exports = { - "presets": [ - [ - "@babel/preset-env", - { - "targets": { - "node": "14" - } - } - ] - ] -} \ No newline at end of file + presets: [ + [ + "@babel/preset-env", + { + targets: { + node: "14", + }, + }, + ], + ], +}; diff --git a/tauri-wallet/webdriver/common/constants/text-constants.js b/tauri-wallet/webdriver/common/constants/text-constants.js index 09e19ba685..843e4922e6 100644 --- a/tauri-wallet/webdriver/common/constants/text-constants.js +++ b/tauri-wallet/webdriver/common/constants/text-constants.js @@ -1,28 +1,30 @@ module.exports = { - //receivePage - "recievePageInformation" : "You can receive tokens by providing this address to the sender", - "receivePageHeaderText": "Receive Nym", - - //sendPage - "sendPunk" : "Send PUNK", + //receivePage + recievePageInformation: + "You can receive tokens by providing this address to the sender", + receivePageHeaderText: "Receive Nym", - //homePage - "homePageErrorMnemonic": "Error parsing bip39 mnemonic", - "homePageSignIn" : "Sign in", - "createOne" : "Create one", - "walletSuccess" : "Please store your mnemonic in a safe place. You'll need it to access your wallet", - - //bondPage // unbondPage - "bondAlreadyNoded" : "Looks like you already have a mixnode bonded.", - "bondNodeHeaderText": "Bond a node or gateway", - "unbondNodeHeaderText" : "Unbond a mixnode or gateway", - "unbondMixNodeText": "Looks like you already have a mixnode bonded.", - "unbondMixNode": "UNBOND", + //sendPage + sendPunk: "Send PUNK", - //delegatePage // undelegatePage - "delegateHeaderText" : "Delegate\nDelegate to mixnode or gateway", - "nodeIdentityValidationText" : "identity is a required field", - "amountValidationText": "amount is a required field", - "undelegateHeaderText" : "Undelegate from a mixnode or gateway", - "delegationComplete" : "Delegation complete" -} \ No newline at end of file + //homePage + homePageErrorMnemonic: "Error parsing bip39 mnemonic", + homePageSignIn: "Sign in", + createOne: "Create one", + walletSuccess: + "Please store your mnemonic in a safe place. You'll need it to access your wallet", + + //bondPage // unbondPage + bondAlreadyNoded: "Looks like you already have a mixnode bonded.", + bondNodeHeaderText: "Bond a node or gateway", + unbondNodeHeaderText: "Unbond a mixnode or gateway", + unbondMixNodeText: "Looks like you already have a mixnode bonded.", + unbondMixNode: "UNBOND", + + //delegatePage // undelegatePage + delegateHeaderText: "Delegate\nDelegate to mixnode", + nodeIdentityValidationText: "identity is a required field", + amountValidationText: "amount is a required field", + undelegateHeaderText: "Undelegate from a mixnode or gateway", + delegationComplete: "Delegation complete", +}; diff --git a/tauri-wallet/webdriver/common/data/user-data.json b/tauri-wallet/webdriver/common/data/user-data.json index 92096f442b..4b4b4afa0b 100644 --- a/tauri-wallet/webdriver/common/data/user-data.json +++ b/tauri-wallet/webdriver/common/data/user-data.json @@ -1,9 +1,9 @@ { - "mnemonic": "value", - "punk_address": "", - "receiver_address": "", - "amount_to_send": "", - "identity_key_to_delegate_mix_node": "", - "identity_key_to_delegate_gateway" : "", - "delegate_amount": "" -} \ No newline at end of file + "mnemonic": "value", + "punk_address": "", + "receiver_address": "", + "amount_to_send": "", + "identity_key_to_delegate_mix_node": "", + "identity_key_to_delegate_gateway": "", + "delegate_amount": "" +} diff --git a/tauri-wallet/webdriver/common/helpers/helper.js b/tauri-wallet/webdriver/common/helpers/helper.js index 0781de5ece..7f8ac61385 100644 --- a/tauri-wallet/webdriver/common/helpers/helper.js +++ b/tauri-wallet/webdriver/common/helpers/helper.js @@ -1,45 +1,43 @@ class Helpers { + //helper to decode mnemonic so plain 24 character passphrase isn't in sight albeit it is presented when ruunning the scripts + //maybe a show passphrase toggle button? + decodeBase = async (input) => { + var m = Buffer.from(input, "base64").toString(); + return m; + }; - //helper to decode mnemonic so plain 24 character passphrase isn't in sight albeit it is presented when ruunning the scripts - //maybe a show passphrase toggle button? - decodeBase = async (input) => { - var m = Buffer.from(input, 'base64').toString() - return m + navigateAndClick = async (element) => { + await element.click(); + }; + + scrollIntoView = async (element) => { + await element.scrollIntoView(); + }; + + currentBalance = async (value) => { + return parseFloat(value.split(/\s+/)[0].toString()).toFixed(5); + }; + + //todo need to improve calculation - WIP + calculateFees = async (beforeBalance, transactionFee, amount, isSend) => { + let fee; + + if (isSend) { + //send transaction + fee = transactionFee.split(/\s+/)[0]; + } else { + //delegate transaction + fee = transactionFee.split(/\s+/)[3]; } - navigateAndClick = async (element) => { - await element.click() - } + const currentBalance = beforeBalance.split(/\s+/)[0]; - scrollIntoView = async (element) => { - await element.scrollIntoView() - } + const castCurrentBalance = parseFloat(currentBalance).toFixed(5); + const transCost = +parseFloat(amount) + +parseFloat(fee).toFixed(5); - - currentBalance = async (value) => { - return parseFloat(value.split(/\s+/)[0].toString()).toFixed(5) - } - - //todo need to improve calculation - WIP - calculateFees = async (beforeBalance, transactionFee, amount, isSend) => { - let fee - - if (isSend) { - //send transaction - fee = transactionFee.split(/\s+/)[0] - } else { - //delegate transaction - fee = transactionFee.split(/\s+/)[3] - } - - const currentBalance = beforeBalance.split(/\s+/)[0] - - const castCurrentBalance = parseFloat(currentBalance).toFixed(5) - const transCost = +parseFloat(amount) + +parseFloat(fee).toFixed(5) - - let sum = parseFloat(castCurrentBalance) - parseFloat(transCost) - return sum.toFixed(5) - } + let sum = parseFloat(castCurrentBalance) - parseFloat(transCost); + return sum.toFixed(5); + }; } -module.exports = new Helpers() \ No newline at end of file +module.exports = new Helpers(); diff --git a/tauri-wallet/webdriver/package.json b/tauri-wallet/webdriver/package.json index 1adaaab495..bc309a7574 100644 --- a/tauri-wallet/webdriver/package.json +++ b/tauri-wallet/webdriver/package.json @@ -9,7 +9,8 @@ "test:home": "wdio run wdio.conf.cjs --suite home", "test:bond": "wdio run wdio.conf.cjs --suite bond", "test:delegate": "wdio run wdio.conf.cjs --suite delegate", - "test:newuser": "wdio run wdio.conf.cjs --suite newuser" + "test:newuser": "wdio run wdio.conf.cjs --suite newuser", + "run:prettier": "prettier --write ." }, "dependencies": { "@types/node": "^16.11.0", @@ -20,6 +21,7 @@ "devDependencies": { "@wdio/local-runner": "^7.14.1", "@wdio/mocha-framework": "^7.14.1", - "@wdio/spec-reporter": "^7.14.1" + "@wdio/spec-reporter": "^7.14.1", + "prettier": "2.4.1" } } diff --git a/tauri-wallet/webdriver/tests/pages/wallet.bond.js b/tauri-wallet/webdriver/tests/pages/wallet.bond.js index 10e437caba..40a9066c6a 100644 --- a/tauri-wallet/webdriver/tests/pages/wallet.bond.js +++ b/tauri-wallet/webdriver/tests/pages/wallet.bond.js @@ -1,20 +1,48 @@ class WalletBond { - - get header() { return $("#root > div > div:nth-child(2) > div:nth-child(2) > div > div > div > div.MuiCardHeader-root > div > span.MuiTypography-root.MuiCardHeader-subheader.MuiTypography-subtitle1.MuiTypography-colorTextSecondary.MuiTypography-displayBlock") } - get identityKey() { return $("#identityKey") } - get sphinxKey() { return $("#sphinxKey") } - get amountToBond() { return $("#amount") } - get hostInput() { return $("#host") } - get versionInput() { return $("version") } - get selectAdvancedOptions() { return $("[type='checkbox']") } - get mixPort() { return $("#mixPort") } - get verlocPort() { return $("#verlocPort") } - get httpApiPort() { return $("#httpApiPort") } - get bondButton() { return $("[data-testid='bond-button']") } - get unBondButton() { return $("[data-testid='un-bond']") } - get unBond() { return $("[data-testid='bond-noded']") } - get unBondWarning() {return $("div.MuiAlert-message")} - + get header() { + return $( + "#root > div > div:nth-child(2) > div:nth-child(2) > div > div > div > div.MuiCardHeader-root > div > span.MuiTypography-root.MuiCardHeader-subheader.MuiTypography-subtitle1.MuiTypography-colorTextSecondary.MuiTypography-displayBlock" + ); + } + get identityKey() { + return $("#identityKey"); + } + get sphinxKey() { + return $("#sphinxKey"); + } + get amountToBond() { + return $("#amount"); + } + get hostInput() { + return $("#host"); + } + get versionInput() { + return $("version"); + } + get selectAdvancedOptions() { + return $("[type='checkbox']"); + } + get mixPort() { + return $("#mixPort"); + } + get verlocPort() { + return $("#verlocPort"); + } + get httpApiPort() { + return $("#httpApiPort"); + } + get bondButton() { + return $("[data-testid='bond-button']"); + } + get unBondButton() { + return $("[data-testid='un-bond']"); + } + get unBond() { + return $("[data-testid='bond-noded']"); + } + get unBondWarning() { + return $("div.MuiAlert-message"); + } } -module.exports = new WalletBond() \ No newline at end of file +module.exports = new WalletBond(); diff --git a/tauri-wallet/webdriver/tests/pages/wallet.create.js b/tauri-wallet/webdriver/tests/pages/wallet.create.js index 13f5dd6bd8..25f82ec81f 100644 --- a/tauri-wallet/webdriver/tests/pages/wallet.create.js +++ b/tauri-wallet/webdriver/tests/pages/wallet.create.js @@ -1,12 +1,24 @@ class WalletCreate { - - get createAccount() { return $("[href='#']") } - get create() { return $("[data-testid='create-button']") } - get accountCreatedSuccessfully() { return $("[data-testid='mnemonic-warning']") } - get walletMnemonicValue() { return $("[data-testid='mnemonic-phrase']") } - get punkAddress() { return $("[data-testid='wallet-address']") } - get backToSignIn() { return $("[data-testid='sign-in-button']") } - get signInButton() { return $("[type='submit']") } - + get createAccount() { + return $("[href='#']"); + } + get create() { + return $("[data-testid='create-button']"); + } + get accountCreatedSuccessfully() { + return $("[data-testid='mnemonic-warning']"); + } + get walletMnemonicValue() { + return $("[data-testid='mnemonic-phrase']"); + } + get punkAddress() { + return $("[data-testid='wallet-address']"); + } + get backToSignIn() { + return $("[data-testid='sign-in-button']"); + } + get signInButton() { + return $("[type='submit']"); + } } -module.exports = new WalletCreate() \ No newline at end of file +module.exports = new WalletCreate(); diff --git a/tauri-wallet/webdriver/tests/pages/wallet.delegate.js b/tauri-wallet/webdriver/tests/pages/wallet.delegate.js index b19196b6a6..7ef8563a6f 100644 --- a/tauri-wallet/webdriver/tests/pages/wallet.delegate.js +++ b/tauri-wallet/webdriver/tests/pages/wallet.delegate.js @@ -1,26 +1,60 @@ class WalletDelegate { - - get header() { return $("[data-testid='Delegate']") } - get nodeIdentity() { return $("#identity") } - get amountToDelegate() { return $("#amount") } - get identityValidation() { return $("#identity-helper-text") } - get amountToDelegateValidation() { return $("#amount-helper-text") } - get delegateStakeButton() { return $("[data-testid='delegate-button']") } - get mixNodeRadioButton() { return $("[data-testid='mix-node']") } - get gateWayRadioButton() { return $("[data-testid='gate-way']") } - get successfullyDelegate() { return $("[data-testid='delegate-success']") } - get finishButton() { return $("[data-testid='finish-button']") } - get transactionFeeAmount() { return $("[data-testid='fee-amount']") } - get accountBalance() { return $("[data-testid='account-balance']") } + get header() { + return $("[data-testid='Delegate']"); + } + get nodeIdentity() { + return $("#identity"); + } + get amountToDelegate() { + return $("#amount"); + } + get identityValidation() { + return $("#identity-helper-text"); + } + get amountToDelegateValidation() { + return $("#amount-helper-text"); + } + get delegateStakeButton() { + return $("[data-testid='delegate-button']"); + } + get mixNodeRadioButton() { + return $("[data-testid='mix-node']"); + } + get gateWayRadioButton() { + return $("[data-testid='gate-way']"); + } + get successfullyDelegate() { + return $("[data-testid='delegate-success']"); + } + get finishButton() { + return $("[data-testid='finish-button']"); + } + get transactionFeeAmount() { + return $("[data-testid='fee-amount']"); + } + get accountBalance() { + return $("[data-testid='account-balance']"); + } //Undelegate - get unDelegateHeader() { return $("[data-testid='Undelegate']") } - get unNodeIdentity() { return $("[name='identity']") } - get unDelegateFeeText() { return $("[data-testid='fee-amount']") } - get unDelegateGatewayRadioButton() { return $("[data-testid='gate-way']") } - get unMixNodeRadioButton() { return $("[data-testid='mix-node']") } - get unDelegateButton() { return $("[data-testid='submit-button']") } - + get unDelegateHeader() { + return $("[data-testid='Undelegate']"); + } + get unNodeIdentity() { + return $("[name='identity']"); + } + get unDelegateFeeText() { + return $("[data-testid='fee-amount']"); + } + get unDelegateGatewayRadioButton() { + return $("[data-testid='gate-way']"); + } + get unMixNodeRadioButton() { + return $("[data-testid='mix-node']"); + } + get unDelegateButton() { + return $("[data-testid='submit-button']"); + } } -module.exports = new WalletDelegate() \ No newline at end of file +module.exports = new WalletDelegate(); diff --git a/tauri-wallet/webdriver/tests/pages/wallet.homepage.js b/tauri-wallet/webdriver/tests/pages/wallet.homepage.js index c4681daf3a..23012c7c2c 100644 --- a/tauri-wallet/webdriver/tests/pages/wallet.homepage.js +++ b/tauri-wallet/webdriver/tests/pages/wallet.homepage.js @@ -1,18 +1,42 @@ class WalletHome { - - get balanceCheck() { return $("#root > div > div:nth-child(2) > div:nth-child(2) > div > div > div > div.MuiCardHeader-root > div > span") } - get punkBalance() { return $("") } - get punkAddress() { return $("[data-testid='wallet-address']") } - get accountBalance() { return $("[data-testid='account-balance']") } - get balanceButton() { return $("[href='/balance']") } - get sendButton() { return $("[href='/send']"); } - get receiveButton() { return $("[href='/receive']") } - get bondButton() { return $("[href='/bond']") } - get unBondButton() { return $("[href='/unbond']") } - get delegateButton() { return $("[href='/delegate']") } - get unDelegateButton() { return $("[href='/undelegate']") } - get logOutButton() { return $("[data-testid='log-out']") } - + get balanceCheck() { + return $( + "#root > div > div:nth-child(2) > div:nth-child(2) > div > div > div > div.MuiCardHeader-root > div > span" + ); + } + get punkBalance() { + return $(""); + } + get punkAddress() { + return $("[data-testid='wallet-address']"); + } + get accountBalance() { + return $("[data-testid='account-balance']"); + } + get balanceButton() { + return $("[href='/balance']"); + } + get sendButton() { + return $("[href='/send']"); + } + get receiveButton() { + return $("[href='/receive']"); + } + get bondButton() { + return $("[href='/bond']"); + } + get unBondButton() { + return $("[href='/unbond']"); + } + get delegateButton() { + return $("[href='/delegate']"); + } + get unDelegateButton() { + return $("[href='/undelegate']"); + } + get logOutButton() { + return $("[data-testid='log-out']"); + } } -module.exports = new WalletHome() \ No newline at end of file +module.exports = new WalletHome(); diff --git a/tauri-wallet/webdriver/tests/pages/wallet.login.js b/tauri-wallet/webdriver/tests/pages/wallet.login.js index f67d003bd9..92cd3d848a 100644 --- a/tauri-wallet/webdriver/tests/pages/wallet.login.js +++ b/tauri-wallet/webdriver/tests/pages/wallet.login.js @@ -1,18 +1,31 @@ class WalletLogin { + get signInLabel() { + return $("[data-testid='sign-in']"); + } + get mnemonic() { + return $("#mnemonic"); + } + get signInButton() { + return $("[type='submit']"); + } + get errorValidation() { + return $("[class='MuiAlert-message']"); + } + get accountBalance() { + return $("[data-test-id='account-balance']"); + } + get accountBalanceText() { + return $("[class='MuiAlert-message']"); + } + get walletAddress() { + return $("[data-testid='wallet-address']"); + } - get signInLabel() {return $("[data-testid='sign-in']")} - get mnemonic() { return $("#mnemonic")} - get signInButton() {return $("[type='submit']") } - get errorValidation() {return $("[class='MuiAlert-message']") } - get accountBalance() {return $("[data-test-id='account-balance']")} - get accountBalanceText() {return $("[class='MuiAlert-message']")} - get walletAddress() {return $("[data-testid='wallet-address']")} - - //login to the application - enterMnemonic = async(mnemonic) => { - await this.mnemonic.addValue(mnemonic); - await this.signInButton.click(); - await this.accountBalance.isExisting(); - } + //login to the application + enterMnemonic = async (mnemonic) => { + await this.mnemonic.addValue(mnemonic); + await this.signInButton.click(); + await this.accountBalance.isExisting(); + }; } -module.exports = new WalletLogin() \ No newline at end of file +module.exports = new WalletLogin(); diff --git a/tauri-wallet/webdriver/tests/pages/wallet.receive.js b/tauri-wallet/webdriver/tests/pages/wallet.receive.js index bf736df46d..f7c27f1118 100644 --- a/tauri-wallet/webdriver/tests/pages/wallet.receive.js +++ b/tauri-wallet/webdriver/tests/pages/wallet.receive.js @@ -1,24 +1,37 @@ class WalletReceive { + get receiveNymHeader() { + return $( + "#root > div > div:nth-child(2) > div:nth-child(2) > div > div > div > div.MuiCardHeader-root > div > span" + ); + } + get receiveNymText() { + return $("[data-testid='receive-nym']"); + } + get walletAddress() { + return $("[data-testid='client-address']"); + } + get copyButton() { + return $("[data-testid='copy-button']"); + } + get qrCode() { + return $("[data-testid='qr-code']"); + } - get receiveNymHeader() { return $("#root > div > div:nth-child(2) > div:nth-child(2) > div > div > div > div.MuiCardHeader-root > div > span") } - get receiveNymText() { return $("[data-testid='receive-nym']") } - get walletAddress() { return $("[data-testid='client-address']"); } - get copyButton() { return $("[data-testid='copy-button']") } - get qrCode() { return $("[data-testid='qr-code']") } + WaitForButtonChangeOnCopy = async () => { + await this.copyButton.click(); - WaitForButtonChangeOnCopy = async () => { - await this.copyButton.click() - - await this.copyButton.waitForDisplayed({ timeout: 1500 }) - - await this.copyButton.waitUntil(async function () { - return (await this.getText()) === 'COPIED' - }, { - timeout: 1500, - timeoutMsg: 'expected text to be different after 1.5s' - }) - } + await this.copyButton.waitForDisplayed({ timeout: 1500 }); + await this.copyButton.waitUntil( + async function () { + return (await this.getText()) === "COPIED"; + }, + { + timeout: 1500, + timeoutMsg: "expected text to be different after 1.5s", + } + ); + }; } -module.exports = new WalletReceive() \ No newline at end of file +module.exports = new WalletReceive(); diff --git a/tauri-wallet/webdriver/tests/pages/wallet.send.js b/tauri-wallet/webdriver/tests/pages/wallet.send.js index 8c11550a6a..51f26dce98 100644 --- a/tauri-wallet/webdriver/tests/pages/wallet.send.js +++ b/tauri-wallet/webdriver/tests/pages/wallet.send.js @@ -1,22 +1,52 @@ class WalletSend { - - get fromAddress() { return $("#from") } - get toAddress() { return $("#to") } - get amount() { return $("#amount") } - get nextButton() { return $("[data-testid='button") } - get sendHeader() { return $("[data-testid='Send PUNK']") } - get accountBalance() { return $("[data-testid='account-balance']") } - get amountReviewAndSend() { return $("[data-testid='Amount']") } - get toAddressReviewAndSend() { return $("[data-testid='To']") } - get fromAddressReviewAndSend() { return $("[data-testid='From']") } - get transferFeeAmount() { return $("[data-testid='Transfer fee']") } - get reviewAndSendBackButton() { return $("[data-testid='back-button']") } - get sendButton() { return $("[data-testid='button']") } - get transactionComplete() { return $("[data-testid='transaction-complete']") } - get transactionCompleteRecipient() { return $("[data-testid='to-address']") } - get transactionCompleteAmount() { return $("[data-testid='send-amount']") } - get finishButton() { return $("[data-testid='button']") } - + get fromAddress() { + return $("#from"); + } + get toAddress() { + return $("#to"); + } + get amount() { + return $("#amount"); + } + get nextButton() { + return $("[data-testid='button"); + } + get sendHeader() { + return $("[data-testid='Send PUNK']"); + } + get accountBalance() { + return $("[data-testid='account-balance']"); + } + get amountReviewAndSend() { + return $("[data-testid='Amount']"); + } + get toAddressReviewAndSend() { + return $("[data-testid='To']"); + } + get fromAddressReviewAndSend() { + return $("[data-testid='From']"); + } + get transferFeeAmount() { + return $("[data-testid='Transfer fee']"); + } + get reviewAndSendBackButton() { + return $("[data-testid='back-button']"); + } + get sendButton() { + return $("[data-testid='button']"); + } + get transactionComplete() { + return $("[data-testid='transaction-complete']"); + } + get transactionCompleteRecipient() { + return $("[data-testid='to-address']"); + } + get transactionCompleteAmount() { + return $("[data-testid='send-amount']"); + } + get finishButton() { + return $("[data-testid='button']"); + } } -module.exports = new WalletSend() \ No newline at end of file +module.exports = new WalletSend(); diff --git a/tauri-wallet/webdriver/tests/pages/wallet.undelegate.js b/tauri-wallet/webdriver/tests/pages/wallet.undelegate.js index 9e1c82f99f..664d02ee46 100644 --- a/tauri-wallet/webdriver/tests/pages/wallet.undelegate.js +++ b/tauri-wallet/webdriver/tests/pages/wallet.undelegate.js @@ -1,12 +1,22 @@ class WallentUndelegate { - - get transactionFee() { return $("[data-testid='fee-amount']") } - get mixNodeRadioButton() { return $("[value='mixnode']") } - get gatewayRadionButton() { return $("[value='gateway']") } - get nodeIdentity() { return $("#mui-55011") } - get identityHelper() { return $("#identity-helper-text") } - get delegateButton() { return $("[data-testid='submit-button']") } - + get transactionFee() { + return $("[data-testid='fee-amount']"); + } + get mixNodeRadioButton() { + return $("[value='mixnode']"); + } + get gatewayRadionButton() { + return $("[value='gateway']"); + } + get nodeIdentity() { + return $("#mui-55011"); + } + get identityHelper() { + return $("#identity-helper-text"); + } + get delegateButton() { + return $("[data-testid='submit-button']"); + } } -module.exports = new WallentUndelegate() \ No newline at end of file +module.exports = new WallentUndelegate(); diff --git a/tauri-wallet/webdriver/tests/specs/existinguser/test.wallet.bond.js b/tauri-wallet/webdriver/tests/specs/existinguser/test.wallet.bond.js index 76e2d1b64c..18b9cf1112 100644 --- a/tauri-wallet/webdriver/tests/specs/existinguser/test.wallet.bond.js +++ b/tauri-wallet/webdriver/tests/specs/existinguser/test.wallet.bond.js @@ -1,55 +1,54 @@ -const userData = require('../../../common/data/user-data.json') -const helper = require('../../../common/helpers/helper') -const walletLogin = require('../../pages/wallet.login') -const textConstants = require('../../../common/constants/text-constants') -const walletHomepage = require('../../pages/wallet.homepage') -const bondPage = require('../../pages/wallet.bond') +const userData = require("../../../common/data/user-data.json"); +const helper = require("../../../common/helpers/helper"); +const walletLogin = require("../../pages/wallet.login"); +const textConstants = require("../../../common/constants/text-constants"); +const walletHomepage = require("../../pages/wallet.homepage"); +const bondPage = require("../../pages/wallet.bond"); describe("bonding and unbonding nodes", () => { - it("should have a node already bonded and validate no input fields are enabled", async () => { + it("should have a node already bonded and validate no input fields are enabled", async () => { + const mnemonic = await helper.decodeBase(userData.mnemonic); - const mnemonic = await helper.decodeBase(userData.mnemonic); + await walletLogin.enterMnemonic(mnemonic); - await walletLogin.enterMnemonic(mnemonic); + await helper.navigateAndClick(walletHomepage.bondButton); - await helper.navigateAndClick(walletHomepage.bondButton); + await helper.scrollIntoView(bondPage.selectAdvancedOptions); - await helper.scrollIntoView(bondPage.selectAdvancedOptions); + await bondPage.selectAdvancedOptions.click(); - await bondPage.selectAdvancedOptions.click(); + //as bond node is mixed expect all the fields to be disabled + const getText = await bondPage.header.getText(); + const getIdentity = await bondPage.identityKey.isEnabled(); + const getSphinxKey = await bondPage.sphinxKey.isEnabled(); + const amountToBond = await bondPage.amountToBond.isEnabled(); + const hostInput = await bondPage.hostInput.isEnabled(); + const verlocPort = await bondPage.verlocPort.isEnabled(); + const httpApiPort = await bondPage.httpApiPort.isEnabled(); + const mixPort = await bondPage.mixPort.isEnabled(); - //as bond node is mixed expect all the fields to be disabled - const getText = await bondPage.header.getText() - const getIdentity = await bondPage.identityKey.isEnabled() - const getSphinxKey = await bondPage.sphinxKey.isEnabled() - const amountToBond = await bondPage.amountToBond.isEnabled() - const hostInput = await bondPage.hostInput.isEnabled() - const verlocPort = await bondPage.verlocPort.isEnabled() - const httpApiPort = await bondPage.httpApiPort.isEnabled() - const mixPort = await bondPage.mixPort.isEnabled() + //assert all field are not functional + expect(getText).toEqual(textConstants.bondNodeHeaderText); + expect(getIdentity).toEqual(false); + expect(getSphinxKey).toEqual(false); + expect(amountToBond).toEqual(false); + expect(hostInput).toEqual(false); + expect(verlocPort).toEqual(false); + expect(httpApiPort).toEqual(false); + expect(mixPort).toEqual(false); + }); - //assert all field are not functional - expect(getText).toEqual(textConstants.bondNodeHeaderText) - expect(getIdentity).toEqual(false) - expect(getSphinxKey).toEqual(false) - expect(amountToBond).toEqual(false) - expect(hostInput).toEqual(false) - expect(verlocPort).toEqual(false) - expect(httpApiPort).toEqual(false) - expect(mixPort).toEqual(false) - }) + it("unbond mix monde screen should be present with the option to unbond", async () => { + //we do not want to unbond our node, check that elements are selectable + await helper.scrollIntoView(walletHomepage.unBondButton); + await helper.navigateAndClick(walletHomepage.unBondButton); - it("unbond mix monde screen should be present with the option to unbond", async () => { - //we do not want to unbond our node, check that elements are selectable - await helper.scrollIntoView(walletHomepage.unBondButton) - await helper.navigateAndClick(walletHomepage.unBondButton) + const getText = await bondPage.header.getText(); + const unbondText = await bondPage.unBondWarning.getText(); - const getText = await bondPage.header.getText() - const unbondText = await bondPage.unBondWarning.getText() - - await bondPage.unBondButton.isClickable() - //assert all field are not functional - expect(getText).toEqual(textConstants.unbondNodeHeaderText) - expect(unbondText).toEqual(textConstants.unbondMixNodeText) - }) -}) + await bondPage.unBondButton.isClickable(); + //assert all field are not functional + expect(getText).toEqual(textConstants.unbondNodeHeaderText); + expect(unbondText).toEqual(textConstants.unbondMixNodeText); + }); +}); diff --git a/tauri-wallet/webdriver/tests/specs/existinguser/test.wallet.delegate.js b/tauri-wallet/webdriver/tests/specs/existinguser/test.wallet.delegate.js index d287fe06c4..3143e55685 100644 --- a/tauri-wallet/webdriver/tests/specs/existinguser/test.wallet.delegate.js +++ b/tauri-wallet/webdriver/tests/specs/existinguser/test.wallet.delegate.js @@ -1,90 +1,108 @@ -const userData = require('../../../common/data/user-data.json') -const helper = require('../../../common/helpers/helper') -const walletLogin = require('../../pages/wallet.login') -const textConstants = require('../../../common/constants/text-constants') -const walletHomepage = require('../../pages/wallet.homepage') -const delegatePage = require('../../pages/wallet.delegate') +const userData = require("../../../common/data/user-data.json"); +const helper = require("../../../common/helpers/helper"); +const walletLogin = require("../../pages/wallet.login"); +const textConstants = require("../../../common/constants/text-constants"); +const walletHomepage = require("../../pages/wallet.homepage"); +const delegatePage = require("../../pages/wallet.delegate"); describe("delegate to a mix node or gateway", () => { - it("ensure that fields are enabled for existing user", async () => { + it("ensure that fields are enabled for existing user", async () => { + const mnemonic = await helper.decodeBase(userData.mnemonic); - const mnemonic = await helper.decodeBase(userData.mnemonic) + await walletLogin.enterMnemonic(mnemonic); - await walletLogin.enterMnemonic(mnemonic) + await helper.navigateAndClick(walletHomepage.delegateButton); - await helper.navigateAndClick(walletHomepage.delegateButton) + const getText = await delegatePage.header.getText(); - const getText = await delegatePage.header.getText() + expect(getText).toEqual(textConstants.delegateHeaderText); + }); - expect(getText).toEqual(textConstants.delegateHeaderText) - }) + it("submitting the form without input prompts validation errors", async () => { + await delegatePage.delegateStakeButton.click(); - it("submitting the form without input prompts validation errors", async () => { + const getIdentityValidation = + await delegatePage.identityValidation.getText(); + const getAmountValidation = + await delegatePage.amountToDelegateValidation.getText(); - await delegatePage.delegateStakeButton.click() + expect(getIdentityValidation).toEqual( + textConstants.nodeIdentityValidationText + ); + expect(getAmountValidation).toEqual(textConstants.amountValidationText); + }); - const getIdentityValidation = await delegatePage.identityValidation.getText() - const getAmountValidation = await delegatePage.amountToDelegateValidation.getText() + it("input delegate amount to a mix node then broadcast the transaction then check account balances", async () => { + const balanceText = await delegatePage.accountBalance.getText(); - expect(getIdentityValidation).toEqual(textConstants.nodeIdentityValidationText) - expect(getAmountValidation).toEqual(textConstants.amountValidationText) + const getTransfeeAmount = await delegatePage.transactionFeeAmount.getText(); - }) + await delegatePage.nodeIdentity.setValue( + userData.identity_key_to_delegate_mix_node + ); - it("input delegate amount to a mix node then broadcast the transaction then check account balances", async () => { - - const balanceText = await delegatePage.accountBalance.getText() + await delegatePage.amountToDelegate.setValue(userData.delegate_amount); - const getTransfeeAmount = await delegatePage.transactionFeeAmount.getText() + //transfer fee + amount delegation + const sumCost = await helper.calculateFees( + balanceText, + getTransfeeAmount, + userData.delegate_amount, + false + ); - await delegatePage.nodeIdentity.setValue(userData.identity_key_to_delegate_mix_node) + await delegatePage.delegateStakeButton.click(); - await delegatePage.amountToDelegate.setValue(userData.delegate_amount) + await delegatePage.successfullyDelegate.waitForClickable({ + timeout: 10000, + }); - //transfer fee + amount delegation - const sumCost = await helper.calculateFees(balanceText, getTransfeeAmount, userData.delegate_amount, false) + const getConfirmationText = + await delegatePage.successfullyDelegate.getText(); + expect(getConfirmationText).toContain(textConstants.delegationComplete); - await delegatePage.delegateStakeButton.click() + const availablePunk = await delegatePage.accountBalance.getText(); + //expect new account balance - the fee calculation above - await delegatePage.successfullyDelegate.waitForClickable({ timeout: 10000 }) + await delegatePage.finishButton.click(); - const getConfirmationText = await delegatePage.successfullyDelegate.getText() - expect(getConfirmationText).toContain(textConstants.delegationComplete) + expect(await helper.currentBalance(availablePunk)).toEqual(sumCost); + }); - const availablePunk = await delegatePage.accountBalance.getText() - //expect new account balance - the fee calculation above + it("input amount to stake to a gateway then broadcast the transaction then check account balances", async () => { + const balanceText = await delegatePage.accountBalance.getText(); - await delegatePage.finishButton.click() + const getTransfeeAmount = await delegatePage.transactionFeeAmount.getText(); - expect(await helper.currentBalance(availablePunk)).toEqual(sumCost) - - }) + await delegatePage.gateWayRadioButton.click(); - it("input amount to stake to a gateway then broadcast the transaction then check account balances", async () => { - const balanceText = await delegatePage.accountBalance.getText() + await delegatePage.nodeIdentity.setValue( + userData.identity_key_to_delegate_gateway + ); - const getTransfeeAmount = await delegatePage.transactionFeeAmount.getText() + await delegatePage.amountToDelegate.setValue(userData.delegate_amount); - await delegatePage.gateWayRadioButton.click() + //transfer fee + amount delegation - await delegatePage.nodeIdentity.setValue(userData.identity_key_to_delegate_gateway) + const sumCost = await helper.calculateFees( + balanceText, + getTransfeeAmount, + userData.delegate_amount, + false + ); - await delegatePage.amountToDelegate.setValue(userData.delegate_amount) + await delegatePage.delegateStakeButton.click(); - //transfer fee + amount delegation + await delegatePage.successfullyDelegate.waitForClickable({ + timeout: 10000, + }); - const sumCost = await helper.calculateFees(balanceText, getTransfeeAmount, userData.delegate_amount, false) + const getConfirmationText = + await delegatePage.successfullyDelegate.getText(); + expect(getConfirmationText).toContain(textConstants.delegationComplete); - await delegatePage.delegateStakeButton.click() - - await delegatePage.successfullyDelegate.waitForClickable({ timeout: 10000 }) - - const getConfirmationText = await delegatePage.successfullyDelegate.getText() - expect(getConfirmationText).toContain(textConstants.delegationComplete) - - const availablePunk = await delegatePage.accountBalance.getText() - //expect new account balance - the fee calculation above - expect(await helper.currentBalance(availablePunk)).toEqual(sumCost) - - }) -}) + const availablePunk = await delegatePage.accountBalance.getText(); + //expect new account balance - the fee calculation above + expect(await helper.currentBalance(availablePunk)).toEqual(sumCost); + }); +}); diff --git a/tauri-wallet/webdriver/tests/specs/existinguser/test.wallet.home.js b/tauri-wallet/webdriver/tests/specs/existinguser/test.wallet.home.js index 43b4cd2da1..0355cdb78b 100644 --- a/tauri-wallet/webdriver/tests/specs/existinguser/test.wallet.home.js +++ b/tauri-wallet/webdriver/tests/specs/existinguser/test.wallet.home.js @@ -1,51 +1,45 @@ -const userData = require('../../../common/data/user-data.json') -const helper = require('../../../common/helpers/helper') -const walletLogin = require('../../pages/wallet.login') -const homepPage = require('../../pages/wallet.homepage') -const textConstants = require('../../../common/constants/text-constants') +const userData = require("../../../common/data/user-data.json"); +const helper = require("../../../common/helpers/helper"); +const walletLogin = require("../../pages/wallet.login"); +const homepPage = require("../../pages/wallet.homepage"); +const textConstants = require("../../../common/constants/text-constants"); describe("wallet splash screen", () => { it("should have the sign in header present", async () => { - - const signInText = await walletLogin.signInLabel.getText() - expect(signInText).toEqual(textConstants.homePageSignIn) - - }) + const signInText = await walletLogin.signInLabel.getText(); + expect(signInText).toEqual(textConstants.homePageSignIn); + }); it("submitting the sign in button with no input throws a validation error", async () => { + await walletLogin.signInButton.click(); - await walletLogin.signInButton.click() - - const errorResponseText = await walletLogin.errorValidation.getText() - expect(errorResponseText).toEqual(textConstants.homePageErrorMnemonic) - }) + const errorResponseText = await walletLogin.errorValidation.getText(); + expect(errorResponseText).toEqual(textConstants.homePageErrorMnemonic); + }); //currently the punk_address is not fully displayed on the wallet UI //trim the punk address it("successfully input mnemonic and log in", async () => { - const mnemonic = await helper.decodeBase(userData.mnemonic) + const mnemonic = await helper.decodeBase(userData.mnemonic); - await walletLogin.enterMnemonic(mnemonic) + await walletLogin.enterMnemonic(mnemonic); - await walletLogin.walletAddress.waitForEnabled({ timeout: 5000 }) + await walletLogin.walletAddress.waitForEnabled({ timeout: 5000 }); - const getWalletAddress = await walletLogin.walletAddress.getText() + const getWalletAddress = await walletLogin.walletAddress.getText(); //currently 35 characters are displayed along with three ... //current hack we can assume this is the correct wallet - const walletTruncated = userData.punk_address.substring(0,35) + const walletTruncated = userData.punk_address.substring(0, 35); - expect(walletTruncated + '...').toContain(getWalletAddress) - - }) + expect(walletTruncated + "...").toContain(getWalletAddress); + }); it("successfully log out the application", async () => { + await helper.scrollIntoView(homepPage.logOutButton); - await helper.scrollIntoView(homepPage.logOutButton) + await homepPage.logOutButton.click(); - await homepPage.logOutButton.click() - - await walletLogin.signInLabel.waitForEnabled({ timeout: 1500 }) - expect(await walletLogin.signInLabel.isDisplayed()).toEqual(true) - - }) -}) \ No newline at end of file + await walletLogin.signInLabel.waitForEnabled({ timeout: 1500 }); + expect(await walletLogin.signInLabel.isDisplayed()).toEqual(true); + }); +}); diff --git a/tauri-wallet/webdriver/tests/specs/existinguser/test.wallet.receive.js b/tauri-wallet/webdriver/tests/specs/existinguser/test.wallet.receive.js index 791cda2127..1983bbfc11 100644 --- a/tauri-wallet/webdriver/tests/specs/existinguser/test.wallet.receive.js +++ b/tauri-wallet/webdriver/tests/specs/existinguser/test.wallet.receive.js @@ -1,29 +1,28 @@ -const userData = require('../../../common/data/user-data.json') -const textConstants = require('../../../common/constants/text-constants') -const helper = require('../../../common/helpers/helper') -const walletLogin = require('../../pages/wallet.login') -const receive = require('../../pages/wallet.receive') -const walletHomepage = require('../../pages/wallet.homepage') +const userData = require("../../../common/data/user-data.json"); +const textConstants = require("../../../common/constants/text-constants"); +const helper = require("../../../common/helpers/helper"); +const walletLogin = require("../../pages/wallet.login"); +const receive = require("../../pages/wallet.receive"); +const walletHomepage = require("../../pages/wallet.homepage"); describe("provide the relevant information about a user nym wallet address", () => { - it("should have the receivers address and a qr code present", async () => { + it("should have the receivers address and a qr code present", async () => { + const mnemonic = await helper.decodeBase(userData.mnemonic); - const mnemonic = await helper.decodeBase(userData.mnemonic) + await walletLogin.enterMnemonic(mnemonic); - await walletLogin.enterMnemonic(mnemonic) + await helper.navigateAndClick(walletHomepage.receiveButton); - await helper.navigateAndClick(walletHomepage.receiveButton) + await receive.receiveNymHeader.waitForDisplayed({ timeout: 1500 }); - await receive.receiveNymHeader.waitForDisplayed({ timeout: 1500 }) + await receive.WaitForButtonChangeOnCopy(); - await receive.WaitForButtonChangeOnCopy() + const textHeader = await receive.receiveNymHeader.getText(); + const getInformationText = await receive.receiveNymText.getText(); + const getPunkAddress = await receive.walletAddress.getText(); - const textHeader = await receive.receiveNymHeader.getText(); - const getInformationText = await receive.receiveNymText.getText() - const getPunkAddress = await receive.walletAddress.getText() - - expect(getPunkAddress).toEqual(userData.punk_address) - expect(getInformationText).toEqual(textConstants.recievePageInformation) - expect(textConstants.receivePageHeaderText).toEqual(textHeader) - }) -}) + expect(getPunkAddress).toEqual(userData.punk_address); + expect(getInformationText).toEqual(textConstants.recievePageInformation); + expect(textConstants.receivePageHeaderText).toEqual(textHeader); + }); +}); diff --git a/tauri-wallet/webdriver/tests/specs/existinguser/test.wallet.send.js b/tauri-wallet/webdriver/tests/specs/existinguser/test.wallet.send.js index a230d89421..927ca2a86e 100644 --- a/tauri-wallet/webdriver/tests/specs/existinguser/test.wallet.send.js +++ b/tauri-wallet/webdriver/tests/specs/existinguser/test.wallet.send.js @@ -1,55 +1,55 @@ -const userData = require('../../../common/data/user-data.json'); -const helper = require('../../../common/helpers/helper') -const textConstants = require('../../../common/constants/text-constants') -const walletLogin = require('../../pages/wallet.login') -const sendWallet = require('../../pages/wallet.send') -const walletHomepage = require('../../pages/wallet.homepage') +const userData = require("../../../common/data/user-data.json"); +const helper = require("../../../common/helpers/helper"); +const textConstants = require("../../../common/constants/text-constants"); +const walletLogin = require("../../pages/wallet.login"); +const sendWallet = require("../../pages/wallet.send"); +const walletHomepage = require("../../pages/wallet.homepage"); describe("send punk to another a wallet", () => { - it("expect send screen to display the data", async () => { + it("expect send screen to display the data", async () => { + const mnemonic = await helper.decodeBase(userData.mnemonic); - const mnemonic = await helper.decodeBase(userData.mnemonic) + await walletLogin.enterMnemonic(mnemonic); - await walletLogin.enterMnemonic(mnemonic) + await helper.navigateAndClick(walletHomepage.sendButton); - await helper.navigateAndClick(walletHomepage.sendButton) + const textHeader = await sendWallet.sendHeader.getText(); - const textHeader = await sendWallet.sendHeader.getText() + expect(textHeader).toContain(textConstants.sendPunk); + }); - expect(textHeader).toContain(textConstants.sendPunk) + it("send funds correctly to another punk address", async () => { + //already logged in due to the previous test + const getCurrentBalance = await walletHomepage.accountBalance.getText(); - }) + await sendWallet.toAddress.addValue(userData.receiver_address); - it("send funds correctly to another punk address", async () => { + await sendWallet.amount.addValue(userData.amount_to_send); - //already logged in due to the previous test - const getCurrentBalance = await walletHomepage.accountBalance.getText() + await sendWallet.nextButton.waitForEnabled({ timeout: 3000 }); - await sendWallet.toAddress.addValue(userData.receiver_address) + await sendWallet.nextButton.click(); - await sendWallet.amount.addValue(userData.amount_to_send) + const transFee = await sendWallet.transferFeeAmount.getText(); - await sendWallet.nextButton.waitForEnabled({ timeout: 3000 }) + await sendWallet.sendButton.click(); - await sendWallet.nextButton.click() + await sendWallet.finishButton.waitForClickable({ timeout: 10000 }); - const transFee = await sendWallet.transferFeeAmount.getText() + let sumCost = await helper.calculateFees( + getCurrentBalance, + transFee, + userData.amount_to_send, + true + ); - await sendWallet.sendButton.click() + await walletHomepage.accountBalance.isDisplayed(); - await sendWallet.finishButton.waitForClickable({ timeout: 10000 }) + const availablePunk = await walletHomepage.accountBalance.getText(); - let sumCost = await helper.calculateFees(getCurrentBalance, transFee, userData.amount_to_send, true) - - await walletHomepage.accountBalance.isDisplayed() - - const availablePunk = await walletHomepage.accountBalance.getText() - - await sendWallet.finishButton.click() - - //expect new account balance - the fee calculation above - expect(await helper.currentBalance(availablePunk)).toEqual(sumCost) - - }) -}) + await sendWallet.finishButton.click(); + //expect new account balance - the fee calculation above + expect(await helper.currentBalance(availablePunk)).toEqual(sumCost); + }); +}); diff --git a/tauri-wallet/webdriver/tests/specs/existinguser/test.wallet.undelegate.js b/tauri-wallet/webdriver/tests/specs/existinguser/test.wallet.undelegate.js index c0beeb40e6..a544825c3b 100644 --- a/tauri-wallet/webdriver/tests/specs/existinguser/test.wallet.undelegate.js +++ b/tauri-wallet/webdriver/tests/specs/existinguser/test.wallet.undelegate.js @@ -1,32 +1,32 @@ -const userData = require('../../../common/data/user-data.json') -const helper = require('../../../common/helpers/helper') -const walletLogin = require('../../pages/wallet.login') -const walletHomepage = require('../../pages/wallet.homepage') -const unDelegatePage = require('../../pages/wallet.delegate') +const userData = require("../../../common/data/user-data.json"); +const helper = require("../../../common/helpers/helper"); +const walletLogin = require("../../pages/wallet.login"); +const walletHomepage = require("../../pages/wallet.homepage"); +const unDelegatePage = require("../../pages/wallet.delegate"); describe("un-delegate a mix node or gateway", () => { - it("ensure that fields are enabled for existing user", async () => { - - //we are ensuring that the fields are selectable for undelegation - //not proceeding to undelegate a node or gateway + it("ensure that fields are enabled for existing user", async () => { + //we are ensuring that the fields are selectable for undelegation + //not proceeding to undelegate a node or gateway - const mnemonic = await helper.decodeBase(userData.mnemonic) + const mnemonic = await helper.decodeBase(userData.mnemonic); - await walletLogin.enterMnemonic(mnemonic) + await walletLogin.enterMnemonic(mnemonic); - await helper.scrollIntoView(walletHomepage.unDelegateButton) + await helper.scrollIntoView(walletHomepage.unDelegateButton); - await helper.navigateAndClick(walletHomepage.unDelegateButton) + await helper.navigateAndClick(walletHomepage.unDelegateButton); - await unDelegatePage.unDelegateButton.waitForClickable({ timeout: 1500}) + await unDelegatePage.unDelegateButton.waitForClickable({ timeout: 1500 }); - await unDelegatePage.unDelegateButton.isEnabled() - - await unDelegatePage.unDelegateGatewayRadioButton.click() + await unDelegatePage.unDelegateButton.isEnabled(); - await unDelegatePage.unDelegateGatewayRadioButton.isSelected() - - const mixNodeRadioButton = await unDelegatePage.unMixNodeRadioButton.isSelected() - expect(mixNodeRadioButton).toEqual(false) - }) -}) + await unDelegatePage.unDelegateGatewayRadioButton.click(); + + await unDelegatePage.unDelegateGatewayRadioButton.isSelected(); + + const mixNodeRadioButton = + await unDelegatePage.unMixNodeRadioButton.isSelected(); + expect(mixNodeRadioButton).toEqual(false); + }); +}); diff --git a/tauri-wallet/webdriver/tests/specs/newuser/test.wallet.create.js b/tauri-wallet/webdriver/tests/specs/newuser/test.wallet.create.js index 989edc5a01..e70cd603ed 100644 --- a/tauri-wallet/webdriver/tests/specs/newuser/test.wallet.create.js +++ b/tauri-wallet/webdriver/tests/specs/newuser/test.wallet.create.js @@ -1,38 +1,39 @@ -const walletLogin = require('../../pages/wallet.login') -const walletSignUp = require('../../pages/wallet.create') -const textConstants = require('../../../common/constants/text-constants') +const walletLogin = require("../../pages/wallet.login"); +const walletSignUp = require("../../pages/wallet.create"); +const textConstants = require("../../../common/constants/text-constants"); describe("non existing wallet holder", () => { - //wallet mnemonic gets pushed here - const DATA = [] - it("create a new account and wallet", async () => { + //wallet mnemonic gets pushed here + const DATA = []; + it("create a new account and wallet", async () => { + const signInText = await walletLogin.signInLabel.getText(); + expect(signInText).toEqual(textConstants.homePageSignIn); - const signInText = await walletLogin.signInLabel.getText(); - expect(signInText).toEqual(textConstants.homePageSignIn); + await walletSignUp.createAccount.click(); - await walletSignUp.createAccount.click(); + //wallet generation takes some time - apply wait + await walletSignUp.create.click(); - //wallet generation takes some time - apply wait - await walletSignUp.create.click() + await walletSignUp.accountCreatedSuccessfully.waitForEnabled({ + timeout: 10000, + }); - await walletSignUp.accountCreatedSuccessfully.waitForEnabled({ timeout: 10000 }) + const getWalletText = await walletSignUp.punkAddress.getText(); + expect(getWalletText.length).toEqual(43); - const getWalletText = await walletSignUp.punkAddress.getText() - expect(getWalletText.length).toEqual(43) + const accountCreated = + await walletSignUp.accountCreatedSuccessfully.getText(); + expect(accountCreated).toEqual(textConstants.walletSuccess); - const accountCreated = await walletSignUp.accountCreatedSuccessfully.getText() - expect(accountCreated).toEqual(textConstants.walletSuccess) + const getMnemonic = await walletSignUp.walletMnemonicValue.getText(); + DATA.push(getMnemonic); + }); - const getMnemonic = await walletSignUp.walletMnemonicValue.getText() - DATA.push(getMnemonic) - }) + it("navigate back to sign in screen and validate mnemonic works", async () => { + await walletSignUp.backToSignIn.click(); - it("navigate back to sign in screen and validate mnemonic works", async () => { + await walletLogin.enterMnemonic(DATA[0]); - await walletSignUp.backToSignIn.click() - - await walletLogin.enterMnemonic(DATA[0]) - - await walletLogin.walletAddress.isDisplayed() - }) -}) \ No newline at end of file + await walletLogin.walletAddress.isDisplayed(); + }); +}); diff --git a/tauri-wallet/webdriver/wdio.conf.cjs b/tauri-wallet/webdriver/wdio.conf.cjs index f517547365..c91d7370fc 100644 --- a/tauri-wallet/webdriver/wdio.conf.cjs +++ b/tauri-wallet/webdriver/wdio.conf.cjs @@ -2,7 +2,7 @@ const os = require("os"); const path = require("path"); const { spawn, spawnSync } = require("child_process"); //insert path to binary -const nym_path = "../target/release/nym_wallet"; +const nym_path = "../target/release/nym-wallet"; exports.config = { //run sequentially, as using one default user may cause issues for parallel test runs for now @@ -12,18 +12,22 @@ exports.config = { "./tests/specs/existinguser/test.wallet.receive.js", "./tests/specs/existinguser/test.wallet.bond.js", "./tests/specs/existinguser/test.wallet.delegate.js", - "./tests/specs/newuser/test.wallet.create.js" + "./tests/specs/newuser/test.wallet.create.js", ], - //run tests by providing --suite {{login}} + //run tests by providing --suite {{login}} suites: { home: ["./tests/specs/existinguser/test.wallet.home.js"], - sendreceive: ["./tests/specs/existinguser/test.wallet.send.js", - "./tests/specs/existinguser/test.wallet.receive.js"], + sendreceive: [ + "./tests/specs/existinguser/test.wallet.send.js", + "./tests/specs/existinguser/test.wallet.receive.js", + ], bond: ["./tests/specs/existinguser/test.wallet.bond.js"], - delegate: ["./tests/specs/existinguser/test.wallet.delegate.js", - "./tests/specs/existinguser/test.wallet.undelegate.js"], - newuser: ["./tests/specs/newuser/test.wallet.create.js"] + delegate: [ + "./tests/specs/existinguser/test.wallet.delegate.js", + "./tests/specs/existinguser/test.wallet.undelegate.js", + ], + newuser: ["./tests/specs/newuser/test.wallet.create.js"], }, maxInstances: 1, capabilities: [ @@ -40,22 +44,27 @@ exports.config = { // Define all options that are relevant for the WebdriverIO instance here // Level of logging verbosity: trace | debug | info | warn | error | silent bail: 0, - framework: 'mocha', - reporters: ['spec'], + framework: "mocha", + reporters: ["spec"], mochaOpts: { - ui: 'bdd', - timeout: 60000 + ui: "bdd", + timeout: 60000, }, - logLevel: 'silent', + logLevel: "silent", // =================== // Test Reporters // =================== - reporters: [['allure', { - outputDir: 'allure-results', - disableWebdriverStepsReporting: true, - disableWebdriverScreenshotsReporting: true, - }]], + reporters: [ + [ + "allure", + { + outputDir: "allure-results", + disableWebdriverStepsReporting: true, + disableWebdriverScreenshotsReporting: true, + }, + ], + ], // this is documentented in the readme - you will need to build the project first // ensure the rust project is built since we expect this binary to exist for the webdriver sessions @@ -63,18 +72,22 @@ exports.config = { // ensure we are running `tauri-driver` before the session starts so that we can proxy the webdriver requests beforeSession: () => - (tauriDriver = spawn( - path.resolve(os.homedir(), ".cargo", "bin", "tauri-driver"), - [], - { stdio: [null, process.stdout, process.stderr] } - )), + (tauriDriver = spawn( + path.resolve(os.homedir(), ".cargo", "bin", "tauri-driver"), + [], + { stdio: [null, process.stdout, process.stderr] } + )), - afterTest: function (test, context, { error, result, duration, passed, retries }) { + afterTest: function ( + test, + context, + { error, result, duration, passed, retries } + ) { if (error) { - browser.takeScreenshot() + browser.takeScreenshot(); } }, // clean up the `tauri-driver` process we spawned at the start of the session - afterSession: () => tauriDriver.kill() -} + afterSession: () => tauriDriver.kill(), +};