Proposed ui changes and code consolidation for the cashtab header.
- new ui cards for xec, xecx, and firma balances with individual fiat balances
- xecx and firma info in place of 0 balances
- cleaned up wallet select, copy address and hide balances
Differential D18066
[cashtab] Header UI overhaul johnkuney on Thu, May 8, 16:30. Authored by
Details
Proposed ui changes and code consolidation for the cashtab header.
preview the app and check the header is working right
Diff Detail
Event TimelineComment Actions Build Bitcoin ABC Diffs / Diff Testing (cashtab-tests) failed.
Failed tests logs: ====== CashTab Unit Tests: <SendXec /> rendered with params in URL Legacy params. Address and value keys are set and valid. ====== Error: expect(element).toBeInTheDocument() element could not be found in the document at Object.toBeInTheDocument (/work/cashtab/src/components/Send/__tests__/SendByUrlParams.test.js:83:57) at runNextTicks (node:internal/process/task_queues:60:5) at listOnTimeout (node:internal/timers:545:9) at processTimers (node:internal/timers:519:7) ====== CashTab Unit Tests: <SendXec /> rendered with params in URL Legacy params. Address and value keys are set and valid. Invalid bip21 string is ignored. ====== Error: expect(element).toBeInTheDocument() element could not be found in the document at Object.toBeInTheDocument (/work/cashtab/src/components/Send/__tests__/SendByUrlParams.test.js:151:57) at runNextTicks (node:internal/process/task_queues:60:5) at listOnTimeout (node:internal/timers:545:9) at processTimers (node:internal/timers:519:7) ====== CashTab Unit Tests: <SendXec /> rendered with params in URL Legacy params. Address field is populated + disabled while value field is empty + enabled if legacy url params have address defined and value present as undefined ====== Error: expect(element).toBeInTheDocument() element could not be found in the document at Object.toBeInTheDocument (/work/cashtab/src/components/Send/__tests__/SendByUrlParams.test.js:214:57) at runNextTicks (node:internal/process/task_queues:60:5) at listOnTimeout (node:internal/timers:545:9) at processTimers (node:internal/timers:519:7) ====== CashTab Unit Tests: <SendXec /> rendered with params in URL Legacy params. Address field is populated + disabled while value field is empty + enabled if legacy url params have address defined and no value key present ====== Error: expect(element).toBeInTheDocument() element could not be found in the document at Object.toBeInTheDocument (/work/cashtab/src/components/Send/__tests__/SendByUrlParams.test.js:277:57) at runNextTicks (node:internal/process/task_queues:60:5) at listOnTimeout (node:internal/timers:545:9) at processTimers (node:internal/timers:519:7) ====== CashTab Unit Tests: <SendXec /> rendered with params in URL Legacy params are not parsed as bip21 even if the bip21 param appears in the string ====== Error: expect(element).toBeInTheDocument() element could not be found in the document at Object.toBeInTheDocument (/work/cashtab/src/components/Send/__tests__/SendByUrlParams.test.js:455:57) at runNextTicks (node:internal/process/task_queues:60:5) at listOnTimeout (node:internal/timers:545:9) at processTimers (node:internal/timers:519:7) ====== CashTab Unit Tests: <SendXec /> rendered with params in URL bip21 param - valid bip21 param with amount and op_return_raw is parsed as expected ====== Error: expect(element).toBeInTheDocument() element could not be found in the document at Object.toBeInTheDocument (/work/cashtab/src/components/Send/__tests__/SendByUrlParams.test.js:522:57) at runNextTicks (node:internal/process/task_queues:60:5) at listOnTimeout (node:internal/timers:545:9) at processTimers (node:internal/timers:519:7) ====== CashTab Unit Tests: <SendXec /> rendered with params in URL bip21 param - an invalid bip21 param shows validation errors but cannot be changed ====== Error: expect(element).toBeInTheDocument() element could not be found in the document at Object.toBeInTheDocument (/work/cashtab/src/components/Send/__tests__/SendByUrlParams.test.js:631:57) at runNextTicks (node:internal/process/task_queues:60:5) at listOnTimeout (node:internal/timers:545:9) at processTimers (node:internal/timers:519:7) ====== CashTab Unit Tests: <SendXec /> rendered with params in URL bip21 param - valid bip21 param with amount, op_return_raw, and additional output with amount is parsed as expected ====== Error: expect(element).toBeInTheDocument() element could not be found in the document at Object.toBeInTheDocument (/work/cashtab/src/components/Send/__tests__/SendByUrlParams.test.js:768:57) at runNextTicks (node:internal/process/task_queues:60:5) at listOnTimeout (node:internal/timers:545:9) at processTimers (node:internal/timers:519:7) ====== CashTab Unit Tests: <SendXec /> rendered with params in URL bip21 param - valid bip21 token send ====== Error: expect(element).toBeInTheDocument() element could not be found in the document at Object.toBeInTheDocument (/work/cashtab/src/components/Send/__tests__/SendByUrlParams.test.js:884:57) at runNextTicks (node:internal/process/task_queues:60:5) at listOnTimeout (node:internal/timers:545:9) at processTimers (node:internal/timers:519:7) ====== CashTab Unit Tests: <CreateToken /> If wallet has insufficient XEC, renders component but does not render CreateTokenForm ====== Error: expect(element).toBeInTheDocument() element could not be found in the document at Object.toBeInTheDocument (/work/cashtab/src/components/Etokens/__tests__/CreateToken.test.js:100:53) at runNextTicks (node:internal/process/task_queues:60:5) at listOnTimeout (node:internal/timers:545:9) at processTimers (node:internal/timers:519:7) ====== CashTab Unit Tests: <CashtabTestWrapper /> With default props, renders App component ====== Error: expect(element).toBeInTheDocument() element could not be found in the document at Object.toBeInTheDocument (/work/cashtab/src/components/App/fixtures/__tests__/CashtabTestWrapper.test.js:93:57) at runNextTicks (node:internal/process/task_queues:60:5) at listOnTimeout (node:internal/timers:545:9) at processTimers (node:internal/timers:519:7) ====== CashTab Unit Tests: <App /> Wallet with XECX sees XECX balance and XECX balance included in fiat balance ====== Error: Unable to find an element with the text: XECX. This could be because the text is broken up by multiple elements. In this case, you can provide a function for your text matcher to make your matcher more flexible. Ignored nodes: comments, script, style <body> <div> <div class="sc-chAAoq jkkmQa" > <section aria-atomic="false" aria-label="Notifications Alt+T" aria-live="polite" aria-relevant="additions text" class="Toastify" /> <div class="sc-dTLGrV iMTVPI" > <div class="sc-ivVeuv imkPeP" > <div class="sc-jkCMRl gBTeFC" title="Wallet Info" > <div class="sc-crNyjn gqmBAK" > <img alt="cashtab" src="test-file-stub" /> <div class="sc-eitiEO uCLiu" title="Price in Local Currency mobile" > 1 XEC = 0.00003000 USD </div> </div> <div class="sc-cpHetk bqInKj" > <div class="sc-nrwXf iouDbQ" title="Price in Local Currency" > 1 XEC = 0.00003000 USD </div> <div class="sc-bhlBdH beSwKX" > <label class="sc-fATqzn cnBMmz" > <input checked="" class="sc-jbWsrJ fSnvyw" type="checkbox" /> <div class="sc-hqGPoI ghvDYG" > <img alt="toggle icon" src="test-file-stub" /> </div> </label> <button aria-label="Copy ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g" class="sc-jbKcbu gcmUUo" > <svg title="copy-paste" /> </button> <select class="sc-AnqlK jgCzha" data-testid="wallet-select" id="wallets" name="wallets" > <option class="sc-keFjpB mCdBx" value="Transaction Fixtures" > Transaction Fixtures </option> </select> </div> </div> <div class="sc-kVrTmx keOBpK" > <div class="sc-ekkqgF gPoRVh" > <img alt="eCash" class="sc-iBmynh gVCGcd" src="test-file-stub" /> <div class="sc-fKGOjr drxoNI" > eCash </div> <div class="sc-jvEmr hLosaZ" title="Balance XEC" > 9,513.12 XEC </div> <div class="sc-hycgNl cWNeRS" title="Balance XEC Fiat" > $ 0.29 USD </div> </div> <div class="sc-ekkqgF hsWQid" > <img alt="eCash Staking" class="sc-iBmynh gVCGcd" src="test-file-stub" /> <div class="sc-fKGOjr eFsfCF" > Staking </div> <div class="sc-jvEmr hLosaZ" title="Balance XECX" > 100,000,000.00 XECX </div> <div class="sc-hycgNl cWNeRS" title="Balance XECX Fiat" > $ 3,000.00 USD </div> </div> <div class="sc-ekkqgF hlnDNb" > <img alt="Savings" class="sc-iBmynh gVCGcd" src="test-file-stub" /> <div class="sc-fKGOjr kTbzgw" > Savings </div> <... at waitForWrapper (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:163:27) at /work/cashtab/node_modules/@testing-library/dom/dist/query-helpers.js:86:33 at Object.findByText (/work/cashtab/src/components/App/__tests__/App.test.js:650:29) ====== CashTab Unit Tests: <App /> A new user can import a mnemonic of a wallet with a balance ====== Error: expect(element).toHaveTextContent() Expected element to have text content: 9,513.12 XEC Received: 0.00 XEC at Object.toHaveTextContent (/work/cashtab/src/components/App/__tests__/App.test.js:737:57) at runNextTicks (node:internal/process/task_queues:60:5) at listOnTimeout (node:internal/timers:545:9) at processTimers (node:internal/timers:519:7) ====== CashTab Unit Tests: <App /> Migrating from wallet/savedWallet keys (version < 1.6.0): A user with an invalid Cashtab wallet as the active wallet is migrated on startup ====== Error: expect(element).toHaveTextContent() Expected element to have text content: 9,513.12 XEC Received: 0.00 XEC at Object.toHaveTextContent (/work/cashtab/src/components/App/__tests__/App.test.js:787:57) at runNextTicks (node:internal/process/task_queues:60:5) at listOnTimeout (node:internal/timers:545:9) at processTimers (node:internal/timers:519:7) ====== CashTab Unit Tests: <App /> Migrating from wallet/savedWallet keys (version < 1.6.0): A user with pre-2.1.0 valid wallets in savedWallets has them all migrated to new storage keys and new shape ====== Error: expect(element).toHaveTextContent() Expected element to have text content: 9,513.12 XEC Received: 0.00 XEC at Object.toHaveTextContent (/work/cashtab/src/components/App/__tests__/App.test.js:825:57) at runNextTicks (node:internal/process/task_queues:60:5) at listOnTimeout (node:internal/timers:545:9) at processTimers (node:internal/timers:519:7) ====== CashTab Unit Tests: <App /> Cashtab version >= 1.6.0 and < 2.1.0: A user with an invalid Cashtab wallet as the active wallet is migrated on startup ====== Error: expect(element).toHaveTextContent() Expected element to have text content: 9,513.12 XEC Received: 0.00 XEC at Object.toHaveTextContent (/work/cashtab/src/components/App/__tests__/App.test.js:941:57) at runNextTicks (node:internal/process/task_queues:60:5) at listOnTimeout (node:internal/timers:545:9) at processTimers (node:internal/timers:519:7) ====== CashTab Unit Tests: <App /> Migrating (version < 2.9.0): A user with an invalid Cashtab wallet as the active wallet is migrated on startup ====== Error: expect(element).toHaveTextContent() Expected element to have text content: 9,513.12 XEC Received: 0.00 XEC at Object.toHaveTextContent (/work/cashtab/src/components/App/__tests__/App.test.js:1045:57) at runNextTicks (node:internal/process/task_queues:60:5) at listOnTimeout (node:internal/timers:545:9) at processTimers (node:internal/timers:519:7) ====== CashTab Unit Tests: <App /> Migrating (2.9.0 <= version < 2.55.0): A user with an invalid Cashtab wallet as the active wallet is migrated on startup ====== Error: expect(element).toHaveTextContent() Expected element to have text content: 9,513.12 XEC Received: 0.00 XEC at Object.toHaveTextContent (/work/cashtab/src/components/App/__tests__/App.test.js:1121:57) at runNextTicks (node:internal/process/task_queues:60:5) at listOnTimeout (node:internal/timers:545:9) at processTimers (node:internal/timers:519:7) ====== CashTab Unit Tests: <Token /> available actions rendered We can redeem 1 Firma for $1 of XEC using a workflow unique to Firma ====== TestingLibraryElementError: Unable to find an element with the alt text: icon for 0387947fd575db4fb19a3e322f635dec37fd192b5941625b66bc4b2c3008cbf0 Ignored nodes: comments, script, style <body> <div> <div class="sc-kAzzGY bFOoJn" title="Loading..." > <div class="sc-cSHVUG kakYiA" title="Loading" > <div /> <div /> <div /> <div /> </div> </div> <div class="sc-chAAoq jkkmQa" > <section aria-atomic="false" aria-label="Notifications Alt+T" aria-live="polite" aria-relevant="additions text" class="Toastify" /> <div class="sc-dTLGrV iMTVPI" > <div class="sc-ivVeuv imkPeP" > <div class="sc-jkCMRl gBTeFC" title="Wallet Info" > <div class="sc-crNyjn gqmBAK" > <img alt="cashtab" src="test-file-stub" /> <div class="sc-eitiEO uCLiu" title="Price in Local Currency mobile" > 1 XEC = USD </div> </div> <div class="sc-cpHetk bqInKj" > <div class="sc-nrwXf iouDbQ" title="Price in Local Currency" > 1 XEC = USD </div> <div class="sc-bhlBdH beSwKX" > <label class="sc-hPeUyl cLIein" > <input checked="" class="sc-esoVGF kdvVKS" type="checkbox" /> <div class="sc-cAJUJo gJkONv" > <img alt="toggle icon" src="test-file-stub" /> </div> </label> <button aria-label="Copy ecash:qqq9f9z3uhpzkxrgdjkd7dxuuey7tmpmugpmnw0kue" class="sc-jbKcbu gcmUUo" > <svg title="copy-paste" /> </button> <select class="sc-AnqlK jgCzha" data-testid="wallet-select" disabled="" id="wallets" name="wallets" > <option class="sc-keFjpB mCdBx" value="Token Test" > Token Test </option> </select> </div> </div> <div class="sc-kVrTmx keOBpK" > <div class="sc-ekkqgF gPoRVh" > <img alt="eCash" class="sc-iBmynh gVCGcd" src="test-file-stub" /> <div class="sc-fKGOjr drxoNI" > eCash </div> <div class="sc-jvEmr hLosaZ" title="Balance XEC" > 9,970.81 XEC </div> <div class="sc-hycgNl cWNeRS" title="Balance XEC Fiat" > $ USD </div> </div> <div class="sc-ekkqgF hsWQid" > <img alt="eCash Staking" class="sc-iBmynh gVCGcd" src="test-file-stub" /> <div class="sc-fKGOjr eFsfCF" > Staking </div> <span title="Get XECX" > Earn eCash passively by staking with XECX! Daily staking rewards paid directly to your wallet. <a href="https://stakedxec.com" rel="noopener noreferrer" target="_blank" > Learn more </a> </span> </div> <div class="sc-ekkqgF hlnDNb" > <img alt="Savings" class="sc-iBmynh gVCGcd" src="test-file-stub" /> <div class="sc-fKGOjr kTbzgw" > Savings </div> <span title="Get FIRMA" > Earn USD yield with the Firma stable coin. Daily native yield paid directly to your wallet. <a href="https://firma.cash" rel="noopener noreferrer" target="_blank" > Learn more </a> </span> </div> </div> </div> <div class="sc-dBaXSw eahevx" > <div class="sc-kxynE cPkfiL" > <div class="sc-cooIXK jIUhVw" title="Token Info" > <div class="sc-kAzzGY bFOoJn" title="Loading..." > <div class="sc-cSHVUG kakYiA" title="Loading" > <div /> <div /> <div /> <div /> </div> </div> <div class="sc-ktHwxA fAHhjp" > You do not hold this token. </div> </div> </div> </div> </div> <div class="sc-cCbXAZ fWfLQK" > <div class="sc-hizQCF iOBvKI" > <img alt="cashtab" class="sc-dRCTWM jaayJi" src="test-file-stub" /> </div> <button class="sc-gleUXh jOucit" > <span> Transactions </span> <svg /> </button> <button aria-label="Send Screen" class="sc-gleUXh jOucit" > <span> Send </span> <svg title="tx-sent" /> </button> <button aria-label="Tokens" class="sc-gleUXh jOucit" > <span> Tokens </span> <svg title="Tokens" /> </button> <button aria-label="Receive" class="sc-gleUXh jOucit" > <span> Receive </span> <svg title="tx-received" /> </button> <div class="sc-fHSTwm fmqsjL nav-menu-container" title="Show Other Screens" > <span class="sc-hdPSEv kpKbSe" /> <div class="sc-cmIlrE kXQSWU" title="Other Screens" > <button class="sc-doWzTn bTvygg" > <p> Wallet Backup </p> <svg title="wallet" /> </button> <button class="sc-doWzTn bTvygg" > <p> Wallets </p> <svg title="wallets" /> </button> <button class="sc-doWzTn bTvygg" > <p> Listed NFTs </p> <svg title="NFT" /> </button> <button class="sc-doWzTn bTvygg" > <p> Agora </p> <svg title="Meme Agora" /> </button> <button class="sc-doWzTn bTvygg" > <p> Contacts </p> <svg title="Contact List" /> </button> <button class="sc-doWzTn bTvygg" > <p> Airdrop </p> <svg title="tx-airdrop" /> </button> <button class="sc-doWzTn bTvygg" > <p> Rewards </p> <svg title="Cashtab Rewards" /> </button> <button class="sc-doWzTn bTvygg" > <p> Sign & Verify </p> <svg class="sc-htpNat bPFBeM" /> </button> <button class="sc-doWzTn bTvygg" > <p> Settings </p> <svg title="settings" /> </button> </div> </div> </div> </div> </div> </div> </body> at Object.getElementError (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:37:19) at /work/cashtab/node_modules/@testing-library/dom/dist/query-helpers.js:76:38 at /work/cashtab/node_modules/@testing-library/dom/dist/query-helpers.js:52:17 at /work/cashtab/node_modules/@testing-library/dom/dist/query-helpers.js:95:19 at Object.getByAltText (/work/cashtab/src/components/Etokens/__tests__/TokenActions.test.js:2300:20) at runNextTicks (node:internal/process/task_queues:60:5) at listOnTimeout (node:internal/timers:545:9) at processTimers (node:internal/timers:519:7) ====== CashTab Unit Tests: <Token /> available actions rendered We show expected error if we are unable to get FIRMA bid price from API ====== TestingLibraryElementError: Unable to find an element with the alt text: icon for 0387947fd575db4fb19a3e322f635dec37fd192b5941625b66bc4b2c3008cbf0 Ignored nodes: comments, script, style <body> <div> <div class="sc-kAzzGY bFOoJn" title="Loading..." > <div class="sc-cSHVUG kakYiA" title="Loading" > <div /> <div /> <div /> <div /> </div> </div> <div class="sc-chAAoq jkkmQa" > <section aria-atomic="false" aria-label="Notifications Alt+T" aria-live="polite" aria-relevant="additions text" class="Toastify" /> <div class="sc-dTLGrV iMTVPI" > <div class="sc-ivVeuv imkPeP" > <div class="sc-jkCMRl gBTeFC" title="Wallet Info" > <div class="sc-crNyjn gqmBAK" > <img alt="cashtab" src="test-file-stub" /> <div class="sc-eitiEO uCLiu" title="Price in Local Currency mobile" > 1 XEC = USD </div> </div> <div class="sc-cpHetk bqInKj" > <div class="sc-nrwXf iouDbQ" title="Price in Local Currency" > 1 XEC = USD </div> <div class="sc-bhlBdH beSwKX" > <label class="sc-cmUJln cMtCnz" > <input checked="" class="sc-gYtlsd byfOZy" type="checkbox" /> <div class="sc-kDgGX dwxdan" > <img alt="toggle icon" src="test-file-stub" /> </div> </label> <button aria-label="Copy ecash:qqq9f9z3uhpzkxrgdjkd7dxuuey7tmpmugpmnw0kue" class="sc-jbKcbu gcmUUo" > <svg title="copy-paste" /> </button> <select class="sc-AnqlK jgCzha" data-testid="wallet-select" disabled="" id="wallets" name="wallets" > <option class="sc-keFjpB mCdBx" value="Token Test" > Token Test </option> </select> </div> </div> <div class="sc-kVrTmx keOBpK" > <div class="sc-ekkqgF gPoRVh" > <img alt="eCash" class="sc-iBmynh gVCGcd" src="test-file-stub" /> <div class="sc-fKGOjr drxoNI" > eCash </div> <div class="sc-jvEmr hLosaZ" title="Balance XEC" > 9,970.81 XEC </div> <div class="sc-hycgNl cWNeRS" title="Balance XEC Fiat" > $ USD </div> </div> <div class="sc-ekkqgF hsWQid" > <img alt="eCash Staking" class="sc-iBmynh gVCGcd" src="test-file-stub" /> <div class="sc-fKGOjr eFsfCF" > Staking </div> <span title="Get XECX" > Earn eCash passively by staking with XECX! Daily staking rewards paid directly to your wallet. <a href="https://stakedxec.com" rel="noopener noreferrer" target="_blank" > Learn more </a> </span> </div> <div class="sc-ekkqgF hlnDNb" > <img alt="Savings" class="sc-iBmynh gVCGcd" src="test-file-stub" /> <div class="sc-fKGOjr kTbzgw" > Savings </div> <span title="Get FIRMA" > Earn USD yield with the Firma stable coin. Daily native yield paid directly to your wallet. <a href="https://firma.cash" rel="noopener noreferrer" target="_blank" > Learn more </a> </span> </div> </div> </div> <div class="sc-dBaXSw eahevx" > <div class="sc-kxynE cPkfiL" > <div class="sc-cooIXK jIUhVw" title="Token Info" > <div class="sc-kAzzGY bFOoJn" title="Loading..." > <div class="sc-cSHVUG kakYiA" title="Loading" > <div /> <div /> <div /> <div /> </div> </div> <div class="sc-ktHwxA fAHhjp" > You do not hold this token. </div> </div> </div> </div> </div> <div class="sc-cCbXAZ fWfLQK" > <div class="sc-hizQCF iOBvKI" > <img alt="cashtab" class="sc-dRCTWM jaayJi" src="test-file-stub" /> </div> <button class="sc-gleUXh jOucit" > <span> Transactions </span> <svg /> </button> <button aria-label="Send Screen" class="sc-gleUXh jOucit" > <span> Send </span> <svg title="tx-sent" /> </button> <button aria-label="Tokens" class="sc-gleUXh jOucit" > <span> Tokens </span> <svg title="Tokens" /> </button> <button aria-label="Receive" class="sc-gleUXh jOucit" > <span> Receive </span> <svg title="tx-received" /> </button> <div class="sc-fHSTwm fmqsjL nav-menu-container" title="Show Other Screens" > <span class="sc-hdPSEv kpKbSe" /> <div class="sc-cmIlrE kXQSWU" title="Other Screens" > <button class="sc-doWzTn bTvygg" > <p> Wallet Backup </p> <svg title="wallet" /> </button> <button class="sc-doWzTn bTvygg" > <p> Wallets </p> <svg title="wallets" /> </button> <button class="sc-doWzTn bTvygg" > <p> Listed NFTs </p> <svg title="NFT" /> </button> <button class="sc-doWzTn bTvygg" > <p> Agora </p> <svg title="Meme Agora" /> </button> <button class="sc-doWzTn bTvygg" > <p> Contacts </p> <svg title="Contact List" /> </button> <button class="sc-doWzTn bTvygg" > <p> Airdrop </p> <svg title="tx-airdrop" /> </button> <button class="sc-doWzTn bTvygg" > <p> Rewards </p> <svg title="Cashtab Rewards" /> </button> <button class="sc-doWzTn bTvygg" > <p> Sign & Verify </p> <svg class="sc-htpNat bPFBeM" /> </button> <button class="sc-doWzTn bTvygg" > <p> Settings </p> <svg title="settings" /> </button> </div> </div> </div> </div> </div> </div> </body> at Object.getElementError (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:37:19) at /work/cashtab/node_modules/@testing-library/dom/dist/query-helpers.js:76:38 at /work/cashtab/node_modules/@testing-library/dom/dist/query-helpers.js:52:17 at /work/cashtab/node_modules/@testing-library/dom/dist/query-helpers.js:95:19 at Object.getByAltText (/work/cashtab/src/components/Etokens/__tests__/TokenActions.test.js:2428:20) ====== CashTab Unit Tests: <Token /> available actions rendered The FIRMA OrderBook loads with price in USD ====== Error: expect(received).toHaveLength(expected) Expected length: 4 Received length: 1 Received array: [<span title="Get FIRMA">Earn USD yield with the Firma stable coin. Daily native yield paid directly to your wallet. <a href="https://firma.cash" rel="noopener noreferrer" target="_blank">Learn more</a></span>] at Object.toHaveLength (/work/cashtab/src/components/Etokens/__tests__/TokenActions.test.js:2508:67) Each failure log is accessible here: Comment Actions Build Bitcoin ABC Diffs / Diff Testing (cashtab-tests) failed.
Failed tests logs: ====== CashTab Unit Tests: <Home /> Renders the loading component while loading, then the Home screen ====== Error: expect(element).toBeInTheDocument() element could not be found in the document at Object.toBeInTheDocument (/work/cashtab/src/components/Home/__tests__/Home.test.js:79:57) at runNextTicks (node:internal/process/task_queues:60:5) at listOnTimeout (node:internal/timers:545:9) at processTimers (node:internal/timers:519:7) ====== CashTab Unit Tests: <SendXec /> rendered with params in URL Legacy params. Address and value keys are set and valid. ====== Error: expect(element).toBeInTheDocument() element could not be found in the document at Object.toBeInTheDocument (/work/cashtab/src/components/Send/__tests__/SendByUrlParams.test.js:83:57) at runNextTicks (node:internal/process/task_queues:60:5) at listOnTimeout (node:internal/timers:545:9) at processTimers (node:internal/timers:519:7) ====== CashTab Unit Tests: <SendXec /> rendered with params in URL Legacy params. Address and value keys are set and valid. Invalid bip21 string is ignored. ====== Error: expect(element).toBeInTheDocument() element could not be found in the document at Object.toBeInTheDocument (/work/cashtab/src/components/Send/__tests__/SendByUrlParams.test.js:151:57) at runNextTicks (node:internal/process/task_queues:60:5) at listOnTimeout (node:internal/timers:545:9) at processTimers (node:internal/timers:519:7) ====== CashTab Unit Tests: <SendXec /> rendered with params in URL Legacy params. Address field is populated + disabled while value field is empty + enabled if legacy url params have address defined and value present as undefined ====== Error: expect(element).toBeInTheDocument() element could not be found in the document at Object.toBeInTheDocument (/work/cashtab/src/components/Send/__tests__/SendByUrlParams.test.js:214:57) at runNextTicks (node:internal/process/task_queues:60:5) at listOnTimeout (node:internal/timers:545:9) at processTimers (node:internal/timers:519:7) ====== CashTab Unit Tests: <SendXec /> rendered with params in URL Legacy params. Address field is populated + disabled while value field is empty + enabled if legacy url params have address defined and no value key present ====== Error: expect(element).toBeInTheDocument() element could not be found in the document at Object.toBeInTheDocument (/work/cashtab/src/components/Send/__tests__/SendByUrlParams.test.js:277:57) at runNextTicks (node:internal/process/task_queues:60:5) at listOnTimeout (node:internal/timers:545:9) at processTimers (node:internal/timers:519:7) ====== CashTab Unit Tests: <SendXec /> rendered with params in URL Legacy params are not parsed as bip21 even if the bip21 param appears in the string ====== Error: expect(element).toBeInTheDocument() element could not be found in the document at Object.toBeInTheDocument (/work/cashtab/src/components/Send/__tests__/SendByUrlParams.test.js:455:57) at runNextTicks (node:internal/process/task_queues:60:5) at listOnTimeout (node:internal/timers:545:9) at processTimers (node:internal/timers:519:7) ====== CashTab Unit Tests: <SendXec /> rendered with params in URL bip21 param - valid bip21 param with amount and op_return_raw is parsed as expected ====== Error: expect(element).toBeInTheDocument() element could not be found in the document at Object.toBeInTheDocument (/work/cashtab/src/components/Send/__tests__/SendByUrlParams.test.js:522:57) at runNextTicks (node:internal/process/task_queues:60:5) at listOnTimeout (node:internal/timers:545:9) at processTimers (node:internal/timers:519:7) ====== CashTab Unit Tests: <SendXec /> rendered with params in URL bip21 param - an invalid bip21 param shows validation errors but cannot be changed ====== Error: expect(element).toBeInTheDocument() element could not be found in the document at Object.toBeInTheDocument (/work/cashtab/src/components/Send/__tests__/SendByUrlParams.test.js:631:57) at runNextTicks (node:internal/process/task_queues:60:5) at listOnTimeout (node:internal/timers:545:9) at processTimers (node:internal/timers:519:7) ====== CashTab Unit Tests: <SendXec /> rendered with params in URL bip21 param - valid bip21 param with amount, op_return_raw, and additional output with amount is parsed as expected ====== Error: expect(element).toBeInTheDocument() element could not be found in the document at Object.toBeInTheDocument (/work/cashtab/src/components/Send/__tests__/SendByUrlParams.test.js:768:57) at runNextTicks (node:internal/process/task_queues:60:5) at listOnTimeout (node:internal/timers:545:9) at processTimers (node:internal/timers:519:7) ====== CashTab Unit Tests: <SendXec /> rendered with params in URL bip21 param - valid bip21 token send ====== Error: expect(element).toBeInTheDocument() element could not be found in the document at Object.toBeInTheDocument (/work/cashtab/src/components/Send/__tests__/SendByUrlParams.test.js:884:57) at runNextTicks (node:internal/process/task_queues:60:5) at listOnTimeout (node:internal/timers:545:9) at processTimers (node:internal/timers:519:7) ====== CashTab Unit Tests: <Header /> renders correctly with default props and visible balance ====== Error: expect(element).toHaveTextContent() Expected element to have text content: 1 XEC = 0.0000 USD Received: 1 XEC = 0.00003000 USD at Object.toHaveTextContent (/work/cashtab/src/components/Header/__tests__/Header.test.js:41:62) at Promise.then.completed (/work/cashtab/node_modules/jest-circus/build/utils.js:298:28) at new Promise (<anonymous>) at callAsyncCircusFn (/work/cashtab/node_modules/jest-circus/build/utils.js:231:10) at _callCircusTest (/work/cashtab/node_modules/jest-circus/build/run.js:316:40) at processTicksAndRejections (node:internal/process/task_queues:95:5) at _runTest (/work/cashtab/node_modules/jest-circus/build/run.js:252:3) at _runTestsForDescribeBlock (/work/cashtab/node_modules/jest-circus/build/run.js:126:9) at _runTestsForDescribeBlock (/work/cashtab/node_modules/jest-circus/build/run.js:121:9) at run (/work/cashtab/node_modules/jest-circus/build/run.js:71:3) at runAndTransformResultsToJestFormat (/work/cashtab/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21) at jestAdapter (/work/cashtab/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19) at runTestInternal (/work/cashtab/node_modules/jest-runner/build/runTest.js:367:16) at runTest (/work/cashtab/node_modules/jest-runner/build/runTest.js:444:34) at Object.worker (/work/cashtab/node_modules/jest-runner/build/testWorker.js:106:12) ====== CashTab Unit Tests: <Header /> formats numbers based on userLocale ====== Error: expect(element).toHaveTextContent() Expected element to have text content: 10,000,000,00 XEC Received: 10 000 000,00 XEC at Object.toHaveTextContent (/work/cashtab/src/components/Header/__tests__/Header.test.js:160:50) at Promise.then.completed (/work/cashtab/node_modules/jest-circus/build/utils.js:298:28) at new Promise (<anonymous>) at callAsyncCircusFn (/work/cashtab/node_modules/jest-circus/build/utils.js:231:10) at _callCircusTest (/work/cashtab/node_modules/jest-circus/build/run.js:316:40) at processTicksAndRejections (node:internal/process/task_queues:95:5) at _runTest (/work/cashtab/node_modules/jest-circus/build/run.js:252:3) at _runTestsForDescribeBlock (/work/cashtab/node_modules/jest-circus/build/run.js:126:9) at _runTestsForDescribeBlock (/work/cashtab/node_modules/jest-circus/build/run.js:121:9) at run (/work/cashtab/node_modules/jest-circus/build/run.js:71:3) at runAndTransformResultsToJestFormat (/work/cashtab/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21) at jestAdapter (/work/cashtab/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19) at runTestInternal (/work/cashtab/node_modules/jest-runner/build/runTest.js:367:16) at runTest (/work/cashtab/node_modules/jest-runner/build/runTest.js:444:34) at Object.worker (/work/cashtab/node_modules/jest-runner/build/testWorker.js:106:12) ====== CashTab Unit Tests: <Header /> does not render fiat values if fiatPrice is null ====== Error: expect(element).not.toBeInTheDocument() expected document not to contain element, found <div class="sc-jAaTju bVBZDJ" title="Balance XEC Fiat">$ USD</div> instead at Object.toBeInTheDocument (/work/cashtab/src/components/Header/__tests__/Header.test.js:188:61) at Promise.then.completed (/work/cashtab/node_modules/jest-circus/build/utils.js:298:28) at new Promise (<anonymous>) at callAsyncCircusFn (/work/cashtab/node_modules/jest-circus/build/utils.js:231:10) at _callCircusTest (/work/cashtab/node_modules/jest-circus/build/run.js:316:40) at processTicksAndRejections (node:internal/process/task_queues:95:5) at _runTest (/work/cashtab/node_modules/jest-circus/build/run.js:252:3) at _runTestsForDescribeBlock (/work/cashtab/node_modules/jest-circus/build/run.js:126:9) at _runTestsForDescribeBlock (/work/cashtab/node_modules/jest-circus/build/run.js:121:9) at run (/work/cashtab/node_modules/jest-circus/build/run.js:71:3) at runAndTransformResultsToJestFormat (/work/cashtab/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21) at jestAdapter (/work/cashtab/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19) at runTestInternal (/work/cashtab/node_modules/jest-runner/build/runTest.js:367:16) at runTest (/work/cashtab/node_modules/jest-runner/build/runTest.js:444:34) at Object.worker (/work/cashtab/node_modules/jest-runner/build/testWorker.js:106:12) ====== CashTab Unit Tests: <Header /> does not render fiat price if fiatPrice is null ====== Error: expect(element).not.toBeInTheDocument() expected document not to contain element, found <div class="sc-jAaTju bVBZDJ" title="Balance XEC Fiat">$ USD</div> instead at Object.toBeInTheDocument (/work/cashtab/src/components/Header/__tests__/Header.test.js:288:61) at Promise.then.completed (/work/cashtab/node_modules/jest-circus/build/utils.js:298:28) at new Promise (<anonymous>) at callAsyncCircusFn (/work/cashtab/node_modules/jest-circus/build/utils.js:231:10) at _callCircusTest (/work/cashtab/node_modules/jest-circus/build/run.js:316:40) at processTicksAndRejections (node:internal/process/task_queues:95:5) at _runTest (/work/cashtab/node_modules/jest-circus/build/run.js:252:3) at _runTestsForDescribeBlock (/work/cashtab/node_modules/jest-circus/build/run.js:126:9) at _runTestsForDescribeBlock (/work/cashtab/node_modules/jest-circus/build/run.js:121:9) at run (/work/cashtab/node_modules/jest-circus/build/run.js:71:3) at runAndTransformResultsToJestFormat (/work/cashtab/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21) at jestAdapter (/work/cashtab/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19) at runTestInternal (/work/cashtab/node_modules/jest-runner/build/runTest.js:367:16) at runTest (/work/cashtab/node_modules/jest-runner/build/runTest.js:444:34) at Object.worker (/work/cashtab/node_modules/jest-runner/build/testWorker.js:106:12) ====== CashTab Unit Tests: <Nfts /> If we switch wallets, listings that were previously organized as "My Listing" are instead organized as for sale ====== Error: expect(element).toBeInTheDocument() element could not be found in the document at Object.toBeInTheDocument (/work/cashtab/src/components/Nfts/__tests__/index.test.js:240:57) at runNextTicks (node:internal/process/task_queues:60:5) at listOnTimeout (node:internal/timers:545:9) at processTimers (node:internal/timers:519:7) ====== CashTab Unit Tests: <CreateToken /> If wallet has insufficient XEC, renders component but does not render CreateTokenForm ====== Error: expect(element).toBeInTheDocument() element could not be found in the document at Object.toBeInTheDocument (/work/cashtab/src/components/Etokens/__tests__/CreateToken.test.js:100:53) at runNextTicks (node:internal/process/task_queues:60:5) at listOnTimeout (node:internal/timers:545:9) at processTimers (node:internal/timers:519:7) ====== CashTab Unit Tests: <CashtabTestWrapper /> With default props, renders App component ====== Error: expect(element).toBeInTheDocument() element could not be found in the document at Object.toBeInTheDocument (/work/cashtab/src/components/App/fixtures/__tests__/CashtabTestWrapper.test.js:93:57) at runNextTicks (node:internal/process/task_queues:60:5) at listOnTimeout (node:internal/timers:545:9) at processTimers (node:internal/timers:519:7) ====== CashTab Unit Tests: <App /> Wallet with XECX sees XECX balance and XECX balance included in fiat balance ====== Error: Unable to find an element with the text: XECX. This could be because the text is broken up by multiple elements. In this case, you can provide a function for your text matcher to make your matcher more flexible. Ignored nodes: comments, script, style <body> <div> <div class="sc-chAAoq jkkmQa" > <section aria-atomic="false" aria-label="Notifications Alt+T" aria-live="polite" aria-relevant="additions text" class="Toastify" /> <div class="sc-dTLGrV iMTVPI" > <div class="sc-ivVeuv imkPeP" > <div class="sc-jkCMRl gBTeFC" title="Wallet Info" > <div class="sc-crNyjn gqmBAK" > <img alt="cashtab" src="test-file-stub" /> <div class="sc-eitiEO uCLiu" title="Price in Local Currency mobile" > 1 XEC = 0.00003000 USD </div> </div> <div class="sc-cpHetk bqInKj" > <div class="sc-nrwXf iouDbQ" title="Price in Local Currency" > 1 XEC = 0.00003000 USD </div> <div class="sc-bhlBdH beSwKX" > <label class="sc-dTsoBL gLaUyB" > <input checked="" class="sc-btewqU hwGqVr" type="checkbox" /> <div class="sc-imapFV ieITnS" > <img alt="toggle icon" src="test-file-stub" /> </div> </label> <button aria-label="Copy ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g" class="sc-jbKcbu gcmUUo" > <svg title="copy-paste" /> </button> <select class="sc-AnqlK jgCzha" data-testid="wallet-select" id="wallets" name="wallets" > <option class="sc-keFjpB mCdBx" value="Transaction Fixtures" > Transaction Fixtures </option> </select> </div> </div> <div class="sc-kVrTmx keOBpK" > <div class="sc-ekkqgF gPoRVh" > <img alt="eCash" class="sc-iBmynh gVCGcd" src="test-file-stub" /> <div class="sc-fKGOjr drxoNI" > eCash </div> <div class="sc-jvEmr hLosaZ" title="Balance XEC" > 9,513.12 XEC </div> <div class="sc-hycgNl cWNeRS" title="Balance XEC Fiat" > $ 0.29 USD </div> </div> <div class="sc-ekkqgF hsWQid" > <img alt="eCash Staking" class="sc-iBmynh gVCGcd" src="test-file-stub" /> <div class="sc-fKGOjr eFsfCF" > Staking </div> <div class="sc-jvEmr hLosaZ" title="Balance XECX" > 100,000,000.00 XECX </div> <div class="sc-hycgNl cWNeRS" title="Balance XECX Fiat" > $ 3,000.00 USD </div> </div> <div class="sc-ekkqgF hlnDNb" > <img alt="Savings" class="sc-iBmynh gVCGcd" src="test-file-stub" /> <div class="sc-fKGOjr kTbzgw" > Savings </div> <... at waitForWrapper (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:163:27) at /work/cashtab/node_modules/@testing-library/dom/dist/query-helpers.js:86:33 at Object.findByText (/work/cashtab/src/components/App/__tests__/App.test.js:650:29) ====== CashTab Unit Tests: <App /> A new user can import a mnemonic of a wallet with a balance ====== Error: expect(element).toHaveTextContent() Expected element to have text content: 9,513.12 XEC Received: 0.00 XEC at Object.toHaveTextContent (/work/cashtab/src/components/App/__tests__/App.test.js:737:57) at runNextTicks (node:internal/process/task_queues:60:5) at listOnTimeout (node:internal/timers:545:9) at processTimers (node:internal/timers:519:7) ====== CashTab Unit Tests: <App /> Migrating from wallet/savedWallet keys (version < 1.6.0): A user with an invalid Cashtab wallet as the active wallet is migrated on startup ====== Error: expect(element).toHaveTextContent() Expected element to have text content: 9,513.12 XEC Received: 0.00 XEC at Object.toHaveTextContent (/work/cashtab/src/components/App/__tests__/App.test.js:787:57) at runNextTicks (node:internal/process/task_queues:60:5) at listOnTimeout (node:internal/timers:545:9) at processTimers (node:internal/timers:519:7) ====== CashTab Unit Tests: <App /> Migrating from wallet/savedWallet keys (version < 1.6.0): A user with pre-2.1.0 valid wallets in savedWallets has them all migrated to new storage keys and new shape ====== Error: expect(element).toHaveTextContent() Expected element to have text content: 9,513.12 XEC Received: 0.00 XEC at Object.toHaveTextContent (/work/cashtab/src/components/App/__tests__/App.test.js:825:57) at runNextTicks (node:internal/process/task_queues:60:5) at listOnTimeout (node:internal/timers:545:9) at processTimers (node:internal/timers:519:7) ====== CashTab Unit Tests: <App /> Cashtab version >= 1.6.0 and < 2.1.0: A user with an invalid Cashtab wallet as the active wallet is migrated on startup ====== Error: expect(element).toHaveTextContent() Expected element to have text content: 9,513.12 XEC Received: 0.00 XEC at Object.toHaveTextContent (/work/cashtab/src/components/App/__tests__/App.test.js:941:57) at runNextTicks (node:internal/process/task_queues:60:5) at listOnTimeout (node:internal/timers:545:9) at processTimers (node:internal/timers:519:7) ====== CashTab Unit Tests: <App /> Migrating (version < 2.9.0): A user with an invalid Cashtab wallet as the active wallet is migrated on startup ====== Error: expect(element).toHaveTextContent() Expected element to have text content: 9,513.12 XEC Received: 0.00 XEC at Object.toHaveTextContent (/work/cashtab/src/components/App/__tests__/App.test.js:1045:57) at runNextTicks (node:internal/process/task_queues:60:5) at listOnTimeout (node:internal/timers:545:9) at processTimers (node:internal/timers:519:7) ====== CashTab Unit Tests: <App /> Migrating (2.9.0 <= version < 2.55.0): A user with an invalid Cashtab wallet as the active wallet is migrated on startup ====== Error: expect(element).toHaveTextContent() Expected element to have text content: 9,513.12 XEC Received: 0.00 XEC at Object.toHaveTextContent (/work/cashtab/src/components/App/__tests__/App.test.js:1121:57) at runNextTicks (node:internal/process/task_queues:60:5) at listOnTimeout (node:internal/timers:545:9) at processTimers (node:internal/timers:519:7) ====== CashTab Unit Tests: <Token /> available actions rendered We can redeem 1 Firma for $1 of XEC using a workflow unique to Firma ====== TestingLibraryElementError: Unable to find an element with the alt text: icon for 0387947fd575db4fb19a3e322f635dec37fd192b5941625b66bc4b2c3008cbf0 Ignored nodes: comments, script, style <body> <div> <div class="sc-kAzzGY bFOoJn" title="Loading..." > <div class="sc-cSHVUG kakYiA" title="Loading" > <div /> <div /> <div /> <div /> </div> </div> <div class="sc-chAAoq jkkmQa" > <section aria-atomic="false" aria-label="Notifications Alt+T" aria-live="polite" aria-relevant="additions text" class="Toastify" /> <div class="sc-dTLGrV iMTVPI" > <div class="sc-ivVeuv imkPeP" > <div class="sc-jkCMRl gBTeFC" title="Wallet Info" > <div class="sc-crNyjn gqmBAK" > <img alt="cashtab" src="test-file-stub" /> <div class="sc-eitiEO uCLiu" title="Price in Local Currency mobile" > 1 XEC = USD </div> </div> <div class="sc-cpHetk bqInKj" > <div class="sc-nrwXf iouDbQ" title="Price in Local Currency" > 1 XEC = USD </div> <div class="sc-bhlBdH beSwKX" > <label class="sc-hPeUyl cLIein" > <input checked="" class="sc-esoVGF kdvVKS" type="checkbox" /> <div class="sc-cAJUJo gJkONv" > <img alt="toggle icon" src="test-file-stub" /> </div> </label> <button aria-label="Copy ecash:qqq9f9z3uhpzkxrgdjkd7dxuuey7tmpmugpmnw0kue" class="sc-jbKcbu gcmUUo" > <svg title="copy-paste" /> </button> <select class="sc-AnqlK jgCzha" data-testid="wallet-select" disabled="" id="wallets" name="wallets" > <option class="sc-keFjpB mCdBx" value="Token Test" > Token Test </option> </select> </div> </div> <div class="sc-kVrTmx keOBpK" > <div class="sc-ekkqgF gPoRVh" > <img alt="eCash" class="sc-iBmynh gVCGcd" src="test-file-stub" /> <div class="sc-fKGOjr drxoNI" > eCash </div> <div class="sc-jvEmr hLosaZ" title="Balance XEC" > 9,970.81 XEC </div> <div class="sc-hycgNl cWNeRS" title="Balance XEC Fiat" > $ USD </div> </div> <div class="sc-ekkqgF hsWQid" > <img alt="eCash Staking" class="sc-iBmynh gVCGcd" src="test-file-stub" /> <div class="sc-fKGOjr eFsfCF" > Staking </div> <span title="Get XECX" > Earn eCash passively by staking with XECX! Daily staking rewards paid directly to your wallet. <a href="https://stakedxec.com" rel="noopener noreferrer" target="_blank" > Learn more </a> </span> </div> <div class="sc-ekkqgF hlnDNb" > <img alt="Savings" class="sc-iBmynh gVCGcd" src="test-file-stub" /> <div class="sc-fKGOjr kTbzgw" > Savings </div> <span title="Get FIRMA" > Earn USD yield with the Firma stable coin. Daily native yield paid directly to your wallet. <a href="https://firma.cash" rel="noopener noreferrer" target="_blank" > Learn more </a> </span> </div> </div> </div> <div class="sc-dBaXSw eahevx" > <div class="sc-kxynE cPkfiL" > <div class="sc-cooIXK jIUhVw" title="Token Info" > <div class="sc-kAzzGY bFOoJn" title="Loading..." > <div class="sc-cSHVUG kakYiA" title="Loading" > <div /> <div /> <div /> <div /> </div> </div> <div class="sc-ktHwxA fAHhjp" > You do not hold this token. </div> </div> </div> </div> </div> <div class="sc-cCbXAZ fWfLQK" > <div class="sc-hizQCF iOBvKI" > <img alt="cashtab" class="sc-dRCTWM jaayJi" src="test-file-stub" /> </div> <button class="sc-gleUXh jOucit" > <span> Transactions </span> <svg /> </button> <button aria-label="Send Screen" class="sc-gleUXh jOucit" > <span> Send </span> <svg title="tx-sent" /> </button> <button aria-label="Tokens" class="sc-gleUXh jOucit" > <span> Tokens </span> <svg title="Tokens" /> </button> <button aria-label="Receive" class="sc-gleUXh jOucit" > <span> Receive </span> <svg title="tx-received" /> </button> <div class="sc-fHSTwm fmqsjL nav-menu-container" title="Show Other Screens" > <span class="sc-hdPSEv kpKbSe" /> <div class="sc-cmIlrE kXQSWU" title="Other Screens" > <button class="sc-doWzTn bTvygg" > <p> Wallet Backup </p> <svg title="wallet" /> </button> <button class="sc-doWzTn bTvygg" > <p> Wallets </p> <svg title="wallets" /> </button> <button class="sc-doWzTn bTvygg" > <p> Listed NFTs </p> <svg title="NFT" /> </button> <button class="sc-doWzTn bTvygg" > <p> Agora </p> <svg title="Meme Agora" /> </button> <button class="sc-doWzTn bTvygg" > <p> Contacts </p> <svg title="Contact List" /> </button> <button class="sc-doWzTn bTvygg" > <p> Airdrop </p> <svg title="tx-airdrop" /> </button> <button class="sc-doWzTn bTvygg" > <p> Rewards </p> <svg title="Cashtab Rewards" /> </button> <button class="sc-doWzTn bTvygg" > <p> Sign & Verify </p> <svg class="sc-htpNat bPFBeM" /> </button> <button class="sc-doWzTn bTvygg" > <p> Settings </p> <svg title="settings" /> </button> </div> </div> </div> </div> </div> </div> </body> at Object.getElementError (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:37:19) at /work/cashtab/node_modules/@testing-library/dom/dist/query-helpers.js:76:38 at /work/cashtab/node_modules/@testing-library/dom/dist/query-helpers.js:52:17 at /work/cashtab/node_modules/@testing-library/dom/dist/query-helpers.js:95:19 at Object.getByAltText (/work/cashtab/src/components/Etokens/__tests__/TokenActions.test.js:2300:20) at runNextTicks (node:internal/process/task_queues:60:5) at listOnTimeout (node:internal/timers:545:9) at processTimers (node:internal/timers:519:7) ====== CashTab Unit Tests: <Token /> available actions rendered We show expected error if we are unable to get FIRMA bid price from API ====== TestingLibraryElementError: Unable to find an element with the alt text: icon for 0387947fd575db4fb19a3e322f635dec37fd192b5941625b66bc4b2c3008cbf0 Ignored nodes: comments, script, style <body> <div> <div class="sc-kAzzGY bFOoJn" title="Loading..." > <div class="sc-cSHVUG kakYiA" title="Loading" > <div /> <div /> <div /> <div /> </div> </div> <div class="sc-chAAoq jkkmQa" > <section aria-atomic="false" aria-label="Notifications Alt+T" aria-live="polite" aria-relevant="additions text" class="Toastify" /> <div class="sc-dTLGrV iMTVPI" > <div class="sc-ivVeuv imkPeP" > <div class="sc-jkCMRl gBTeFC" title="Wallet Info" > <div class="sc-crNyjn gqmBAK" > <img alt="cashtab" src="test-file-stub" /> <div class="sc-eitiEO uCLiu" title="Price in Local Currency mobile" > 1 XEC = USD </div> </div> <div class="sc-cpHetk bqInKj" > <div class="sc-nrwXf iouDbQ" title="Price in Local Currency" > 1 XEC = USD </div> <div class="sc-bhlBdH beSwKX" > <label class="sc-cmUJln cMtCnz" > <input checked="" class="sc-gYtlsd byfOZy" type="checkbox" /> <div class="sc-kDgGX dwxdan" > <img alt="toggle icon" src="test-file-stub" /> </div> </label> <button aria-label="Copy ecash:qqq9f9z3uhpzkxrgdjkd7dxuuey7tmpmugpmnw0kue" class="sc-jbKcbu gcmUUo" > <svg title="copy-paste" /> </button> <select class="sc-AnqlK jgCzha" data-testid="wallet-select" disabled="" id="wallets" name="wallets" > <option class="sc-keFjpB mCdBx" value="Token Test" > Token Test </option> </select> </div> </div> <div class="sc-kVrTmx keOBpK" > <div class="sc-ekkqgF gPoRVh" > <img alt="eCash" class="sc-iBmynh gVCGcd" src="test-file-stub" /> <div class="sc-fKGOjr drxoNI" > eCash </div> <div class="sc-jvEmr hLosaZ" title="Balance XEC" > 9,970.81 XEC </div> <div class="sc-hycgNl cWNeRS" title="Balance XEC Fiat" > $ USD </div> </div> <div class="sc-ekkqgF hsWQid" > <img alt="eCash Staking" class="sc-iBmynh gVCGcd" src="test-file-stub" /> <div class="sc-fKGOjr eFsfCF" > Staking </div> <span title="Get XECX" > Earn eCash passively by staking with XECX! Daily staking rewards paid directly to your wallet. <a href="https://stakedxec.com" rel="noopener noreferrer" target="_blank" > Learn more </a> </span> </div> <div class="sc-ekkqgF hlnDNb" > <img alt="Savings" class="sc-iBmynh gVCGcd" src="test-file-stub" /> <div class="sc-fKGOjr kTbzgw" > Savings </div> <span title="Get FIRMA" > Earn USD yield with the Firma stable coin. Daily native yield paid directly to your wallet. <a href="https://firma.cash" rel="noopener noreferrer" target="_blank" > Learn more </a> </span> </div> </div> </div> <div class="sc-dBaXSw eahevx" > <div class="sc-kxynE cPkfiL" > <div class="sc-cooIXK jIUhVw" title="Token Info" > <div class="sc-kAzzGY bFOoJn" title="Loading..." > <div class="sc-cSHVUG kakYiA" title="Loading" > <div /> <div /> <div /> <div /> </div> </div> <div class="sc-ktHwxA fAHhjp" > You do not hold this token. </div> </div> </div> </div> </div> <div class="sc-cCbXAZ fWfLQK" > <div class="sc-hizQCF iOBvKI" > <img alt="cashtab" class="sc-dRCTWM jaayJi" src="test-file-stub" /> </div> <button class="sc-gleUXh jOucit" > <span> Transactions </span> <svg /> </button> <button aria-label="Send Screen" class="sc-gleUXh jOucit" > <span> Send </span> <svg title="tx-sent" /> </button> <button aria-label="Tokens" class="sc-gleUXh jOucit" > <span> Tokens </span> <svg title="Tokens" /> </button> <button aria-label="Receive" class="sc-gleUXh jOucit" > <span> Receive </span> <svg title="tx-received" /> </button> <div class="sc-fHSTwm fmqsjL nav-menu-container" title="Show Other Screens" > <span class="sc-hdPSEv kpKbSe" /> <div class="sc-cmIlrE kXQSWU" title="Other Screens" > <button class="sc-doWzTn bTvygg" > <p> Wallet Backup </p> <svg title="wallet" /> </button> <button class="sc-doWzTn bTvygg" > <p> Wallets </p> <svg title="wallets" /> </button> <button class="sc-doWzTn bTvygg" > <p> Listed NFTs </p> <svg title="NFT" /> </button> <button class="sc-doWzTn bTvygg" > <p> Agora </p> <svg title="Meme Agora" /> </button> <button class="sc-doWzTn bTvygg" > <p> Contacts </p> <svg title="Contact List" /> </button> <button class="sc-doWzTn bTvygg" > <p> Airdrop </p> <svg title="tx-airdrop" /> </button> <button class="sc-doWzTn bTvygg" > <p> Rewards </p> <svg title="Cashtab Rewards" /> </button> <button class="sc-doWzTn bTvygg" > <p> Sign & Verify </p> <svg class="sc-htpNat bPFBeM" /> </button> <button class="sc-doWzTn bTvygg" > <p> Settings </p> <svg title="settings" /> </button> </div> </div> </div> </div> </div> </div> </body> at Object.getElementError (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:37:19) at /work/cashtab/node_modules/@testing-library/dom/dist/query-helpers.js:76:38 at /work/cashtab/node_modules/@testing-library/dom/dist/query-helpers.js:52:17 at /work/cashtab/node_modules/@testing-library/dom/dist/query-helpers.js:95:19 at Object.getByAltText (/work/cashtab/src/components/Etokens/__tests__/TokenActions.test.js:2428:20) ====== CashTab Unit Tests: <Token /> available actions rendered The FIRMA OrderBook loads with price in USD ====== Error: expect(received).toHaveLength(expected) Expected length: 4 Received length: 1 Received array: [<span title="Get FIRMA">Earn USD yield with the Firma stable coin. Daily native yield paid directly to your wallet. <a href="https://firma.cash" rel="noopener noreferrer" target="_blank">Learn more</a></span>] at Object.toHaveLength (/work/cashtab/src/components/Etokens/__tests__/TokenActions.test.js:2508:67) Each failure log is accessible here:
|