Page MenuHomePhabricator

[Cashtab] Improve Cashtab wallet shape
ClosedPublic

Authored by bytesofman on Mar 11 2024, 20:56.

Details

Reviewers
emack
Group Reviewers
Restricted Project
Commits
rABC26fc9e6a195d: [Cashtab] Improve Cashtab wallet shape
Summary

T3445

Create all new Cashtab wallets with only Path1899. Support legacy paths if you find them. Get rid of hardcoded paths at hardcoded keys.

Large diff. Most of the changes involve updates to mocks used by unit and integration tests.

We could have split this somewhat -- migrated from balances to balanceSats in one diff, and then from hardcoded Path1899 to paths array in another -- but imo it is better to limit the number of wallet migrations overall than to do more "smaller" wallet migrations.

The key changes in this diff

  • Update isValidCashtabWallet to accept new shape and reject old shape
  • Update createNewCashtabWallet to create new shape, importantly, new wallets are only created with Path1899 (not Path145 and Path245)
  • We support migrating Path145 and Path245 if we find a wallet with these paths. In practice, Cashtab has used Path1899 as the only change address for multiple years. Only a user with a still-in-localforage cashttab wallet that has not been used for 2 years would have money at these paths. We could consider deprecating them entirely, but, since it is not really more complicated to support multiple paths as we do it already, might as well keep doing it. Might come in useful later. Certainly makes it easier to implement HD wallets if we decide to do this.
  • Note the updates to migration integration tests in App.test.js. Since we are changing shape, now any wallet we find in legacy localforage keys wallet and savedWallets is expected to be invalid.
  • Changes to how wallets are migrated in loadCashtabState to account for the new paths key and support for legacy paths.
Test Plan

npm test

This diff is built and deployed to prod test site at https://cashtab-local-dev.netlify.app/

Navigate there and confirm wallets migrate (you can check, in dev console, application --> indexedDb --> localforage)

Tests that I performed on the prod site

  • Confirmed multiple wallets migrated
  • Sent XEC
  • Received XEC
  • Sent token
  • Received token
  • Registed an alias
  • Signed & verified msg
  • Renamed a wallet
  • Deleted a wallet
  • Created a wallet and confirmed it only had Path1899
  • Sent and received txs with this wallet
  • Calculated and sent an airdrop tx

With the exception of the Airdrop, this is also all covered by existing integration tests. Airdrop integration tests are pending migration to in-node chronik-client and deprecation of SLPDB.

Diff Detail

Repository
rABC Bitcoin ABC
Branch
better-wallet-shape
Lint
Lint Passed
Unit
No Test Coverage
Build Status
Buildable 27838
Build 55229: Build Diffcashtab-tests
Build 55228: arc lint + arc unit

Event Timeline

Failed tests logs:

====== CashTab Unit Tests: Determines if a cashtab wallet is valid or invalid isValidCashtabWallet: Returns true for a valid Cashtab wallet ======
Error: expect(received).toBe(expected) // Object.is equality

Expected: true
Received: false
    at Object.toBe (/work/cashtab/src/validation/__tests__/index.test.js:848: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: Determines if a cashtab wallet is valid or invalid isValidCashtabWallet: Returns false if not an object ======
TypeError: Cannot use 'in' operator to search for 'paths' in a string
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at Object.<anonymous> (/work/cashtab/src/validation/__tests__/index.test.js:848:40)
    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: Determines if a cashtab wallet is valid or invalid isValidCashtabWallet: Returns false if false (used to indicate no wallet yet set) ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at Object.<anonymous> (/work/cashtab/src/validation/__tests__/index.test.js:848:40)
    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: <CreateTokenForm /> User can input valid token parameters, generate a token, and view a success notification ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Etokens/__tests__/CreateTokenForm.test.js:89:15)
====== CashTab Unit Tests: <SignVerifyMsg /> Notification is rendered upon successfully signing a message ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/SignVerifyMsg/__tests__/SignVerifyMsg.test.js:86:15)
====== CashTab Unit Tests: <SignVerifyMsg /> Notification is rendered upon successfully verifying a message ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/SignVerifyMsg/__tests__/SignVerifyMsg.test.js:119:15)
====== CashTab Unit Tests: <SignVerifyMsg /> Notification is rendered upon signature verification error ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/SignVerifyMsg/__tests__/SignVerifyMsg.test.js:166:15)
====== CashTab Unit Tests: <Receive /> Renders as expected on desktop, including copy paste functionality of clicking on the QR code ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Receive/__tests__/Receive.test.js:95:15)
====== CashTab Unit Tests: <Receive /> Renders the Receive screen with QR code of expected width for smallest supported mobile view ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Receive/__tests__/Receive.test.js:156:15)
====== CashTab Unit Tests: <Receive /> Renders the Receive screen with QR code of size that is fully viewable in extension dimensions ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Receive/__tests__/Receive.test.js:205:15)
====== CashTab Unit Tests: <Receive /> Renders the Onboarding screen if user navigates to this route without a wallet ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Receive/__tests__/Receive.test.js:242:15)
====== CashTab Unit Tests: <Alias /> Registered and Pending Aliases are correctly rendered ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Alias/__tests__/Alias.test.js:106:15)
====== CashTab Unit Tests: <Alias /> Registered and Pending Aliases are correctly rendered when pending list is empty ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Alias/__tests__/Alias.test.js:150:15)
====== CashTab Unit Tests: <Alias /> Registered and Pending Aliases are correctly rendered when registered list is empty ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Alias/__tests__/Alias.test.js:194:15)
====== CashTab Unit Tests: <Alias /> Registered and Pending lists still renders when aliasValidationError is populated and aliasServerError is false ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Alias/__tests__/Alias.test.js:232:15)
====== CashTab Unit Tests: <Alias /> Registered and Pending lists do not render when aliasValidationError is false and aliasServerError is populated ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Alias/__tests__/Alias.test.js:270:15)
====== CashTab Unit Tests: <Home /> Renders the loading component while loading, then the Home screen ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Home/__tests__/Home.test.js:85:15)
====== CashTab Unit Tests: <Home /> Renders the Home screen with API error ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Home/__tests__/Home.test.js:118:15)
====== CashTab Unit Tests: <Home /> Renders Sideshift button if user loads with a new wallet ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Home/__tests__/Home.test.js:131:15)
====== CashTab Unit Tests: <Home /> Renders the onboarding screen for a new wallet ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Home/__tests__/Home.test.js:154:15)
====== CashTab Unit Tests: <Configure /> We can add, delete, rename, contacts from the Configure screen, and add a savedWallet as a contact ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Configure/__tests__/Configure.test.js:116:15)
====== CashTab Unit Tests: <Configure /> We can rename the active wallet or a saved wallet, we can add a wallet, we can import a wallet, we can delete a wallet ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Configure/__tests__/Configure.test.js:340:15)
====== CashTab Unit Tests: <SendXec /> rendered with params in URL Legacy params. Address and value keys are set and valid. ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendByUrlParams.test.js:99:15)
====== CashTab Unit Tests: <SendXec /> rendered with params in URL Legacy params. Address and value keys are set and valid. Invalid bip21 string is ignored. ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendByUrlParams.test.js:161:15)
====== 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 ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendByUrlParams.test.js:222:15)
====== 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 ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendByUrlParams.test.js:279:15)
====== CashTab Unit Tests: <SendXec /> rendered with params in URL Legacy params. Params are ignored if only value param is present ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendByUrlParams.test.js:334:15)
====== CashTab Unit Tests: <SendXec /> rendered with params in URL Legacy params. Params are ignored if param is duplicated ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendByUrlParams.test.js:389:15)
====== 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 ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendByUrlParams.test.js:445:15)
====== CashTab Unit Tests: <SendXec /> rendered with params in URL bip21 param - valid bip21 param with amount and op_return_raw is parsed as expected ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendByUrlParams.test.js:510:15)
====== CashTab Unit Tests: <SendXec /> rendered with params in URL bip21 param - an invalid bip21 param shows validation errors but cannot be changed ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendByUrlParams.test.js:599:15)
====== CashTab Unit Tests: <SendXec /> rendered with params in URL No params. Send screen loads normally with no rendered input. ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendByUrlParams.test.js:672:15)
====== CashTab Unit Tests: <SendXec /> Renders the SendXec screen with send address input ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendXec.test.js:93:15)
====== CashTab Unit Tests: <SendXec /> Pass valid address to Send To field ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendXec.test.js:134:15)
====== CashTab Unit Tests: <SendXec /> Pass valid alias to Send To field ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendXec.test.js:181:15)
====== CashTab Unit Tests: <SendXec /> Pass an invalid address to Send To field and get a validation error ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendXec.test.js:257:15)
====== CashTab Unit Tests: <SendXec /> Pass a possibly valid alias without .xec suffix to Send To field and get expected error ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendXec.test.js:298:15)
====== CashTab Unit Tests: <SendXec /> Pass a valid alias to Send To field that has not yet been registered and get expected error ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendXec.test.js:341:15)
====== CashTab Unit Tests: <SendXec /> Get expected error msg and send disabled if bad response from alias server ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendXec.test.js:404:15)
====== CashTab Unit Tests: <SendXec /> Pass a valid address and bip21 query string with valid amount param to Send To field ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendXec.test.js:460:15)
====== CashTab Unit Tests: <SendXec /> Pass a valid alias and bip21 query string with valid amount param to Send To field ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendXec.test.js:509:15)
====== CashTab Unit Tests: <SendXec /> Pass a valid address and bip21 query string with invalid amount param (dust) to Send To field ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendXec.test.js:587:15)
====== CashTab Unit Tests: <SendXec /> Valid address with valid bip21 query string with valid amount param rejected if amount exceeds wallet balance ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendXec.test.js:633:15)
====== CashTab Unit Tests: <SendXec /> Pass a valid alias and bip21 query string with invalid amount param (too many decimals) to Send To field ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendXec.test.js:679:15)
====== CashTab Unit Tests: <SendXec /> Pass a valid address and an invalid bip21 query string ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendXec.test.js:758:15)
====== CashTab Unit Tests: <SendXec /> Pass a valid address and bip21 query string with op_return_raw param to Send To field ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendXec.test.js:807:15)
====== CashTab Unit Tests: <SendXec /> Pass a valid address and bip21 query string with valid amount and op_return_raw params to Send To field ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendXec.test.js:864:15)
====== CashTab Unit Tests: <SendXec /> Pass a valid address and bip21 query string with valid amount and invalid op_return_raw params to Send To field ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendXec.test.js:921:15)
====== CashTab Unit Tests: <SendXec /> Clicking "Send" will send a valid tx with op_return_raw after entry of a valid address and bip21 query string with valid amount and op_return_raw params to Send To field ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendXec.test.js:988:15)
====== CashTab Unit Tests: <SendXec /> We can calculate max send amount with and without a cashtab msg, and send a max sat tx with a cashtab msg ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendXec.test.js:1102:15)
====== CashTab Unit Tests: <SendXec /> If the user has minFeeSends set to true but no longer has the right token amount, the feature is disabled ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendXec.test.js:1186:15)
====== CashTab Unit Tests: <SendToken /> Renders the SendToken screen with send address input ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendToken.test.js:134:15)
    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: <SendToken /> Accepts a valid ecash: prefixed address ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendToken.test.js:167:15)
    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: <SendToken /> Accepts a valid etoken: prefixed address ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendToken.test.js:198:15)
    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: <SendToken /> Accepts a valid alias ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendToken.test.js:230:15)
    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: <SendToken /> Displays a validation error for an invalid address ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendToken.test.js:290:15)
    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: <SendToken /> Displays a validation error for an alias without .xec suffix ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendToken.test.js:315:15)
    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: <SendToken /> Displays a validation error for valid alias that has not yet been registered ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendToken.test.js:342:15)
    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: <SendToken /> Displays expected error if alias server gives a bad response ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendToken.test.js:389:15)
    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: <SendToken /> Displays a validation error if the user includes any query string ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendToken.test.js:429:15)
    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: <SendToken /> Renders the send token notification upon successful broadcast ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendToken.test.js:467:15)
    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: <SendToken /> Renders the burn token success notification upon successful burn tx broadcast ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendToken.test.js:511:15)
    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: Cashtab wallet methods Creates a wallet from valid bip39 mnemonic createCashtabWallet: Creates a Cashtab wallet from a valid bip39 mnemonic ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at Object.<anonymous> (/work/cashtab/src/wallet/__tests__/index.test.js:84:49)
    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 _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: <App /> Renders 404 on a bad route ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/__tests__/App.test.js:101:15)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
====== CashTab Unit Tests: <App /> Navigation menu routes to expected components ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/__tests__/App.test.js:114:15)
====== CashTab Unit Tests: <App /> Adding a contact to to a new contactList by clicking on tx history adds it to localforage and wallet context ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/__tests__/App.test.js:187:15)
====== CashTab Unit Tests: <App /> Adding a contact to an existing contactList by clicking on tx history adds it to localforage and wallet context ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/__tests__/App.test.js:250:15)
====== CashTab Unit Tests: <App /> A user with legacy blank contactList in localstorage is migrated on startup ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/__tests__/App.test.js:309:15)
====== CashTab Unit Tests: <App /> Clicking "reply" on a Cashtab Msg correctly populates the SendXec to address and amount fields ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/__tests__/App.test.js:330:15)
====== CashTab Unit Tests: <App /> We do not see the camera auto-open setting in the config screen on a desktop device ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/__tests__/App.test.js:375:15)
====== CashTab Unit Tests: <App /> We do see the camera auto-open setting in the config screen on a mobile device ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/__tests__/App.test.js:399:15)
====== CashTab Unit Tests: <App /> Setting "Send Confirmations" settings will show send confirmations ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/__tests__/App.test.js:432:15)
====== CashTab Unit Tests: <App /> If Cashtab starts up with some settings keys missing, the missing keys are migrated to default values ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/__tests__/App.test.js:520:15)
====== CashTab Unit Tests: <App /> Setting "ABSOLUTE MINIMUM fees" settings will reduce fees to absolute min ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/__tests__/App.test.js:577:15)
====== CashTab Unit Tests: <App /> Wallet with easter egg token sees easter egg ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/__tests__/App.test.js:712:15)
====== CashTab Unit Tests: <App /> If Cashtab starts with 1.5.* cashtabCache, it is wiped and migrated to 1.6.* cashtabCache ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/__tests__/App.test.js:728:15)
====== CashTab Unit Tests: <App /> A new user can import a mnemonic ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/__tests__/App.test.js:772:15)
====== CashTab Unit Tests: <App /> Migrating from wallet/savedWallet keys (version < 1.6.*): A user with an invalid Cashtab wallet as the active wallet is migrated on startup ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/__tests__/App.test.js:856:15)
====== CashTab Unit Tests: <App /> Migrating from wallet/savedWallet keys (version < 1.6.*): A user with all valid wallets in savedWallets does not have any savedWallets migrated ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/__tests__/App.test.js:886:15)
====== CashTab Unit Tests: <App /> Migrating from wallet/savedWallet keys (version < 1.6.*): A user with an invalid wallet in savedWallets has that savedWallet migrated ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/__tests__/App.test.js:937:15)
====== CashTab Unit Tests: <App /> Migrating from wallet/savedWallet keys (version < 1.6.*): A user with multiple invalid wallets in savedWallets has them migrated ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/__tests__/App.test.js:1025:15)
====== CashTab Unit Tests: <App /> A user with an invalid Cashtab wallet as the active wallet is migrated on startup ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/__tests__/App.test.js:1063:15)
====== CashTab Unit Tests: <App /> A user with all valid wallets in savedWallets does not have any savedWallets migrated ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/__tests__/App.test.js:1093:15)
====== CashTab Unit Tests: <App /> A user with an invalid wallet in savedWallets has that savedWallet migrated ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/__tests__/App.test.js:1140:15)
====== CashTab Unit Tests: <App /> A user with multiple invalid wallets in savedWallets has them migrated ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/__tests__/App.test.js:1224:15)
====== CashTab Unit Tests: <CreateToken /> If wallet has sufficient XEC, renders CreateTokenForm ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Etokens/__tests__/CreateToken.test.js:77:15)
====== CashTab Unit Tests: <CreateToken /> If wallet has insufficient XEC, renders component but does not render CreateTokenForm ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/Etokens/__tests__/CreateToken.test.js:99:15)
====== CashTab Unit Tests: <CashtabTestWrapper /> With default props, renders App component ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/fixtures/__tests__/CashtabTestWrapper.test.js:76:15)
====== CashTab Unit Tests: <CashtabTestWrapper /> We can render other pages by passing the route ======
TypeError: Cannot use 'in' operator to search for 'paths' in false
    at isValidCashtabWallet (/work/cashtab/src/validation/index.js:699:18)
    at App (/work/cashtab/src/components/App.js:450:45)
    at renderWithHooks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:16305:18)
    at mountIndeterminateComponent (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:20074:13)
    at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21587:16)
    at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
    at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
    at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
    at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
    at recoverFromConcurrentError (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25850:20)
    at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25750:22)
    at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
    at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
    at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
    at renderRoot (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:180:26)
    at render (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:266:10)
    at Object.<anonymous> (/work/cashtab/src/components/fixtures/__tests__/CashtabTestWrapper.test.js:101:15)
====== CashTab Unit Tests: useWallet hook rendering in different localforage states XEC price is set in state on successful API fetch ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:380:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:377:29)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:748:9)
====== CashTab Unit Tests: useWallet hook rendering in different localforage states XEC price remains null in state on API error ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:380:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:377:29)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:748:9)
====== CashTab Unit Tests: useWallet hook rendering in different localforage states XEC price is set in state to fiat currency of user settings on successful API fetch ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:380:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:377:29)
    at runNextTicks (node:internal/process/task_queues:60:5)
    at listOnTimeout (node:internal/timers:540:9)
    at processTimers (node:internal/timers:514:7)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:748:9)
====== CashTab Unit Tests: useWallet hook rendering in different localforage states Cashtab loads wallet, settings, cache, and contactlist from localforage to context if they are present ======
Error: expect(received).toEqual(expected) // deep equality

- Expected  - 8
+ Received  + 0

@@ -5,15 +5,7 @@
        "tokenDocumentHash": "",
        "tokenDocumentUrl": "",
        "tokenName": "Burger",
        "tokenTicker": "  ",
      },
-     "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109" => Object {
-       "decimals": 0,
-       "success": true,
-       "tokenDocumentHash": "",
-       "tokenDocumentUrl": "https://cashtab.com/",
-       "tokenName": "BearNip",
-       "tokenTicker": "BEAR",
-     },
    },
  }

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div />
  </body>
</html>
    at toEqual (/work/cashtab/src/hooks/__tests__/useWallet.test.js:199:62)
    at runWithExpensiveErrorDiagnosticsDisabled (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:47:12)
    at checkCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:124:77)
    at checkRealTimersCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:118:16)
    at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)
====== CashTab Unit Tests: useWallet hook rendering in different localforage states processChronikWsMsg() refreshes alias prices when aliasPrices is null ======
Error: expect(received).toStrictEqual(expected) // deep equality

Expected: {"Path145": {"cashAddress": "ecash:qz3glzzjlp503rn3a3nxccedd7rwj78sgczljhvzv3", "fundingWif": "L2HnC8ZT5JuwVFjrAjJUBs2tmmBoxdVa1MVCJccqV8S9YPoR1NuZ", "hash160": "a28f8852f868f88e71ec666c632d6f86e978f046", "publicKey": "03939a29fd67fa602926637a82f53e1826696353613cac03e34160f040ae2dfcb5"}, "Path1899": {"cashAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "fundingWif": "KywWPgaLDwvW1tWUtUvs13jgqaaWMoNANLVYoKcK9Ddbpnch7Cmw", "hash160": "3a5fb236934ec078b4507c303d3afd82067f8fc1", "publicKey": "031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02d"}, "Path245": {"cashAddress": "ecash:qpsqa7cj5mup8mx0zvt34z7xyp2jztvdds67wajntk", "fundingWif": "L3ndnMkn4574McqhPujguusu48NrmeLUgWYMkRpYQGLXDGAwGmPq", "hash160": "600efb12a6f813eccf13171a8bc62055212d8d6c", "publicKey": "03f73fe2631da9732f2480debbc7ff8d99c5c06764e0f5095b789ff190788bee72"}, "mnemonic": "beauty shoe decline spend still weird slot snack coach flee between paper", "name": "Transaction Fixtures", "state": {"balances": {"totalBalance": "9513.12", "totalBalanceInSatoshis": "951312"}, "nonSlpUtxos": [{"address": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "blockHeight": 815549, "isCoinbase": false, "network": "XEC", "outpoint": {"outIdx": 2, "txid": "218a1e058ed0fda76573eabf43ad3ded7e7192e42621893a60aaa152ba7f66fe"}, "value": "951312"}], "parsedTxHistory": [{"inputs": [[Object], [Object], [Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "etokenAmount": "1", "genesisInfo": [Object], "incoming": true, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": true, "isTokenBurn": false, "opReturnMessage": "", "replyAddress": "ecash:qp89xgjhcqdnzzemts0aj378nfe2mhu9yvxj9nhgg6", "slpMeta": [Object], "xecAmount": "5.46"}, "size": 627, "slpTxData": {"slpMeta": [Object]}, "timeFirstSeen": "1705488591", "txid": "3b0760858b0b20ff50d0db67793892d29d2466b86a0116f7e232792da0c22330", "version": 2}, {"block": {"hash": "00000000000000000ea3601057ba423805f91d9d813a41a91ae908b68ff6cbce", "height": 815549, "timestamp": "1698187386"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "newton", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.53"}, "size": 268, "timeFirstSeen": "1698185917", "txid": "218a1e058ed0fda76573eabf43ad3ded7e7192e42621893a60aaa152ba7f66fe", "version": 2}, {"block": {"hash": "000000000000000009004fa50065ef6deb091f0d075cf1ef01811d0706c9a8c2", "height": 814357, "timestamp": "1697463218"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "doesthisclear", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.51"}, "size": 275, "timeFirstSeen": "1697462397", "txid": "9f25f4e161472920f624ed6579ccdaf8d096263ab31e157deaa9c987269ead8a", "version": 2}, {"block": {"hash": "00000000000000001533643253107df49b2291beb9d5cd5c7f4f51bf26572e53", "height": 813934, "timestamp": "1697216026"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "worksnow", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.51"}, "size": 270, "timeFirstSeen": "1697215818", "txid": "42c39baded510db31aebaf9172d307afa199dd734a6189ea4bc3530438d715ca", "version": 2}, {"block": {"hash": "0000000000000000166ee88a29775a1098813f4316a5afbe835d21e0d74fda24", "height": 813923, "timestamp": "1697211295"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test4", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 267, "timeFirstSeen": "1697211232", "txid": "5aa64624e493502d083089f5a58069887bc99a6d5569b27df7c7570e024bbf20", "version": 2}, {"block": {"hash": "00000000000000000a1807a17ebcda93947db968e9a112b54ec70237d1a76288", "height": 813922, "timestamp": "1697211196"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.55"}, "size": 267, "timeFirstSeen": "1697211182", "txid": "b26c42ba0cc48f0d3af442b445f19c267189f84dbeb7e366ec7c921f5195aca7", "version": 2}, {"block": {"hash": "00000000000000000a1807a17ebcda93947db968e9a112b54ec70237d1a76288", "height": 813922, "timestamp": "1697211196"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.55"}, "size": 266, "timeFirstSeen": "1697211167", "txid": "f86f20336955bca4e15588d81d029ad2c0dfa498b8be6aced2b63ba3bea1be0a", "version": 2}, {"block": {"hash": "000000000000000006b8990c77dd7a0d3a850a052b6f0bd60b82d44d1ffa7a55", "height": 813615, "timestamp": "1697025138"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "alias", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 268, "timeFirstSeen": "1697024688", "txid": "f17814a75dad000557f19a3a3f6fcc124ab7880292c9fad4c64dc034d5e46551", "version": 2}, {"block": {"hash": "000000000000000006b8990c77dd7a0d3a850a052b6f0bd60b82d44d1ffa7a55", "height": 813615, "timestamp": "1697025138"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "alias", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 267, "timeFirstSeen": "1697024682", "txid": "7eacd3b752003fe761e359cac3d98b1faf4f1dd411150eabc89da8208a312b0e", "version": 2}, {"block": {"hash": "00000000000000000b2dfec91630d335b0233fb323a7acbb297b586d1d0d0678", "height": 812408, "timestamp": "1696282475"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": false, "incoming": false, "isCashtabMessage": true, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "still works", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "22"}, "size": 252, "timeFirstSeen": "1696281429", "txid": "8b3cb0e6c38ee01f9e1e98d611895ff2cd09ad9b4fea73f76f951be815278c26", "version": 2}], "slpUtxos": [{"address": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "blockHeight": -1, "decimals": 0, "isCoinbase": false, "network": "XEC", "outpoint": {"outIdx": 1, "txid": "3b0760858b0b20ff50d0db67793892d29d2466b86a0116f7e232792da0c22330"}, "slpMeta": {"tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109", "tokenType": "FUNGIBLE", "txType": "SEND"}, "slpToken": {"amount": "1", "isMintBaton": false}, "tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109", "tokenQty": "1", "value": "546"}], "tokens": [{"balance": "1", "info": {"decimals": 0, "success": true, "tokenDocumentHash": "", "tokenDocumentUrl": "https://cashtab.com/", "tokenName": "BearNip", "tokenTicker": "BEAR"}, "tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109"}]}}
Received: undefined

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div />
  </body>
</html>
    at toStrictEqual (/work/cashtab/src/hooks/__tests__/useWallet.test.js:264:60)
    at runWithExpensiveErrorDiagnosticsDisabled (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:47:12)
    at checkCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:124:77)
    at checkRealTimersCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:118:16)
    at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)
====== CashTab Unit Tests: useWallet hook rendering in different localforage states processChronikWsMsg() refreshes alias prices when aliasPrices exists, server and cashtab prices array length do not match ======
Error: expect(received).toStrictEqual(expected) // deep equality

Expected: {"Path145": {"cashAddress": "ecash:qz3glzzjlp503rn3a3nxccedd7rwj78sgczljhvzv3", "fundingWif": "L2HnC8ZT5JuwVFjrAjJUBs2tmmBoxdVa1MVCJccqV8S9YPoR1NuZ", "hash160": "a28f8852f868f88e71ec666c632d6f86e978f046", "publicKey": "03939a29fd67fa602926637a82f53e1826696353613cac03e34160f040ae2dfcb5"}, "Path1899": {"cashAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "fundingWif": "KywWPgaLDwvW1tWUtUvs13jgqaaWMoNANLVYoKcK9Ddbpnch7Cmw", "hash160": "3a5fb236934ec078b4507c303d3afd82067f8fc1", "publicKey": "031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02d"}, "Path245": {"cashAddress": "ecash:qpsqa7cj5mup8mx0zvt34z7xyp2jztvdds67wajntk", "fundingWif": "L3ndnMkn4574McqhPujguusu48NrmeLUgWYMkRpYQGLXDGAwGmPq", "hash160": "600efb12a6f813eccf13171a8bc62055212d8d6c", "publicKey": "03f73fe2631da9732f2480debbc7ff8d99c5c06764e0f5095b789ff190788bee72"}, "mnemonic": "beauty shoe decline spend still weird slot snack coach flee between paper", "name": "Transaction Fixtures", "state": {"balances": {"totalBalance": "9513.12", "totalBalanceInSatoshis": "951312"}, "nonSlpUtxos": [{"address": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "blockHeight": 815549, "isCoinbase": false, "network": "XEC", "outpoint": {"outIdx": 2, "txid": "218a1e058ed0fda76573eabf43ad3ded7e7192e42621893a60aaa152ba7f66fe"}, "value": "951312"}], "parsedTxHistory": [{"inputs": [[Object], [Object], [Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "etokenAmount": "1", "genesisInfo": [Object], "incoming": true, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": true, "isTokenBurn": false, "opReturnMessage": "", "replyAddress": "ecash:qp89xgjhcqdnzzemts0aj378nfe2mhu9yvxj9nhgg6", "slpMeta": [Object], "xecAmount": "5.46"}, "size": 627, "slpTxData": {"slpMeta": [Object]}, "timeFirstSeen": "1705488591", "txid": "3b0760858b0b20ff50d0db67793892d29d2466b86a0116f7e232792da0c22330", "version": 2}, {"block": {"hash": "00000000000000000ea3601057ba423805f91d9d813a41a91ae908b68ff6cbce", "height": 815549, "timestamp": "1698187386"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "newton", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.53"}, "size": 268, "timeFirstSeen": "1698185917", "txid": "218a1e058ed0fda76573eabf43ad3ded7e7192e42621893a60aaa152ba7f66fe", "version": 2}, {"block": {"hash": "000000000000000009004fa50065ef6deb091f0d075cf1ef01811d0706c9a8c2", "height": 814357, "timestamp": "1697463218"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "doesthisclear", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.51"}, "size": 275, "timeFirstSeen": "1697462397", "txid": "9f25f4e161472920f624ed6579ccdaf8d096263ab31e157deaa9c987269ead8a", "version": 2}, {"block": {"hash": "00000000000000001533643253107df49b2291beb9d5cd5c7f4f51bf26572e53", "height": 813934, "timestamp": "1697216026"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "worksnow", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.51"}, "size": 270, "timeFirstSeen": "1697215818", "txid": "42c39baded510db31aebaf9172d307afa199dd734a6189ea4bc3530438d715ca", "version": 2}, {"block": {"hash": "0000000000000000166ee88a29775a1098813f4316a5afbe835d21e0d74fda24", "height": 813923, "timestamp": "1697211295"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test4", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 267, "timeFirstSeen": "1697211232", "txid": "5aa64624e493502d083089f5a58069887bc99a6d5569b27df7c7570e024bbf20", "version": 2}, {"block": {"hash": "00000000000000000a1807a17ebcda93947db968e9a112b54ec70237d1a76288", "height": 813922, "timestamp": "1697211196"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.55"}, "size": 267, "timeFirstSeen": "1697211182", "txid": "b26c42ba0cc48f0d3af442b445f19c267189f84dbeb7e366ec7c921f5195aca7", "version": 2}, {"block": {"hash": "00000000000000000a1807a17ebcda93947db968e9a112b54ec70237d1a76288", "height": 813922, "timestamp": "1697211196"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.55"}, "size": 266, "timeFirstSeen": "1697211167", "txid": "f86f20336955bca4e15588d81d029ad2c0dfa498b8be6aced2b63ba3bea1be0a", "version": 2}, {"block": {"hash": "000000000000000006b8990c77dd7a0d3a850a052b6f0bd60b82d44d1ffa7a55", "height": 813615, "timestamp": "1697025138"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "alias", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 268, "timeFirstSeen": "1697024688", "txid": "f17814a75dad000557f19a3a3f6fcc124ab7880292c9fad4c64dc034d5e46551", "version": 2}, {"block": {"hash": "000000000000000006b8990c77dd7a0d3a850a052b6f0bd60b82d44d1ffa7a55", "height": 813615, "timestamp": "1697025138"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "alias", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 267, "timeFirstSeen": "1697024682", "txid": "7eacd3b752003fe761e359cac3d98b1faf4f1dd411150eabc89da8208a312b0e", "version": 2}, {"block": {"hash": "00000000000000000b2dfec91630d335b0233fb323a7acbb297b586d1d0d0678", "height": 812408, "timestamp": "1696282475"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": false, "incoming": false, "isCashtabMessage": true, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "still works", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "22"}, "size": 252, "timeFirstSeen": "1696281429", "txid": "8b3cb0e6c38ee01f9e1e98d611895ff2cd09ad9b4fea73f76f951be815278c26", "version": 2}], "slpUtxos": [{"address": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "blockHeight": -1, "decimals": 0, "isCoinbase": false, "network": "XEC", "outpoint": {"outIdx": 1, "txid": "3b0760858b0b20ff50d0db67793892d29d2466b86a0116f7e232792da0c22330"}, "slpMeta": {"tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109", "tokenType": "FUNGIBLE", "txType": "SEND"}, "slpToken": {"amount": "1", "isMintBaton": false}, "tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109", "tokenQty": "1", "value": "546"}], "tokens": [{"balance": "1", "info": {"decimals": 0, "success": true, "tokenDocumentHash": "", "tokenDocumentUrl": "https://cashtab.com/", "tokenName": "BearNip", "tokenTicker": "BEAR"}, "tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109"}]}}
Received: undefined

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div />
  </body>
</html>
    at toStrictEqual (/work/cashtab/src/hooks/__tests__/useWallet.test.js:389:60)
    at runWithExpensiveErrorDiagnosticsDisabled (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:47:12)
    at checkCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:124:77)
    at checkRealTimersCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:118:16)
    at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)
====== CashTab Unit Tests: useWallet hook rendering in different localforage states processChronikWsMsg() does not refresh alias prices when aliasPrices exists, server and cashtab array length do match ======
Error: expect(received).toStrictEqual(expected) // deep equality

Expected: {"Path145": {"cashAddress": "ecash:qz3glzzjlp503rn3a3nxccedd7rwj78sgczljhvzv3", "fundingWif": "L2HnC8ZT5JuwVFjrAjJUBs2tmmBoxdVa1MVCJccqV8S9YPoR1NuZ", "hash160": "a28f8852f868f88e71ec666c632d6f86e978f046", "publicKey": "03939a29fd67fa602926637a82f53e1826696353613cac03e34160f040ae2dfcb5"}, "Path1899": {"cashAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "fundingWif": "KywWPgaLDwvW1tWUtUvs13jgqaaWMoNANLVYoKcK9Ddbpnch7Cmw", "hash160": "3a5fb236934ec078b4507c303d3afd82067f8fc1", "publicKey": "031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02d"}, "Path245": {"cashAddress": "ecash:qpsqa7cj5mup8mx0zvt34z7xyp2jztvdds67wajntk", "fundingWif": "L3ndnMkn4574McqhPujguusu48NrmeLUgWYMkRpYQGLXDGAwGmPq", "hash160": "600efb12a6f813eccf13171a8bc62055212d8d6c", "publicKey": "03f73fe2631da9732f2480debbc7ff8d99c5c06764e0f5095b789ff190788bee72"}, "mnemonic": "beauty shoe decline spend still weird slot snack coach flee between paper", "name": "Transaction Fixtures", "state": {"balances": {"totalBalance": "9513.12", "totalBalanceInSatoshis": "951312"}, "nonSlpUtxos": [{"address": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "blockHeight": 815549, "isCoinbase": false, "network": "XEC", "outpoint": {"outIdx": 2, "txid": "218a1e058ed0fda76573eabf43ad3ded7e7192e42621893a60aaa152ba7f66fe"}, "value": "951312"}], "parsedTxHistory": [{"inputs": [[Object], [Object], [Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "etokenAmount": "1", "genesisInfo": [Object], "incoming": true, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": true, "isTokenBurn": false, "opReturnMessage": "", "replyAddress": "ecash:qp89xgjhcqdnzzemts0aj378nfe2mhu9yvxj9nhgg6", "slpMeta": [Object], "xecAmount": "5.46"}, "size": 627, "slpTxData": {"slpMeta": [Object]}, "timeFirstSeen": "1705488591", "txid": "3b0760858b0b20ff50d0db67793892d29d2466b86a0116f7e232792da0c22330", "version": 2}, {"block": {"hash": "00000000000000000ea3601057ba423805f91d9d813a41a91ae908b68ff6cbce", "height": 815549, "timestamp": "1698187386"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "newton", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.53"}, "size": 268, "timeFirstSeen": "1698185917", "txid": "218a1e058ed0fda76573eabf43ad3ded7e7192e42621893a60aaa152ba7f66fe", "version": 2}, {"block": {"hash": "000000000000000009004fa50065ef6deb091f0d075cf1ef01811d0706c9a8c2", "height": 814357, "timestamp": "1697463218"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "doesthisclear", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.51"}, "size": 275, "timeFirstSeen": "1697462397", "txid": "9f25f4e161472920f624ed6579ccdaf8d096263ab31e157deaa9c987269ead8a", "version": 2}, {"block": {"hash": "00000000000000001533643253107df49b2291beb9d5cd5c7f4f51bf26572e53", "height": 813934, "timestamp": "1697216026"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "worksnow", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.51"}, "size": 270, "timeFirstSeen": "1697215818", "txid": "42c39baded510db31aebaf9172d307afa199dd734a6189ea4bc3530438d715ca", "version": 2}, {"block": {"hash": "0000000000000000166ee88a29775a1098813f4316a5afbe835d21e0d74fda24", "height": 813923, "timestamp": "1697211295"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test4", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 267, "timeFirstSeen": "1697211232", "txid": "5aa64624e493502d083089f5a58069887bc99a6d5569b27df7c7570e024bbf20", "version": 2}, {"block": {"hash": "00000000000000000a1807a17ebcda93947db968e9a112b54ec70237d1a76288", "height": 813922, "timestamp": "1697211196"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.55"}, "size": 267, "timeFirstSeen": "1697211182", "txid": "b26c42ba0cc48f0d3af442b445f19c267189f84dbeb7e366ec7c921f5195aca7", "version": 2}, {"block": {"hash": "00000000000000000a1807a17ebcda93947db968e9a112b54ec70237d1a76288", "height": 813922, "timestamp": "1697211196"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.55"}, "size": 266, "timeFirstSeen": "1697211167", "txid": "f86f20336955bca4e15588d81d029ad2c0dfa498b8be6aced2b63ba3bea1be0a", "version": 2}, {"block": {"hash": "000000000000000006b8990c77dd7a0d3a850a052b6f0bd60b82d44d1ffa7a55", "height": 813615, "timestamp": "1697025138"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "alias", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 268, "timeFirstSeen": "1697024688", "txid": "f17814a75dad000557f19a3a3f6fcc124ab7880292c9fad4c64dc034d5e46551", "version": 2}, {"block": {"hash": "000000000000000006b8990c77dd7a0d3a850a052b6f0bd60b82d44d1ffa7a55", "height": 813615, "timestamp": "1697025138"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "alias", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 267, "timeFirstSeen": "1697024682", "txid": "7eacd3b752003fe761e359cac3d98b1faf4f1dd411150eabc89da8208a312b0e", "version": 2}, {"block": {"hash": "00000000000000000b2dfec91630d335b0233fb323a7acbb297b586d1d0d0678", "height": 812408, "timestamp": "1696282475"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": false, "incoming": false, "isCashtabMessage": true, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "still works", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "22"}, "size": 252, "timeFirstSeen": "1696281429", "txid": "8b3cb0e6c38ee01f9e1e98d611895ff2cd09ad9b4fea73f76f951be815278c26", "version": 2}], "slpUtxos": [{"address": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "blockHeight": -1, "decimals": 0, "isCoinbase": false, "network": "XEC", "outpoint": {"outIdx": 1, "txid": "3b0760858b0b20ff50d0db67793892d29d2466b86a0116f7e232792da0c22330"}, "slpMeta": {"tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109", "tokenType": "FUNGIBLE", "txType": "SEND"}, "slpToken": {"amount": "1", "isMintBaton": false}, "tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109", "tokenQty": "1", "value": "546"}], "tokens": [{"balance": "1", "info": {"decimals": 0, "success": true, "tokenDocumentHash": "", "tokenDocumentUrl": "https://cashtab.com/", "tokenName": "BearNip", "tokenTicker": "BEAR"}, "tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109"}]}}
Received: undefined

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div />
  </body>
</html>
    at toStrictEqual (/work/cashtab/src/hooks/__tests__/useWallet.test.js:530:60)
    at runWithExpensiveErrorDiagnosticsDisabled (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:47:12)
    at checkCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:124:77)
    at checkRealTimersCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:118:16)
    at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)
====== CashTab Unit Tests: useWallet hook rendering in different localforage states Verify a processChronikWsMsg() new block event updates the `aliasServerError` state var upon a /prices/ endpoint error ======
Error: expect(received).toStrictEqual(expected) // deep equality

Expected: {"Path145": {"cashAddress": "ecash:qz3glzzjlp503rn3a3nxccedd7rwj78sgczljhvzv3", "fundingWif": "L2HnC8ZT5JuwVFjrAjJUBs2tmmBoxdVa1MVCJccqV8S9YPoR1NuZ", "hash160": "a28f8852f868f88e71ec666c632d6f86e978f046", "publicKey": "03939a29fd67fa602926637a82f53e1826696353613cac03e34160f040ae2dfcb5"}, "Path1899": {"cashAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "fundingWif": "KywWPgaLDwvW1tWUtUvs13jgqaaWMoNANLVYoKcK9Ddbpnch7Cmw", "hash160": "3a5fb236934ec078b4507c303d3afd82067f8fc1", "publicKey": "031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02d"}, "Path245": {"cashAddress": "ecash:qpsqa7cj5mup8mx0zvt34z7xyp2jztvdds67wajntk", "fundingWif": "L3ndnMkn4574McqhPujguusu48NrmeLUgWYMkRpYQGLXDGAwGmPq", "hash160": "600efb12a6f813eccf13171a8bc62055212d8d6c", "publicKey": "03f73fe2631da9732f2480debbc7ff8d99c5c06764e0f5095b789ff190788bee72"}, "mnemonic": "beauty shoe decline spend still weird slot snack coach flee between paper", "name": "Transaction Fixtures", "state": {"balances": {"totalBalance": "9513.12", "totalBalanceInSatoshis": "951312"}, "nonSlpUtxos": [{"address": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "blockHeight": 815549, "isCoinbase": false, "network": "XEC", "outpoint": {"outIdx": 2, "txid": "218a1e058ed0fda76573eabf43ad3ded7e7192e42621893a60aaa152ba7f66fe"}, "value": "951312"}], "parsedTxHistory": [{"inputs": [[Object], [Object], [Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "etokenAmount": "1", "genesisInfo": [Object], "incoming": true, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": true, "isTokenBurn": false, "opReturnMessage": "", "replyAddress": "ecash:qp89xgjhcqdnzzemts0aj378nfe2mhu9yvxj9nhgg6", "slpMeta": [Object], "xecAmount": "5.46"}, "size": 627, "slpTxData": {"slpMeta": [Object]}, "timeFirstSeen": "1705488591", "txid": "3b0760858b0b20ff50d0db67793892d29d2466b86a0116f7e232792da0c22330", "version": 2}, {"block": {"hash": "00000000000000000ea3601057ba423805f91d9d813a41a91ae908b68ff6cbce", "height": 815549, "timestamp": "1698187386"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "newton", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.53"}, "size": 268, "timeFirstSeen": "1698185917", "txid": "218a1e058ed0fda76573eabf43ad3ded7e7192e42621893a60aaa152ba7f66fe", "version": 2}, {"block": {"hash": "000000000000000009004fa50065ef6deb091f0d075cf1ef01811d0706c9a8c2", "height": 814357, "timestamp": "1697463218"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "doesthisclear", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.51"}, "size": 275, "timeFirstSeen": "1697462397", "txid": "9f25f4e161472920f624ed6579ccdaf8d096263ab31e157deaa9c987269ead8a", "version": 2}, {"block": {"hash": "00000000000000001533643253107df49b2291beb9d5cd5c7f4f51bf26572e53", "height": 813934, "timestamp": "1697216026"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "worksnow", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.51"}, "size": 270, "timeFirstSeen": "1697215818", "txid": "42c39baded510db31aebaf9172d307afa199dd734a6189ea4bc3530438d715ca", "version": 2}, {"block": {"hash": "0000000000000000166ee88a29775a1098813f4316a5afbe835d21e0d74fda24", "height": 813923, "timestamp": "1697211295"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test4", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 267, "timeFirstSeen": "1697211232", "txid": "5aa64624e493502d083089f5a58069887bc99a6d5569b27df7c7570e024bbf20", "version": 2}, {"block": {"hash": "00000000000000000a1807a17ebcda93947db968e9a112b54ec70237d1a76288", "height": 813922, "timestamp": "1697211196"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.55"}, "size": 267, "timeFirstSeen": "1697211182", "txid": "b26c42ba0cc48f0d3af442b445f19c267189f84dbeb7e366ec7c921f5195aca7", "version": 2}, {"block": {"hash": "00000000000000000a1807a17ebcda93947db968e9a112b54ec70237d1a76288", "height": 813922, "timestamp": "1697211196"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.55"}, "size": 266, "timeFirstSeen": "1697211167", "txid": "f86f20336955bca4e15588d81d029ad2c0dfa498b8be6aced2b63ba3bea1be0a", "version": 2}, {"block": {"hash": "000000000000000006b8990c77dd7a0d3a850a052b6f0bd60b82d44d1ffa7a55", "height": 813615, "timestamp": "1697025138"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "alias", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 268, "timeFirstSeen": "1697024688", "txid": "f17814a75dad000557f19a3a3f6fcc124ab7880292c9fad4c64dc034d5e46551", "version": 2}, {"block": {"hash": "000000000000000006b8990c77dd7a0d3a850a052b6f0bd60b82d44d1ffa7a55", "height": 813615, "timestamp": "1697025138"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "alias", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 267, "timeFirstSeen": "1697024682", "txid": "7eacd3b752003fe761e359cac3d98b1faf4f1dd411150eabc89da8208a312b0e", "version": 2}, {"block": {"hash": "00000000000000000b2dfec91630d335b0233fb323a7acbb297b586d1d0d0678", "height": 812408, "timestamp": "1696282475"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": false, "incoming": false, "isCashtabMessage": true, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "still works", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "22"}, "size": 252, "timeFirstSeen": "1696281429", "txid": "8b3cb0e6c38ee01f9e1e98d611895ff2cd09ad9b4fea73f76f951be815278c26", "version": 2}], "slpUtxos": [{"address": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "blockHeight": -1, "decimals": 0, "isCoinbase": false, "network": "XEC", "outpoint": {"outIdx": 1, "txid": "3b0760858b0b20ff50d0db67793892d29d2466b86a0116f7e232792da0c22330"}, "slpMeta": {"tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109", "tokenType": "FUNGIBLE", "txType": "SEND"}, "slpToken": {"amount": "1", "isMintBaton": false}, "tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109", "tokenQty": "1", "value": "546"}], "tokens": [{"balance": "1", "info": {"decimals": 0, "success": true, "tokenDocumentHash": "", "tokenDocumentUrl": "https://cashtab.com/", "tokenName": "BearNip", "tokenTicker": "BEAR"}, "tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109"}]}}
Received: undefined

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div />
  </body>
</html>
    at toStrictEqual (/work/cashtab/src/hooks/__tests__/useWallet.test.js:578:60)
    at runWithExpensiveErrorDiagnosticsDisabled (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:47:12)
    at checkCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:124:77)
    at checkRealTimersCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:118:16)
    at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)
====== CashTab Unit Tests: useWallet hook rendering in different localforage states Verify refreshAliases() updates the `aliases` state variable on a successful /address/ endpoint response ======
Error: expect(received).toStrictEqual(expected) // deep equality

Expected: {"Path145": {"cashAddress": "ecash:qz3glzzjlp503rn3a3nxccedd7rwj78sgczljhvzv3", "fundingWif": "L2HnC8ZT5JuwVFjrAjJUBs2tmmBoxdVa1MVCJccqV8S9YPoR1NuZ", "hash160": "a28f8852f868f88e71ec666c632d6f86e978f046", "publicKey": "03939a29fd67fa602926637a82f53e1826696353613cac03e34160f040ae2dfcb5"}, "Path1899": {"cashAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "fundingWif": "KywWPgaLDwvW1tWUtUvs13jgqaaWMoNANLVYoKcK9Ddbpnch7Cmw", "hash160": "3a5fb236934ec078b4507c303d3afd82067f8fc1", "publicKey": "031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02d"}, "Path245": {"cashAddress": "ecash:qpsqa7cj5mup8mx0zvt34z7xyp2jztvdds67wajntk", "fundingWif": "L3ndnMkn4574McqhPujguusu48NrmeLUgWYMkRpYQGLXDGAwGmPq", "hash160": "600efb12a6f813eccf13171a8bc62055212d8d6c", "publicKey": "03f73fe2631da9732f2480debbc7ff8d99c5c06764e0f5095b789ff190788bee72"}, "mnemonic": "beauty shoe decline spend still weird slot snack coach flee between paper", "name": "Transaction Fixtures", "state": {"balances": {"totalBalance": "9513.12", "totalBalanceInSatoshis": "951312"}, "nonSlpUtxos": [{"address": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "blockHeight": 815549, "isCoinbase": false, "network": "XEC", "outpoint": {"outIdx": 2, "txid": "218a1e058ed0fda76573eabf43ad3ded7e7192e42621893a60aaa152ba7f66fe"}, "value": "951312"}], "parsedTxHistory": [{"inputs": [[Object], [Object], [Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "etokenAmount": "1", "genesisInfo": [Object], "incoming": true, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": true, "isTokenBurn": false, "opReturnMessage": "", "replyAddress": "ecash:qp89xgjhcqdnzzemts0aj378nfe2mhu9yvxj9nhgg6", "slpMeta": [Object], "xecAmount": "5.46"}, "size": 627, "slpTxData": {"slpMeta": [Object]}, "timeFirstSeen": "1705488591", "txid": "3b0760858b0b20ff50d0db67793892d29d2466b86a0116f7e232792da0c22330", "version": 2}, {"block": {"hash": "00000000000000000ea3601057ba423805f91d9d813a41a91ae908b68ff6cbce", "height": 815549, "timestamp": "1698187386"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "newton", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.53"}, "size": 268, "timeFirstSeen": "1698185917", "txid": "218a1e058ed0fda76573eabf43ad3ded7e7192e42621893a60aaa152ba7f66fe", "version": 2}, {"block": {"hash": "000000000000000009004fa50065ef6deb091f0d075cf1ef01811d0706c9a8c2", "height": 814357, "timestamp": "1697463218"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "doesthisclear", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.51"}, "size": 275, "timeFirstSeen": "1697462397", "txid": "9f25f4e161472920f624ed6579ccdaf8d096263ab31e157deaa9c987269ead8a", "version": 2}, {"block": {"hash": "00000000000000001533643253107df49b2291beb9d5cd5c7f4f51bf26572e53", "height": 813934, "timestamp": "1697216026"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "worksnow", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.51"}, "size": 270, "timeFirstSeen": "1697215818", "txid": "42c39baded510db31aebaf9172d307afa199dd734a6189ea4bc3530438d715ca", "version": 2}, {"block": {"hash": "0000000000000000166ee88a29775a1098813f4316a5afbe835d21e0d74fda24", "height": 813923, "timestamp": "1697211295"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test4", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 267, "timeFirstSeen": "1697211232", "txid": "5aa64624e493502d083089f5a58069887bc99a6d5569b27df7c7570e024bbf20", "version": 2}, {"block": {"hash": "00000000000000000a1807a17ebcda93947db968e9a112b54ec70237d1a76288", "height": 813922, "timestamp": "1697211196"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.55"}, "size": 267, "timeFirstSeen": "1697211182", "txid": "b26c42ba0cc48f0d3af442b445f19c267189f84dbeb7e366ec7c921f5195aca7", "version": 2}, {"block": {"hash": "00000000000000000a1807a17ebcda93947db968e9a112b54ec70237d1a76288", "height": 813922, "timestamp": "1697211196"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.55"}, "size": 266, "timeFirstSeen": "1697211167", "txid": "f86f20336955bca4e15588d81d029ad2c0dfa498b8be6aced2b63ba3bea1be0a", "version": 2}, {"block": {"hash": "000000000000000006b8990c77dd7a0d3a850a052b6f0bd60b82d44d1ffa7a55", "height": 813615, "timestamp": "1697025138"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "alias", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 268, "timeFirstSeen": "1697024688", "txid": "f17814a75dad000557f19a3a3f6fcc124ab7880292c9fad4c64dc034d5e46551", "version": 2}, {"block": {"hash": "000000000000000006b8990c77dd7a0d3a850a052b6f0bd60b82d44d1ffa7a55", "height": 813615, "timestamp": "1697025138"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "alias", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 267, "timeFirstSeen": "1697024682", "txid": "7eacd3b752003fe761e359cac3d98b1faf4f1dd411150eabc89da8208a312b0e", "version": 2}, {"block": {"hash": "00000000000000000b2dfec91630d335b0233fb323a7acbb297b586d1d0d0678", "height": 812408, "timestamp": "1696282475"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": false, "incoming": false, "isCashtabMessage": true, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "still works", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "22"}, "size": 252, "timeFirstSeen": "1696281429", "txid": "8b3cb0e6c38ee01f9e1e98d611895ff2cd09ad9b4fea73f76f951be815278c26", "version": 2}], "slpUtxos": [{"address": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "blockHeight": -1, "decimals": 0, "isCoinbase": false, "network": "XEC", "outpoint": {"outIdx": 1, "txid": "3b0760858b0b20ff50d0db67793892d29d2466b86a0116f7e232792da0c22330"}, "slpMeta": {"tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109", "tokenType": "FUNGIBLE", "txType": "SEND"}, "slpToken": {"amount": "1", "isMintBaton": false}, "tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109", "tokenQty": "1", "value": "546"}], "tokens": [{"balance": "1", "info": {"decimals": 0, "success": true, "tokenDocumentHash": "", "tokenDocumentUrl": "https://cashtab.com/", "tokenName": "BearNip", "tokenTicker": "BEAR"}, "tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109"}]}}
Received: undefined

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div />
  </body>
</html>
    at toStrictEqual (/work/cashtab/src/hooks/__tests__/useWallet.test.js:630:60)
    at runWithExpensiveErrorDiagnosticsDisabled (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:47:12)
    at checkCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:124:77)
    at checkRealTimersCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:118:16)
    at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)
====== CashTab Unit Tests: useWallet hook rendering in different localforage states Verify refreshAliases() updates the `aliasServerError` state variable upon an /address/ endpoint error ======
Error: expect(received).toStrictEqual(expected) // deep equality

Expected: {"Path145": {"cashAddress": "ecash:qz3glzzjlp503rn3a3nxccedd7rwj78sgczljhvzv3", "fundingWif": "L2HnC8ZT5JuwVFjrAjJUBs2tmmBoxdVa1MVCJccqV8S9YPoR1NuZ", "hash160": "a28f8852f868f88e71ec666c632d6f86e978f046", "publicKey": "03939a29fd67fa602926637a82f53e1826696353613cac03e34160f040ae2dfcb5"}, "Path1899": {"cashAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "fundingWif": "KywWPgaLDwvW1tWUtUvs13jgqaaWMoNANLVYoKcK9Ddbpnch7Cmw", "hash160": "3a5fb236934ec078b4507c303d3afd82067f8fc1", "publicKey": "031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02d"}, "Path245": {"cashAddress": "ecash:qpsqa7cj5mup8mx0zvt34z7xyp2jztvdds67wajntk", "fundingWif": "L3ndnMkn4574McqhPujguusu48NrmeLUgWYMkRpYQGLXDGAwGmPq", "hash160": "600efb12a6f813eccf13171a8bc62055212d8d6c", "publicKey": "03f73fe2631da9732f2480debbc7ff8d99c5c06764e0f5095b789ff190788bee72"}, "mnemonic": "beauty shoe decline spend still weird slot snack coach flee between paper", "name": "Transaction Fixtures", "state": {"balances": {"totalBalance": "9513.12", "totalBalanceInSatoshis": "951312"}, "nonSlpUtxos": [{"address": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "blockHeight": 815549, "isCoinbase": false, "network": "XEC", "outpoint": {"outIdx": 2, "txid": "218a1e058ed0fda76573eabf43ad3ded7e7192e42621893a60aaa152ba7f66fe"}, "value": "951312"}], "parsedTxHistory": [{"inputs": [[Object], [Object], [Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "etokenAmount": "1", "genesisInfo": [Object], "incoming": true, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": true, "isTokenBurn": false, "opReturnMessage": "", "replyAddress": "ecash:qp89xgjhcqdnzzemts0aj378nfe2mhu9yvxj9nhgg6", "slpMeta": [Object], "xecAmount": "5.46"}, "size": 627, "slpTxData": {"slpMeta": [Object]}, "timeFirstSeen": "1705488591", "txid": "3b0760858b0b20ff50d0db67793892d29d2466b86a0116f7e232792da0c22330", "version": 2}, {"block": {"hash": "00000000000000000ea3601057ba423805f91d9d813a41a91ae908b68ff6cbce", "height": 815549, "timestamp": "1698187386"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "newton", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.53"}, "size": 268, "timeFirstSeen": "1698185917", "txid": "218a1e058ed0fda76573eabf43ad3ded7e7192e42621893a60aaa152ba7f66fe", "version": 2}, {"block": {"hash": "000000000000000009004fa50065ef6deb091f0d075cf1ef01811d0706c9a8c2", "height": 814357, "timestamp": "1697463218"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "doesthisclear", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.51"}, "size": 275, "timeFirstSeen": "1697462397", "txid": "9f25f4e161472920f624ed6579ccdaf8d096263ab31e157deaa9c987269ead8a", "version": 2}, {"block": {"hash": "00000000000000001533643253107df49b2291beb9d5cd5c7f4f51bf26572e53", "height": 813934, "timestamp": "1697216026"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "worksnow", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.51"}, "size": 270, "timeFirstSeen": "1697215818", "txid": "42c39baded510db31aebaf9172d307afa199dd734a6189ea4bc3530438d715ca", "version": 2}, {"block": {"hash": "0000000000000000166ee88a29775a1098813f4316a5afbe835d21e0d74fda24", "height": 813923, "timestamp": "1697211295"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test4", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 267, "timeFirstSeen": "1697211232", "txid": "5aa64624e493502d083089f5a58069887bc99a6d5569b27df7c7570e024bbf20", "version": 2}, {"block": {"hash": "00000000000000000a1807a17ebcda93947db968e9a112b54ec70237d1a76288", "height": 813922, "timestamp": "1697211196"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.55"}, "size": 267, "timeFirstSeen": "1697211182", "txid": "b26c42ba0cc48f0d3af442b445f19c267189f84dbeb7e366ec7c921f5195aca7", "version": 2}, {"block": {"hash": "00000000000000000a1807a17ebcda93947db968e9a112b54ec70237d1a76288", "height": 813922, "timestamp": "1697211196"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.55"}, "size": 266, "timeFirstSeen": "1697211167", "txid": "f86f20336955bca4e15588d81d029ad2c0dfa498b8be6aced2b63ba3bea1be0a", "version": 2}, {"block": {"hash": "000000000000000006b8990c77dd7a0d3a850a052b6f0bd60b82d44d1ffa7a55", "height": 813615, "timestamp": "1697025138"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "alias", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 268, "timeFirstSeen": "1697024688", "txid": "f17814a75dad000557f19a3a3f6fcc124ab7880292c9fad4c64dc034d5e46551", "version": 2}, {"block": {"hash": "000000000000000006b8990c77dd7a0d3a850a052b6f0bd60b82d44d1ffa7a55", "height": 813615, "timestamp": "1697025138"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "alias", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 267, "timeFirstSeen": "1697024682", "txid": "7eacd3b752003fe761e359cac3d98b1faf4f1dd411150eabc89da8208a312b0e", "version": 2}, {"block": {"hash": "00000000000000000b2dfec91630d335b0233fb323a7acbb297b586d1d0d0678", "height": 812408, "timestamp": "1696282475"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": false, "incoming": false, "isCashtabMessage": true, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "still works", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "22"}, "size": 252, "timeFirstSeen": "1696281429", "txid": "8b3cb0e6c38ee01f9e1e98d611895ff2cd09ad9b4fea73f76f951be815278c26", "version": 2}], "slpUtxos": [{"address": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "blockHeight": -1, "decimals": 0, "isCoinbase": false, "network": "XEC", "outpoint": {"outIdx": 1, "txid": "3b0760858b0b20ff50d0db67793892d29d2466b86a0116f7e232792da0c22330"}, "slpMeta": {"tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109", "tokenType": "FUNGIBLE", "txType": "SEND"}, "slpToken": {"amount": "1", "isMintBaton": false}, "tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109", "tokenQty": "1", "value": "546"}], "tokens": [{"balance": "1", "info": {"decimals": 0, "success": true, "tokenDocumentHash": "", "tokenDocumentUrl": "https://cashtab.com/", "tokenName": "BearNip", "tokenTicker": "BEAR"}, "tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109"}]}}
Received: undefined

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div />
  </body>
</html>
    at toStrictEqual (/work/cashtab/src/hooks/__tests__/useWallet.test.js:667:60)
    at runWithExpensiveErrorDiagnosticsDisabled (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:47:12)
    at checkCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:124:77)
    at checkRealTimersCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:118:16)
    at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)
====== CashTab Unit Tests: useWallet hook rendering in different localforage states An incoming tx message from the websocket causes the wallet to update ======
Error: expect(received).toStrictEqual(expected) // deep equality

Expected: {"Path145": {"cashAddress": "ecash:qz3glzzjlp503rn3a3nxccedd7rwj78sgczljhvzv3", "fundingWif": "L2HnC8ZT5JuwVFjrAjJUBs2tmmBoxdVa1MVCJccqV8S9YPoR1NuZ", "hash160": "a28f8852f868f88e71ec666c632d6f86e978f046", "publicKey": "03939a29fd67fa602926637a82f53e1826696353613cac03e34160f040ae2dfcb5"}, "Path1899": {"cashAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "fundingWif": "KywWPgaLDwvW1tWUtUvs13jgqaaWMoNANLVYoKcK9Ddbpnch7Cmw", "hash160": "3a5fb236934ec078b4507c303d3afd82067f8fc1", "publicKey": "031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02d"}, "Path245": {"cashAddress": "ecash:qpsqa7cj5mup8mx0zvt34z7xyp2jztvdds67wajntk", "fundingWif": "L3ndnMkn4574McqhPujguusu48NrmeLUgWYMkRpYQGLXDGAwGmPq", "hash160": "600efb12a6f813eccf13171a8bc62055212d8d6c", "publicKey": "03f73fe2631da9732f2480debbc7ff8d99c5c06764e0f5095b789ff190788bee72"}, "mnemonic": "beauty shoe decline spend still weird slot snack coach flee between paper", "name": "Transaction Fixtures", "state": {"balances": {"totalBalance": "9513.12", "totalBalanceInSatoshis": "951312"}, "nonSlpUtxos": [{"address": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "blockHeight": 815549, "isCoinbase": false, "network": "XEC", "outpoint": {"outIdx": 2, "txid": "218a1e058ed0fda76573eabf43ad3ded7e7192e42621893a60aaa152ba7f66fe"}, "value": "951312"}], "parsedTxHistory": [{"inputs": [[Object], [Object], [Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "etokenAmount": "1", "genesisInfo": [Object], "incoming": true, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": true, "isTokenBurn": false, "opReturnMessage": "", "replyAddress": "ecash:qp89xgjhcqdnzzemts0aj378nfe2mhu9yvxj9nhgg6", "slpMeta": [Object], "xecAmount": "5.46"}, "size": 627, "slpTxData": {"slpMeta": [Object]}, "timeFirstSeen": "1705488591", "txid": "3b0760858b0b20ff50d0db67793892d29d2466b86a0116f7e232792da0c22330", "version": 2}, {"block": {"hash": "00000000000000000ea3601057ba423805f91d9d813a41a91ae908b68ff6cbce", "height": 815549, "timestamp": "1698187386"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "newton", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.53"}, "size": 268, "timeFirstSeen": "1698185917", "txid": "218a1e058ed0fda76573eabf43ad3ded7e7192e42621893a60aaa152ba7f66fe", "version": 2}, {"block": {"hash": "000000000000000009004fa50065ef6deb091f0d075cf1ef01811d0706c9a8c2", "height": 814357, "timestamp": "1697463218"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "doesthisclear", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.51"}, "size": 275, "timeFirstSeen": "1697462397", "txid": "9f25f4e161472920f624ed6579ccdaf8d096263ab31e157deaa9c987269ead8a", "version": 2}, {"block": {"hash": "00000000000000001533643253107df49b2291beb9d5cd5c7f4f51bf26572e53", "height": 813934, "timestamp": "1697216026"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "worksnow", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.51"}, "size": 270, "timeFirstSeen": "1697215818", "txid": "42c39baded510db31aebaf9172d307afa199dd734a6189ea4bc3530438d715ca", "version": 2}, {"block": {"hash": "0000000000000000166ee88a29775a1098813f4316a5afbe835d21e0d74fda24", "height": 813923, "timestamp": "1697211295"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test4", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 267, "timeFirstSeen": "1697211232", "txid": "5aa64624e493502d083089f5a58069887bc99a6d5569b27df7c7570e024bbf20", "version": 2}, {"block": {"hash": "00000000000000000a1807a17ebcda93947db968e9a112b54ec70237d1a76288", "height": 813922, "timestamp": "1697211196"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.55"}, "size": 267, "timeFirstSeen": "1697211182", "txid": "b26c42ba0cc48f0d3af442b445f19c267189f84dbeb7e366ec7c921f5195aca7", "version": 2}, {"block": {"hash": "00000000000000000a1807a17ebcda93947db968e9a112b54ec70237d1a76288", "height": 813922, "timestamp": "1697211196"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.55"}, "size": 266, "timeFirstSeen": "1697211167", "txid": "f86f20336955bca4e15588d81d029ad2c0dfa498b8be6aced2b63ba3bea1be0a", "version": 2}, {"block": {"hash": "000000000000000006b8990c77dd7a0d3a850a052b6f0bd60b82d44d1ffa7a55", "height": 813615, "timestamp": "1697025138"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "alias", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 268, "timeFirstSeen": "1697024688", "txid": "f17814a75dad000557f19a3a3f6fcc124ab7880292c9fad4c64dc034d5e46551", "version": 2}, {"block": {"hash": "000000000000000006b8990c77dd7a0d3a850a052b6f0bd60b82d44d1ffa7a55", "height": 813615, "timestamp": "1697025138"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "alias", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 267, "timeFirstSeen": "1697024682", "txid": "7eacd3b752003fe761e359cac3d98b1faf4f1dd411150eabc89da8208a312b0e", "version": 2}, {"block": {"hash": "00000000000000000b2dfec91630d335b0233fb323a7acbb297b586d1d0d0678", "height": 812408, "timestamp": "1696282475"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": false, "incoming": false, "isCashtabMessage": true, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "still works", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "22"}, "size": 252, "timeFirstSeen": "1696281429", "txid": "8b3cb0e6c38ee01f9e1e98d611895ff2cd09ad9b4fea73f76f951be815278c26", "version": 2}], "slpUtxos": [{"address": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "blockHeight": -1, "decimals": 0, "isCoinbase": false, "network": "XEC", "outpoint": {"outIdx": 1, "txid": "3b0760858b0b20ff50d0db67793892d29d2466b86a0116f7e232792da0c22330"}, "slpMeta": {"tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109", "tokenType": "FUNGIBLE", "txType": "SEND"}, "slpToken": {"amount": "1", "isMintBaton": false}, "tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109", "tokenQty": "1", "value": "546"}], "tokens": [{"balance": "1", "info": {"decimals": 0, "success": true, "tokenDocumentHash": "", "tokenDocumentUrl": "https://cashtab.com/", "tokenName": "BearNip", "tokenTicker": "BEAR"}, "tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109"}]}}
Received: undefined

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div />
  </body>
</html>
    at toStrictEqual (/work/cashtab/src/hooks/__tests__/useWallet.test.js:698:60)
    at runWithExpensiveErrorDiagnosticsDisabled (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:47:12)
    at checkCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:124:77)
    at checkRealTimersCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:118:16)
    at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)

Each failure log is accessible here:
CashTab Unit Tests: Determines if a cashtab wallet is valid or invalid isValidCashtabWallet: Returns true for a valid Cashtab wallet
CashTab Unit Tests: Determines if a cashtab wallet is valid or invalid isValidCashtabWallet: Returns false if not an object
CashTab Unit Tests: Determines if a cashtab wallet is valid or invalid isValidCashtabWallet: Returns false if false (used to indicate no wallet yet set)
CashTab Unit Tests: <CreateTokenForm /> User can input valid token parameters, generate a token, and view a success notification
CashTab Unit Tests: <SignVerifyMsg /> Notification is rendered upon successfully signing a message
CashTab Unit Tests: <SignVerifyMsg /> Notification is rendered upon successfully verifying a message
CashTab Unit Tests: <SignVerifyMsg /> Notification is rendered upon signature verification error
CashTab Unit Tests: <Receive /> Renders as expected on desktop, including copy paste functionality of clicking on the QR code
CashTab Unit Tests: <Receive /> Renders the Receive screen with QR code of expected width for smallest supported mobile view
CashTab Unit Tests: <Receive /> Renders the Receive screen with QR code of size that is fully viewable in extension dimensions
CashTab Unit Tests: <Receive /> Renders the Onboarding screen if user navigates to this route without a wallet
CashTab Unit Tests: <Alias /> Registered and Pending Aliases are correctly rendered
CashTab Unit Tests: <Alias /> Registered and Pending Aliases are correctly rendered when pending list is empty
CashTab Unit Tests: <Alias /> Registered and Pending Aliases are correctly rendered when registered list is empty
CashTab Unit Tests: <Alias /> Registered and Pending lists still renders when aliasValidationError is populated and aliasServerError is false
CashTab Unit Tests: <Alias /> Registered and Pending lists do not render when aliasValidationError is false and aliasServerError is populated
CashTab Unit Tests: <Home /> Renders the loading component while loading, then the Home screen
CashTab Unit Tests: <Home /> Renders the Home screen with API error
CashTab Unit Tests: <Home /> Renders Sideshift button if user loads with a new wallet
CashTab Unit Tests: <Home /> Renders the onboarding screen for a new wallet
CashTab Unit Tests: <Configure /> We can add, delete, rename, contacts from the Configure screen, and add a savedWallet as a contact
CashTab Unit Tests: <Configure /> We can rename the active wallet or a saved wallet, we can add a wallet, we can import a wallet, we can delete a wallet
CashTab Unit Tests: <SendXec /> rendered with params in URL Legacy params. Address and value keys are set and valid.
CashTab Unit Tests: <SendXec /> rendered with params in URL Legacy params. Address and value keys are set and valid. Invalid bip21 string is ignored.
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
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
CashTab Unit Tests: <SendXec /> rendered with params in URL Legacy params. Params are ignored if only value param is present
CashTab Unit Tests: <SendXec /> rendered with params in URL Legacy params. Params are ignored if param is duplicated
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
CashTab Unit Tests: <SendXec /> rendered with params in URL bip21 param - valid bip21 param with amount and op_return_raw is parsed as expected
CashTab Unit Tests: <SendXec /> rendered with params in URL bip21 param - an invalid bip21 param shows validation errors but cannot be changed
CashTab Unit Tests: <SendXec /> rendered with params in URL No params. Send screen loads normally with no rendered input.
CashTab Unit Tests: <SendXec /> Renders the SendXec screen with send address input
CashTab Unit Tests: <SendXec /> Pass valid address to Send To field
CashTab Unit Tests: <SendXec /> Pass valid alias to Send To field
CashTab Unit Tests: <SendXec /> Pass an invalid address to Send To field and get a validation error
CashTab Unit Tests: <SendXec /> Pass a possibly valid alias without .xec suffix to Send To field and get expected error
CashTab Unit Tests: <SendXec /> Pass a valid alias to Send To field that has not yet been registered and get expected error
CashTab Unit Tests: <SendXec /> Get expected error msg and send disabled if bad response from alias server
CashTab Unit Tests: <SendXec /> Pass a valid address and bip21 query string with valid amount param to Send To field
CashTab Unit Tests: <SendXec /> Pass a valid alias and bip21 query string with valid amount param to Send To field
CashTab Unit Tests: <SendXec /> Pass a valid address and bip21 query string with invalid amount param (dust) to Send To field
CashTab Unit Tests: <SendXec /> Valid address with valid bip21 query string with valid amount param rejected if amount exceeds wallet balance
CashTab Unit Tests: <SendXec /> Pass a valid alias and bip21 query string with invalid amount param (too many decimals) to Send To field
CashTab Unit Tests: <SendXec /> Pass a valid address and an invalid bip21 query string
CashTab Unit Tests: <SendXec /> Pass a valid address and bip21 query string with op_return_raw param to Send To field
CashTab Unit Tests: <SendXec /> Pass a valid address and bip21 query string with valid amount and op_return_raw params to Send To field
CashTab Unit Tests: <SendXec /> Pass a valid address and bip21 query string with valid amount and invalid op_return_raw params to Send To field
CashTab Unit Tests: <SendXec /> Clicking "Send" will send a valid tx with op_return_raw after entry of a valid address and bip21 query string with valid amount and op_return_raw params to Send To field
CashTab Unit Tests: <SendXec /> We can calculate max send amount with and without a cashtab msg, and send a max sat tx with a cashtab msg
CashTab Unit Tests: <SendXec /> If the user has minFeeSends set to true but no longer has the right token amount, the feature is disabled
CashTab Unit Tests: <SendToken /> Renders the SendToken screen with send address input
CashTab Unit Tests: <SendToken /> Accepts a valid ecash: prefixed address
CashTab Unit Tests: <SendToken /> Accepts a valid etoken: prefixed address
CashTab Unit Tests: <SendToken /> Accepts a valid alias
CashTab Unit Tests: <SendToken /> Displays a validation error for an invalid address
CashTab Unit Tests: <SendToken /> Displays a validation error for an alias without .xec suffix
CashTab Unit Tests: <SendToken /> Displays a validation error for valid alias that has not yet been registered
CashTab Unit Tests: <SendToken /> Displays expected error if alias server gives a bad response
CashTab Unit Tests: <SendToken /> Displays a validation error if the user includes any query string
CashTab Unit Tests: <SendToken /> Renders the send token notification upon successful broadcast
CashTab Unit Tests: <SendToken /> Renders the burn token success notification upon successful burn tx broadcast
CashTab Unit Tests: Cashtab wallet methods Creates a wallet from valid bip39 mnemonic createCashtabWallet: Creates a Cashtab wallet from a valid bip39 mnemonic
CashTab Unit Tests: <App /> Renders 404 on a bad route
CashTab Unit Tests: <App /> Navigation menu routes to expected components
CashTab Unit Tests: <App /> Adding a contact to to a new contactList by clicking on tx history adds it to localforage and wallet context
CashTab Unit Tests: <App /> Adding a contact to an existing contactList by clicking on tx history adds it to localforage and wallet context
CashTab Unit Tests: <App /> A user with legacy blank contactList in localstorage is migrated on startup
CashTab Unit Tests: <App /> Clicking "reply" on a Cashtab Msg correctly populates the SendXec to address and amount fields
CashTab Unit Tests: <App /> We do not see the camera auto-open setting in the config screen on a desktop device
CashTab Unit Tests: <App /> We do see the camera auto-open setting in the config screen on a mobile device
CashTab Unit Tests: <App /> Setting "Send Confirmations" settings will show send confirmations
CashTab Unit Tests: <App /> If Cashtab starts up with some settings keys missing, the missing keys are migrated to default values
CashTab Unit Tests: <App /> Setting "ABSOLUTE MINIMUM fees" settings will reduce fees to absolute min
CashTab Unit Tests: <App /> Wallet with easter egg token sees easter egg
CashTab Unit Tests: <App /> If Cashtab starts with 1.5.* cashtabCache, it is wiped and migrated to 1.6.* cashtabCache
CashTab Unit Tests: <App /> A new user can import a mnemonic
CashTab Unit Tests: <App /> Migrating from wallet/savedWallet keys (version < 1.6.*): A user with an invalid Cashtab wallet as the active wallet is migrated on startup
CashTab Unit Tests: <App /> Migrating from wallet/savedWallet keys (version < 1.6.*): A user with all valid wallets in savedWallets does not have any savedWallets migrated
CashTab Unit Tests: <App /> Migrating from wallet/savedWallet keys (version < 1.6.*): A user with an invalid wallet in savedWallets has that savedWallet migrated
CashTab Unit Tests: <App /> Migrating from wallet/savedWallet keys (version < 1.6.*): A user with multiple invalid wallets in savedWallets has them migrated
CashTab Unit Tests: <App /> A user with an invalid Cashtab wallet as the active wallet is migrated on startup
CashTab Unit Tests: <App /> A user with all valid wallets in savedWallets does not have any savedWallets migrated
CashTab Unit Tests: <App /> A user with an invalid wallet in savedWallets has that savedWallet migrated
CashTab Unit Tests: <App /> A user with multiple invalid wallets in savedWallets has them migrated
CashTab Unit Tests: <CreateToken /> If wallet has sufficient XEC, renders CreateTokenForm
CashTab Unit Tests: <CreateToken /> If wallet has insufficient XEC, renders component but does not render CreateTokenForm
CashTab Unit Tests: <CashtabTestWrapper /> With default props, renders App component
CashTab Unit Tests: <CashtabTestWrapper /> We can render other pages by passing the route
CashTab Unit Tests: useWallet hook rendering in different localforage states XEC price is set in state on successful API fetch
CashTab Unit Tests: useWallet hook rendering in different localforage states XEC price remains null in state on API error
CashTab Unit Tests: useWallet hook rendering in different localforage states XEC price is set in state to fiat currency of user settings on successful API fetch
CashTab Unit Tests: useWallet hook rendering in different localforage states Cashtab loads wallet, settings, cache, and contactlist from localforage to context if they are present
CashTab Unit Tests: useWallet hook rendering in different localforage states processChronikWsMsg() refreshes alias prices when aliasPrices is null
CashTab Unit Tests: useWallet hook rendering in different localforage states processChronikWsMsg() refreshes alias prices when aliasPrices exists, server and cashtab prices array length do not match
CashTab Unit Tests: useWallet hook rendering in different localforage states processChronikWsMsg() does not refresh alias prices when aliasPrices exists, server and cashtab array length do match
[[https://build.bitcoinabc.org/viewLog.html?tab=buildLog&logTab=tree&filter=debug&expand=all&buildId=717973&_focus=27427&guest=1 | CashTab Unit Tests: useWallet hook rendering in different localforage states Verify a processChronikWsMsg() new block event updates the aliasServerError state var upon a /prices/ endpoint error]]
[[https://build.bitcoinabc.org/viewLog.html?tab=buildLog&logTab=tree&filter=debug&expand=all&buildId=717973&_focus=27430&guest=1 | CashTab Unit Tests: useWallet hook rendering in different localforage states Verify refreshAliases() updates the aliases state variable on a successful /address/ endpoint response]]
[[https://build.bitcoinabc.org/viewLog.html?tab=buildLog&logTab=tree&filter=debug&expand=all&buildId=717973&_focus=27433&guest=1 | CashTab Unit Tests: useWallet hook rendering in different localforage states Verify refreshAliases() updates the aliasServerError state variable upon an /address/ endpoint error]]
CashTab Unit Tests: useWallet hook rendering in different localforage states An incoming tx message from the websocket causes the wallet to update

Unit tests, implemented migration logic. Still need to implement migration unit tests.

Failed tests logs:

====== CashTab Unit Tests: <CreateTokenForm /> User can input valid token parameters, generate a token, and view a success notification ======
Error: Unable to find an element with the placeholder text of: Enter a name for your token

Ignored nodes: comments, script, style
<body>
  <div>
    <div
      class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-lhVmIH gJoLAm"
              >
                <p
                  class="sc-dqBHgY iOJezR"
                >
                  You need at least 
                  5.5
                   
                  XEC
                   (
                  $
                  0.0002
                   
                  USD
                  ) to create a token
                </p>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    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.findByPlaceholderText (/work/cashtab/src/components/Etokens/__tests__/CreateTokenForm.test.js:104:26)
====== CashTab Unit Tests: Cashtab wallet methods Creates a wallet from valid bip39 mnemonic createCashtabWallet: Creates a Cashtab wallet from a valid bip39 mnemonic ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at Object.<anonymous> (/work/cashtab/src/wallet/__tests__/index.test.js:85:49)
    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 _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: useWallet hook rendering in different localforage states XEC price is set in state on successful API fetch ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== CashTab Unit Tests: useWallet hook rendering in different localforage states XEC price remains null in state on API error ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== CashTab Unit Tests: useWallet hook rendering in different localforage states XEC price is set in state to fiat currency of user settings on successful API fetch ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== CashTab Unit Tests: useWallet hook rendering in different localforage states Cashtab loads wallet, settings, cache, and contactlist from localforage to context if they are present ======
Error: expect(received).toEqual(expected) // deep equality

- Expected  - 8
+ Received  + 0

@@ -5,15 +5,7 @@
        "tokenDocumentHash": "",
        "tokenDocumentUrl": "",
        "tokenName": "Burger",
        "tokenTicker": "  ",
      },
-     "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109" => Object {
-       "decimals": 0,
-       "success": true,
-       "tokenDocumentHash": "",
-       "tokenDocumentUrl": "https://cashtab.com/",
-       "tokenName": "BearNip",
-       "tokenTicker": "BEAR",
-     },
    },
  }

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div />
  </body>
</html>
    at toEqual (/work/cashtab/src/hooks/__tests__/useWallet.test.js:199:62)
    at runWithExpensiveErrorDiagnosticsDisabled (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:47:12)
    at checkCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:124:77)
    at checkRealTimersCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:118:16)
    at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)
====== CashTab Unit Tests: useWallet hook rendering in different localforage states processChronikWsMsg() refreshes alias prices when aliasPrices is null ======
Error: expect(received).toStrictEqual(expected) // deep equality

Expected: {"Path145": {"cashAddress": "ecash:qz3glzzjlp503rn3a3nxccedd7rwj78sgczljhvzv3", "fundingWif": "L2HnC8ZT5JuwVFjrAjJUBs2tmmBoxdVa1MVCJccqV8S9YPoR1NuZ", "hash160": "a28f8852f868f88e71ec666c632d6f86e978f046", "publicKey": "03939a29fd67fa602926637a82f53e1826696353613cac03e34160f040ae2dfcb5"}, "Path1899": {"cashAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "fundingWif": "KywWPgaLDwvW1tWUtUvs13jgqaaWMoNANLVYoKcK9Ddbpnch7Cmw", "hash160": "3a5fb236934ec078b4507c303d3afd82067f8fc1", "publicKey": "031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02d"}, "Path245": {"cashAddress": "ecash:qpsqa7cj5mup8mx0zvt34z7xyp2jztvdds67wajntk", "fundingWif": "L3ndnMkn4574McqhPujguusu48NrmeLUgWYMkRpYQGLXDGAwGmPq", "hash160": "600efb12a6f813eccf13171a8bc62055212d8d6c", "publicKey": "03f73fe2631da9732f2480debbc7ff8d99c5c06764e0f5095b789ff190788bee72"}, "mnemonic": "beauty shoe decline spend still weird slot snack coach flee between paper", "name": "Transaction Fixtures", "state": {"balances": {"totalBalance": "9513.12", "totalBalanceInSatoshis": "951312"}, "nonSlpUtxos": [{"address": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "blockHeight": 815549, "isCoinbase": false, "network": "XEC", "outpoint": {"outIdx": 2, "txid": "218a1e058ed0fda76573eabf43ad3ded7e7192e42621893a60aaa152ba7f66fe"}, "value": "951312"}], "parsedTxHistory": [{"inputs": [[Object], [Object], [Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "etokenAmount": "1", "genesisInfo": [Object], "incoming": true, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": true, "isTokenBurn": false, "opReturnMessage": "", "replyAddress": "ecash:qp89xgjhcqdnzzemts0aj378nfe2mhu9yvxj9nhgg6", "slpMeta": [Object], "xecAmount": "5.46"}, "size": 627, "slpTxData": {"slpMeta": [Object]}, "timeFirstSeen": "1705488591", "txid": "3b0760858b0b20ff50d0db67793892d29d2466b86a0116f7e232792da0c22330", "version": 2}, {"block": {"hash": "00000000000000000ea3601057ba423805f91d9d813a41a91ae908b68ff6cbce", "height": 815549, "timestamp": "1698187386"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "newton", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.53"}, "size": 268, "timeFirstSeen": "1698185917", "txid": "218a1e058ed0fda76573eabf43ad3ded7e7192e42621893a60aaa152ba7f66fe", "version": 2}, {"block": {"hash": "000000000000000009004fa50065ef6deb091f0d075cf1ef01811d0706c9a8c2", "height": 814357, "timestamp": "1697463218"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "doesthisclear", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.51"}, "size": 275, "timeFirstSeen": "1697462397", "txid": "9f25f4e161472920f624ed6579ccdaf8d096263ab31e157deaa9c987269ead8a", "version": 2}, {"block": {"hash": "00000000000000001533643253107df49b2291beb9d5cd5c7f4f51bf26572e53", "height": 813934, "timestamp": "1697216026"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "worksnow", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.51"}, "size": 270, "timeFirstSeen": "1697215818", "txid": "42c39baded510db31aebaf9172d307afa199dd734a6189ea4bc3530438d715ca", "version": 2}, {"block": {"hash": "0000000000000000166ee88a29775a1098813f4316a5afbe835d21e0d74fda24", "height": 813923, "timestamp": "1697211295"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test4", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 267, "timeFirstSeen": "1697211232", "txid": "5aa64624e493502d083089f5a58069887bc99a6d5569b27df7c7570e024bbf20", "version": 2}, {"block": {"hash": "00000000000000000a1807a17ebcda93947db968e9a112b54ec70237d1a76288", "height": 813922, "timestamp": "1697211196"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.55"}, "size": 267, "timeFirstSeen": "1697211182", "txid": "b26c42ba0cc48f0d3af442b445f19c267189f84dbeb7e366ec7c921f5195aca7", "version": 2}, {"block": {"hash": "00000000000000000a1807a17ebcda93947db968e9a112b54ec70237d1a76288", "height": 813922, "timestamp": "1697211196"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.55"}, "size": 266, "timeFirstSeen": "1697211167", "txid": "f86f20336955bca4e15588d81d029ad2c0dfa498b8be6aced2b63ba3bea1be0a", "version": 2}, {"block": {"hash": "000000000000000006b8990c77dd7a0d3a850a052b6f0bd60b82d44d1ffa7a55", "height": 813615, "timestamp": "1697025138"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "alias", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 268, "timeFirstSeen": "1697024688", "txid": "f17814a75dad000557f19a3a3f6fcc124ab7880292c9fad4c64dc034d5e46551", "version": 2}, {"block": {"hash": "000000000000000006b8990c77dd7a0d3a850a052b6f0bd60b82d44d1ffa7a55", "height": 813615, "timestamp": "1697025138"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "alias", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 267, "timeFirstSeen": "1697024682", "txid": "7eacd3b752003fe761e359cac3d98b1faf4f1dd411150eabc89da8208a312b0e", "version": 2}, {"block": {"hash": "00000000000000000b2dfec91630d335b0233fb323a7acbb297b586d1d0d0678", "height": 812408, "timestamp": "1696282475"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": false, "incoming": false, "isCashtabMessage": true, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "still works", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "22"}, "size": 252, "timeFirstSeen": "1696281429", "txid": "8b3cb0e6c38ee01f9e1e98d611895ff2cd09ad9b4fea73f76f951be815278c26", "version": 2}], "slpUtxos": [{"address": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "blockHeight": -1, "decimals": 0, "isCoinbase": false, "network": "XEC", "outpoint": {"outIdx": 1, "txid": "3b0760858b0b20ff50d0db67793892d29d2466b86a0116f7e232792da0c22330"}, "slpMeta": {"tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109", "tokenType": "FUNGIBLE", "txType": "SEND"}, "slpToken": {"amount": "1", "isMintBaton": false}, "tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109", "tokenQty": "1", "value": "546"}], "tokens": [{"balance": "1", "info": {"decimals": 0, "success": true, "tokenDocumentHash": "", "tokenDocumentUrl": "https://cashtab.com/", "tokenName": "BearNip", "tokenTicker": "BEAR"}, "tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109"}]}}
Received: undefined

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div />
  </body>
</html>
    at toStrictEqual (/work/cashtab/src/hooks/__tests__/useWallet.test.js:264:60)
    at runWithExpensiveErrorDiagnosticsDisabled (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:47:12)
    at checkCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:124:77)
    at checkRealTimersCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:118:16)
    at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)
====== CashTab Unit Tests: useWallet hook rendering in different localforage states processChronikWsMsg() refreshes alias prices when aliasPrices exists, server and cashtab prices array length do not match ======
Error: expect(received).toStrictEqual(expected) // deep equality

Expected: {"Path145": {"cashAddress": "ecash:qz3glzzjlp503rn3a3nxccedd7rwj78sgczljhvzv3", "fundingWif": "L2HnC8ZT5JuwVFjrAjJUBs2tmmBoxdVa1MVCJccqV8S9YPoR1NuZ", "hash160": "a28f8852f868f88e71ec666c632d6f86e978f046", "publicKey": "03939a29fd67fa602926637a82f53e1826696353613cac03e34160f040ae2dfcb5"}, "Path1899": {"cashAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "fundingWif": "KywWPgaLDwvW1tWUtUvs13jgqaaWMoNANLVYoKcK9Ddbpnch7Cmw", "hash160": "3a5fb236934ec078b4507c303d3afd82067f8fc1", "publicKey": "031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02d"}, "Path245": {"cashAddress": "ecash:qpsqa7cj5mup8mx0zvt34z7xyp2jztvdds67wajntk", "fundingWif": "L3ndnMkn4574McqhPujguusu48NrmeLUgWYMkRpYQGLXDGAwGmPq", "hash160": "600efb12a6f813eccf13171a8bc62055212d8d6c", "publicKey": "03f73fe2631da9732f2480debbc7ff8d99c5c06764e0f5095b789ff190788bee72"}, "mnemonic": "beauty shoe decline spend still weird slot snack coach flee between paper", "name": "Transaction Fixtures", "state": {"balances": {"totalBalance": "9513.12", "totalBalanceInSatoshis": "951312"}, "nonSlpUtxos": [{"address": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "blockHeight": 815549, "isCoinbase": false, "network": "XEC", "outpoint": {"outIdx": 2, "txid": "218a1e058ed0fda76573eabf43ad3ded7e7192e42621893a60aaa152ba7f66fe"}, "value": "951312"}], "parsedTxHistory": [{"inputs": [[Object], [Object], [Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "etokenAmount": "1", "genesisInfo": [Object], "incoming": true, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": true, "isTokenBurn": false, "opReturnMessage": "", "replyAddress": "ecash:qp89xgjhcqdnzzemts0aj378nfe2mhu9yvxj9nhgg6", "slpMeta": [Object], "xecAmount": "5.46"}, "size": 627, "slpTxData": {"slpMeta": [Object]}, "timeFirstSeen": "1705488591", "txid": "3b0760858b0b20ff50d0db67793892d29d2466b86a0116f7e232792da0c22330", "version": 2}, {"block": {"hash": "00000000000000000ea3601057ba423805f91d9d813a41a91ae908b68ff6cbce", "height": 815549, "timestamp": "1698187386"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "newton", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.53"}, "size": 268, "timeFirstSeen": "1698185917", "txid": "218a1e058ed0fda76573eabf43ad3ded7e7192e42621893a60aaa152ba7f66fe", "version": 2}, {"block": {"hash": "000000000000000009004fa50065ef6deb091f0d075cf1ef01811d0706c9a8c2", "height": 814357, "timestamp": "1697463218"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "doesthisclear", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.51"}, "size": 275, "timeFirstSeen": "1697462397", "txid": "9f25f4e161472920f624ed6579ccdaf8d096263ab31e157deaa9c987269ead8a", "version": 2}, {"block": {"hash": "00000000000000001533643253107df49b2291beb9d5cd5c7f4f51bf26572e53", "height": 813934, "timestamp": "1697216026"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "worksnow", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.51"}, "size": 270, "timeFirstSeen": "1697215818", "txid": "42c39baded510db31aebaf9172d307afa199dd734a6189ea4bc3530438d715ca", "version": 2}, {"block": {"hash": "0000000000000000166ee88a29775a1098813f4316a5afbe835d21e0d74fda24", "height": 813923, "timestamp": "1697211295"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test4", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 267, "timeFirstSeen": "1697211232", "txid": "5aa64624e493502d083089f5a58069887bc99a6d5569b27df7c7570e024bbf20", "version": 2}, {"block": {"hash": "00000000000000000a1807a17ebcda93947db968e9a112b54ec70237d1a76288", "height": 813922, "timestamp": "1697211196"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.55"}, "size": 267, "timeFirstSeen": "1697211182", "txid": "b26c42ba0cc48f0d3af442b445f19c267189f84dbeb7e366ec7c921f5195aca7", "version": 2}, {"block": {"hash": "00000000000000000a1807a17ebcda93947db968e9a112b54ec70237d1a76288", "height": 813922, "timestamp": "1697211196"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.55"}, "size": 266, "timeFirstSeen": "1697211167", "txid": "f86f20336955bca4e15588d81d029ad2c0dfa498b8be6aced2b63ba3bea1be0a", "version": 2}, {"block": {"hash": "000000000000000006b8990c77dd7a0d3a850a052b6f0bd60b82d44d1ffa7a55", "height": 813615, "timestamp": "1697025138"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "alias", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 268, "timeFirstSeen": "1697024688", "txid": "f17814a75dad000557f19a3a3f6fcc124ab7880292c9fad4c64dc034d5e46551", "version": 2}, {"block": {"hash": "000000000000000006b8990c77dd7a0d3a850a052b6f0bd60b82d44d1ffa7a55", "height": 813615, "timestamp": "1697025138"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "alias", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 267, "timeFirstSeen": "1697024682", "txid": "7eacd3b752003fe761e359cac3d98b1faf4f1dd411150eabc89da8208a312b0e", "version": 2}, {"block": {"hash": "00000000000000000b2dfec91630d335b0233fb323a7acbb297b586d1d0d0678", "height": 812408, "timestamp": "1696282475"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": false, "incoming": false, "isCashtabMessage": true, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "still works", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "22"}, "size": 252, "timeFirstSeen": "1696281429", "txid": "8b3cb0e6c38ee01f9e1e98d611895ff2cd09ad9b4fea73f76f951be815278c26", "version": 2}], "slpUtxos": [{"address": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "blockHeight": -1, "decimals": 0, "isCoinbase": false, "network": "XEC", "outpoint": {"outIdx": 1, "txid": "3b0760858b0b20ff50d0db67793892d29d2466b86a0116f7e232792da0c22330"}, "slpMeta": {"tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109", "tokenType": "FUNGIBLE", "txType": "SEND"}, "slpToken": {"amount": "1", "isMintBaton": false}, "tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109", "tokenQty": "1", "value": "546"}], "tokens": [{"balance": "1", "info": {"decimals": 0, "success": true, "tokenDocumentHash": "", "tokenDocumentUrl": "https://cashtab.com/", "tokenName": "BearNip", "tokenTicker": "BEAR"}, "tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109"}]}}
Received: undefined

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div />
  </body>
</html>
    at toStrictEqual (/work/cashtab/src/hooks/__tests__/useWallet.test.js:389:60)
    at runWithExpensiveErrorDiagnosticsDisabled (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:47:12)
    at checkCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:124:77)
    at checkRealTimersCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:118:16)
    at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)
====== CashTab Unit Tests: useWallet hook rendering in different localforage states processChronikWsMsg() does not refresh alias prices when aliasPrices exists, server and cashtab array length do match ======
Error: expect(received).toStrictEqual(expected) // deep equality

Expected: {"Path145": {"cashAddress": "ecash:qz3glzzjlp503rn3a3nxccedd7rwj78sgczljhvzv3", "fundingWif": "L2HnC8ZT5JuwVFjrAjJUBs2tmmBoxdVa1MVCJccqV8S9YPoR1NuZ", "hash160": "a28f8852f868f88e71ec666c632d6f86e978f046", "publicKey": "03939a29fd67fa602926637a82f53e1826696353613cac03e34160f040ae2dfcb5"}, "Path1899": {"cashAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "fundingWif": "KywWPgaLDwvW1tWUtUvs13jgqaaWMoNANLVYoKcK9Ddbpnch7Cmw", "hash160": "3a5fb236934ec078b4507c303d3afd82067f8fc1", "publicKey": "031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02d"}, "Path245": {"cashAddress": "ecash:qpsqa7cj5mup8mx0zvt34z7xyp2jztvdds67wajntk", "fundingWif": "L3ndnMkn4574McqhPujguusu48NrmeLUgWYMkRpYQGLXDGAwGmPq", "hash160": "600efb12a6f813eccf13171a8bc62055212d8d6c", "publicKey": "03f73fe2631da9732f2480debbc7ff8d99c5c06764e0f5095b789ff190788bee72"}, "mnemonic": "beauty shoe decline spend still weird slot snack coach flee between paper", "name": "Transaction Fixtures", "state": {"balances": {"totalBalance": "9513.12", "totalBalanceInSatoshis": "951312"}, "nonSlpUtxos": [{"address": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "blockHeight": 815549, "isCoinbase": false, "network": "XEC", "outpoint": {"outIdx": 2, "txid": "218a1e058ed0fda76573eabf43ad3ded7e7192e42621893a60aaa152ba7f66fe"}, "value": "951312"}], "parsedTxHistory": [{"inputs": [[Object], [Object], [Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "etokenAmount": "1", "genesisInfo": [Object], "incoming": true, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": true, "isTokenBurn": false, "opReturnMessage": "", "replyAddress": "ecash:qp89xgjhcqdnzzemts0aj378nfe2mhu9yvxj9nhgg6", "slpMeta": [Object], "xecAmount": "5.46"}, "size": 627, "slpTxData": {"slpMeta": [Object]}, "timeFirstSeen": "1705488591", "txid": "3b0760858b0b20ff50d0db67793892d29d2466b86a0116f7e232792da0c22330", "version": 2}, {"block": {"hash": "00000000000000000ea3601057ba423805f91d9d813a41a91ae908b68ff6cbce", "height": 815549, "timestamp": "1698187386"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "newton", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.53"}, "size": 268, "timeFirstSeen": "1698185917", "txid": "218a1e058ed0fda76573eabf43ad3ded7e7192e42621893a60aaa152ba7f66fe", "version": 2}, {"block": {"hash": "000000000000000009004fa50065ef6deb091f0d075cf1ef01811d0706c9a8c2", "height": 814357, "timestamp": "1697463218"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "doesthisclear", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.51"}, "size": 275, "timeFirstSeen": "1697462397", "txid": "9f25f4e161472920f624ed6579ccdaf8d096263ab31e157deaa9c987269ead8a", "version": 2}, {"block": {"hash": "00000000000000001533643253107df49b2291beb9d5cd5c7f4f51bf26572e53", "height": 813934, "timestamp": "1697216026"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "worksnow", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.51"}, "size": 270, "timeFirstSeen": "1697215818", "txid": "42c39baded510db31aebaf9172d307afa199dd734a6189ea4bc3530438d715ca", "version": 2}, {"block": {"hash": "0000000000000000166ee88a29775a1098813f4316a5afbe835d21e0d74fda24", "height": 813923, "timestamp": "1697211295"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test4", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 267, "timeFirstSeen": "1697211232", "txid": "5aa64624e493502d083089f5a58069887bc99a6d5569b27df7c7570e024bbf20", "version": 2}, {"block": {"hash": "00000000000000000a1807a17ebcda93947db968e9a112b54ec70237d1a76288", "height": 813922, "timestamp": "1697211196"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.55"}, "size": 267, "timeFirstSeen": "1697211182", "txid": "b26c42ba0cc48f0d3af442b445f19c267189f84dbeb7e366ec7c921f5195aca7", "version": 2}, {"block": {"hash": "00000000000000000a1807a17ebcda93947db968e9a112b54ec70237d1a76288", "height": 813922, "timestamp": "1697211196"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.55"}, "size": 266, "timeFirstSeen": "1697211167", "txid": "f86f20336955bca4e15588d81d029ad2c0dfa498b8be6aced2b63ba3bea1be0a", "version": 2}, {"block": {"hash": "000000000000000006b8990c77dd7a0d3a850a052b6f0bd60b82d44d1ffa7a55", "height": 813615, "timestamp": "1697025138"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "alias", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 268, "timeFirstSeen": "1697024688", "txid": "f17814a75dad000557f19a3a3f6fcc124ab7880292c9fad4c64dc034d5e46551", "version": 2}, {"block": {"hash": "000000000000000006b8990c77dd7a0d3a850a052b6f0bd60b82d44d1ffa7a55", "height": 813615, "timestamp": "1697025138"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "alias", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 267, "timeFirstSeen": "1697024682", "txid": "7eacd3b752003fe761e359cac3d98b1faf4f1dd411150eabc89da8208a312b0e", "version": 2}, {"block": {"hash": "00000000000000000b2dfec91630d335b0233fb323a7acbb297b586d1d0d0678", "height": 812408, "timestamp": "1696282475"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": false, "incoming": false, "isCashtabMessage": true, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "still works", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "22"}, "size": 252, "timeFirstSeen": "1696281429", "txid": "8b3cb0e6c38ee01f9e1e98d611895ff2cd09ad9b4fea73f76f951be815278c26", "version": 2}], "slpUtxos": [{"address": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "blockHeight": -1, "decimals": 0, "isCoinbase": false, "network": "XEC", "outpoint": {"outIdx": 1, "txid": "3b0760858b0b20ff50d0db67793892d29d2466b86a0116f7e232792da0c22330"}, "slpMeta": {"tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109", "tokenType": "FUNGIBLE", "txType": "SEND"}, "slpToken": {"amount": "1", "isMintBaton": false}, "tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109", "tokenQty": "1", "value": "546"}], "tokens": [{"balance": "1", "info": {"decimals": 0, "success": true, "tokenDocumentHash": "", "tokenDocumentUrl": "https://cashtab.com/", "tokenName": "BearNip", "tokenTicker": "BEAR"}, "tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109"}]}}
Received: undefined

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div />
  </body>
</html>
    at toStrictEqual (/work/cashtab/src/hooks/__tests__/useWallet.test.js:530:60)
    at runWithExpensiveErrorDiagnosticsDisabled (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:47:12)
    at checkCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:124:77)
    at checkRealTimersCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:118:16)
    at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)
====== CashTab Unit Tests: useWallet hook rendering in different localforage states Verify a processChronikWsMsg() new block event updates the `aliasServerError` state var upon a /prices/ endpoint error ======
Error: expect(received).toStrictEqual(expected) // deep equality

Expected: {"Path145": {"cashAddress": "ecash:qz3glzzjlp503rn3a3nxccedd7rwj78sgczljhvzv3", "fundingWif": "L2HnC8ZT5JuwVFjrAjJUBs2tmmBoxdVa1MVCJccqV8S9YPoR1NuZ", "hash160": "a28f8852f868f88e71ec666c632d6f86e978f046", "publicKey": "03939a29fd67fa602926637a82f53e1826696353613cac03e34160f040ae2dfcb5"}, "Path1899": {"cashAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "fundingWif": "KywWPgaLDwvW1tWUtUvs13jgqaaWMoNANLVYoKcK9Ddbpnch7Cmw", "hash160": "3a5fb236934ec078b4507c303d3afd82067f8fc1", "publicKey": "031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02d"}, "Path245": {"cashAddress": "ecash:qpsqa7cj5mup8mx0zvt34z7xyp2jztvdds67wajntk", "fundingWif": "L3ndnMkn4574McqhPujguusu48NrmeLUgWYMkRpYQGLXDGAwGmPq", "hash160": "600efb12a6f813eccf13171a8bc62055212d8d6c", "publicKey": "03f73fe2631da9732f2480debbc7ff8d99c5c06764e0f5095b789ff190788bee72"}, "mnemonic": "beauty shoe decline spend still weird slot snack coach flee between paper", "name": "Transaction Fixtures", "state": {"balances": {"totalBalance": "9513.12", "totalBalanceInSatoshis": "951312"}, "nonSlpUtxos": [{"address": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "blockHeight": 815549, "isCoinbase": false, "network": "XEC", "outpoint": {"outIdx": 2, "txid": "218a1e058ed0fda76573eabf43ad3ded7e7192e42621893a60aaa152ba7f66fe"}, "value": "951312"}], "parsedTxHistory": [{"inputs": [[Object], [Object], [Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "etokenAmount": "1", "genesisInfo": [Object], "incoming": true, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": true, "isTokenBurn": false, "opReturnMessage": "", "replyAddress": "ecash:qp89xgjhcqdnzzemts0aj378nfe2mhu9yvxj9nhgg6", "slpMeta": [Object], "xecAmount": "5.46"}, "size": 627, "slpTxData": {"slpMeta": [Object]}, "timeFirstSeen": "1705488591", "txid": "3b0760858b0b20ff50d0db67793892d29d2466b86a0116f7e232792da0c22330", "version": 2}, {"block": {"hash": "00000000000000000ea3601057ba423805f91d9d813a41a91ae908b68ff6cbce", "height": 815549, "timestamp": "1698187386"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "newton", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.53"}, "size": 268, "timeFirstSeen": "1698185917", "txid": "218a1e058ed0fda76573eabf43ad3ded7e7192e42621893a60aaa152ba7f66fe", "version": 2}, {"block": {"hash": "000000000000000009004fa50065ef6deb091f0d075cf1ef01811d0706c9a8c2", "height": 814357, "timestamp": "1697463218"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "doesthisclear", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.51"}, "size": 275, "timeFirstSeen": "1697462397", "txid": "9f25f4e161472920f624ed6579ccdaf8d096263ab31e157deaa9c987269ead8a", "version": 2}, {"block": {"hash": "00000000000000001533643253107df49b2291beb9d5cd5c7f4f51bf26572e53", "height": 813934, "timestamp": "1697216026"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "worksnow", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.51"}, "size": 270, "timeFirstSeen": "1697215818", "txid": "42c39baded510db31aebaf9172d307afa199dd734a6189ea4bc3530438d715ca", "version": 2}, {"block": {"hash": "0000000000000000166ee88a29775a1098813f4316a5afbe835d21e0d74fda24", "height": 813923, "timestamp": "1697211295"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test4", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 267, "timeFirstSeen": "1697211232", "txid": "5aa64624e493502d083089f5a58069887bc99a6d5569b27df7c7570e024bbf20", "version": 2}, {"block": {"hash": "00000000000000000a1807a17ebcda93947db968e9a112b54ec70237d1a76288", "height": 813922, "timestamp": "1697211196"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.55"}, "size": 267, "timeFirstSeen": "1697211182", "txid": "b26c42ba0cc48f0d3af442b445f19c267189f84dbeb7e366ec7c921f5195aca7", "version": 2}, {"block": {"hash": "00000000000000000a1807a17ebcda93947db968e9a112b54ec70237d1a76288", "height": 813922, "timestamp": "1697211196"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.55"}, "size": 266, "timeFirstSeen": "1697211167", "txid": "f86f20336955bca4e15588d81d029ad2c0dfa498b8be6aced2b63ba3bea1be0a", "version": 2}, {"block": {"hash": "000000000000000006b8990c77dd7a0d3a850a052b6f0bd60b82d44d1ffa7a55", "height": 813615, "timestamp": "1697025138"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "alias", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 268, "timeFirstSeen": "1697024688", "txid": "f17814a75dad000557f19a3a3f6fcc124ab7880292c9fad4c64dc034d5e46551", "version": 2}, {"block": {"hash": "000000000000000006b8990c77dd7a0d3a850a052b6f0bd60b82d44d1ffa7a55", "height": 813615, "timestamp": "1697025138"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "alias", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 267, "timeFirstSeen": "1697024682", "txid": "7eacd3b752003fe761e359cac3d98b1faf4f1dd411150eabc89da8208a312b0e", "version": 2}, {"block": {"hash": "00000000000000000b2dfec91630d335b0233fb323a7acbb297b586d1d0d0678", "height": 812408, "timestamp": "1696282475"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": false, "incoming": false, "isCashtabMessage": true, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "still works", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "22"}, "size": 252, "timeFirstSeen": "1696281429", "txid": "8b3cb0e6c38ee01f9e1e98d611895ff2cd09ad9b4fea73f76f951be815278c26", "version": 2}], "slpUtxos": [{"address": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "blockHeight": -1, "decimals": 0, "isCoinbase": false, "network": "XEC", "outpoint": {"outIdx": 1, "txid": "3b0760858b0b20ff50d0db67793892d29d2466b86a0116f7e232792da0c22330"}, "slpMeta": {"tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109", "tokenType": "FUNGIBLE", "txType": "SEND"}, "slpToken": {"amount": "1", "isMintBaton": false}, "tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109", "tokenQty": "1", "value": "546"}], "tokens": [{"balance": "1", "info": {"decimals": 0, "success": true, "tokenDocumentHash": "", "tokenDocumentUrl": "https://cashtab.com/", "tokenName": "BearNip", "tokenTicker": "BEAR"}, "tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109"}]}}
Received: undefined

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div />
  </body>
</html>
    at toStrictEqual (/work/cashtab/src/hooks/__tests__/useWallet.test.js:578:60)
    at runWithExpensiveErrorDiagnosticsDisabled (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:47:12)
    at checkCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:124:77)
    at checkRealTimersCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:118:16)
    at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)
====== CashTab Unit Tests: useWallet hook rendering in different localforage states Verify refreshAliases() updates the `aliases` state variable on a successful /address/ endpoint response ======
Error: expect(received).toStrictEqual(expected) // deep equality

Expected: {"Path145": {"cashAddress": "ecash:qz3glzzjlp503rn3a3nxccedd7rwj78sgczljhvzv3", "fundingWif": "L2HnC8ZT5JuwVFjrAjJUBs2tmmBoxdVa1MVCJccqV8S9YPoR1NuZ", "hash160": "a28f8852f868f88e71ec666c632d6f86e978f046", "publicKey": "03939a29fd67fa602926637a82f53e1826696353613cac03e34160f040ae2dfcb5"}, "Path1899": {"cashAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "fundingWif": "KywWPgaLDwvW1tWUtUvs13jgqaaWMoNANLVYoKcK9Ddbpnch7Cmw", "hash160": "3a5fb236934ec078b4507c303d3afd82067f8fc1", "publicKey": "031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02d"}, "Path245": {"cashAddress": "ecash:qpsqa7cj5mup8mx0zvt34z7xyp2jztvdds67wajntk", "fundingWif": "L3ndnMkn4574McqhPujguusu48NrmeLUgWYMkRpYQGLXDGAwGmPq", "hash160": "600efb12a6f813eccf13171a8bc62055212d8d6c", "publicKey": "03f73fe2631da9732f2480debbc7ff8d99c5c06764e0f5095b789ff190788bee72"}, "mnemonic": "beauty shoe decline spend still weird slot snack coach flee between paper", "name": "Transaction Fixtures", "state": {"balances": {"totalBalance": "9513.12", "totalBalanceInSatoshis": "951312"}, "nonSlpUtxos": [{"address": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "blockHeight": 815549, "isCoinbase": false, "network": "XEC", "outpoint": {"outIdx": 2, "txid": "218a1e058ed0fda76573eabf43ad3ded7e7192e42621893a60aaa152ba7f66fe"}, "value": "951312"}], "parsedTxHistory": [{"inputs": [[Object], [Object], [Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "etokenAmount": "1", "genesisInfo": [Object], "incoming": true, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": true, "isTokenBurn": false, "opReturnMessage": "", "replyAddress": "ecash:qp89xgjhcqdnzzemts0aj378nfe2mhu9yvxj9nhgg6", "slpMeta": [Object], "xecAmount": "5.46"}, "size": 627, "slpTxData": {"slpMeta": [Object]}, "timeFirstSeen": "1705488591", "txid": "3b0760858b0b20ff50d0db67793892d29d2466b86a0116f7e232792da0c22330", "version": 2}, {"block": {"hash": "00000000000000000ea3601057ba423805f91d9d813a41a91ae908b68ff6cbce", "height": 815549, "timestamp": "1698187386"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "newton", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.53"}, "size": 268, "timeFirstSeen": "1698185917", "txid": "218a1e058ed0fda76573eabf43ad3ded7e7192e42621893a60aaa152ba7f66fe", "version": 2}, {"block": {"hash": "000000000000000009004fa50065ef6deb091f0d075cf1ef01811d0706c9a8c2", "height": 814357, "timestamp": "1697463218"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "doesthisclear", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.51"}, "size": 275, "timeFirstSeen": "1697462397", "txid": "9f25f4e161472920f624ed6579ccdaf8d096263ab31e157deaa9c987269ead8a", "version": 2}, {"block": {"hash": "00000000000000001533643253107df49b2291beb9d5cd5c7f4f51bf26572e53", "height": 813934, "timestamp": "1697216026"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "worksnow", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.51"}, "size": 270, "timeFirstSeen": "1697215818", "txid": "42c39baded510db31aebaf9172d307afa199dd734a6189ea4bc3530438d715ca", "version": 2}, {"block": {"hash": "0000000000000000166ee88a29775a1098813f4316a5afbe835d21e0d74fda24", "height": 813923, "timestamp": "1697211295"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test4", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 267, "timeFirstSeen": "1697211232", "txid": "5aa64624e493502d083089f5a58069887bc99a6d5569b27df7c7570e024bbf20", "version": 2}, {"block": {"hash": "00000000000000000a1807a17ebcda93947db968e9a112b54ec70237d1a76288", "height": 813922, "timestamp": "1697211196"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.55"}, "size": 267, "timeFirstSeen": "1697211182", "txid": "b26c42ba0cc48f0d3af442b445f19c267189f84dbeb7e366ec7c921f5195aca7", "version": 2}, {"block": {"hash": "00000000000000000a1807a17ebcda93947db968e9a112b54ec70237d1a76288", "height": 813922, "timestamp": "1697211196"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.55"}, "size": 266, "timeFirstSeen": "1697211167", "txid": "f86f20336955bca4e15588d81d029ad2c0dfa498b8be6aced2b63ba3bea1be0a", "version": 2}, {"block": {"hash": "000000000000000006b8990c77dd7a0d3a850a052b6f0bd60b82d44d1ffa7a55", "height": 813615, "timestamp": "1697025138"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "alias", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 268, "timeFirstSeen": "1697024688", "txid": "f17814a75dad000557f19a3a3f6fcc124ab7880292c9fad4c64dc034d5e46551", "version": 2}, {"block": {"hash": "000000000000000006b8990c77dd7a0d3a850a052b6f0bd60b82d44d1ffa7a55", "height": 813615, "timestamp": "1697025138"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "alias", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 267, "timeFirstSeen": "1697024682", "txid": "7eacd3b752003fe761e359cac3d98b1faf4f1dd411150eabc89da8208a312b0e", "version": 2}, {"block": {"hash": "00000000000000000b2dfec91630d335b0233fb323a7acbb297b586d1d0d0678", "height": 812408, "timestamp": "1696282475"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": false, "incoming": false, "isCashtabMessage": true, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "still works", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "22"}, "size": 252, "timeFirstSeen": "1696281429", "txid": "8b3cb0e6c38ee01f9e1e98d611895ff2cd09ad9b4fea73f76f951be815278c26", "version": 2}], "slpUtxos": [{"address": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "blockHeight": -1, "decimals": 0, "isCoinbase": false, "network": "XEC", "outpoint": {"outIdx": 1, "txid": "3b0760858b0b20ff50d0db67793892d29d2466b86a0116f7e232792da0c22330"}, "slpMeta": {"tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109", "tokenType": "FUNGIBLE", "txType": "SEND"}, "slpToken": {"amount": "1", "isMintBaton": false}, "tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109", "tokenQty": "1", "value": "546"}], "tokens": [{"balance": "1", "info": {"decimals": 0, "success": true, "tokenDocumentHash": "", "tokenDocumentUrl": "https://cashtab.com/", "tokenName": "BearNip", "tokenTicker": "BEAR"}, "tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109"}]}}
Received: undefined

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div />
  </body>
</html>
    at toStrictEqual (/work/cashtab/src/hooks/__tests__/useWallet.test.js:630:60)
    at runWithExpensiveErrorDiagnosticsDisabled (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:47:12)
    at checkCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:124:77)
    at checkRealTimersCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:118:16)
    at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)
====== CashTab Unit Tests: useWallet hook rendering in different localforage states Verify refreshAliases() updates the `aliasServerError` state variable upon an /address/ endpoint error ======
Error: expect(received).toStrictEqual(expected) // deep equality

Expected: {"Path145": {"cashAddress": "ecash:qz3glzzjlp503rn3a3nxccedd7rwj78sgczljhvzv3", "fundingWif": "L2HnC8ZT5JuwVFjrAjJUBs2tmmBoxdVa1MVCJccqV8S9YPoR1NuZ", "hash160": "a28f8852f868f88e71ec666c632d6f86e978f046", "publicKey": "03939a29fd67fa602926637a82f53e1826696353613cac03e34160f040ae2dfcb5"}, "Path1899": {"cashAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "fundingWif": "KywWPgaLDwvW1tWUtUvs13jgqaaWMoNANLVYoKcK9Ddbpnch7Cmw", "hash160": "3a5fb236934ec078b4507c303d3afd82067f8fc1", "publicKey": "031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02d"}, "Path245": {"cashAddress": "ecash:qpsqa7cj5mup8mx0zvt34z7xyp2jztvdds67wajntk", "fundingWif": "L3ndnMkn4574McqhPujguusu48NrmeLUgWYMkRpYQGLXDGAwGmPq", "hash160": "600efb12a6f813eccf13171a8bc62055212d8d6c", "publicKey": "03f73fe2631da9732f2480debbc7ff8d99c5c06764e0f5095b789ff190788bee72"}, "mnemonic": "beauty shoe decline spend still weird slot snack coach flee between paper", "name": "Transaction Fixtures", "state": {"balances": {"totalBalance": "9513.12", "totalBalanceInSatoshis": "951312"}, "nonSlpUtxos": [{"address": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "blockHeight": 815549, "isCoinbase": false, "network": "XEC", "outpoint": {"outIdx": 2, "txid": "218a1e058ed0fda76573eabf43ad3ded7e7192e42621893a60aaa152ba7f66fe"}, "value": "951312"}], "parsedTxHistory": [{"inputs": [[Object], [Object], [Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "etokenAmount": "1", "genesisInfo": [Object], "incoming": true, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": true, "isTokenBurn": false, "opReturnMessage": "", "replyAddress": "ecash:qp89xgjhcqdnzzemts0aj378nfe2mhu9yvxj9nhgg6", "slpMeta": [Object], "xecAmount": "5.46"}, "size": 627, "slpTxData": {"slpMeta": [Object]}, "timeFirstSeen": "1705488591", "txid": "3b0760858b0b20ff50d0db67793892d29d2466b86a0116f7e232792da0c22330", "version": 2}, {"block": {"hash": "00000000000000000ea3601057ba423805f91d9d813a41a91ae908b68ff6cbce", "height": 815549, "timestamp": "1698187386"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "newton", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.53"}, "size": 268, "timeFirstSeen": "1698185917", "txid": "218a1e058ed0fda76573eabf43ad3ded7e7192e42621893a60aaa152ba7f66fe", "version": 2}, {"block": {"hash": "000000000000000009004fa50065ef6deb091f0d075cf1ef01811d0706c9a8c2", "height": 814357, "timestamp": "1697463218"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "doesthisclear", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.51"}, "size": 275, "timeFirstSeen": "1697462397", "txid": "9f25f4e161472920f624ed6579ccdaf8d096263ab31e157deaa9c987269ead8a", "version": 2}, {"block": {"hash": "00000000000000001533643253107df49b2291beb9d5cd5c7f4f51bf26572e53", "height": 813934, "timestamp": "1697216026"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "worksnow", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.51"}, "size": 270, "timeFirstSeen": "1697215818", "txid": "42c39baded510db31aebaf9172d307afa199dd734a6189ea4bc3530438d715ca", "version": 2}, {"block": {"hash": "0000000000000000166ee88a29775a1098813f4316a5afbe835d21e0d74fda24", "height": 813923, "timestamp": "1697211295"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test4", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 267, "timeFirstSeen": "1697211232", "txid": "5aa64624e493502d083089f5a58069887bc99a6d5569b27df7c7570e024bbf20", "version": 2}, {"block": {"hash": "00000000000000000a1807a17ebcda93947db968e9a112b54ec70237d1a76288", "height": 813922, "timestamp": "1697211196"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.55"}, "size": 267, "timeFirstSeen": "1697211182", "txid": "b26c42ba0cc48f0d3af442b445f19c267189f84dbeb7e366ec7c921f5195aca7", "version": 2}, {"block": {"hash": "00000000000000000a1807a17ebcda93947db968e9a112b54ec70237d1a76288", "height": 813922, "timestamp": "1697211196"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.55"}, "size": 266, "timeFirstSeen": "1697211167", "txid": "f86f20336955bca4e15588d81d029ad2c0dfa498b8be6aced2b63ba3bea1be0a", "version": 2}, {"block": {"hash": "000000000000000006b8990c77dd7a0d3a850a052b6f0bd60b82d44d1ffa7a55", "height": 813615, "timestamp": "1697025138"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "alias", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 268, "timeFirstSeen": "1697024688", "txid": "f17814a75dad000557f19a3a3f6fcc124ab7880292c9fad4c64dc034d5e46551", "version": 2}, {"block": {"hash": "000000000000000006b8990c77dd7a0d3a850a052b6f0bd60b82d44d1ffa7a55", "height": 813615, "timestamp": "1697025138"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "alias", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 267, "timeFirstSeen": "1697024682", "txid": "7eacd3b752003fe761e359cac3d98b1faf4f1dd411150eabc89da8208a312b0e", "version": 2}, {"block": {"hash": "00000000000000000b2dfec91630d335b0233fb323a7acbb297b586d1d0d0678", "height": 812408, "timestamp": "1696282475"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": false, "incoming": false, "isCashtabMessage": true, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "still works", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "22"}, "size": 252, "timeFirstSeen": "1696281429", "txid": "8b3cb0e6c38ee01f9e1e98d611895ff2cd09ad9b4fea73f76f951be815278c26", "version": 2}], "slpUtxos": [{"address": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "blockHeight": -1, "decimals": 0, "isCoinbase": false, "network": "XEC", "outpoint": {"outIdx": 1, "txid": "3b0760858b0b20ff50d0db67793892d29d2466b86a0116f7e232792da0c22330"}, "slpMeta": {"tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109", "tokenType": "FUNGIBLE", "txType": "SEND"}, "slpToken": {"amount": "1", "isMintBaton": false}, "tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109", "tokenQty": "1", "value": "546"}], "tokens": [{"balance": "1", "info": {"decimals": 0, "success": true, "tokenDocumentHash": "", "tokenDocumentUrl": "https://cashtab.com/", "tokenName": "BearNip", "tokenTicker": "BEAR"}, "tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109"}]}}
Received: undefined

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div />
  </body>
</html>
    at toStrictEqual (/work/cashtab/src/hooks/__tests__/useWallet.test.js:667:60)
    at runWithExpensiveErrorDiagnosticsDisabled (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:47:12)
    at checkCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:124:77)
    at checkRealTimersCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:118:16)
    at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)
====== CashTab Unit Tests: useWallet hook rendering in different localforage states An incoming tx message from the websocket causes the wallet to update ======
Error: expect(received).toStrictEqual(expected) // deep equality

Expected: {"Path145": {"cashAddress": "ecash:qz3glzzjlp503rn3a3nxccedd7rwj78sgczljhvzv3", "fundingWif": "L2HnC8ZT5JuwVFjrAjJUBs2tmmBoxdVa1MVCJccqV8S9YPoR1NuZ", "hash160": "a28f8852f868f88e71ec666c632d6f86e978f046", "publicKey": "03939a29fd67fa602926637a82f53e1826696353613cac03e34160f040ae2dfcb5"}, "Path1899": {"cashAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "fundingWif": "KywWPgaLDwvW1tWUtUvs13jgqaaWMoNANLVYoKcK9Ddbpnch7Cmw", "hash160": "3a5fb236934ec078b4507c303d3afd82067f8fc1", "publicKey": "031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02d"}, "Path245": {"cashAddress": "ecash:qpsqa7cj5mup8mx0zvt34z7xyp2jztvdds67wajntk", "fundingWif": "L3ndnMkn4574McqhPujguusu48NrmeLUgWYMkRpYQGLXDGAwGmPq", "hash160": "600efb12a6f813eccf13171a8bc62055212d8d6c", "publicKey": "03f73fe2631da9732f2480debbc7ff8d99c5c06764e0f5095b789ff190788bee72"}, "mnemonic": "beauty shoe decline spend still weird slot snack coach flee between paper", "name": "Transaction Fixtures", "state": {"balances": {"totalBalance": "9513.12", "totalBalanceInSatoshis": "951312"}, "nonSlpUtxos": [{"address": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "blockHeight": 815549, "isCoinbase": false, "network": "XEC", "outpoint": {"outIdx": 2, "txid": "218a1e058ed0fda76573eabf43ad3ded7e7192e42621893a60aaa152ba7f66fe"}, "value": "951312"}], "parsedTxHistory": [{"inputs": [[Object], [Object], [Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "etokenAmount": "1", "genesisInfo": [Object], "incoming": true, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": true, "isTokenBurn": false, "opReturnMessage": "", "replyAddress": "ecash:qp89xgjhcqdnzzemts0aj378nfe2mhu9yvxj9nhgg6", "slpMeta": [Object], "xecAmount": "5.46"}, "size": 627, "slpTxData": {"slpMeta": [Object]}, "timeFirstSeen": "1705488591", "txid": "3b0760858b0b20ff50d0db67793892d29d2466b86a0116f7e232792da0c22330", "version": 2}, {"block": {"hash": "00000000000000000ea3601057ba423805f91d9d813a41a91ae908b68ff6cbce", "height": 815549, "timestamp": "1698187386"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "newton", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.53"}, "size": 268, "timeFirstSeen": "1698185917", "txid": "218a1e058ed0fda76573eabf43ad3ded7e7192e42621893a60aaa152ba7f66fe", "version": 2}, {"block": {"hash": "000000000000000009004fa50065ef6deb091f0d075cf1ef01811d0706c9a8c2", "height": 814357, "timestamp": "1697463218"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "doesthisclear", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.51"}, "size": 275, "timeFirstSeen": "1697462397", "txid": "9f25f4e161472920f624ed6579ccdaf8d096263ab31e157deaa9c987269ead8a", "version": 2}, {"block": {"hash": "00000000000000001533643253107df49b2291beb9d5cd5c7f4f51bf26572e53", "height": 813934, "timestamp": "1697216026"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "worksnow", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.51"}, "size": 270, "timeFirstSeen": "1697215818", "txid": "42c39baded510db31aebaf9172d307afa199dd734a6189ea4bc3530438d715ca", "version": 2}, {"block": {"hash": "0000000000000000166ee88a29775a1098813f4316a5afbe835d21e0d74fda24", "height": 813923, "timestamp": "1697211295"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test4", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 267, "timeFirstSeen": "1697211232", "txid": "5aa64624e493502d083089f5a58069887bc99a6d5569b27df7c7570e024bbf20", "version": 2}, {"block": {"hash": "00000000000000000a1807a17ebcda93947db968e9a112b54ec70237d1a76288", "height": 813922, "timestamp": "1697211196"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.55"}, "size": 267, "timeFirstSeen": "1697211182", "txid": "b26c42ba0cc48f0d3af442b445f19c267189f84dbeb7e366ec7c921f5195aca7", "version": 2}, {"block": {"hash": "00000000000000000a1807a17ebcda93947db968e9a112b54ec70237d1a76288", "height": 813922, "timestamp": "1697211196"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.55"}, "size": 266, "timeFirstSeen": "1697211167", "txid": "f86f20336955bca4e15588d81d029ad2c0dfa498b8be6aced2b63ba3bea1be0a", "version": 2}, {"block": {"hash": "000000000000000006b8990c77dd7a0d3a850a052b6f0bd60b82d44d1ffa7a55", "height": 813615, "timestamp": "1697025138"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "alias", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 268, "timeFirstSeen": "1697024688", "txid": "f17814a75dad000557f19a3a3f6fcc124ab7880292c9fad4c64dc034d5e46551", "version": 2}, {"block": {"hash": "000000000000000006b8990c77dd7a0d3a850a052b6f0bd60b82d44d1ffa7a55", "height": 813615, "timestamp": "1697025138"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "alias", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 267, "timeFirstSeen": "1697024682", "txid": "7eacd3b752003fe761e359cac3d98b1faf4f1dd411150eabc89da8208a312b0e", "version": 2}, {"block": {"hash": "00000000000000000b2dfec91630d335b0233fb323a7acbb297b586d1d0d0678", "height": 812408, "timestamp": "1696282475"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": false, "incoming": false, "isCashtabMessage": true, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "still works", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "22"}, "size": 252, "timeFirstSeen": "1696281429", "txid": "8b3cb0e6c38ee01f9e1e98d611895ff2cd09ad9b4fea73f76f951be815278c26", "version": 2}], "slpUtxos": [{"address": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "blockHeight": -1, "decimals": 0, "isCoinbase": false, "network": "XEC", "outpoint": {"outIdx": 1, "txid": "3b0760858b0b20ff50d0db67793892d29d2466b86a0116f7e232792da0c22330"}, "slpMeta": {"tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109", "tokenType": "FUNGIBLE", "txType": "SEND"}, "slpToken": {"amount": "1", "isMintBaton": false}, "tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109", "tokenQty": "1", "value": "546"}], "tokens": [{"balance": "1", "info": {"decimals": 0, "success": true, "tokenDocumentHash": "", "tokenDocumentUrl": "https://cashtab.com/", "tokenName": "BearNip", "tokenTicker": "BEAR"}, "tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109"}]}}
Received: undefined

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div />
  </body>
</html>
    at toStrictEqual (/work/cashtab/src/hooks/__tests__/useWallet.test.js:698:60)
    at runWithExpensiveErrorDiagnosticsDisabled (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:47:12)
    at checkCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:124:77)
    at checkRealTimersCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:118:16)
    at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)
====== CashTab Unit Tests: <Receive /> Renders as expected on desktop, including copy paste functionality of clicking on the QR code ======
Error: expect(element).not.toBeInTheDocument()

expected document not to contain element, found <div class="sc-jwKygS hNrbtP" data-testid="rcv-loading" /> instead

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div>
      <div
        class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
      >
        <div>
          <div
            aria-busy="true"
            aria-live="polite"
            class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
          >
            <span
              aria-label="loading"
              class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
              role="img"
            >
              <svg
                aria-hidden="true"
                data-icon="loading"
                fill="currentColor"
                focusable="false"
                height="1em"
                viewBox="0 0 1024 1024"
                width="1em"
              >
                <path
                  d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
                />
              </svg>
            </span>
          </div>
        </div>
        <div
          class="ant-spin-container ant-spin-blur"
        >
          <div
            class="sc-iBEsjs hYXNZl"
          >
            <div
              class="sc-RcBXQ krXqvz"
            >
              <div
                class="sc-iSDuPN cdWENt"
              >
                <div
                  class="sc-chbbiW kmKhFr"
                >
                  <div
                    class="sc-fZwumE jmbiQP"
                  >
                    <img
                      alt="cashtab"
                      class="sc-fQejPQ iclGva"
                      src="test-file-stub"
                    />
                  </div>
                </div>
                <div
                  class="sc-jwKygS hNrbtP"
                  data-testid="rcv-loading"
                />
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </body>
</html>...
    at toBeInTheDocument (/work/cashtab/src/components/Receive/__tests__/Receive.test.js:105:61)
    at runWithExpensiveErrorDiagnosticsDisabled (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:47:12)
    at checkCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:124:77)
    at checkRealTimersCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:118:16)
    at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)
====== CashTab Unit Tests: <Receive /> Renders the Receive screen with QR code of expected width for smallest supported mobile view ======
Error: expect(element).not.toBeInTheDocument()

expected document not to contain element, found <div class="sc-jwKygS hNrbtP" data-testid="rcv-loading" /> instead

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div>
      <div
        class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
      >
        <div>
          <div
            aria-busy="true"
            aria-live="polite"
            class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
          >
            <span
              aria-label="loading"
              class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
              role="img"
            >
              <svg
                aria-hidden="true"
                data-icon="loading"
                fill="currentColor"
                focusable="false"
                height="1em"
                viewBox="0 0 1024 1024"
                width="1em"
              >
                <path
                  d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
                />
              </svg>
            </span>
          </div>
        </div>
        <div
          class="ant-spin-container ant-spin-blur"
        >
          <div
            class="sc-iBEsjs hYXNZl"
          >
            <div
              class="sc-RcBXQ krXqvz"
            >
              <div
                class="sc-iSDuPN cdWENt"
              >
                <div
                  class="sc-chbbiW kmKhFr"
                >
                  <div
                    class="sc-fZwumE jmbiQP"
                  >
                    <img
                      alt="cashtab"
                      class="sc-fQejPQ iclGva"
                      src="test-file-stub"
                    />
                  </div>
                </div>
                <div
                  class="sc-jwKygS hNrbtP"
                  data-testid="rcv-loading"
                />
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </body>
</html>...
    at toBeInTheDocument (/work/cashtab/src/components/Receive/__tests__/Receive.test.js:166:61)
    at runWithExpensiveErrorDiagnosticsDisabled (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:47:12)
    at checkCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:124:77)
    at checkRealTimersCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:118:16)
    at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)
====== CashTab Unit Tests: <Receive /> Renders the Receive screen with QR code of size that is fully viewable in extension dimensions ======
Error: expect(element).not.toBeInTheDocument()

expected document not to contain element, found <div class="sc-jwKygS hNrbtP" data-testid="rcv-loading" /> instead

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div>
      <div
        class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
      >
        <div>
          <div
            aria-busy="true"
            aria-live="polite"
            class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
          >
            <span
              aria-label="loading"
              class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
              role="img"
            >
              <svg
                aria-hidden="true"
                data-icon="loading"
                fill="currentColor"
                focusable="false"
                height="1em"
                viewBox="0 0 1024 1024"
                width="1em"
              >
                <path
                  d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
                />
              </svg>
            </span>
          </div>
        </div>
        <div
          class="ant-spin-container ant-spin-blur"
        >
          <div
            class="sc-iBEsjs hYXNZl"
          >
            <div
              class="sc-RcBXQ krXqvz"
            >
              <div
                class="sc-iSDuPN cdWENt"
              >
                <div
                  class="sc-chbbiW kmKhFr"
                >
                  <div
                    class="sc-fZwumE jmbiQP"
                  >
                    <img
                      alt="cashtab"
                      class="sc-fQejPQ iclGva"
                      src="test-file-stub"
                    />
                  </div>
                </div>
                <div
                  class="sc-jwKygS hNrbtP"
                  data-testid="rcv-loading"
                />
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </body>
</html>...
    at toBeInTheDocument (/work/cashtab/src/components/Receive/__tests__/Receive.test.js:215:61)
    at runWithExpensiveErrorDiagnosticsDisabled (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:47:12)
    at checkCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:124:77)
    at checkRealTimersCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:118:16)
    at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)
====== CashTab Unit Tests: <Home /> Renders the loading component while loading, then the Home screen ======
Error: expect(element).not.toBeInTheDocument()

expected document not to contain element, found <div class="sc-jwKygS hNrbtP" data-testid="loading-ctn" /> instead

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div>
      <div
        class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
      >
        <div>
          <div
            aria-busy="true"
            aria-live="polite"
            class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
          >
            <span
              aria-label="loading"
              class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
              role="img"
            >
              <svg
                aria-hidden="true"
                data-icon="loading"
                fill="currentColor"
                focusable="false"
                height="1em"
                viewBox="0 0 1024 1024"
                width="1em"
              >
                <path
                  d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
                />
              </svg>
            </span>
          </div>
        </div>
        <div
          class="ant-spin-container ant-spin-blur"
        >
          <div
            class="sc-iBEsjs hYXNZl"
          >
            <div
              class="sc-RcBXQ krXqvz"
            >
              <div
                class="sc-iSDuPN cdWENt"
              >
                <div
                  class="sc-chbbiW kmKhFr"
                >
                  <div
                    class="sc-fZwumE jmbiQP"
                  >
                    <img
                      alt="cashtab"
                      class="sc-fQejPQ iclGva"
                      src="test-file-stub"
                    />
                  </div>
                </div>
                <div
                  class="sc-jwKygS hNrbtP"
                  data-testid="loading-ctn"
                />
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </body>
</html>...
    at toBeInTheDocument (/work/cashtab/src/components/Home/__tests__/Home.test.js:95:61)
    at runWithExpensiveErrorDiagnosticsDisabled (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:47:12)
    at checkCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:124:77)
    at checkRealTimersCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:118:16)
    at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)
====== CashTab Unit Tests: <Home /> Renders the Home screen with API error ======
Error: Unable to find an element with the text: Error in chronik connection. 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="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jwKygS hNrbtP"
                data-testid="loading-ctn"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    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/Home/__tests__/Home.test.js:122:26)
====== CashTab Unit Tests: <Home /> Renders Sideshift button if user loads with a new wallet ======
Error: expect(element).not.toBeInTheDocument()

expected document not to contain element, found <div class="sc-jwKygS hNrbtP" data-testid="loading-ctn" /> instead

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div>
      <div
        class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
      >
        <div>
          <div
            aria-busy="true"
            aria-live="polite"
            class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
          >
            <span
              aria-label="loading"
              class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
              role="img"
            >
              <svg
                aria-hidden="true"
                data-icon="loading"
                fill="currentColor"
                focusable="false"
                height="1em"
                viewBox="0 0 1024 1024"
                width="1em"
              >
                <path
                  d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
                />
              </svg>
            </span>
          </div>
        </div>
        <div
          class="ant-spin-container ant-spin-blur"
        >
          <div
            class="sc-iBEsjs hYXNZl"
          >
            <div
              class="sc-RcBXQ krXqvz"
            >
              <div
                class="sc-iSDuPN cdWENt"
              >
                <div
                  class="sc-chbbiW kmKhFr"
                >
                  <div
                    class="sc-fZwumE jmbiQP"
                  >
                    <img
                      alt="cashtab"
                      class="sc-fQejPQ iclGva"
                      src="test-file-stub"
                    />
                  </div>
                </div>
                <div
                  class="sc-jwKygS hNrbtP"
                  data-testid="loading-ctn"
                />
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </body>
</html>...
    at toBeInTheDocument (/work/cashtab/src/components/Home/__tests__/Home.test.js:135:61)
    at runWithExpensiveErrorDiagnosticsDisabled (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:47:12)
    at checkCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:124:77)
    at checkRealTimersCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:118:16)
    at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)
====== CashTab Unit Tests: <CreateToken /> If wallet has sufficient XEC, renders CreateTokenForm ======
Error: Unable to find an element with the text: Create a Token. 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="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-lhVmIH gJoLAm"
              >
                <p
                  class="sc-dqBHgY iOJezR"
                >
                  You need at least 
                  5.5
                   
                  XEC
                   (
                  $
                  0.0002
                   
                  USD
                  ) to create a token
                </p>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    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/Etokens/__tests__/CreateToken.test.js:85:29)
====== CashTab Unit Tests: <CreateToken /> If wallet has insufficient XEC, renders component but does not render CreateTokenForm ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== CashTab Unit Tests: <CashtabTestWrapper /> With default props, renders App component ======
Error: expect(element).not.toBeInTheDocument()

expected document not to contain element, found <div class="sc-jwKygS hNrbtP" data-testid="loading-ctn" /> instead

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div>
      <div
        class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
      >
        <div>
          <div
            aria-busy="true"
            aria-live="polite"
            class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
          >
            <span
              aria-label="loading"
              class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
              role="img"
            >
              <svg
                aria-hidden="true"
                data-icon="loading"
                fill="currentColor"
                focusable="false"
                height="1em"
                viewBox="0 0 1024 1024"
                width="1em"
              >
                <path
                  d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
                />
              </svg>
            </span>
          </div>
        </div>
        <div
          class="ant-spin-container ant-spin-blur"
        >
          <div
            class="sc-iBEsjs hYXNZl"
          >
            <div
              class="sc-RcBXQ krXqvz"
            >
              <div
                class="sc-iSDuPN cdWENt"
              >
                <div
                  class="sc-chbbiW kmKhFr"
                >
                  <div
                    class="sc-fZwumE jmbiQP"
                  >
                    <img
                      alt="cashtab"
                      class="sc-fQejPQ iclGva"
                      src="test-file-stub"
                    />
                  </div>
                </div>
                <div
                  class="sc-jwKygS hNrbtP"
                  data-testid="loading-ctn"
                />
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </body>
</html>...
    at toBeInTheDocument (/work/cashtab/src/components/fixtures/__tests__/CashtabTestWrapper.test.js:87:61)
    at runWithExpensiveErrorDiagnosticsDisabled (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:47:12)
    at checkCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:124:77)
    at checkRealTimersCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:118:16)
    at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)
====== CashTab Unit Tests: <CashtabTestWrapper /> We can render other pages by passing the route ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at runNextTicks (node:internal/process/task_queues:60:5)
    at processImmediate (node:internal/timers:449:9)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== CashTab Unit Tests: <Alias /> Registered and Pending Aliases are correctly rendered ======
Error: expect(element).toHaveTextContent()

Expected element to have text content:
  chicken555.xecchicken666.xec
Received:
  No registered aliases

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div>
      <div
        class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
      >
        <div>
          <div
            aria-busy="true"
            aria-live="polite"
            class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
          >
            <span
              aria-label="loading"
              class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
              role="img"
            >
              <svg
                aria-hidden="true"
                data-icon="loading"
                fill="currentColor"
                focusable="false"
                height="1em"
                viewBox="0 0 1024 1024"
                width="1em"
              >
                <path
                  d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
                />
              </svg>
            </span>
          </div>
        </div>
        <div
          class="ant-spin-container ant-spin-blur"
        >
          <div
            class="sc-iBEsjs hYXNZl"
          >
            <div
              class="sc-RcBXQ krXqvz"
            >
              <div
                class="sc-iSDuPN cdWENt"
              >
                <div
                  class="sc-chbbiW kmKhFr"
                >
                  <div
                    class="sc-fZwumE jmbiQP"
                  >
                    <img
                      alt="cashtab"
                      class="sc-fQejPQ iclGva"
                      src="test-file-stub"
                    />
                  </div>
                </div>
                <div
                  class="sc-lhVmIH gJoLAm"
                >
                  <div
                    class="ant-row css-dev-only-do-not-override-1rqnfsa"
                    type="flex"
                  >
                    <div
                      class="ant-col ant-col-24 css-dev-only-do-not-override-1rqnfsa"
                    >
                      <div
                        class="sc-cpmLhU jXNcio"
                      >
                        <h2>
                          eCash Namespace Alias
                        </h2>
                      </div>
                      <div
                        class="sc-lhVmIH gJoLAm"
                      >
                        <div
                          class="sc-cvbbAY kdxSAu"
                        >
                          <form
                            class="ant-form ant-form-horizontal css-dev-only-do-not-override-1rqnfsa"
                            style="width: auto;"
                          >
                            <div
                              class="ant-form-item css-dev-only-do-not-override-1rqnfsa"
                            >
                              <div
                                class="ant-row ant-form-item-row css-dev-only-do-not-override-1rqnfsa"
                              >
                                <div
                                  class="ant-col ant-form-item-control css-dev-only-do-not-override-1rqnfsa"
                                >
                                  <div
                                    class="ant-form-item-control-input"
                                  >
                                    <div
                                      class="ant-form-item-control-input-content"
                                    >
                                      <div
                                        class="sc-cvbbAY kdxSAu"
                                      >
                                        <div
                                          class="ant-form-item css-dev-only-do-not-override-1rqnfsa ant-form-item-with-help ant-form-item-has-error"
                                        >
                                          <div
                                            class="ant-row ant-form-item-row css-dev-only-do-not-override-1rqnfsa"
                                          >
                                            <div
                                              class="ant-col ant-form-item-control css-dev-only-do-not-override-1rqnfsa"
                                            >
                                              <div
                                                class="ant-form-item-control-input"
                                              >
                                                <div
                                                  class="ant-form-item-control-input-content"
                                                >
                                                  <span
                                                    class="ant-input-group-wrapper ant-input-group-wrapper-outlined ant-input-group-wrapper-status-error css-dev-only-do-not-override-1rqnfsa"
                                                  >
                                                    <span
                                                      ...
    at toHaveTextContent (/work/cashtab/src/components/Alias/__tests__/Alias.test.js:118:15)
    at runWithExpensiveErrorDiagnosticsDisabled (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:47:12)
    at checkCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:124:77)
    at checkRealTimersCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:118:16)
    at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)
====== CashTab Unit Tests: <Alias /> Registered and Pending Aliases are correctly rendered when pending list is empty ======
Error: expect(element).toHaveTextContent()

Expected element to have text content:
  chicken555.xec
Received:
  No registered aliases

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div>
      <div
        class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
      >
        <div>
          <div
            aria-busy="true"
            aria-live="polite"
            class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
          >
            <span
              aria-label="loading"
              class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
              role="img"
            >
              <svg
                aria-hidden="true"
                data-icon="loading"
                fill="currentColor"
                focusable="false"
                height="1em"
                viewBox="0 0 1024 1024"
                width="1em"
              >
                <path
                  d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
                />
              </svg>
            </span>
          </div>
        </div>
        <div
          class="ant-spin-container ant-spin-blur"
        >
          <div
            class="sc-iBEsjs hYXNZl"
          >
            <div
              class="sc-RcBXQ krXqvz"
            >
              <div
                class="sc-iSDuPN cdWENt"
              >
                <div
                  class="sc-chbbiW kmKhFr"
                >
                  <div
                    class="sc-fZwumE jmbiQP"
                  >
                    <img
                      alt="cashtab"
                      class="sc-fQejPQ iclGva"
                      src="test-file-stub"
                    />
                  </div>
                </div>
                <div
                  class="sc-lhVmIH gJoLAm"
                >
                  <div
                    class="ant-row css-dev-only-do-not-override-1rqnfsa"
                    type="flex"
                  >
                    <div
                      class="ant-col ant-col-24 css-dev-only-do-not-override-1rqnfsa"
                    >
                      <div
                        class="sc-cpmLhU jXNcio"
                      >
                        <h2>
                          eCash Namespace Alias
                        </h2>
                      </div>
                      <div
                        class="sc-lhVmIH gJoLAm"
                      >
                        <div
                          class="sc-cvbbAY kdxSAu"
                        >
                          <form
                            class="ant-form ant-form-horizontal css-dev-only-do-not-override-1rqnfsa"
                            style="width: auto;"
                          >
                            <div
                              class="ant-form-item css-dev-only-do-not-override-1rqnfsa"
                            >
                              <div
                                class="ant-row ant-form-item-row css-dev-only-do-not-override-1rqnfsa"
                              >
                                <div
                                  class="ant-col ant-form-item-control css-dev-only-do-not-override-1rqnfsa"
                                >
                                  <div
                                    class="ant-form-item-control-input"
                                  >
                                    <div
                                      class="ant-form-item-control-input-content"
                                    >
                                      <div
                                        class="sc-cvbbAY kdxSAu"
                                      >
                                        <div
                                          class="ant-form-item css-dev-only-do-not-override-1rqnfsa ant-form-item-with-help ant-form-item-has-error"
                                        >
                                          <div
                                            class="ant-row ant-form-item-row css-dev-only-do-not-override-1rqnfsa"
                                          >
                                            <div
                                              class="ant-col ant-form-item-control css-dev-only-do-not-override-1rqnfsa"
                                            >
                                              <div
                                                class="ant-form-item-control-input"
                                              >
                                                <div
                                                  class="ant-form-item-control-input-content"
                                                >
                                                  <span
                                                    class="ant-input-group-wrapper ant-input-group-wrapper-outlined ant-input-group-wrapper-status-error css-dev-only-do-not-override-1rqnfsa"
                                                  >
                                                    <span
                                                      ...
    at toHaveTextContent (/work/cashtab/src/components/Alias/__tests__/Alias.test.js:162:15)
    at runWithExpensiveErrorDiagnosticsDisabled (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:47:12)
    at checkCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:124:77)
    at checkRealTimersCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:118:16)
    at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)
====== CashTab Unit Tests: <Alias /> Registered and Pending Aliases are correctly rendered when registered list is empty ======
Error: expect(element).toHaveTextContent()

Expected element to have text content:
  chicken444.xec
Received:
  No pending aliases

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div>
      <div
        class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
      >
        <div>
          <div
            aria-busy="true"
            aria-live="polite"
            class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
          >
            <span
              aria-label="loading"
              class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
              role="img"
            >
              <svg
                aria-hidden="true"
                data-icon="loading"
                fill="currentColor"
                focusable="false"
                height="1em"
                viewBox="0 0 1024 1024"
                width="1em"
              >
                <path
                  d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
                />
              </svg>
            </span>
          </div>
        </div>
        <div
          class="ant-spin-container ant-spin-blur"
        >
          <div
            class="sc-iBEsjs hYXNZl"
          >
            <div
              class="sc-RcBXQ krXqvz"
            >
              <div
                class="sc-iSDuPN cdWENt"
              >
                <div
                  class="sc-chbbiW kmKhFr"
                >
                  <div
                    class="sc-fZwumE jmbiQP"
                  >
                    <img
                      alt="cashtab"
                      class="sc-fQejPQ iclGva"
                      src="test-file-stub"
                    />
                  </div>
                </div>
                <div
                  class="sc-lhVmIH gJoLAm"
                >
                  <div
                    class="ant-row css-dev-only-do-not-override-1rqnfsa"
                    type="flex"
                  >
                    <div
                      class="ant-col ant-col-24 css-dev-only-do-not-override-1rqnfsa"
                    >
                      <div
                        class="sc-cpmLhU jXNcio"
                      >
                        <h2>
                          eCash Namespace Alias
                        </h2>
                      </div>
                      <div
                        class="sc-lhVmIH gJoLAm"
                      >
                        <div
                          class="sc-cvbbAY kdxSAu"
                        >
                          <form
                            class="ant-form ant-form-horizontal css-dev-only-do-not-override-1rqnfsa"
                            style="width: auto;"
                          >
                            <div
                              class="ant-form-item css-dev-only-do-not-override-1rqnfsa"
                            >
                              <div
                                class="ant-row ant-form-item-row css-dev-only-do-not-override-1rqnfsa"
                              >
                                <div
                                  class="ant-col ant-form-item-control css-dev-only-do-not-override-1rqnfsa"
                                >
                                  <div
                                    class="ant-form-item-control-input"
                                  >
                                    <div
                                      class="ant-form-item-control-input-content"
                                    >
                                      <div
                                        class="sc-cvbbAY kdxSAu"
                                      >
                                        <div
                                          class="ant-form-item css-dev-only-do-not-override-1rqnfsa ant-form-item-with-help ant-form-item-has-error"
                                        >
                                          <div
                                            class="ant-row ant-form-item-row css-dev-only-do-not-override-1rqnfsa"
                                          >
                                            <div
                                              class="ant-col ant-form-item-control css-dev-only-do-not-override-1rqnfsa"
                                            >
                                              <div
                                                class="ant-form-item-control-input"
                                              >
                                                <div
                                                  class="ant-form-item-control-input-content"
                                                >
                                                  <span
                                                    class="ant-input-group-wrapper ant-input-group-wrapper-outlined ant-input-group-wrapper-status-error css-dev-only-do-not-override-1rqnfsa"
                                                  >
                                                    <span
                                                      ...
    at toHaveTextContent (/work/cashtab/src/components/Alias/__tests__/Alias.test.js:211:15)
    at runWithExpensiveErrorDiagnosticsDisabled (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:47:12)
    at checkCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:124:77)
    at checkRealTimersCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:118:16)
    at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)
====== CashTab Unit Tests: <Alias /> Registered and Pending lists still renders when aliasValidationError is populated and aliasServerError is false ======
Error: expect(element).toHaveTextContent()

Expected element to have text content:
  chicken555.xecchicken666.xec
Received:
  No registered aliases

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div>
      <div
        class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
      >
        <div>
          <div
            aria-busy="true"
            aria-live="polite"
            class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
          >
            <span
              aria-label="loading"
              class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
              role="img"
            >
              <svg
                aria-hidden="true"
                data-icon="loading"
                fill="currentColor"
                focusable="false"
                height="1em"
                viewBox="0 0 1024 1024"
                width="1em"
              >
                <path
                  d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
                />
              </svg>
            </span>
          </div>
        </div>
        <div
          class="ant-spin-container ant-spin-blur"
        >
          <div
            class="sc-iBEsjs hYXNZl"
          >
            <div
              class="sc-RcBXQ krXqvz"
            >
              <div
                class="sc-iSDuPN cdWENt"
              >
                <div
                  class="sc-chbbiW kmKhFr"
                >
                  <div
                    class="sc-fZwumE jmbiQP"
                  >
                    <img
                      alt="cashtab"
                      class="sc-fQejPQ iclGva"
                      src="test-file-stub"
                    />
                  </div>
                </div>
                <div
                  class="sc-lhVmIH gJoLAm"
                >
                  <div
                    class="ant-row css-dev-only-do-not-override-1rqnfsa"
                    type="flex"
                  >
                    <div
                      class="ant-col ant-col-24 css-dev-only-do-not-override-1rqnfsa"
                    >
                      <div
                        class="sc-cpmLhU jXNcio"
                      >
                        <h2>
                          eCash Namespace Alias
                        </h2>
                      </div>
                      <div
                        class="sc-lhVmIH gJoLAm"
                      >
                        <div
                          class="sc-cvbbAY kdxSAu"
                        >
                          <form
                            class="ant-form ant-form-horizontal css-dev-only-do-not-override-1rqnfsa"
                            style="width: auto;"
                          >
                            <div
                              class="ant-form-item css-dev-only-do-not-override-1rqnfsa"
                            >
                              <div
                                class="ant-row ant-form-item-row css-dev-only-do-not-override-1rqnfsa"
                              >
                                <div
                                  class="ant-col ant-form-item-control css-dev-only-do-not-override-1rqnfsa"
                                >
                                  <div
                                    class="ant-form-item-control-input"
                                  >
                                    <div
                                      class="ant-form-item-control-input-content"
                                    >
                                      <div
                                        class="sc-cvbbAY kdxSAu"
                                      >
                                        <div
                                          class="ant-form-item css-dev-only-do-not-override-1rqnfsa ant-form-item-with-help ant-form-item-has-error"
                                        >
                                          <div
                                            class="ant-row ant-form-item-row css-dev-only-do-not-override-1rqnfsa"
                                          >
                                            <div
                                              class="ant-col ant-form-item-control css-dev-only-do-not-override-1rqnfsa"
                                            >
                                              <div
                                                class="ant-form-item-control-input"
                                              >
                                                <div
                                                  class="ant-form-item-control-input-content"
                                                >
                                                  <span
                                                    class="ant-input-group-wrapper ant-input-group-wrapper-outlined ant-input-group-wrapper-status-error css-dev-only-do-not-override-1rqnfsa"
                                                  >
                                                    <span
                                                      ...
    at toHaveTextContent (/work/cashtab/src/components/Alias/__tests__/Alias.test.js:244:15)
    at runWithExpensiveErrorDiagnosticsDisabled (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:47:12)
    at checkCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:124:77)
    at checkRealTimersCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:118:16)
    at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)
====== CashTab Unit Tests: <Alias /> Registered and Pending lists do not render when aliasValidationError is false and aliasServerError is populated ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== CashTab Unit Tests: <SignVerifyMsg /> Notification is rendered upon successfully signing a message ======
Error: Unable to find an element with the text: Message Signature Generated. 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="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                  <div
                    class="sc-jXQZqI jNpDSO"
                  >
                     
                    Sign & Verify Msg
                    <svg
                      class="sc-chPdSV kiHcnD"
                    />
                  </div>
                </div>
              </div>
              <div
                class="sc-ipXKqB fnQgHb"
              >
                <div
                  class="sc-lhVmIH gJoLAm"
                  data-testid="signverifymsg-ctn"
                >
                  <div
                    class="sc-iuJeZd fbkGmg"
                  >
                    <div
                      class="ant-collapse ant-collapse-icon-position-start sc-cmthru bLbIvy css-dev-only-do-not-override-1rqnfsa"
                      style="margin-bottom: 24px;"
                    >
                      <div
                        class="ant-collapse-item ant-collapse-item-active"
                      >
                        <div
                          aria-disabled="false"
                          aria-expanded="true"
                          class="ant-collapse-header"
                          role="button"
                          tabindex="0"
                        >
                          <div
                            class="ant-collapse-expand-icon"
                          >
                            <span
                              aria-label="right"
                              class="anticon anticon-right ant-collapse-arrow"
                              role="img"
                            >
                              <svg
                                aria-hidden="true"
                                data-icon="right"
                                fill="currentColor"
                                focusable="false"
                                height="1em"
                                style="transform: rotate(90deg);"
                                viewBox="64 64 896 896"
                                width="1em"
                              >
                                <path
                                  d="M765.7 486.8L314.9 134.7A7.97 7.97 0 00302 141v77.3c0 4.9 2.3 9.6 6.1 12.6l360 281.1-360 281.1c-3.9 3-6.1 7.7-6.1 12.6V883c0 6.7 7.7 10.4 12.9 6.3l450.8-352.1a31.96 31.96 0 000-50.4z"
                                />
                              </svg>
                            </span>
                          </div>
                          <span
                            class="ant-collapse-header-text"
                          >
                            <div
                              class="sc-cMhqgX dwYjBs"
                            >
                              Sign
                            </div>
                          </span>
                        </div>
                        <div
                          class="ant-collapse-content ant-collapse-content-active"
                        >
                          <div
                            class="ant-collapse-content-box"
                          >
                            <div
                              class="sc-cvbbAY kdxSAu"
                            >
                              <form
                                class="ant-form ant-form-horizontal ant-form-small css-dev-only-do-not-o...
    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/SignVerifyMsg/__tests__/SignVerifyMsg.test.js:109:26)
====== CashTab Unit Tests: <SignVerifyMsg /> Notification is rendered upon successfully verifying a message ======
Error: Unable to perform pointer interaction as the element inherits `pointer-events: none`:

DIV  <-- This element declared `pointer-events: none`
 DIV
  DIV
   DIV
    DIV
     DIV(testId=signverifymsg-ctn)
      DIV
       DIV
        DIV
         DIV
          DIV
           DIV
            FORM
             DIV
              DIV
               DIV
                DIV
                 DIV
                  DIV
                   DIV
                    DIV
                     DIV
                      DIV
                       DIV
                        SPAN
                         INPUT(testId=destination-address-single-without-qrscan)  <-- Asserted pointer events here
    at Object.assertPointerEvents (/work/cashtab/node_modules/@testing-library/user-event/dist/cjs/utils/pointer/cssPointerEvents.js:47:15)
    at Object.enter (/work/cashtab/node_modules/@testing-library/user-event/dist/cjs/system/pointer/pointer.js:57:34)
    at PointerHost.move (/work/cashtab/node_modules/@testing-library/user-event/dist/cjs/system/pointer/index.js:50:79)
    at pointerAction (/work/cashtab/node_modules/@testing-library/user-event/dist/cjs/pointer/index.js:64:39)
    at Object.pointer (/work/cashtab/node_modules/@testing-library/user-event/dist/cjs/pointer/index.js:32:15)
    at Object.type (/work/cashtab/node_modules/@testing-library/user-event/dist/cjs/utility/type.js:18:9)
    at Object.asyncWrapper (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:88:22)
    at Object.<anonymous> (/work/cashtab/src/components/SignVerifyMsg/__tests__/SignVerifyMsg.test.js:136:9)
====== CashTab Unit Tests: <SignVerifyMsg /> Notification is rendered upon signature verification error ======
Error: Unable to perform pointer interaction as the element inherits `pointer-events: none`:

DIV  <-- This element declared `pointer-events: none`
 DIV
  DIV
   DIV
    DIV
     DIV(testId=signverifymsg-ctn)
      DIV
       DIV
        DIV
         DIV
          DIV
           DIV
            FORM
             DIV
              DIV
               DIV
                DIV
                 DIV
                  DIV
                   DIV
                    DIV
                     DIV
                      DIV
                       DIV
                        SPAN
                         INPUT(testId=destination-address-single-without-qrscan)  <-- Asserted pointer events here
    at Object.assertPointerEvents (/work/cashtab/node_modules/@testing-library/user-event/dist/cjs/utils/pointer/cssPointerEvents.js:47:15)
    at Object.enter (/work/cashtab/node_modules/@testing-library/user-event/dist/cjs/system/pointer/pointer.js:57:34)
    at PointerHost.move (/work/cashtab/node_modules/@testing-library/user-event/dist/cjs/system/pointer/index.js:50:79)
    at pointerAction (/work/cashtab/node_modules/@testing-library/user-event/dist/cjs/pointer/index.js:64:39)
    at Object.pointer (/work/cashtab/node_modules/@testing-library/user-event/dist/cjs/pointer/index.js:32:15)
    at Object.type (/work/cashtab/node_modules/@testing-library/user-event/dist/cjs/utility/type.js:18:9)
    at Object.asyncWrapper (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:88:22)
    at Object.<anonymous> (/work/cashtab/src/components/SignVerifyMsg/__tests__/SignVerifyMsg.test.js:183:9)
====== CashTab Unit Tests: <Configure /> We can add, delete, rename, contacts from the Configure screen, and add a savedWallet as a contact ======
Error: Unable to find an element with the text: alpha. 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="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div
        class="ant-spin-container"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                  <div
                    class="sc-jXQZqI jNpDSO"
                  >
                    Settings
                    <svg
                      height="33px"
                      width="30px"
                    />
                  </div>
                </div>
              </div>
              <div
                class="sc-lhVmIH gJoLAm"
                data-testid="configure-ctn"
              >
                <div
                  class="sc-gPWkxV fPJZLd"
                >
                  <h2>
                    <span
                      aria-label="copy"
                      class="anticon anticon-copy sc-bwzfXH gJwWNq"
                      role="img"
                    >
                      <svg
                        aria-hidden="true"
                        data-icon="copy"
                        fill="currentColor"
                        focusable="false"
                        height="1em"
                        viewBox="64 64 896 896"
                        width="1em"
                      >
                        <path
                          d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"
                        />
                      </svg>
                    </span>
                     Backup your wallet
                  </h2>
                  <div
                    class="ant-alert ant-alert-warning ant-alert-with-description css-dev-only-do-not-override-1rqnfsa"
                    data-show="true"
                    role="alert"
                    style="margin-bottom: 12px;"
                  >
                    <span
                      aria-label="exclamation-circle"
                      class="anticon anticon-exclamation-circle ant-alert-icon"
                      role="img"
                    >
                      <svg
                        aria-hidden="true"
                        data-icon="exclamation-circle"
                        fill="currentColor"
                        focusable="false"
                        height="1em"
                        viewBox="64 64 896 896"
                        width="1em"
                      >
                        <path
                          d="M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm-32 232c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v272c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V296zm32 440a48.01 48.01 0 010-96 48.01 48.01 0 010 96z"
                        />
                      </svg>
                    </span>
                    <div
                      class="ant-alert-content"
                    >
                      <div
                        class="ant-alert-description"
                      >
                        Your seed phrase is the only way to restore your wallet. Write it down. Keep it safe.
                      </div>
                    </div>
                  </div>
                  <div
                    class="sc-jVODtj dXVIps"
                  />
                  <h2>
                    <span
                      aria-label="wallet"
                      class="anticon anticon-wallet sc-bxivhb iBBRHU"
                      role="img"
                    >
                      <svg
                        aria-hidden="true"
                        data-icon="wallet"
                        fill="currentColor"
                        focusable="false"
                        height="1em"
                        viewBox="64 64 896 896"
                        width="1em"
                      >
                        <path
                          d="M880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-40 464H528V448h312v128zm0 264H184V184h656v200H496c-17.7 0-32 14.3-32 32v192c0 17.7 14.3 32 32 32h344v200zM580 512a40 40 0 1080 0 40 40 0 10-80 0z"
                        />
                      </svg>
                    </span>
                     Manage Wallets
                  </h2>
                  <button
                    class="sc-jAaTju dvdlmc"
                  >[...
    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/Configure/__tests__/Configure.test.js:286:29)
====== CashTab Unit Tests: <Configure /> We can rename the active wallet or a saved wallet, we can add a wallet, we can import a wallet, we can delete a wallet ======
Error: Unable to find an element with the text: alpha. 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
    class="ant-notification ant-notification-topRight css-dev-only-do-not-override-1rqnfsa ant-notification-stack ant-notification-stack-expanded"
    style="right: 0px; top: 24px;"
  >
    <div
      class="ant-notification-notice-wrapper"
      style="transform: translate3d(0, 0, 0);"
    >
      <div
        class="ant-notification-notice ant-notification-notice-error ant-notification-notice-closable"
      >
        <div
          class="ant-notification-notice-content"
        >
          <div
            class="ant-notification-notice-with-icon"
            role="alert"
          >
            <span
              aria-label="close-circle"
              class="anticon anticon-close-circle ant-notification-notice-icon ant-notification-notice-icon-error"
              role="img"
            >
              <svg
                aria-hidden="true"
                data-icon="close-circle"
                fill="currentColor"
                fill-rule="evenodd"
                focusable="false"
                height="1em"
                viewBox="64 64 896 896"
                width="1em"
              >
                <path
                  d="M512 64c247.4 0 448 200.6 448 448S759.4 960 512 960 64 759.4 64 512 264.6 64 512 64zm127.98 274.82h-.04l-.08.06L512 466.75 384.14 338.88c-.04-.05-.06-.06-.08-.06a.12.12 0 00-.07 0c-.03 0-.05.01-.09.05l-45.02 45.02a.2.2 0 00-.05.09.12.12 0 000 .07v.02a.27.27 0 00.06.06L466.75 512 338.88 639.86c-.05.04-.06.06-.06.08a.12.12 0 000 .07c0 .03.01.05.05.09l45.02 45.02a.2.2 0 00.09.05.12.12 0 00.07 0c.02 0 .04-.01.08-.05L512 557.25l127.86 127.87c.04.04.06.05.08.05a.12.12 0 00.07 0c.03 0 .05-.01.09-.05l45.02-45.02a.2.2 0 00.05-.09.12.12 0 000-.07v-.02a.27.27 0 00-.05-.06L557.25 512l127.87-127.86c.04-.04.05-.06.05-.08a.12.12 0 000-.07c0-.03-.01-.05-.05-.09l-45.02-45.02a.2.2 0 00-.09-.05.12.12 0 00-.07 0z"
                />
              </svg>
            </span>
            <div
              class="ant-notification-notice-message"
            >
              Error
            </div>
            <div
              class="ant-notification-notice-description"
            >
              ecash:qqxefwshnmppcsjp0fc6w7rnkdsexc7cagdus7ugd0 already exists in the Contact List
            </div>
          </div>
        </div>
        <a
          class="ant-notification-notice-close"
          tabindex="0"
        >
          <span
            class="ant-notification-notice-close-x"
          >
            <span
              aria-label="close"
              class="anticon anticon-close ant-notification-notice-close-icon"
              role="img"
            >
              <svg
                aria-hidden="true"
                data-icon="close"
                fill="currentColor"
                fill-rule="evenodd"
                focusable="false"
                height="1em"
                viewBox="64 64 896 896"
                width="1em"
              >
                <path
                  d="M799.86 166.31c.02 0 .04.02.08.06l57.69 57.7c.04.03.05.05.06.08a.12.12 0 010 .06c0 .03-.02.05-.06.09L569.93 512l287.7 287.7c.04.04.05.06.06.09a.12.12 0 010 .07c0 .02-.02.04-.06.08l-57.7 57.69c-.03.04-.05.05-.07.06a.12.12 0 01-.07 0c-.03 0-.05-.02-.09-.06L512 569.93l-287.7 287.7c-.04.04-.06.05-.09.06a.12.12 0 01-.07 0c-.02 0-.04-.02-.08-.06l-57.69-57.7c-.04-.03-.05-.05-.06-.07a.12.12 0 010-.07c0-.03.02-.05.06-.09L454.07 512l-287.7-287.7c-.04-.04-.05-.06-.06-.09a.12.12 0 010-.07c0-.02.02-.04.06-.08l57.7-57.69c.03-.04.05-.05.07-.06a.12.12 0 01.07 0c.03 0 .05.02.09.06L512 454.07l287.7-287.7c.04-.04.06-.05.09-.06a.12.12 0 01.07 0z"
                />
              </svg>
            </span>
          </span>
        </a>
      </div>
    </div>
  </div>
  <div>
    <div
      class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <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/Configure/__tests__/Configure.test.js:347:29)
====== CashTab Unit Tests: <SendXec /> rendered with params in URL Legacy params. Address and value keys are set and valid. ======
Error: Unable to find an element with the text: 9,513.12 XEC. 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="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-lhVmIH gJoLAm"
                data-testid="send-xec-ctn"
              >
                <div
                  class="ant-row css-dev-only-do-not-override-1rqnfsa"
                  type="flex"
                >
                  <div
                    class="ant-col ant-col-24 css-dev-only-do-not-override-1rqnfsa"
                  >
                    <form
                      class="ant-form ant-form-horizontal css-dev-only-do-not-override-1rqnfsa"
                      style="width: auto; margin-top: 40px;"
                    >
                      <div
                        class="sc-cLQEGU kzenvK"
                        data-testid="app-created-tx"
                      >
                        Webapp Tx Request
                      </div>
                      <div
                        class="sc-iujRgT bugtRy"
                      >
                         
                        <label
                          class="sc-bYSBpT hSkhnP"
                        >
                          Send to
                        </label>
                      </div>
                      <div
                        class="sc-cQFLBn gLIPDU"
                      >
                        <div
                          class="sc-bMVAic cSvrrD"
                        >
                          <div
                            class="sc-GMQeP jXMCGy"
                          >
                            <div
                              class="sc-cvbbAY kdxSAu"
                            >
                              <div
                                class="ant-form-item css-dev-only-do-not-override-1rqnfsa ant-form-item-with-help"
                                style="margin-bottom: 0px;"
                              >
                                <div
                                  class="ant-row ant-form-item-row css-dev-only-do-not-override-1rqnfsa"
                                >
                                  <div
                                    class="ant-col ant-form-item-control css-dev-only-do-not-override-1rqnfsa"
                                  >
                                    <div
                                      class="ant-form-item-control-input"
                                    >
                                      <div
                                        class="ant-form-item-control-input-content"
                                      >
                                        <span
                                          class="ant-input-group-wrapper ant-input-group-wrapper-disabled ant-input-group-wrapper-outlined css-dev-only-do-not-override-1rqnfsa"
                                        >
                                          <span
                                            class="ant-input-wrapper ant-input-group css-dev-only-do-not-override-1rqnfsa"
                                          >
                                            <span
                                              class="ant-input-affix-wrapper ant-input-disabled ant-input-affix-wrapper-disabled css-dev-only-do-not-override-1rqnfsa ant-input-outlined"
                                            >
                                              <span
                                                class="ant-input-prefix"
                                              >
                               ...
    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/Send/__tests__/SendByUrlParams.test.js:127:29)
====== 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: Unable to find an element with the text: 9,513.12 XEC. 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="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-lhVmIH gJoLAm"
                data-testid="send-xec-ctn"
              >
                <div
                  class="ant-row css-dev-only-do-not-override-1rqnfsa"
                  type="flex"
                >
                  <div
                    class="ant-col ant-col-24 css-dev-only-do-not-override-1rqnfsa"
                  >
                    <form
                      class="ant-form ant-form-horizontal css-dev-only-do-not-override-1rqnfsa"
                      style="width: auto; margin-top: 40px;"
                    >
                      <div
                        class="sc-cLQEGU kzenvK"
                        data-testid="app-created-tx"
                      >
                        Webapp Tx Request
                      </div>
                      <div
                        class="sc-iujRgT bugtRy"
                      >
                         
                        <label
                          class="sc-bYSBpT hSkhnP"
                        >
                          Send to
                        </label>
                      </div>
                      <div
                        class="sc-cQFLBn gLIPDU"
                      >
                        <div
                          class="sc-bMVAic cSvrrD"
                        >
                          <div
                            class="sc-GMQeP jXMCGy"
                          >
                            <div
                              class="sc-cvbbAY kdxSAu"
                            >
                              <div
                                class="ant-form-item css-dev-only-do-not-override-1rqnfsa ant-form-item-with-help"
                                style="margin-bottom: 0px;"
                              >
                                <div
                                  class="ant-row ant-form-item-row css-dev-only-do-not-override-1rqnfsa"
                                >
                                  <div
                                    class="ant-col ant-form-item-control css-dev-only-do-not-override-1rqnfsa"
                                  >
                                    <div
                                      class="ant-form-item-control-input"
                                    >
                                      <div
                                        class="ant-form-item-control-input-content"
                                      >
                                        <span
                                          class="ant-input-group-wrapper ant-input-group-wrapper-disabled ant-input-group-wrapper-outlined css-dev-only-do-not-override-1rqnfsa"
                                        >
                                          <span
                                            class="ant-input-wrapper ant-input-group css-dev-only-do-not-override-1rqnfsa"
                                          >
                                            <span
                                              class="ant-input-affix-wrapper ant-input-disabled ant-input-affix-wrapper-disabled css-dev-only-do-not-override-1rqnfsa ant-input-outlined"
                                            >
                                              <span
                                                class="ant-input-prefix"
                                              >
                               ...
    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/Send/__tests__/SendByUrlParams.test.js:164:29)
====== 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 ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at runNextTicks (node:internal/process/task_queues:60:5)
    at processImmediate (node:internal/timers:449:9)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== 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 ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at runNextTicks (node:internal/process/task_queues:60:5)
    at processImmediate (node:internal/timers:449:9)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== CashTab Unit Tests: <SendXec /> rendered with params in URL Legacy params. Params are ignored if only value param is present ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== CashTab Unit Tests: <SendXec /> rendered with params in URL Legacy params. Params are ignored if param is duplicated ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== 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: Unable to find an element with the text: 9,513.12 XEC. 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="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-lhVmIH gJoLAm"
                data-testid="send-xec-ctn"
              >
                <div
                  class="ant-row css-dev-only-do-not-override-1rqnfsa"
                  type="flex"
                >
                  <div
                    class="ant-col ant-col-24 css-dev-only-do-not-override-1rqnfsa"
                  >
                    <form
                      class="ant-form ant-form-horizontal css-dev-only-do-not-override-1rqnfsa"
                      style="width: auto; margin-top: 40px;"
                    >
                      <div
                        class="sc-cLQEGU kzenvK"
                        data-testid="app-created-tx"
                      >
                        Webapp Tx Request
                      </div>
                      <div
                        class="sc-iujRgT bugtRy"
                      >
                         
                        <label
                          class="sc-bYSBpT hSkhnP"
                        >
                          Send to
                        </label>
                      </div>
                      <div
                        class="sc-cQFLBn gLIPDU"
                      >
                        <div
                          class="sc-bMVAic cSvrrD"
                        >
                          <div
                            class="sc-GMQeP jXMCGy"
                          >
                            <div
                              class="sc-cvbbAY kdxSAu"
                            >
                              <div
                                class="ant-form-item css-dev-only-do-not-override-1rqnfsa ant-form-item-with-help"
                                style="margin-bottom: 0px;"
                              >
                                <div
                                  class="ant-row ant-form-item-row css-dev-only-do-not-override-1rqnfsa"
                                >
                                  <div
                                    class="ant-col ant-form-item-control css-dev-only-do-not-override-1rqnfsa"
                                  >
                                    <div
                                      class="ant-form-item-control-input"
                                    >
                                      <div
                                        class="ant-form-item-control-input-content"
                                      >
                                        <span
                                          class="ant-input-group-wrapper ant-input-group-wrapper-disabled ant-input-group-wrapper-outlined css-dev-only-do-not-override-1rqnfsa"
                                        >
                                          <span
                                            class="ant-input-wrapper ant-input-group css-dev-only-do-not-override-1rqnfsa"
                                          >
                                            <span
                                              class="ant-input-affix-wrapper ant-input-disabled ant-input-affix-wrapper-disabled css-dev-only-do-not-override-1rqnfsa ant-input-outlined"
                                            >
                                              <span
                                                class="ant-input-prefix"
                                              >
                               ...
    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/Send/__tests__/SendByUrlParams.test.js:448:29)
====== 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: Unable to find an element with the text: 9,513.12 XEC. 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="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-lhVmIH gJoLAm"
                data-testid="send-xec-ctn"
              >
                <div
                  class="ant-row css-dev-only-do-not-override-1rqnfsa"
                  type="flex"
                >
                  <div
                    class="ant-col ant-col-24 css-dev-only-do-not-override-1rqnfsa"
                  >
                    <form
                      class="ant-form ant-form-horizontal css-dev-only-do-not-override-1rqnfsa"
                      style="width: auto; margin-top: 40px;"
                    >
                      <div
                        class="sc-cLQEGU kzenvK"
                        data-testid="app-created-tx"
                      >
                        Webapp Tx Request
                      </div>
                      <div
                        class="sc-iujRgT bugtRy"
                      >
                         
                        <label
                          class="sc-bYSBpT hSkhnP"
                        >
                          Send to
                        </label>
                      </div>
                      <div
                        class="sc-cQFLBn gLIPDU"
                      >
                        <div
                          class="sc-bMVAic cSvrrD"
                        >
                          <div
                            class="sc-GMQeP jXMCGy"
                          >
                            <div
                              class="sc-cvbbAY kdxSAu"
                            >
                              <div
                                class="ant-form-item css-dev-only-do-not-override-1rqnfsa ant-form-item-with-help"
                                style="margin-bottom: 0px;"
                              >
                                <div
                                  class="ant-row ant-form-item-row css-dev-only-do-not-override-1rqnfsa"
                                >
                                  <div
                                    class="ant-col ant-form-item-control css-dev-only-do-not-override-1rqnfsa"
                                  >
                                    <div
                                      class="ant-form-item-control-input"
                                    >
                                      <div
                                        class="ant-form-item-control-input-content"
                                      >
                                        <span
                                          class="ant-input-group-wrapper ant-input-group-wrapper-disabled ant-input-group-wrapper-outlined css-dev-only-do-not-override-1rqnfsa"
                                        >
                                          <span
                                            class="ant-input-wrapper ant-input-group css-dev-only-do-not-override-1rqnfsa"
                                          >
                                            <span
                                              class="ant-input-affix-wrapper ant-input-disabled ant-input-affix-wrapper-disabled css-dev-only-do-not-override-1rqnfsa ant-input-outlined"
                                            >
                                              <span
                                                class="ant-input-prefix"
                                              >
                               ...
    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/Send/__tests__/SendByUrlParams.test.js:513:29)
====== CashTab Unit Tests: <SendXec /> rendered with params in URL bip21 param - an invalid bip21 param shows validation errors but cannot be changed ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at runNextTicks (node:internal/process/task_queues:60:5)
    at processImmediate (node:internal/timers:449:9)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== CashTab Unit Tests: <SendXec /> rendered with params in URL No params. Send screen loads normally with no rendered input. ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== CashTab Unit Tests: <SendToken /> Renders the SendToken screen with send address input ======
Error: Unable to find an element with the text: BEAR. 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="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jwKygS hNrbtP"
                data-testid="loading-ctn"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    at waitForWrapper (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:163:27)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendToken.test.js:142:22)
    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: <SendToken /> Accepts a valid ecash: prefixed address ======
Error: Unable to find an element with the text: BEAR. 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="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jwKygS hNrbtP"
                data-testid="loading-ctn"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    at waitForWrapper (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:163:27)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendToken.test.js:175:22)
    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 _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: <SendToken /> Accepts a valid etoken: prefixed address ======
Error: Unable to find an element with the text: BEAR. 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="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jwKygS hNrbtP"
                data-testid="loading-ctn"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    at waitForWrapper (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:163:27)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendToken.test.js:206:22)
    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 _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: <SendToken /> Accepts a valid alias ======
Error: Unable to find an element with the text: BEAR. 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="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jwKygS hNrbtP"
                data-testid="loading-ctn"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    at waitForWrapper (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:163:27)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendToken.test.js:238:22)
    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 _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: <SendToken /> Displays a validation error for an invalid address ======
Error: Unable to find an element with the text: BEAR. 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="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jwKygS hNrbtP"
                data-testid="loading-ctn"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    at waitForWrapper (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:163:27)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendToken.test.js:298:22)
    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 _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: <SendToken /> Displays a validation error for an alias without .xec suffix ======
Error: Unable to find an element with the text: BEAR. 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="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jwKygS hNrbtP"
                data-testid="loading-ctn"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    at waitForWrapper (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:163:27)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendToken.test.js:323:22)
    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 _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: <SendToken /> Displays a validation error for valid alias that has not yet been registered ======
Error: Unable to find an element with the text: BEAR. 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="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jwKygS hNrbtP"
                data-testid="loading-ctn"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    at waitForWrapper (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:163:27)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendToken.test.js:350:22)
    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 _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: <SendToken /> Displays expected error if alias server gives a bad response ======
Error: Unable to find an element with the text: BEAR. 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="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jwKygS hNrbtP"
                data-testid="loading-ctn"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    at waitForWrapper (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:163:27)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendToken.test.js:397:22)
    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 _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: <SendToken /> Displays a validation error if the user includes any query string ======
Error: Unable to find an element with the text: BEAR. 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="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jwKygS hNrbtP"
                data-testid="loading-ctn"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    at waitForWrapper (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:163:27)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendToken.test.js:437:22)
    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 _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: <SendToken /> Renders the send token notification upon successful broadcast ======
Error: Unable to find an element with the text: BEAR. 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="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jwKygS hNrbtP"
                data-testid="loading-ctn"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    at waitForWrapper (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:163:27)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendToken.test.js:475:22)
    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 _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: <SendToken /> Renders the burn token success notification upon successful burn tx broadcast ======
Error: Unable to find an element with the text: BEAR. 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="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jwKygS hNrbtP"
                data-testid="loading-ctn"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    at waitForWrapper (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:163:27)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendToken.test.js:519:22)
    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 _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: <App /> Navigation menu routes to expected components ======
Error: Unable to find an element by: [data-testid="home-ctn"]

Ignored nodes: comments, script, style
<body>
  <div>
    <div
      class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jwKygS hNrbtP"
                data-testid="loading-ctn"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    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.findByTestId (/work/cashtab/src/components/__tests__/App.test.js:117:22)
====== CashTab Unit Tests: <App /> Adding a contact to to a new contactList by clicking on tx history adds it to localforage and wallet context ======
Error: expect(element).not.toBeInTheDocument()

expected document not to contain element, found <div class="sc-jwKygS hNrbtP" data-testid="loading-ctn" /> instead

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div>
      <div
        class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
      >
        <div>
          <div
            aria-busy="true"
            aria-live="polite"
            class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
          >
            <span
              aria-label="loading"
              class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
              role="img"
            >
              <svg
                aria-hidden="true"
                data-icon="loading"
                fill="currentColor"
                focusable="false"
                height="1em"
                viewBox="0 0 1024 1024"
                width="1em"
              >
                <path
                  d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
                />
              </svg>
            </span>
          </div>
        </div>
        <div
          class="ant-spin-container ant-spin-blur"
        >
          <div
            class="sc-iBEsjs hYXNZl"
          >
            <div
              class="sc-RcBXQ krXqvz"
            >
              <div
                class="sc-iSDuPN cdWENt"
              >
                <div
                  class="sc-chbbiW kmKhFr"
                >
                  <div
                    class="sc-fZwumE jmbiQP"
                  >
                    <img
                      alt="cashtab"
                      class="sc-fQejPQ iclGva"
                      src="test-file-stub"
                    />
                  </div>
                </div>
                <div
                  class="sc-jwKygS hNrbtP"
                  data-testid="loading-ctn"
                />
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </body>
</html>...
    at toBeInTheDocument (/work/cashtab/src/components/__tests__/App.test.js:191:61)
    at runWithExpensiveErrorDiagnosticsDisabled (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:47:12)
    at checkCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:124:77)
    at checkRealTimersCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:118:16)
    at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)
====== CashTab Unit Tests: <App /> Adding a contact to an existing contactList by clicking on tx history adds it to localforage and wallet context ======
Error: expect(element).not.toBeInTheDocument()

expected document not to contain element, found <div class="sc-jwKygS hNrbtP" data-testid="loading-ctn" /> instead

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div>
      <div
        class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
      >
        <div>
          <div
            aria-busy="true"
            aria-live="polite"
            class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
          >
            <span
              aria-label="loading"
              class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
              role="img"
            >
              <svg
                aria-hidden="true"
                data-icon="loading"
                fill="currentColor"
                focusable="false"
                height="1em"
                viewBox="0 0 1024 1024"
                width="1em"
              >
                <path
                  d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
                />
              </svg>
            </span>
          </div>
        </div>
        <div
          class="ant-spin-container ant-spin-blur"
        >
          <div
            class="sc-iBEsjs hYXNZl"
          >
            <div
              class="sc-RcBXQ krXqvz"
            >
              <div
                class="sc-iSDuPN cdWENt"
              >
                <div
                  class="sc-chbbiW kmKhFr"
                >
                  <div
                    class="sc-fZwumE jmbiQP"
                  >
                    <img
                      alt="cashtab"
                      class="sc-fQejPQ iclGva"
                      src="test-file-stub"
                    />
                  </div>
                </div>
                <div
                  class="sc-jwKygS hNrbtP"
                  data-testid="loading-ctn"
                />
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </body>
</html>...
    at toBeInTheDocument (/work/cashtab/src/components/__tests__/App.test.js:254:61)
    at runWithExpensiveErrorDiagnosticsDisabled (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:47:12)
    at checkCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:124:77)
    at checkRealTimersCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:118:16)
    at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)
====== CashTab Unit Tests: <App /> A user with legacy blank contactList in localstorage is migrated on startup ======
Error: Unable to find an element by: [data-testid="wallet-info-ctn"]

Ignored nodes: comments, script, style
<body>
  <div>
    <div
      class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div
        class="ant-spin-container"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jlyJG gJnvjg"
              >
                <h2>
                  Welcome to Cashtab!
                </h2>
                <p
                  class="sc-gipzik sOyRw"
                >
                  Cashtab is an
                   
                  <a
                    class="sc-csuQGl ldOtyP"
                    href="https://github.com/bitcoin-abc/bitcoin-abc"
                    rel="noreferrer"
                    target="_blank"
                  >
                    open source,
                  </a>
                   
                  non-custodial web wallet for 
                  eCash
                  .
                </p>
                <button
                  class="sc-jAaTju dvdlmc"
                >
                  <span
                    aria-label="plus-square"
                    class="anticon anticon-plus-square"
                    role="img"
                  >
                    <svg
                      aria-hidden="true"
                      data-icon="plus-square"
                      fill="currentColor"
                      focusable="false"
                      height="1em"
                      viewBox="64 64 896 896"
                      width="1em"
                    >
                      <path
                        d="M328 544h152v152c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V544h152c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8H544V328c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v152H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8z"
                      />
                      <path
                        d="M880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-40 728H184V184h656v656z"
                      />
                    </svg>
                  </span>
                   New Wallet
                </button>
                <button
                  class="sc-jDwBTQ htrvtM"
                >
                  <span
                    aria-label="import"
                    class="anticon anticon-import"
                    role="img"
                  >
                    <svg
                      aria-hidden="true"
                      data-icon="import"
                      fill="currentColor"
                      fill-rule="evenodd"
                      focusable="false"
                      height="1em"
                      viewBox="64 64 896 896"
                      width="1em"
                    >
                      <path
                        d="M880 912H144c-17.7 0-32-14.3-32-32V144c0-17.7 14.3-32 32-32h360c4.4 0 8 3.6 8 8v56c0 4.4-3.6 8-8 8H184v656h656V520c0-4.4 3.6-8 8-8h56c4.4 0 8 3.6 8 8v360c0 17.7-14.3 32-32 32zM653.3 424.6l52.2 52.2a8.01 8.01 0 01-4.7 13.6l-179.4 21c-5.1.6-9.5-3.7-8.9-8.9l21-179.4c.8-6.6 8.9-9.4 13.6-4.7l52.4 52.4 256.2-256.2c3.1-3.1 8.2-3.1 11.3 0l42.4 42.4c3.1 3.1 3.1 8.2 0 11.3L653.3 424.6z"
                      />
                    </svg>
                  </span>
                   Import Wallet
                </button>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    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.findByTestId (/work/cashtab/src/components/__tests__/App.test.js:314:26)
====== CashTab Unit Tests: <App /> Clicking "reply" on a Cashtab Msg correctly populates the SendXec to address and amount fields ======
Error: Unable to find an element by: [data-testid="wallet-info-ctn"]

Ignored nodes: comments, script, style
<body>
  <div>
    <div
      class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jwKygS hNrbtP"
                data-testid="loading-ctn"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    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.findByTestId (/work/cashtab/src/components/__tests__/App.test.js:334:26)
====== CashTab Unit Tests: <App /> We do not see the camera auto-open setting in the config screen on a desktop device ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at runNextTicks (node:internal/process/task_queues:60:5)
    at processImmediate (node:internal/timers:449:9)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== CashTab Unit Tests: <App /> We do see the camera auto-open setting in the config screen on a mobile device ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at runNextTicks (node:internal/process/task_queues:60:5)
    at processImmediate (node:internal/timers:449:9)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== CashTab Unit Tests: <App /> Setting "Send Confirmations" settings will show send confirmations ======
Error: Unable to find an element by: [data-testid="home-ctn"]

Ignored nodes: comments, script, style
<body>
  <div>
    <div
      class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jwKygS hNrbtP"
                data-testid="loading-ctn"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    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.findByTestId (/work/cashtab/src/components/__tests__/App.test.js:435:22)
====== CashTab Unit Tests: <App /> If Cashtab starts up with some settings keys missing, the missing keys are migrated to default values ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== CashTab Unit Tests: <App /> Setting "ABSOLUTE MINIMUM fees" settings will reduce fees to absolute min ======
Error: Unable to find an element by: [data-testid="home-ctn"]

Ignored nodes: comments, script, style
<body>
  <div>
    <div
      class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jwKygS hNrbtP"
                data-testid="loading-ctn"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    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.findByTestId (/work/cashtab/src/components/__tests__/App.test.js:580:22)
====== CashTab Unit Tests: <App /> Wallet with easter egg token sees easter egg ======
Error: Unable to find an element with the alt text: tabcash

Ignored nodes: comments, script, style
<body>
  <div>
    <div
      class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jwKygS hNrbtP"
                data-testid="loading-ctn"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    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.findByAltText (/work/cashtab/src/components/__tests__/App.test.js:715:29)
====== CashTab Unit Tests: <App /> If Cashtab starts with 1.5.* cashtabCache, it is wiped and migrated to 1.6.* cashtabCache ======
Error: expect(received).toEqual(expected) // deep equality

- Expected  - 14
+ Received  +  1

  Object {
-   "tokens": Array [
-     Array [
-       "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109",
-       Object {
-         "decimals": 0,
-         "success": true,
-         "tokenDocumentHash": "",
-         "tokenDocumentUrl": "https://cashtab.com/",
-         "tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109",
-         "tokenName": "BearNip",
-         "tokenTicker": "BEAR",
-       },
-     ],
-   ],
+   "tokens": Array [],
  }

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div>
      <div
        class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
      >
        <div
          class="ant-spin-container"
        >
          <div
            class="sc-iBEsjs hYXNZl"
          >
            <div
              class="sc-RcBXQ krXqvz"
            >
              <div
                class="sc-iSDuPN cdWENt"
              >
                <div
                  class="sc-chbbiW kmKhFr"
                >
                  <div
                    class="sc-fZwumE jmbiQP"
                  >
                    <img
                      alt="cashtab"
                      class="sc-fQejPQ iclGva"
                      src="test-file-stub"
                    />
                  </div>
                </div>
                <div
                  class="sc-jlyJG gJnvjg"
                >
                  <h2>
                    Welcome to Cashtab!
                  </h2>
                  <p
                    class="sc-gipzik sOyRw"
                  >
                    Cashtab is an
                     
                    <a
                      class="sc-csuQGl ldOtyP"
                      href="https://github.com/bitcoin-abc/bitcoin-abc"
                      rel="noreferrer"
                      target="_blank"
                    >
                      open source,
                    </a>
                     
                    non-custodial web wallet for 
                    eCash
                    .
                  </p>
                  <button
                    class="sc-jAaTju dvdlmc"
                  >
                    <span
                      aria-label="plus-square"
                      class="anticon anticon-plus-square"
                      role="img"
                    >
                      <svg
                        aria-hidden="true"
                        data-icon="plus-square"
                        fill="currentColor"
                        focusable="false"
                        height="1em"
                        viewBox="64 64 896 896"
                        width="1em"
                      >
                        <path
                          d="M328 544h152v152c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V544h152c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8H544V328c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v152H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8z"
                        />
                        <path
                          d="M880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-40 728H184V184h656v656z"
                        />
                      </svg>
                    </span>
                     New Wallet
                  </button>
                  <button
                    class="sc-jDwBTQ htrvtM"
                  >
                    <span
                      aria-label="import"
                      class="anticon anticon-import"
                      role="img"
                    >
                      <svg
                        aria-hidden="true"
                        data-icon="import"
                        fill="currentColor"
                        fill-rule="evenodd"
                        focusable="false"
                        height="1em"
                        viewBox="64 64 896 896"
                        width="1em"
                      >
                        <path
                          d="M880 912H144c-17.7 0-32-14.3-32-32V144c0-17.7 14.3-32 32-32h360c4.4 0 8 3.6 8 8v56c0 4.4-3.6 8-8 8H184v656h656V520c0-4.4 3.6-8 8-8h56c4.4 0 8 3.6 8 8v360c0 17.7-14.3 32-32 32zM653.3 424.6l52.2 52.2a8.01 8.01 0 01-4.7 13.6l-179.4 21c-5.1.6-9.5-3.7-8.9-8.9l21-179.4c.8-6.6 8.9-9.4 13.6-4.7l52.4 52.4 256.2-256.2c3.1-3.1 8.2-3.1 11.3 0l42.4 42.4c3.1 3.1 3.1 8.2 0 11.3L653.3 424.6z"
                        />
                      </svg>
                    </span>
                     Import Wallet
                  </button>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </body>
</html>...
    at toEqual (/work/cashtab/src/components/__tests__/App.test.js:754:63)
====== CashTab Unit Tests: <App /> A new user can import a mnemonic ======
Error: Unable to find an element by: [data-testid="balance-xec"]

Ignored nodes: comments, script, style
<body>
  <div>
    <div
      class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div
        class="ant-spin-container"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jlyJG gJnvjg"
              >
                <h2>
                  Welcome to Cashtab!
                </h2>
                <p
                  class="sc-gipzik sOyRw"
                >
                  Cashtab is an
                   
                  <a
                    class="sc-csuQGl ldOtyP"
                    href="https://github.com/bitcoin-abc/bitcoin-abc"
                    rel="noreferrer"
                    target="_blank"
                  >
                    open source,
                  </a>
                   
                  non-custodial web wallet for 
                  eCash
                  .
                </p>
                <button
                  class="sc-jAaTju dvdlmc"
                >
                  <span
                    aria-label="plus-square"
                    class="anticon anticon-plus-square"
                    role="img"
                  >
                    <svg
                      aria-hidden="true"
                      data-icon="plus-square"
                      fill="currentColor"
                      focusable="false"
                      height="1em"
                      viewBox="64 64 896 896"
                      width="1em"
                    >
                      <path
                        d="M328 544h152v152c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V544h152c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8H544V328c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v152H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8z"
                      />
                      <path
                        d="M880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-40 728H184V184h656v656z"
                      />
                    </svg>
                  </span>
                   New Wallet
                </button>
                <button
                  class="sc-jDwBTQ htrvtM"
                >
                  <span
                    aria-label="import"
                    class="anticon anticon-import"
                    role="img"
                  >
                    <svg
                      aria-hidden="true"
                      data-icon="import"
                      fill="currentColor"
                      fill-rule="evenodd"
                      focusable="false"
                      height="1em"
                      viewBox="64 64 896 896"
                      width="1em"
                    >
                      <path
                        d="M880 912H144c-17.7 0-32-14.3-32-32V144c0-17.7 14.3-32 32-32h360c4.4 0 8 3.6 8 8v56c0 4.4-3.6 8-8 8H184v656h656V520c0-4.4 3.6-8 8-8h56c4.4 0 8 3.6 8 8v360c0 17.7-14.3 32-32 32zM653.3 424.6l52.2 52.2a8.01 8.01 0 01-4.7 13.6l-179.4 21c-5.1.6-9.5-3.7-8.9-8.9l21-179.4c.8-6.6 8.9-9.4 13.6-4.7l52.4 52.4 256.2-256.2c3.1-3.1 8.2-3.1 11.3 0l42.4 42.4c3.1 3.1 3.1 8.2 0 11.3L653.3 424.6z"
                      />
                    </svg>
                  </span>
                   Import Wallet
                </button>
                <div
                  class="sc-cvbbAY kdxSAu"
                >
                  <form
                    class="ant-form ant-form-horizontal css-dev-only-do-not-override-1rqnfsa"
                    style="width: auto;"
                  >
                    <div
                      class="ant-form-item css-dev-only-do-not-override-1rqnfsa ant-form-item-with-help"
                    >
                      <div
                        class="ant-row ant-form-item-row css-dev-only-do-not-override-1rqnfsa"
                      >
                        <div
                          class="ant-col ant-form-item-control css-dev-only-do-not-override-1rqnfsa"
                        >
                          <div
                            class="ant-form-item-control-input"
                          >
                            <div
                              class="ant-form-item-control-input-content"
                            >
                              <span
                                class="ant-input-affix-wrapper css-dev-only-do-not-override-1rqnfsa ant-input-outlined"
                              >
                                <span
                                  class="ant-input-prefix"
                                >
                                  <span
                                    aria-label="lock"
                                    class="anticon anticon-lock"
                                    role="img"
                                  >
                                    <svg
                                      aria-hidden="true"
                                      data-icon="lock"
                                      fill="currentColor"
                                      focusable="false"
                                      height="1em"
                                      viewBox="64 64 896 896"
                                      width="1em"
                                    >
                                      <path
                                        d="M832 464h-68V240c0-70.7-57.3-128-128-128H388c-70.7 0-128 57.3-128 128v224h-68c-17.7 0-32 14.3-32 32v384c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V496c0-17.7-14.3-32-32-32zM332 240c0-30.9 25.1-56 56-56h248c30.9 0 56 25.1 56 56v224H332V240zm460 600H232V536h560v304zM484 701v53c0 4.4 3.6 8 8 8h40c4.4 0 8-3.6 8-8v-53a48.01 48.01 0 10-56 0z"
                                      />
                                    </svg>
                                  </span>
                                </span>
                                <input
                                  autocomplete="off"
                                  class="ant-input css-dev-only-do-not-override-1rqnfsa"
                                  name="mnemonic"
                                  placeholder="mnemonic (seed phrase)"
                                  required=""
                                  title=""
                                  type="email"
                                  value="beauty shoe decline spend still weird slot snack coach flee between paper"
                                />
                              </span>
                            </div>
                          </div>
                          <div
                            style="display: flex; flex-wrap: nowrap;"
                          >
                            <div
                              class="ant-form-item-explain ant-form-item-explain-connected css-dev-only-do-not-override-1rqnfsa"
                              role="alert"
                            >
                              <div
                                class=""
                              />
                            </div>
                            <div
                              style="width: 0px; height: 24px;"
                            />
                          </div>
                        </div>
                      </div>
                      <div
                        class="ant-form-item-margin-offset"
                        style="margin-bottom: -24px;"
                      />
                    </div>
                    <button
                      class="sc-iRbamj eHLgjy"
                    >
                      Import
                    </button>
                  </form>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    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.findByTestId (/work/cashtab/src/components/__tests__/App.test.js:817:29)
====== CashTab Unit Tests: <App /> Migrating from wallet/savedWallet keys (version < 1.6.*): A user with an invalid Cashtab wallet as the active wallet is migrated on startup ======
Error: Unable to find an element by: [data-testid="balance-xec"]

Ignored nodes: comments, script, style
<body>
  <div>
    <div
      class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jwKygS hNrbtP"
                data-testid="loading-ctn"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    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.findByTestId (/work/cashtab/src/components/__tests__/App.test.js:859:29)
====== CashTab Unit Tests: <App /> Migrating from wallet/savedWallet keys (version < 1.6.*): A user with all valid wallets in savedWallets does not have any savedWallets migrated ======
Error: Unable to find an element by: [data-testid="balance-xec"]

Ignored nodes: comments, script, style
<body>
  <div>
    <div
      class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jwKygS hNrbtP"
                data-testid="loading-ctn"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    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.findByTestId (/work/cashtab/src/components/__tests__/App.test.js:889:29)
====== CashTab Unit Tests: <App /> Migrating from wallet/savedWallet keys (version < 1.6.*): A user with an invalid wallet in savedWallets has that savedWallet migrated ======
Error: Unable to find an element by: [data-testid="balance-xec"]

Ignored nodes: comments, script, style
<body>
  <div>
    <div
      class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jwKygS hNrbtP"
                data-testid="loading-ctn"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    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.findByTestId (/work/cashtab/src/components/__tests__/App.test.js:940:29)
====== CashTab Unit Tests: <App /> Migrating from wallet/savedWallet keys (version < 1.6.*): A user with multiple invalid wallets in savedWallets has them migrated ======
Error: Unable to find an element by: [data-testid="balance-xec"]

Ignored nodes: comments, script, style
<body>
  <div>
    <div
      class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jwKygS hNrbtP"
                data-testid="loading-ctn"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    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.findByTestId (/work/cashtab/src/components/__tests__/App.test.js:1028:29)
====== CashTab Unit Tests: <App /> A user with an invalid Cashtab wallet as the active wallet is migrated on startup ======
Error: Unable to find an element by: [data-testid="balance-xec"]

Ignored nodes: comments, script, style
<body>
  <div>
    <div
      class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jwKygS hNrbtP"
                data-testid="loading-ctn"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    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.findByTestId (/work/cashtab/src/components/__tests__/App.test.js:1066:29)
====== CashTab Unit Tests: <App /> A user with all valid wallets in savedWallets does not have any savedWallets migrated ======
Error: Unable to find an element by: [data-testid="balance-xec"]

Ignored nodes: comments, script, style
<body>
  <div>
    <div
      class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jwKygS hNrbtP"
                data-testid="loading-ctn"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    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.findByTestId (/work/cashtab/src/components/__tests__/App.test.js:1096:29)
====== CashTab Unit Tests: <App /> A user with an invalid wallet in savedWallets has that savedWallet migrated ======
Error: Unable to find an element by: [data-testid="balance-xec"]

Ignored nodes: comments, script, style
<body>
  <div>
    <div
      class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jwKygS hNrbtP"
                data-testid="loading-ctn"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    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.findByTestId (/work/cashtab/src/components/__tests__/App.test.js:1143:29)
====== CashTab Unit Tests: <App /> A user with multiple invalid wallets in savedWallets has them migrated ======
Error: Unable to find an element by: [data-testid="balance-xec"]

Ignored nodes: comments, script, style
<body>
  <div>
    <div
      class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jwKygS hNrbtP"
                data-testid="loading-ctn"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    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.findByTestId (/work/cashtab/src/components/__tests__/App.test.js:1227:29)
====== CashTab Unit Tests: <SendXec /> Renders the SendXec screen with send address input ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at runNextTicks (node:internal/process/task_queues:60:5)
    at processImmediate (node:internal/timers:449:9)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== CashTab Unit Tests: <SendXec /> Pass valid address to Send To field ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== CashTab Unit Tests: <SendXec /> Pass valid alias to Send To field ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== CashTab Unit Tests: <SendXec /> Pass an invalid address to Send To field and get a validation error ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== CashTab Unit Tests: <SendXec /> Pass a possibly valid alias without .xec suffix to Send To field and get expected error ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== CashTab Unit Tests: <SendXec /> Pass a valid alias to Send To field that has not yet been registered and get expected error ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== CashTab Unit Tests: <SendXec /> Get expected error msg and send disabled if bad response from alias server ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== CashTab Unit Tests: <SendXec /> Pass a valid address and bip21 query string with valid amount param to Send To field ======
Error: expect(element).not.toBeInTheDocument()

expected document not to contain element, found <div class="ant-form-item-explain-error">Amount cannot exceed your XEC balance</div> instead
    at Object.toBeInTheDocument (/work/cashtab/src/components/Send/__tests__/SendXec.test.js:490:55)
====== CashTab Unit Tests: <SendXec /> Pass a valid alias and bip21 query string with valid amount param to Send To field ======
Error: expect(element).not.toBeInTheDocument()

expected document not to contain element, found <div class="ant-form-item-explain-error">Amount cannot exceed your XEC balance</div> instead
    at Object.toBeInTheDocument (/work/cashtab/src/components/Send/__tests__/SendXec.test.js:558:55)
====== CashTab Unit Tests: <SendXec /> Pass a valid address and bip21 query string with invalid amount param (dust) to Send To field ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== CashTab Unit Tests: <SendXec /> Valid address with valid bip21 query string with valid amount param rejected if amount exceeds wallet balance ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== CashTab Unit Tests: <SendXec /> Pass a valid alias and bip21 query string with invalid amount param (too many decimals) to Send To field ======
TestingLibraryElementError: Unable to find an element with the text: XEC transactions do not support more than 2 decimal places. 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="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-lhVmIH gJoLAm"
                data-testid="send-xec-ctn"
              >
                <div
                  class="ant-row css-dev-only-do-not-override-1rqnfsa"
                  type="flex"
                >
                  <div
                    class="ant-col ant-col-24 css-dev-only-do-not-override-1rqnfsa"
                  >
                    <form
                      class="ant-form ant-form-horizontal css-dev-only-do-not-override-1rqnfsa"
                      style="width: auto; margin-top: 40px;"
                    >
                      <div
                        class="sc-iujRgT bugtRy"
                      >
                         
                        <label
                          class="sc-bYSBpT hSkhnP"
                        >
                          Send to
                        </label>
                      </div>
                      <div
                        class="sc-cQFLBn gLIPDU"
                      >
                        <div
                          class="sc-bMVAic cSvrrD"
                        >
                          <div
                            class="sc-GMQeP jXMCGy"
                          >
                            <div
                              class="sc-cvbbAY kdxSAu"
                            >
                              <div
                                class="ant-form-item css-dev-only-do-not-override-1rqnfsa ant-form-item-with-help"
                                style="margin-bottom: 0px;"
                              >
                                <div
                                  class="ant-row ant-form-item-row css-dev-only-do-not-override-1rqnfsa"
                                >
                                  <div
                                    class="ant-col ant-form-item-control css-dev-only-do-not-override-1rqnfsa"
                                  >
                                    <div
                                      class="ant-form-item-control-input"
                                    >
                                      <div
                                        class="ant-form-item-control-input-content"
                                      >
                                        <span
                                          class="ant-input-group-wrapper ant-input-group-wrapper-outlined css-dev-only-do-not-override-1rqnfsa"
                                        >
                                          <span
                                            class="ant-input-wrapper ant-input-group css-dev-only-do-not-override-1rqnfsa"
                                          >
                                            <span
                                              class="ant-input-affix-wrapper ant-input-affix-wrapper-focused css-dev-only-do-not-override-1rqnfsa ant-input-outlined"
                                            >
                                              <span
                                                class="ant-input-prefix"
                                              >
                                                <span
                                                  aria-label="wallet"
                                                  class="anticon anticon-wallet sc-bxivhb iBBRHU"
                                                  role="img"
                                 ...
    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:109:15
    at Object.getAllByText (/work/cashtab/src/components/Send/__tests__/SendXec.test.js:722:20)
====== CashTab Unit Tests: <SendXec /> Pass a valid address and an invalid bip21 query string ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== CashTab Unit Tests: <SendXec /> Pass a valid address and bip21 query string with op_return_raw param to Send To field ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== CashTab Unit Tests: <SendXec /> Pass a valid address and bip21 query string with valid amount and op_return_raw params to Send To field ======
Error: expect(element).not.toBeInTheDocument()

expected document not to contain element, found <div class="ant-form-item-explain-error">Amount cannot exceed your XEC balance</div> instead
    at Object.toBeInTheDocument (/work/cashtab/src/components/Send/__tests__/SendXec.test.js:894:55)
====== CashTab Unit Tests: <SendXec /> Pass a valid address and bip21 query string with valid amount and invalid op_return_raw params to Send To field ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== CashTab Unit Tests: <SendXec /> Clicking "Send" will send a valid tx with op_return_raw after entry of a valid address and bip21 query string with valid amount and op_return_raw params to Send To field ======
Error: expect(element).not.toBeInTheDocument()

expected document not to contain element, found <div class="ant-form-item-explain-error">Amount cannot exceed your XEC balance</div> instead
    at Object.toBeInTheDocument (/work/cashtab/src/components/Send/__tests__/SendXec.test.js:1020:55)
====== CashTab Unit Tests: <SendXec /> We can calculate max send amount with and without a cashtab msg, and send a max sat tx with a cashtab msg ======
Error: expect(element).toHaveValue(9509.26)

Expected the element to have value:
  9509.26
Received:
  0
    at Object.toHaveValue (/work/cashtab/src/components/Send/__tests__/SendXec.test.js:1114:31)
====== CashTab Unit Tests: <SendXec /> If the user has minFeeSends set to true but no longer has the right token amount, the feature is disabled ======
Error: expect(element).not.toBeInTheDocument()

expected document not to contain element, found <div class="ant-form-item-explain-error">Amount cannot exceed your XEC balance</div> instead
    at Object.toBeInTheDocument (/work/cashtab/src/components/Send/__tests__/SendXec.test.js:1224:55)

Each failure log is accessible here:
CashTab Unit Tests: <CreateTokenForm /> User can input valid token parameters, generate a token, and view a success notification
CashTab Unit Tests: Cashtab wallet methods Creates a wallet from valid bip39 mnemonic createCashtabWallet: Creates a Cashtab wallet from a valid bip39 mnemonic
CashTab Unit Tests: useWallet hook rendering in different localforage states XEC price is set in state on successful API fetch
CashTab Unit Tests: useWallet hook rendering in different localforage states XEC price remains null in state on API error
CashTab Unit Tests: useWallet hook rendering in different localforage states XEC price is set in state to fiat currency of user settings on successful API fetch
CashTab Unit Tests: useWallet hook rendering in different localforage states Cashtab loads wallet, settings, cache, and contactlist from localforage to context if they are present
CashTab Unit Tests: useWallet hook rendering in different localforage states processChronikWsMsg() refreshes alias prices when aliasPrices is null
CashTab Unit Tests: useWallet hook rendering in different localforage states processChronikWsMsg() refreshes alias prices when aliasPrices exists, server and cashtab prices array length do not match
CashTab Unit Tests: useWallet hook rendering in different localforage states processChronikWsMsg() does not refresh alias prices when aliasPrices exists, server and cashtab array length do match
[[https://build.bitcoinabc.org/viewLog.html?tab=buildLog&logTab=tree&filter=debug&expand=all&buildId=717983&_focus=136767&guest=1 | CashTab Unit Tests: useWallet hook rendering in different localforage states Verify a processChronikWsMsg() new block event updates the aliasServerError state var upon a /prices/ endpoint error]]
[[https://build.bitcoinabc.org/viewLog.html?tab=buildLog&logTab=tree&filter=debug&expand=all&buildId=717983&_focus=136770&guest=1 | CashTab Unit Tests: useWallet hook rendering in different localforage states Verify refreshAliases() updates the aliases state variable on a successful /address/ endpoint response]]
[[https://build.bitcoinabc.org/viewLog.html?tab=buildLog&logTab=tree&filter=debug&expand=all&buildId=717983&_focus=136773&guest=1 | CashTab Unit Tests: useWallet hook rendering in different localforage states Verify refreshAliases() updates the aliasServerError state variable upon an /address/ endpoint error]]
CashTab Unit Tests: useWallet hook rendering in different localforage states An incoming tx message from the websocket causes the wallet to update
CashTab Unit Tests: <Receive /> Renders as expected on desktop, including copy paste functionality of clicking on the QR code
CashTab Unit Tests: <Receive /> Renders the Receive screen with QR code of expected width for smallest supported mobile view
CashTab Unit Tests: <Receive /> Renders the Receive screen with QR code of size that is fully viewable in extension dimensions
CashTab Unit Tests: <Home /> Renders the loading component while loading, then the Home screen
CashTab Unit Tests: <Home /> Renders the Home screen with API error
CashTab Unit Tests: <Home /> Renders Sideshift button if user loads with a new wallet
CashTab Unit Tests: <CreateToken /> If wallet has sufficient XEC, renders CreateTokenForm
CashTab Unit Tests: <CreateToken /> If wallet has insufficient XEC, renders component but does not render CreateTokenForm
CashTab Unit Tests: <CashtabTestWrapper /> With default props, renders App component
CashTab Unit Tests: <CashtabTestWrapper /> We can render other pages by passing the route
CashTab Unit Tests: <Alias /> Registered and Pending Aliases are correctly rendered
CashTab Unit Tests: <Alias /> Registered and Pending Aliases are correctly rendered when pending list is empty
CashTab Unit Tests: <Alias /> Registered and Pending Aliases are correctly rendered when registered list is empty
CashTab Unit Tests: <Alias /> Registered and Pending lists still renders when aliasValidationError is populated and aliasServerError is false
CashTab Unit Tests: <Alias /> Registered and Pending lists do not render when aliasValidationError is false and aliasServerError is populated
CashTab Unit Tests: <SignVerifyMsg /> Notification is rendered upon successfully signing a message
CashTab Unit Tests: <SignVerifyMsg /> Notification is rendered upon successfully verifying a message
CashTab Unit Tests: <SignVerifyMsg /> Notification is rendered upon signature verification error
CashTab Unit Tests: <Configure /> We can add, delete, rename, contacts from the Configure screen, and add a savedWallet as a contact
CashTab Unit Tests: <Configure /> We can rename the active wallet or a saved wallet, we can add a wallet, we can import a wallet, we can delete a wallet
CashTab Unit Tests: <SendXec /> rendered with params in URL Legacy params. Address and value keys are set and valid.
CashTab Unit Tests: <SendXec /> rendered with params in URL Legacy params. Address and value keys are set and valid. Invalid bip21 string is ignored.
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
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
CashTab Unit Tests: <SendXec /> rendered with params in URL Legacy params. Params are ignored if only value param is present
CashTab Unit Tests: <SendXec /> rendered with params in URL Legacy params. Params are ignored if param is duplicated
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
CashTab Unit Tests: <SendXec /> rendered with params in URL bip21 param - valid bip21 param with amount and op_return_raw is parsed as expected
CashTab Unit Tests: <SendXec /> rendered with params in URL bip21 param - an invalid bip21 param shows validation errors but cannot be changed
CashTab Unit Tests: <SendXec /> rendered with params in URL No params. Send screen loads normally with no rendered input.
CashTab Unit Tests: <SendToken /> Renders the SendToken screen with send address input
CashTab Unit Tests: <SendToken /> Accepts a valid ecash: prefixed address
CashTab Unit Tests: <SendToken /> Accepts a valid etoken: prefixed address
CashTab Unit Tests: <SendToken /> Accepts a valid alias
CashTab Unit Tests: <SendToken /> Displays a validation error for an invalid address
CashTab Unit Tests: <SendToken /> Displays a validation error for an alias without .xec suffix
CashTab Unit Tests: <SendToken /> Displays a validation error for valid alias that has not yet been registered
CashTab Unit Tests: <SendToken /> Displays expected error if alias server gives a bad response
CashTab Unit Tests: <SendToken /> Displays a validation error if the user includes any query string
CashTab Unit Tests: <SendToken /> Renders the send token notification upon successful broadcast
CashTab Unit Tests: <SendToken /> Renders the burn token success notification upon successful burn tx broadcast
CashTab Unit Tests: <App /> Navigation menu routes to expected components
CashTab Unit Tests: <App /> Adding a contact to to a new contactList by clicking on tx history adds it to localforage and wallet context
CashTab Unit Tests: <App /> Adding a contact to an existing contactList by clicking on tx history adds it to localforage and wallet context
CashTab Unit Tests: <App /> A user with legacy blank contactList in localstorage is migrated on startup
CashTab Unit Tests: <App /> Clicking "reply" on a Cashtab Msg correctly populates the SendXec to address and amount fields
CashTab Unit Tests: <App /> We do not see the camera auto-open setting in the config screen on a desktop device
CashTab Unit Tests: <App /> We do see the camera auto-open setting in the config screen on a mobile device
CashTab Unit Tests: <App /> Setting "Send Confirmations" settings will show send confirmations
CashTab Unit Tests: <App /> If Cashtab starts up with some settings keys missing, the missing keys are migrated to default values
CashTab Unit Tests: <App /> Setting "ABSOLUTE MINIMUM fees" settings will reduce fees to absolute min
CashTab Unit Tests: <App /> Wallet with easter egg token sees easter egg
CashTab Unit Tests: <App /> If Cashtab starts with 1.5.* cashtabCache, it is wiped and migrated to 1.6.* cashtabCache
CashTab Unit Tests: <App /> A new user can import a mnemonic
CashTab Unit Tests: <App /> Migrating from wallet/savedWallet keys (version < 1.6.*): A user with an invalid Cashtab wallet as the active wallet is migrated on startup
CashTab Unit Tests: <App /> Migrating from wallet/savedWallet keys (version < 1.6.*): A user with all valid wallets in savedWallets does not have any savedWallets migrated
CashTab Unit Tests: <App /> Migrating from wallet/savedWallet keys (version < 1.6.*): A user with an invalid wallet in savedWallets has that savedWallet migrated
CashTab Unit Tests: <App /> Migrating from wallet/savedWallet keys (version < 1.6.*): A user with multiple invalid wallets in savedWallets has them migrated
CashTab Unit Tests: <App /> A user with an invalid Cashtab wallet as the active wallet is migrated on startup
CashTab Unit Tests: <App /> A user with all valid wallets in savedWallets does not have any savedWallets migrated
CashTab Unit Tests: <App /> A user with an invalid wallet in savedWallets has that savedWallet migrated
CashTab Unit Tests: <App /> A user with multiple invalid wallets in savedWallets has them migrated
CashTab Unit Tests: <SendXec /> Renders the SendXec screen with send address input
CashTab Unit Tests: <SendXec /> Pass valid address to Send To field
CashTab Unit Tests: <SendXec /> Pass valid alias to Send To field
CashTab Unit Tests: <SendXec /> Pass an invalid address to Send To field and get a validation error
CashTab Unit Tests: <SendXec /> Pass a possibly valid alias without .xec suffix to Send To field and get expected error
CashTab Unit Tests: <SendXec /> Pass a valid alias to Send To field that has not yet been registered and get expected error
CashTab Unit Tests: <SendXec /> Get expected error msg and send disabled if bad response from alias server
CashTab Unit Tests: <SendXec /> Pass a valid address and bip21 query string with valid amount param to Send To field
CashTab Unit Tests: <SendXec /> Pass a valid alias and bip21 query string with valid amount param to Send To field
CashTab Unit Tests: <SendXec /> Pass a valid address and bip21 query string with invalid amount param (dust) to Send To field
CashTab Unit Tests: <SendXec /> Valid address with valid bip21 query string with valid amount param rejected if amount exceeds wallet balance
CashTab Unit Tests: <SendXec /> Pass a valid alias and bip21 query string with invalid amount param (too many decimals) to Send To field
CashTab Unit Tests: <SendXec /> Pass a valid address and an invalid bip21 query string
CashTab Unit Tests: <SendXec /> Pass a valid address and bip21 query string with op_return_raw param to Send To field
CashTab Unit Tests: <SendXec /> Pass a valid address and bip21 query string with valid amount and op_return_raw params to Send To field
CashTab Unit Tests: <SendXec /> Pass a valid address and bip21 query string with valid amount and invalid op_return_raw params to Send To field
CashTab Unit Tests: <SendXec /> Clicking "Send" will send a valid tx with op_return_raw after entry of a valid address and bip21 query string with valid amount and op_return_raw params to Send To field
CashTab Unit Tests: <SendXec /> We can calculate max send amount with and without a cashtab msg, and send a max sat tx with a cashtab msg
CashTab Unit Tests: <SendXec /> If the user has minFeeSends set to true but no longer has the right token amount, the feature is disabled

Failed tests logs:

====== CashTab Unit Tests: <CreateTokenForm /> User can input valid token parameters, generate a token, and view a success notification ======
Error: Unable to find an element with the placeholder text of: Enter a name for your token

Ignored nodes: comments, script, style
<body>
  <div>
    <div
      class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-lhVmIH gJoLAm"
              >
                <p
                  class="sc-dqBHgY iOJezR"
                >
                  You need at least 
                  5.5
                   
                  XEC
                   (
                  $
                  0.0002
                   
                  USD
                  ) to create a token
                </p>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    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.findByPlaceholderText (/work/cashtab/src/components/Etokens/__tests__/CreateTokenForm.test.js:104:26)
====== CashTab Unit Tests: useWallet hook rendering in different localforage states XEC price is set in state on successful API fetch ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== CashTab Unit Tests: useWallet hook rendering in different localforage states XEC price remains null in state on API error ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== CashTab Unit Tests: useWallet hook rendering in different localforage states XEC price is set in state to fiat currency of user settings on successful API fetch ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== CashTab Unit Tests: useWallet hook rendering in different localforage states Cashtab loads wallet, settings, cache, and contactlist from localforage to context if they are present ======
Error: expect(received).toEqual(expected) // deep equality

- Expected  - 8
+ Received  + 0

@@ -5,15 +5,7 @@
        "tokenDocumentHash": "",
        "tokenDocumentUrl": "",
        "tokenName": "Burger",
        "tokenTicker": "  ",
      },
-     "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109" => Object {
-       "decimals": 0,
-       "success": true,
-       "tokenDocumentHash": "",
-       "tokenDocumentUrl": "https://cashtab.com/",
-       "tokenName": "BearNip",
-       "tokenTicker": "BEAR",
-     },
    },
  }

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div />
  </body>
</html>
    at toEqual (/work/cashtab/src/hooks/__tests__/useWallet.test.js:199:62)
    at runWithExpensiveErrorDiagnosticsDisabled (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:47:12)
    at checkCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:124:77)
    at checkRealTimersCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:118:16)
    at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)
====== CashTab Unit Tests: useWallet hook rendering in different localforage states processChronikWsMsg() refreshes alias prices when aliasPrices is null ======
Error: expect(received).toStrictEqual(expected) // deep equality

Expected: {"Path145": {"cashAddress": "ecash:qz3glzzjlp503rn3a3nxccedd7rwj78sgczljhvzv3", "fundingWif": "L2HnC8ZT5JuwVFjrAjJUBs2tmmBoxdVa1MVCJccqV8S9YPoR1NuZ", "hash160": "a28f8852f868f88e71ec666c632d6f86e978f046", "publicKey": "03939a29fd67fa602926637a82f53e1826696353613cac03e34160f040ae2dfcb5"}, "Path1899": {"cashAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "fundingWif": "KywWPgaLDwvW1tWUtUvs13jgqaaWMoNANLVYoKcK9Ddbpnch7Cmw", "hash160": "3a5fb236934ec078b4507c303d3afd82067f8fc1", "publicKey": "031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02d"}, "Path245": {"cashAddress": "ecash:qpsqa7cj5mup8mx0zvt34z7xyp2jztvdds67wajntk", "fundingWif": "L3ndnMkn4574McqhPujguusu48NrmeLUgWYMkRpYQGLXDGAwGmPq", "hash160": "600efb12a6f813eccf13171a8bc62055212d8d6c", "publicKey": "03f73fe2631da9732f2480debbc7ff8d99c5c06764e0f5095b789ff190788bee72"}, "mnemonic": "beauty shoe decline spend still weird slot snack coach flee between paper", "name": "Transaction Fixtures", "state": {"balances": {"totalBalance": "9513.12", "totalBalanceInSatoshis": "951312"}, "nonSlpUtxos": [{"address": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "blockHeight": 815549, "isCoinbase": false, "network": "XEC", "outpoint": {"outIdx": 2, "txid": "218a1e058ed0fda76573eabf43ad3ded7e7192e42621893a60aaa152ba7f66fe"}, "value": "951312"}], "parsedTxHistory": [{"inputs": [[Object], [Object], [Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "etokenAmount": "1", "genesisInfo": [Object], "incoming": true, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": true, "isTokenBurn": false, "opReturnMessage": "", "replyAddress": "ecash:qp89xgjhcqdnzzemts0aj378nfe2mhu9yvxj9nhgg6", "slpMeta": [Object], "xecAmount": "5.46"}, "size": 627, "slpTxData": {"slpMeta": [Object]}, "timeFirstSeen": "1705488591", "txid": "3b0760858b0b20ff50d0db67793892d29d2466b86a0116f7e232792da0c22330", "version": 2}, {"block": {"hash": "00000000000000000ea3601057ba423805f91d9d813a41a91ae908b68ff6cbce", "height": 815549, "timestamp": "1698187386"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "newton", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.53"}, "size": 268, "timeFirstSeen": "1698185917", "txid": "218a1e058ed0fda76573eabf43ad3ded7e7192e42621893a60aaa152ba7f66fe", "version": 2}, {"block": {"hash": "000000000000000009004fa50065ef6deb091f0d075cf1ef01811d0706c9a8c2", "height": 814357, "timestamp": "1697463218"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "doesthisclear", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.51"}, "size": 275, "timeFirstSeen": "1697462397", "txid": "9f25f4e161472920f624ed6579ccdaf8d096263ab31e157deaa9c987269ead8a", "version": 2}, {"block": {"hash": "00000000000000001533643253107df49b2291beb9d5cd5c7f4f51bf26572e53", "height": 813934, "timestamp": "1697216026"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "worksnow", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.51"}, "size": 270, "timeFirstSeen": "1697215818", "txid": "42c39baded510db31aebaf9172d307afa199dd734a6189ea4bc3530438d715ca", "version": 2}, {"block": {"hash": "0000000000000000166ee88a29775a1098813f4316a5afbe835d21e0d74fda24", "height": 813923, "timestamp": "1697211295"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test4", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 267, "timeFirstSeen": "1697211232", "txid": "5aa64624e493502d083089f5a58069887bc99a6d5569b27df7c7570e024bbf20", "version": 2}, {"block": {"hash": "00000000000000000a1807a17ebcda93947db968e9a112b54ec70237d1a76288", "height": 813922, "timestamp": "1697211196"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.55"}, "size": 267, "timeFirstSeen": "1697211182", "txid": "b26c42ba0cc48f0d3af442b445f19c267189f84dbeb7e366ec7c921f5195aca7", "version": 2}, {"block": {"hash": "00000000000000000a1807a17ebcda93947db968e9a112b54ec70237d1a76288", "height": 813922, "timestamp": "1697211196"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.55"}, "size": 266, "timeFirstSeen": "1697211167", "txid": "f86f20336955bca4e15588d81d029ad2c0dfa498b8be6aced2b63ba3bea1be0a", "version": 2}, {"block": {"hash": "000000000000000006b8990c77dd7a0d3a850a052b6f0bd60b82d44d1ffa7a55", "height": 813615, "timestamp": "1697025138"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "alias", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 268, "timeFirstSeen": "1697024688", "txid": "f17814a75dad000557f19a3a3f6fcc124ab7880292c9fad4c64dc034d5e46551", "version": 2}, {"block": {"hash": "000000000000000006b8990c77dd7a0d3a850a052b6f0bd60b82d44d1ffa7a55", "height": 813615, "timestamp": "1697025138"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "alias", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 267, "timeFirstSeen": "1697024682", "txid": "7eacd3b752003fe761e359cac3d98b1faf4f1dd411150eabc89da8208a312b0e", "version": 2}, {"block": {"hash": "00000000000000000b2dfec91630d335b0233fb323a7acbb297b586d1d0d0678", "height": 812408, "timestamp": "1696282475"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": false, "incoming": false, "isCashtabMessage": true, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "still works", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "22"}, "size": 252, "timeFirstSeen": "1696281429", "txid": "8b3cb0e6c38ee01f9e1e98d611895ff2cd09ad9b4fea73f76f951be815278c26", "version": 2}], "slpUtxos": [{"address": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "blockHeight": -1, "decimals": 0, "isCoinbase": false, "network": "XEC", "outpoint": {"outIdx": 1, "txid": "3b0760858b0b20ff50d0db67793892d29d2466b86a0116f7e232792da0c22330"}, "slpMeta": {"tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109", "tokenType": "FUNGIBLE", "txType": "SEND"}, "slpToken": {"amount": "1", "isMintBaton": false}, "tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109", "tokenQty": "1", "value": "546"}], "tokens": [{"balance": "1", "info": {"decimals": 0, "success": true, "tokenDocumentHash": "", "tokenDocumentUrl": "https://cashtab.com/", "tokenName": "BearNip", "tokenTicker": "BEAR"}, "tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109"}]}}
Received: undefined

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div />
  </body>
</html>
    at toStrictEqual (/work/cashtab/src/hooks/__tests__/useWallet.test.js:264:60)
    at runWithExpensiveErrorDiagnosticsDisabled (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:47:12)
    at checkCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:124:77)
    at checkRealTimersCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:118:16)
    at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)
====== CashTab Unit Tests: useWallet hook rendering in different localforage states processChronikWsMsg() refreshes alias prices when aliasPrices exists, server and cashtab prices array length do not match ======
Error: expect(received).toStrictEqual(expected) // deep equality

Expected: {"Path145": {"cashAddress": "ecash:qz3glzzjlp503rn3a3nxccedd7rwj78sgczljhvzv3", "fundingWif": "L2HnC8ZT5JuwVFjrAjJUBs2tmmBoxdVa1MVCJccqV8S9YPoR1NuZ", "hash160": "a28f8852f868f88e71ec666c632d6f86e978f046", "publicKey": "03939a29fd67fa602926637a82f53e1826696353613cac03e34160f040ae2dfcb5"}, "Path1899": {"cashAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "fundingWif": "KywWPgaLDwvW1tWUtUvs13jgqaaWMoNANLVYoKcK9Ddbpnch7Cmw", "hash160": "3a5fb236934ec078b4507c303d3afd82067f8fc1", "publicKey": "031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02d"}, "Path245": {"cashAddress": "ecash:qpsqa7cj5mup8mx0zvt34z7xyp2jztvdds67wajntk", "fundingWif": "L3ndnMkn4574McqhPujguusu48NrmeLUgWYMkRpYQGLXDGAwGmPq", "hash160": "600efb12a6f813eccf13171a8bc62055212d8d6c", "publicKey": "03f73fe2631da9732f2480debbc7ff8d99c5c06764e0f5095b789ff190788bee72"}, "mnemonic": "beauty shoe decline spend still weird slot snack coach flee between paper", "name": "Transaction Fixtures", "state": {"balances": {"totalBalance": "9513.12", "totalBalanceInSatoshis": "951312"}, "nonSlpUtxos": [{"address": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "blockHeight": 815549, "isCoinbase": false, "network": "XEC", "outpoint": {"outIdx": 2, "txid": "218a1e058ed0fda76573eabf43ad3ded7e7192e42621893a60aaa152ba7f66fe"}, "value": "951312"}], "parsedTxHistory": [{"inputs": [[Object], [Object], [Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "etokenAmount": "1", "genesisInfo": [Object], "incoming": true, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": true, "isTokenBurn": false, "opReturnMessage": "", "replyAddress": "ecash:qp89xgjhcqdnzzemts0aj378nfe2mhu9yvxj9nhgg6", "slpMeta": [Object], "xecAmount": "5.46"}, "size": 627, "slpTxData": {"slpMeta": [Object]}, "timeFirstSeen": "1705488591", "txid": "3b0760858b0b20ff50d0db67793892d29d2466b86a0116f7e232792da0c22330", "version": 2}, {"block": {"hash": "00000000000000000ea3601057ba423805f91d9d813a41a91ae908b68ff6cbce", "height": 815549, "timestamp": "1698187386"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "newton", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.53"}, "size": 268, "timeFirstSeen": "1698185917", "txid": "218a1e058ed0fda76573eabf43ad3ded7e7192e42621893a60aaa152ba7f66fe", "version": 2}, {"block": {"hash": "000000000000000009004fa50065ef6deb091f0d075cf1ef01811d0706c9a8c2", "height": 814357, "timestamp": "1697463218"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "doesthisclear", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.51"}, "size": 275, "timeFirstSeen": "1697462397", "txid": "9f25f4e161472920f624ed6579ccdaf8d096263ab31e157deaa9c987269ead8a", "version": 2}, {"block": {"hash": "00000000000000001533643253107df49b2291beb9d5cd5c7f4f51bf26572e53", "height": 813934, "timestamp": "1697216026"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "worksnow", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.51"}, "size": 270, "timeFirstSeen": "1697215818", "txid": "42c39baded510db31aebaf9172d307afa199dd734a6189ea4bc3530438d715ca", "version": 2}, {"block": {"hash": "0000000000000000166ee88a29775a1098813f4316a5afbe835d21e0d74fda24", "height": 813923, "timestamp": "1697211295"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test4", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 267, "timeFirstSeen": "1697211232", "txid": "5aa64624e493502d083089f5a58069887bc99a6d5569b27df7c7570e024bbf20", "version": 2}, {"block": {"hash": "00000000000000000a1807a17ebcda93947db968e9a112b54ec70237d1a76288", "height": 813922, "timestamp": "1697211196"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.55"}, "size": 267, "timeFirstSeen": "1697211182", "txid": "b26c42ba0cc48f0d3af442b445f19c267189f84dbeb7e366ec7c921f5195aca7", "version": 2}, {"block": {"hash": "00000000000000000a1807a17ebcda93947db968e9a112b54ec70237d1a76288", "height": 813922, "timestamp": "1697211196"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.55"}, "size": 266, "timeFirstSeen": "1697211167", "txid": "f86f20336955bca4e15588d81d029ad2c0dfa498b8be6aced2b63ba3bea1be0a", "version": 2}, {"block": {"hash": "000000000000000006b8990c77dd7a0d3a850a052b6f0bd60b82d44d1ffa7a55", "height": 813615, "timestamp": "1697025138"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "alias", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 268, "timeFirstSeen": "1697024688", "txid": "f17814a75dad000557f19a3a3f6fcc124ab7880292c9fad4c64dc034d5e46551", "version": 2}, {"block": {"hash": "000000000000000006b8990c77dd7a0d3a850a052b6f0bd60b82d44d1ffa7a55", "height": 813615, "timestamp": "1697025138"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "alias", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 267, "timeFirstSeen": "1697024682", "txid": "7eacd3b752003fe761e359cac3d98b1faf4f1dd411150eabc89da8208a312b0e", "version": 2}, {"block": {"hash": "00000000000000000b2dfec91630d335b0233fb323a7acbb297b586d1d0d0678", "height": 812408, "timestamp": "1696282475"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": false, "incoming": false, "isCashtabMessage": true, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "still works", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "22"}, "size": 252, "timeFirstSeen": "1696281429", "txid": "8b3cb0e6c38ee01f9e1e98d611895ff2cd09ad9b4fea73f76f951be815278c26", "version": 2}], "slpUtxos": [{"address": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "blockHeight": -1, "decimals": 0, "isCoinbase": false, "network": "XEC", "outpoint": {"outIdx": 1, "txid": "3b0760858b0b20ff50d0db67793892d29d2466b86a0116f7e232792da0c22330"}, "slpMeta": {"tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109", "tokenType": "FUNGIBLE", "txType": "SEND"}, "slpToken": {"amount": "1", "isMintBaton": false}, "tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109", "tokenQty": "1", "value": "546"}], "tokens": [{"balance": "1", "info": {"decimals": 0, "success": true, "tokenDocumentHash": "", "tokenDocumentUrl": "https://cashtab.com/", "tokenName": "BearNip", "tokenTicker": "BEAR"}, "tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109"}]}}
Received: undefined

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div />
  </body>
</html>
    at toStrictEqual (/work/cashtab/src/hooks/__tests__/useWallet.test.js:389:60)
    at runWithExpensiveErrorDiagnosticsDisabled (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:47:12)
    at checkCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:124:77)
    at checkRealTimersCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:118:16)
    at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)
====== CashTab Unit Tests: useWallet hook rendering in different localforage states processChronikWsMsg() does not refresh alias prices when aliasPrices exists, server and cashtab array length do match ======
Error: expect(received).toStrictEqual(expected) // deep equality

Expected: {"Path145": {"cashAddress": "ecash:qz3glzzjlp503rn3a3nxccedd7rwj78sgczljhvzv3", "fundingWif": "L2HnC8ZT5JuwVFjrAjJUBs2tmmBoxdVa1MVCJccqV8S9YPoR1NuZ", "hash160": "a28f8852f868f88e71ec666c632d6f86e978f046", "publicKey": "03939a29fd67fa602926637a82f53e1826696353613cac03e34160f040ae2dfcb5"}, "Path1899": {"cashAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "fundingWif": "KywWPgaLDwvW1tWUtUvs13jgqaaWMoNANLVYoKcK9Ddbpnch7Cmw", "hash160": "3a5fb236934ec078b4507c303d3afd82067f8fc1", "publicKey": "031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02d"}, "Path245": {"cashAddress": "ecash:qpsqa7cj5mup8mx0zvt34z7xyp2jztvdds67wajntk", "fundingWif": "L3ndnMkn4574McqhPujguusu48NrmeLUgWYMkRpYQGLXDGAwGmPq", "hash160": "600efb12a6f813eccf13171a8bc62055212d8d6c", "publicKey": "03f73fe2631da9732f2480debbc7ff8d99c5c06764e0f5095b789ff190788bee72"}, "mnemonic": "beauty shoe decline spend still weird slot snack coach flee between paper", "name": "Transaction Fixtures", "state": {"balances": {"totalBalance": "9513.12", "totalBalanceInSatoshis": "951312"}, "nonSlpUtxos": [{"address": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "blockHeight": 815549, "isCoinbase": false, "network": "XEC", "outpoint": {"outIdx": 2, "txid": "218a1e058ed0fda76573eabf43ad3ded7e7192e42621893a60aaa152ba7f66fe"}, "value": "951312"}], "parsedTxHistory": [{"inputs": [[Object], [Object], [Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "etokenAmount": "1", "genesisInfo": [Object], "incoming": true, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": true, "isTokenBurn": false, "opReturnMessage": "", "replyAddress": "ecash:qp89xgjhcqdnzzemts0aj378nfe2mhu9yvxj9nhgg6", "slpMeta": [Object], "xecAmount": "5.46"}, "size": 627, "slpTxData": {"slpMeta": [Object]}, "timeFirstSeen": "1705488591", "txid": "3b0760858b0b20ff50d0db67793892d29d2466b86a0116f7e232792da0c22330", "version": 2}, {"block": {"hash": "00000000000000000ea3601057ba423805f91d9d813a41a91ae908b68ff6cbce", "height": 815549, "timestamp": "1698187386"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "newton", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.53"}, "size": 268, "timeFirstSeen": "1698185917", "txid": "218a1e058ed0fda76573eabf43ad3ded7e7192e42621893a60aaa152ba7f66fe", "version": 2}, {"block": {"hash": "000000000000000009004fa50065ef6deb091f0d075cf1ef01811d0706c9a8c2", "height": 814357, "timestamp": "1697463218"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "doesthisclear", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.51"}, "size": 275, "timeFirstSeen": "1697462397", "txid": "9f25f4e161472920f624ed6579ccdaf8d096263ab31e157deaa9c987269ead8a", "version": 2}, {"block": {"hash": "00000000000000001533643253107df49b2291beb9d5cd5c7f4f51bf26572e53", "height": 813934, "timestamp": "1697216026"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "worksnow", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.51"}, "size": 270, "timeFirstSeen": "1697215818", "txid": "42c39baded510db31aebaf9172d307afa199dd734a6189ea4bc3530438d715ca", "version": 2}, {"block": {"hash": "0000000000000000166ee88a29775a1098813f4316a5afbe835d21e0d74fda24", "height": 813923, "timestamp": "1697211295"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test4", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 267, "timeFirstSeen": "1697211232", "txid": "5aa64624e493502d083089f5a58069887bc99a6d5569b27df7c7570e024bbf20", "version": 2}, {"block": {"hash": "00000000000000000a1807a17ebcda93947db968e9a112b54ec70237d1a76288", "height": 813922, "timestamp": "1697211196"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.55"}, "size": 267, "timeFirstSeen": "1697211182", "txid": "b26c42ba0cc48f0d3af442b445f19c267189f84dbeb7e366ec7c921f5195aca7", "version": 2}, {"block": {"hash": "00000000000000000a1807a17ebcda93947db968e9a112b54ec70237d1a76288", "height": 813922, "timestamp": "1697211196"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.55"}, "size": 266, "timeFirstSeen": "1697211167", "txid": "f86f20336955bca4e15588d81d029ad2c0dfa498b8be6aced2b63ba3bea1be0a", "version": 2}, {"block": {"hash": "000000000000000006b8990c77dd7a0d3a850a052b6f0bd60b82d44d1ffa7a55", "height": 813615, "timestamp": "1697025138"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "alias", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 268, "timeFirstSeen": "1697024688", "txid": "f17814a75dad000557f19a3a3f6fcc124ab7880292c9fad4c64dc034d5e46551", "version": 2}, {"block": {"hash": "000000000000000006b8990c77dd7a0d3a850a052b6f0bd60b82d44d1ffa7a55", "height": 813615, "timestamp": "1697025138"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "alias", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 267, "timeFirstSeen": "1697024682", "txid": "7eacd3b752003fe761e359cac3d98b1faf4f1dd411150eabc89da8208a312b0e", "version": 2}, {"block": {"hash": "00000000000000000b2dfec91630d335b0233fb323a7acbb297b586d1d0d0678", "height": 812408, "timestamp": "1696282475"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": false, "incoming": false, "isCashtabMessage": true, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "still works", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "22"}, "size": 252, "timeFirstSeen": "1696281429", "txid": "8b3cb0e6c38ee01f9e1e98d611895ff2cd09ad9b4fea73f76f951be815278c26", "version": 2}], "slpUtxos": [{"address": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "blockHeight": -1, "decimals": 0, "isCoinbase": false, "network": "XEC", "outpoint": {"outIdx": 1, "txid": "3b0760858b0b20ff50d0db67793892d29d2466b86a0116f7e232792da0c22330"}, "slpMeta": {"tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109", "tokenType": "FUNGIBLE", "txType": "SEND"}, "slpToken": {"amount": "1", "isMintBaton": false}, "tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109", "tokenQty": "1", "value": "546"}], "tokens": [{"balance": "1", "info": {"decimals": 0, "success": true, "tokenDocumentHash": "", "tokenDocumentUrl": "https://cashtab.com/", "tokenName": "BearNip", "tokenTicker": "BEAR"}, "tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109"}]}}
Received: undefined

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div />
  </body>
</html>
    at toStrictEqual (/work/cashtab/src/hooks/__tests__/useWallet.test.js:530:60)
    at runWithExpensiveErrorDiagnosticsDisabled (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:47:12)
    at checkCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:124:77)
    at checkRealTimersCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:118:16)
    at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)
====== CashTab Unit Tests: useWallet hook rendering in different localforage states Verify a processChronikWsMsg() new block event updates the `aliasServerError` state var upon a /prices/ endpoint error ======
Error: expect(received).toStrictEqual(expected) // deep equality

Expected: {"Path145": {"cashAddress": "ecash:qz3glzzjlp503rn3a3nxccedd7rwj78sgczljhvzv3", "fundingWif": "L2HnC8ZT5JuwVFjrAjJUBs2tmmBoxdVa1MVCJccqV8S9YPoR1NuZ", "hash160": "a28f8852f868f88e71ec666c632d6f86e978f046", "publicKey": "03939a29fd67fa602926637a82f53e1826696353613cac03e34160f040ae2dfcb5"}, "Path1899": {"cashAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "fundingWif": "KywWPgaLDwvW1tWUtUvs13jgqaaWMoNANLVYoKcK9Ddbpnch7Cmw", "hash160": "3a5fb236934ec078b4507c303d3afd82067f8fc1", "publicKey": "031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02d"}, "Path245": {"cashAddress": "ecash:qpsqa7cj5mup8mx0zvt34z7xyp2jztvdds67wajntk", "fundingWif": "L3ndnMkn4574McqhPujguusu48NrmeLUgWYMkRpYQGLXDGAwGmPq", "hash160": "600efb12a6f813eccf13171a8bc62055212d8d6c", "publicKey": "03f73fe2631da9732f2480debbc7ff8d99c5c06764e0f5095b789ff190788bee72"}, "mnemonic": "beauty shoe decline spend still weird slot snack coach flee between paper", "name": "Transaction Fixtures", "state": {"balances": {"totalBalance": "9513.12", "totalBalanceInSatoshis": "951312"}, "nonSlpUtxos": [{"address": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "blockHeight": 815549, "isCoinbase": false, "network": "XEC", "outpoint": {"outIdx": 2, "txid": "218a1e058ed0fda76573eabf43ad3ded7e7192e42621893a60aaa152ba7f66fe"}, "value": "951312"}], "parsedTxHistory": [{"inputs": [[Object], [Object], [Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "etokenAmount": "1", "genesisInfo": [Object], "incoming": true, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": true, "isTokenBurn": false, "opReturnMessage": "", "replyAddress": "ecash:qp89xgjhcqdnzzemts0aj378nfe2mhu9yvxj9nhgg6", "slpMeta": [Object], "xecAmount": "5.46"}, "size": 627, "slpTxData": {"slpMeta": [Object]}, "timeFirstSeen": "1705488591", "txid": "3b0760858b0b20ff50d0db67793892d29d2466b86a0116f7e232792da0c22330", "version": 2}, {"block": {"hash": "00000000000000000ea3601057ba423805f91d9d813a41a91ae908b68ff6cbce", "height": 815549, "timestamp": "1698187386"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "newton", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.53"}, "size": 268, "timeFirstSeen": "1698185917", "txid": "218a1e058ed0fda76573eabf43ad3ded7e7192e42621893a60aaa152ba7f66fe", "version": 2}, {"block": {"hash": "000000000000000009004fa50065ef6deb091f0d075cf1ef01811d0706c9a8c2", "height": 814357, "timestamp": "1697463218"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "doesthisclear", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.51"}, "size": 275, "timeFirstSeen": "1697462397", "txid": "9f25f4e161472920f624ed6579ccdaf8d096263ab31e157deaa9c987269ead8a", "version": 2}, {"block": {"hash": "00000000000000001533643253107df49b2291beb9d5cd5c7f4f51bf26572e53", "height": 813934, "timestamp": "1697216026"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "worksnow", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.51"}, "size": 270, "timeFirstSeen": "1697215818", "txid": "42c39baded510db31aebaf9172d307afa199dd734a6189ea4bc3530438d715ca", "version": 2}, {"block": {"hash": "0000000000000000166ee88a29775a1098813f4316a5afbe835d21e0d74fda24", "height": 813923, "timestamp": "1697211295"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test4", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 267, "timeFirstSeen": "1697211232", "txid": "5aa64624e493502d083089f5a58069887bc99a6d5569b27df7c7570e024bbf20", "version": 2}, {"block": {"hash": "00000000000000000a1807a17ebcda93947db968e9a112b54ec70237d1a76288", "height": 813922, "timestamp": "1697211196"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.55"}, "size": 267, "timeFirstSeen": "1697211182", "txid": "b26c42ba0cc48f0d3af442b445f19c267189f84dbeb7e366ec7c921f5195aca7", "version": 2}, {"block": {"hash": "00000000000000000a1807a17ebcda93947db968e9a112b54ec70237d1a76288", "height": 813922, "timestamp": "1697211196"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.55"}, "size": 266, "timeFirstSeen": "1697211167", "txid": "f86f20336955bca4e15588d81d029ad2c0dfa498b8be6aced2b63ba3bea1be0a", "version": 2}, {"block": {"hash": "000000000000000006b8990c77dd7a0d3a850a052b6f0bd60b82d44d1ffa7a55", "height": 813615, "timestamp": "1697025138"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "alias", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 268, "timeFirstSeen": "1697024688", "txid": "f17814a75dad000557f19a3a3f6fcc124ab7880292c9fad4c64dc034d5e46551", "version": 2}, {"block": {"hash": "000000000000000006b8990c77dd7a0d3a850a052b6f0bd60b82d44d1ffa7a55", "height": 813615, "timestamp": "1697025138"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "alias", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 267, "timeFirstSeen": "1697024682", "txid": "7eacd3b752003fe761e359cac3d98b1faf4f1dd411150eabc89da8208a312b0e", "version": 2}, {"block": {"hash": "00000000000000000b2dfec91630d335b0233fb323a7acbb297b586d1d0d0678", "height": 812408, "timestamp": "1696282475"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": false, "incoming": false, "isCashtabMessage": true, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "still works", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "22"}, "size": 252, "timeFirstSeen": "1696281429", "txid": "8b3cb0e6c38ee01f9e1e98d611895ff2cd09ad9b4fea73f76f951be815278c26", "version": 2}], "slpUtxos": [{"address": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "blockHeight": -1, "decimals": 0, "isCoinbase": false, "network": "XEC", "outpoint": {"outIdx": 1, "txid": "3b0760858b0b20ff50d0db67793892d29d2466b86a0116f7e232792da0c22330"}, "slpMeta": {"tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109", "tokenType": "FUNGIBLE", "txType": "SEND"}, "slpToken": {"amount": "1", "isMintBaton": false}, "tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109", "tokenQty": "1", "value": "546"}], "tokens": [{"balance": "1", "info": {"decimals": 0, "success": true, "tokenDocumentHash": "", "tokenDocumentUrl": "https://cashtab.com/", "tokenName": "BearNip", "tokenTicker": "BEAR"}, "tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109"}]}}
Received: undefined

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div />
  </body>
</html>
    at toStrictEqual (/work/cashtab/src/hooks/__tests__/useWallet.test.js:578:60)
    at runWithExpensiveErrorDiagnosticsDisabled (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:47:12)
    at checkCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:124:77)
    at checkRealTimersCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:118:16)
    at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)
====== CashTab Unit Tests: useWallet hook rendering in different localforage states Verify refreshAliases() updates the `aliases` state variable on a successful /address/ endpoint response ======
Error: expect(received).toStrictEqual(expected) // deep equality

Expected: {"Path145": {"cashAddress": "ecash:qz3glzzjlp503rn3a3nxccedd7rwj78sgczljhvzv3", "fundingWif": "L2HnC8ZT5JuwVFjrAjJUBs2tmmBoxdVa1MVCJccqV8S9YPoR1NuZ", "hash160": "a28f8852f868f88e71ec666c632d6f86e978f046", "publicKey": "03939a29fd67fa602926637a82f53e1826696353613cac03e34160f040ae2dfcb5"}, "Path1899": {"cashAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "fundingWif": "KywWPgaLDwvW1tWUtUvs13jgqaaWMoNANLVYoKcK9Ddbpnch7Cmw", "hash160": "3a5fb236934ec078b4507c303d3afd82067f8fc1", "publicKey": "031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02d"}, "Path245": {"cashAddress": "ecash:qpsqa7cj5mup8mx0zvt34z7xyp2jztvdds67wajntk", "fundingWif": "L3ndnMkn4574McqhPujguusu48NrmeLUgWYMkRpYQGLXDGAwGmPq", "hash160": "600efb12a6f813eccf13171a8bc62055212d8d6c", "publicKey": "03f73fe2631da9732f2480debbc7ff8d99c5c06764e0f5095b789ff190788bee72"}, "mnemonic": "beauty shoe decline spend still weird slot snack coach flee between paper", "name": "Transaction Fixtures", "state": {"balances": {"totalBalance": "9513.12", "totalBalanceInSatoshis": "951312"}, "nonSlpUtxos": [{"address": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "blockHeight": 815549, "isCoinbase": false, "network": "XEC", "outpoint": {"outIdx": 2, "txid": "218a1e058ed0fda76573eabf43ad3ded7e7192e42621893a60aaa152ba7f66fe"}, "value": "951312"}], "parsedTxHistory": [{"inputs": [[Object], [Object], [Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "etokenAmount": "1", "genesisInfo": [Object], "incoming": true, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": true, "isTokenBurn": false, "opReturnMessage": "", "replyAddress": "ecash:qp89xgjhcqdnzzemts0aj378nfe2mhu9yvxj9nhgg6", "slpMeta": [Object], "xecAmount": "5.46"}, "size": 627, "slpTxData": {"slpMeta": [Object]}, "timeFirstSeen": "1705488591", "txid": "3b0760858b0b20ff50d0db67793892d29d2466b86a0116f7e232792da0c22330", "version": 2}, {"block": {"hash": "00000000000000000ea3601057ba423805f91d9d813a41a91ae908b68ff6cbce", "height": 815549, "timestamp": "1698187386"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "newton", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.53"}, "size": 268, "timeFirstSeen": "1698185917", "txid": "218a1e058ed0fda76573eabf43ad3ded7e7192e42621893a60aaa152ba7f66fe", "version": 2}, {"block": {"hash": "000000000000000009004fa50065ef6deb091f0d075cf1ef01811d0706c9a8c2", "height": 814357, "timestamp": "1697463218"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "doesthisclear", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.51"}, "size": 275, "timeFirstSeen": "1697462397", "txid": "9f25f4e161472920f624ed6579ccdaf8d096263ab31e157deaa9c987269ead8a", "version": 2}, {"block": {"hash": "00000000000000001533643253107df49b2291beb9d5cd5c7f4f51bf26572e53", "height": 813934, "timestamp": "1697216026"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "worksnow", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.51"}, "size": 270, "timeFirstSeen": "1697215818", "txid": "42c39baded510db31aebaf9172d307afa199dd734a6189ea4bc3530438d715ca", "version": 2}, {"block": {"hash": "0000000000000000166ee88a29775a1098813f4316a5afbe835d21e0d74fda24", "height": 813923, "timestamp": "1697211295"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test4", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 267, "timeFirstSeen": "1697211232", "txid": "5aa64624e493502d083089f5a58069887bc99a6d5569b27df7c7570e024bbf20", "version": 2}, {"block": {"hash": "00000000000000000a1807a17ebcda93947db968e9a112b54ec70237d1a76288", "height": 813922, "timestamp": "1697211196"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.55"}, "size": 267, "timeFirstSeen": "1697211182", "txid": "b26c42ba0cc48f0d3af442b445f19c267189f84dbeb7e366ec7c921f5195aca7", "version": 2}, {"block": {"hash": "00000000000000000a1807a17ebcda93947db968e9a112b54ec70237d1a76288", "height": 813922, "timestamp": "1697211196"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.55"}, "size": 266, "timeFirstSeen": "1697211167", "txid": "f86f20336955bca4e15588d81d029ad2c0dfa498b8be6aced2b63ba3bea1be0a", "version": 2}, {"block": {"hash": "000000000000000006b8990c77dd7a0d3a850a052b6f0bd60b82d44d1ffa7a55", "height": 813615, "timestamp": "1697025138"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "alias", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 268, "timeFirstSeen": "1697024688", "txid": "f17814a75dad000557f19a3a3f6fcc124ab7880292c9fad4c64dc034d5e46551", "version": 2}, {"block": {"hash": "000000000000000006b8990c77dd7a0d3a850a052b6f0bd60b82d44d1ffa7a55", "height": 813615, "timestamp": "1697025138"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "alias", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 267, "timeFirstSeen": "1697024682", "txid": "7eacd3b752003fe761e359cac3d98b1faf4f1dd411150eabc89da8208a312b0e", "version": 2}, {"block": {"hash": "00000000000000000b2dfec91630d335b0233fb323a7acbb297b586d1d0d0678", "height": 812408, "timestamp": "1696282475"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": false, "incoming": false, "isCashtabMessage": true, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "still works", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "22"}, "size": 252, "timeFirstSeen": "1696281429", "txid": "8b3cb0e6c38ee01f9e1e98d611895ff2cd09ad9b4fea73f76f951be815278c26", "version": 2}], "slpUtxos": [{"address": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "blockHeight": -1, "decimals": 0, "isCoinbase": false, "network": "XEC", "outpoint": {"outIdx": 1, "txid": "3b0760858b0b20ff50d0db67793892d29d2466b86a0116f7e232792da0c22330"}, "slpMeta": {"tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109", "tokenType": "FUNGIBLE", "txType": "SEND"}, "slpToken": {"amount": "1", "isMintBaton": false}, "tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109", "tokenQty": "1", "value": "546"}], "tokens": [{"balance": "1", "info": {"decimals": 0, "success": true, "tokenDocumentHash": "", "tokenDocumentUrl": "https://cashtab.com/", "tokenName": "BearNip", "tokenTicker": "BEAR"}, "tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109"}]}}
Received: undefined

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div />
  </body>
</html>
    at toStrictEqual (/work/cashtab/src/hooks/__tests__/useWallet.test.js:630:60)
    at runWithExpensiveErrorDiagnosticsDisabled (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:47:12)
    at checkCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:124:77)
    at checkRealTimersCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:118:16)
    at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)
====== CashTab Unit Tests: useWallet hook rendering in different localforage states Verify refreshAliases() updates the `aliasServerError` state variable upon an /address/ endpoint error ======
Error: expect(received).toStrictEqual(expected) // deep equality

Expected: {"Path145": {"cashAddress": "ecash:qz3glzzjlp503rn3a3nxccedd7rwj78sgczljhvzv3", "fundingWif": "L2HnC8ZT5JuwVFjrAjJUBs2tmmBoxdVa1MVCJccqV8S9YPoR1NuZ", "hash160": "a28f8852f868f88e71ec666c632d6f86e978f046", "publicKey": "03939a29fd67fa602926637a82f53e1826696353613cac03e34160f040ae2dfcb5"}, "Path1899": {"cashAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "fundingWif": "KywWPgaLDwvW1tWUtUvs13jgqaaWMoNANLVYoKcK9Ddbpnch7Cmw", "hash160": "3a5fb236934ec078b4507c303d3afd82067f8fc1", "publicKey": "031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02d"}, "Path245": {"cashAddress": "ecash:qpsqa7cj5mup8mx0zvt34z7xyp2jztvdds67wajntk", "fundingWif": "L3ndnMkn4574McqhPujguusu48NrmeLUgWYMkRpYQGLXDGAwGmPq", "hash160": "600efb12a6f813eccf13171a8bc62055212d8d6c", "publicKey": "03f73fe2631da9732f2480debbc7ff8d99c5c06764e0f5095b789ff190788bee72"}, "mnemonic": "beauty shoe decline spend still weird slot snack coach flee between paper", "name": "Transaction Fixtures", "state": {"balances": {"totalBalance": "9513.12", "totalBalanceInSatoshis": "951312"}, "nonSlpUtxos": [{"address": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "blockHeight": 815549, "isCoinbase": false, "network": "XEC", "outpoint": {"outIdx": 2, "txid": "218a1e058ed0fda76573eabf43ad3ded7e7192e42621893a60aaa152ba7f66fe"}, "value": "951312"}], "parsedTxHistory": [{"inputs": [[Object], [Object], [Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "etokenAmount": "1", "genesisInfo": [Object], "incoming": true, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": true, "isTokenBurn": false, "opReturnMessage": "", "replyAddress": "ecash:qp89xgjhcqdnzzemts0aj378nfe2mhu9yvxj9nhgg6", "slpMeta": [Object], "xecAmount": "5.46"}, "size": 627, "slpTxData": {"slpMeta": [Object]}, "timeFirstSeen": "1705488591", "txid": "3b0760858b0b20ff50d0db67793892d29d2466b86a0116f7e232792da0c22330", "version": 2}, {"block": {"hash": "00000000000000000ea3601057ba423805f91d9d813a41a91ae908b68ff6cbce", "height": 815549, "timestamp": "1698187386"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "newton", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.53"}, "size": 268, "timeFirstSeen": "1698185917", "txid": "218a1e058ed0fda76573eabf43ad3ded7e7192e42621893a60aaa152ba7f66fe", "version": 2}, {"block": {"hash": "000000000000000009004fa50065ef6deb091f0d075cf1ef01811d0706c9a8c2", "height": 814357, "timestamp": "1697463218"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "doesthisclear", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.51"}, "size": 275, "timeFirstSeen": "1697462397", "txid": "9f25f4e161472920f624ed6579ccdaf8d096263ab31e157deaa9c987269ead8a", "version": 2}, {"block": {"hash": "00000000000000001533643253107df49b2291beb9d5cd5c7f4f51bf26572e53", "height": 813934, "timestamp": "1697216026"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "worksnow", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.51"}, "size": 270, "timeFirstSeen": "1697215818", "txid": "42c39baded510db31aebaf9172d307afa199dd734a6189ea4bc3530438d715ca", "version": 2}, {"block": {"hash": "0000000000000000166ee88a29775a1098813f4316a5afbe835d21e0d74fda24", "height": 813923, "timestamp": "1697211295"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test4", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 267, "timeFirstSeen": "1697211232", "txid": "5aa64624e493502d083089f5a58069887bc99a6d5569b27df7c7570e024bbf20", "version": 2}, {"block": {"hash": "00000000000000000a1807a17ebcda93947db968e9a112b54ec70237d1a76288", "height": 813922, "timestamp": "1697211196"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.55"}, "size": 267, "timeFirstSeen": "1697211182", "txid": "b26c42ba0cc48f0d3af442b445f19c267189f84dbeb7e366ec7c921f5195aca7", "version": 2}, {"block": {"hash": "00000000000000000a1807a17ebcda93947db968e9a112b54ec70237d1a76288", "height": 813922, "timestamp": "1697211196"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.55"}, "size": 266, "timeFirstSeen": "1697211167", "txid": "f86f20336955bca4e15588d81d029ad2c0dfa498b8be6aced2b63ba3bea1be0a", "version": 2}, {"block": {"hash": "000000000000000006b8990c77dd7a0d3a850a052b6f0bd60b82d44d1ffa7a55", "height": 813615, "timestamp": "1697025138"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "alias", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 268, "timeFirstSeen": "1697024688", "txid": "f17814a75dad000557f19a3a3f6fcc124ab7880292c9fad4c64dc034d5e46551", "version": 2}, {"block": {"hash": "000000000000000006b8990c77dd7a0d3a850a052b6f0bd60b82d44d1ffa7a55", "height": 813615, "timestamp": "1697025138"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "alias", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 267, "timeFirstSeen": "1697024682", "txid": "7eacd3b752003fe761e359cac3d98b1faf4f1dd411150eabc89da8208a312b0e", "version": 2}, {"block": {"hash": "00000000000000000b2dfec91630d335b0233fb323a7acbb297b586d1d0d0678", "height": 812408, "timestamp": "1696282475"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": false, "incoming": false, "isCashtabMessage": true, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "still works", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "22"}, "size": 252, "timeFirstSeen": "1696281429", "txid": "8b3cb0e6c38ee01f9e1e98d611895ff2cd09ad9b4fea73f76f951be815278c26", "version": 2}], "slpUtxos": [{"address": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "blockHeight": -1, "decimals": 0, "isCoinbase": false, "network": "XEC", "outpoint": {"outIdx": 1, "txid": "3b0760858b0b20ff50d0db67793892d29d2466b86a0116f7e232792da0c22330"}, "slpMeta": {"tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109", "tokenType": "FUNGIBLE", "txType": "SEND"}, "slpToken": {"amount": "1", "isMintBaton": false}, "tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109", "tokenQty": "1", "value": "546"}], "tokens": [{"balance": "1", "info": {"decimals": 0, "success": true, "tokenDocumentHash": "", "tokenDocumentUrl": "https://cashtab.com/", "tokenName": "BearNip", "tokenTicker": "BEAR"}, "tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109"}]}}
Received: undefined

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div />
  </body>
</html>
    at toStrictEqual (/work/cashtab/src/hooks/__tests__/useWallet.test.js:667:60)
    at runWithExpensiveErrorDiagnosticsDisabled (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:47:12)
    at checkCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:124:77)
    at checkRealTimersCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:118:16)
    at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)
====== CashTab Unit Tests: useWallet hook rendering in different localforage states An incoming tx message from the websocket causes the wallet to update ======
Error: expect(received).toStrictEqual(expected) // deep equality

Expected: {"Path145": {"cashAddress": "ecash:qz3glzzjlp503rn3a3nxccedd7rwj78sgczljhvzv3", "fundingWif": "L2HnC8ZT5JuwVFjrAjJUBs2tmmBoxdVa1MVCJccqV8S9YPoR1NuZ", "hash160": "a28f8852f868f88e71ec666c632d6f86e978f046", "publicKey": "03939a29fd67fa602926637a82f53e1826696353613cac03e34160f040ae2dfcb5"}, "Path1899": {"cashAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "fundingWif": "KywWPgaLDwvW1tWUtUvs13jgqaaWMoNANLVYoKcK9Ddbpnch7Cmw", "hash160": "3a5fb236934ec078b4507c303d3afd82067f8fc1", "publicKey": "031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02d"}, "Path245": {"cashAddress": "ecash:qpsqa7cj5mup8mx0zvt34z7xyp2jztvdds67wajntk", "fundingWif": "L3ndnMkn4574McqhPujguusu48NrmeLUgWYMkRpYQGLXDGAwGmPq", "hash160": "600efb12a6f813eccf13171a8bc62055212d8d6c", "publicKey": "03f73fe2631da9732f2480debbc7ff8d99c5c06764e0f5095b789ff190788bee72"}, "mnemonic": "beauty shoe decline spend still weird slot snack coach flee between paper", "name": "Transaction Fixtures", "state": {"balances": {"totalBalance": "9513.12", "totalBalanceInSatoshis": "951312"}, "nonSlpUtxos": [{"address": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "blockHeight": 815549, "isCoinbase": false, "network": "XEC", "outpoint": {"outIdx": 2, "txid": "218a1e058ed0fda76573eabf43ad3ded7e7192e42621893a60aaa152ba7f66fe"}, "value": "951312"}], "parsedTxHistory": [{"inputs": [[Object], [Object], [Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "etokenAmount": "1", "genesisInfo": [Object], "incoming": true, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": true, "isTokenBurn": false, "opReturnMessage": "", "replyAddress": "ecash:qp89xgjhcqdnzzemts0aj378nfe2mhu9yvxj9nhgg6", "slpMeta": [Object], "xecAmount": "5.46"}, "size": 627, "slpTxData": {"slpMeta": [Object]}, "timeFirstSeen": "1705488591", "txid": "3b0760858b0b20ff50d0db67793892d29d2466b86a0116f7e232792da0c22330", "version": 2}, {"block": {"hash": "00000000000000000ea3601057ba423805f91d9d813a41a91ae908b68ff6cbce", "height": 815549, "timestamp": "1698187386"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "newton", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.53"}, "size": 268, "timeFirstSeen": "1698185917", "txid": "218a1e058ed0fda76573eabf43ad3ded7e7192e42621893a60aaa152ba7f66fe", "version": 2}, {"block": {"hash": "000000000000000009004fa50065ef6deb091f0d075cf1ef01811d0706c9a8c2", "height": 814357, "timestamp": "1697463218"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "doesthisclear", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.51"}, "size": 275, "timeFirstSeen": "1697462397", "txid": "9f25f4e161472920f624ed6579ccdaf8d096263ab31e157deaa9c987269ead8a", "version": 2}, {"block": {"hash": "00000000000000001533643253107df49b2291beb9d5cd5c7f4f51bf26572e53", "height": 813934, "timestamp": "1697216026"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "worksnow", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.51"}, "size": 270, "timeFirstSeen": "1697215818", "txid": "42c39baded510db31aebaf9172d307afa199dd734a6189ea4bc3530438d715ca", "version": 2}, {"block": {"hash": "0000000000000000166ee88a29775a1098813f4316a5afbe835d21e0d74fda24", "height": 813923, "timestamp": "1697211295"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test4", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 267, "timeFirstSeen": "1697211232", "txid": "5aa64624e493502d083089f5a58069887bc99a6d5569b27df7c7570e024bbf20", "version": 2}, {"block": {"hash": "00000000000000000a1807a17ebcda93947db968e9a112b54ec70237d1a76288", "height": 813922, "timestamp": "1697211196"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.55"}, "size": 267, "timeFirstSeen": "1697211182", "txid": "b26c42ba0cc48f0d3af442b445f19c267189f84dbeb7e366ec7c921f5195aca7", "version": 2}, {"block": {"hash": "00000000000000000a1807a17ebcda93947db968e9a112b54ec70237d1a76288", "height": 813922, "timestamp": "1697211196"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "test", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.55"}, "size": 266, "timeFirstSeen": "1697211167", "txid": "f86f20336955bca4e15588d81d029ad2c0dfa498b8be6aced2b63ba3bea1be0a", "version": 2}, {"block": {"hash": "000000000000000006b8990c77dd7a0d3a850a052b6f0bd60b82d44d1ffa7a55", "height": 813615, "timestamp": "1697025138"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "alias", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 268, "timeFirstSeen": "1697024688", "txid": "f17814a75dad000557f19a3a3f6fcc124ab7880292c9fad4c64dc034d5e46551", "version": 2}, {"block": {"hash": "000000000000000006b8990c77dd7a0d3a850a052b6f0bd60b82d44d1ffa7a55", "height": 813615, "timestamp": "1697025138"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": true, "incoming": false, "isCashtabMessage": false, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "alias", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "5.54"}, "size": 267, "timeFirstSeen": "1697024682", "txid": "7eacd3b752003fe761e359cac3d98b1faf4f1dd411150eabc89da8208a312b0e", "version": 2}, {"block": {"hash": "00000000000000000b2dfec91630d335b0233fb323a7acbb297b586d1d0d0678", "height": 812408, "timestamp": "1696282475"}, "inputs": [[Object]], "isCoinbase": false, "lockTime": 0, "network": "XEC", "outputs": [[Object], [Object], [Object]], "parsed": {"airdropFlag": false, "airdropTokenId": "", "aliasFlag": false, "incoming": false, "isCashtabMessage": true, "isEncryptedMessage": false, "isEtokenTx": false, "opReturnMessage": "still works", "replyAddress": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "xecAmount": "22"}, "size": 252, "timeFirstSeen": "1696281429", "txid": "8b3cb0e6c38ee01f9e1e98d611895ff2cd09ad9b4fea73f76f951be815278c26", "version": 2}], "slpUtxos": [{"address": "ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g", "blockHeight": -1, "decimals": 0, "isCoinbase": false, "network": "XEC", "outpoint": {"outIdx": 1, "txid": "3b0760858b0b20ff50d0db67793892d29d2466b86a0116f7e232792da0c22330"}, "slpMeta": {"tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109", "tokenType": "FUNGIBLE", "txType": "SEND"}, "slpToken": {"amount": "1", "isMintBaton": false}, "tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109", "tokenQty": "1", "value": "546"}], "tokens": [{"balance": "1", "info": {"decimals": 0, "success": true, "tokenDocumentHash": "", "tokenDocumentUrl": "https://cashtab.com/", "tokenName": "BearNip", "tokenTicker": "BEAR"}, "tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109"}]}}
Received: undefined

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div />
  </body>
</html>
    at toStrictEqual (/work/cashtab/src/hooks/__tests__/useWallet.test.js:698:60)
    at runWithExpensiveErrorDiagnosticsDisabled (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:47:12)
    at checkCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:124:77)
    at checkRealTimersCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:118:16)
    at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)
====== CashTab Unit Tests: <Configure /> We can add, delete, rename, contacts from the Configure screen, and add a savedWallet as a contact ======
Error: expect(element).toHaveTextContent()

Expected element to have text content:
  alphaecash:qp89xgjhcqdnzzemts0aj378nfe2mhu9yvxj9nhgg6betaecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035gammaecash:qphlhe78677sz227k83hrh542qeehh8el5lcjwk72yDownloadCSVAddContact
Received:
  Your contact list is empty.Contacts can be added by clicking on a received transaction and looking for the "Add to contacts" icon or via the "New Contact" button below.AddContact

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div>
      <div
        class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
      >
        <div>
          <div
            aria-busy="true"
            aria-live="polite"
            class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
          >
            <span
              aria-label="loading"
              class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
              role="img"
            >
              <svg
                aria-hidden="true"
                data-icon="loading"
                fill="currentColor"
                focusable="false"
                height="1em"
                viewBox="0 0 1024 1024"
                width="1em"
              >
                <path
                  d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
                />
              </svg>
            </span>
          </div>
        </div>
        <div
          class="ant-spin-container ant-spin-blur"
        >
          <div
            class="sc-iBEsjs hYXNZl"
          >
            <div
              class="sc-RcBXQ krXqvz"
            >
              <div
                class="sc-iSDuPN cdWENt"
              >
                <div
                  class="sc-chbbiW kmKhFr"
                >
                  <div
                    class="sc-fZwumE jmbiQP"
                  >
                    <img
                      alt="cashtab"
                      class="sc-fQejPQ iclGva"
                      src="test-file-stub"
                    />
                    <div
                      class="sc-jXQZqI jNpDSO"
                    >
                      Settings
                      <svg
                        height="33px"
                        width="30px"
                      />
                    </div>
                  </div>
                </div>
                <div
                  class="sc-lhVmIH gJoLAm"
                  data-testid="configure-ctn"
                >
                  <div
                    class="sc-gPWkxV fPJZLd"
                  >
                    <h2>
                      <span
                        aria-label="copy"
                        class="anticon anticon-copy sc-bwzfXH gJwWNq"
                        role="img"
                      >
                        <svg
                          aria-hidden="true"
                          data-icon="copy"
                          fill="currentColor"
                          focusable="false"
                          height="1em"
                          viewBox="64 64 896 896"
                          width="1em"
                        >
                          <path
                            d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"
                          />
                        </svg>
                      </span>
                       Backup your wallet
                    </h2>
                    <div
                      class="ant-alert ant-alert-warning ant-alert-with-description css-dev-only-do-not-override-1rqnfsa"
                      data-show="true"
                      role="alert"
                      style="margin-bottom: 12px;"
                    >
                      <span
                        aria-label="exclamation-circle"
                        class="anticon anticon-exclamation-circle ant-alert-icon"
                        role="img"
                      >
                        <svg
                          aria-hidden="true"
                          data-icon="exclamation-circle"
                          fill="currentColor"
                          focusable="false"
                          height="1em"
                          viewBox="64 64 896 896"
                          width="1em"
                        >
                          <path
                            d="M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm-32 232c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v272c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V296zm32 440a48.01 48.01 0 010-96 48.01 48.01 0 010 96z"
                          />
                        </svg>
                      </span>
                      <div
                        class="ant-alert-content"
                      >
                        <div
                          class="ant-alert-description"
                        >
                          Your seed phrase is the only way to restore your wallet...
    at toHaveTextContent (/work/cashtab/src/components/Configure/__tests__/Configure.test.js:134:62)
    at runWithExpensiveErrorDiagnosticsDisabled (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:47:12)
    at checkCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:124:77)
    at checkRealTimersCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:118:16)
    at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)
====== CashTab Unit Tests: <Configure /> We can rename the active wallet or a saved wallet, we can add a wallet, we can import a wallet, we can delete a wallet ======
Error: Unable to find an element with the text: alpha. 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="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                  <div
                    class="sc-jXQZqI jNpDSO"
                  >
                    Settings
                    <svg
                      height="33px"
                      width="30px"
                    />
                  </div>
                </div>
              </div>
              <div
                class="sc-lhVmIH gJoLAm"
                data-testid="configure-ctn"
              >
                <div
                  class="sc-gPWkxV fPJZLd"
                >
                  <h2>
                    <span
                      aria-label="copy"
                      class="anticon anticon-copy sc-bwzfXH gJwWNq"
                      role="img"
                    >
                      <svg
                        aria-hidden="true"
                        data-icon="copy"
                        fill="currentColor"
                        focusable="false"
                        height="1em"
                        viewBox="64 64 896 896"
                        width="1em"
                      >
                        <path
                          d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"
                        />
                      </svg>
                    </span>
                     Backup your wallet
                  </h2>
                  <div
                    class="ant-alert ant-alert-warning ant-alert-with-description css-dev-only-do-not-override-1rqnfsa"
                    data-show="true"
                    role="alert"
                    style="margin-bottom: 12px;"
                  >
                    <span
                      aria-label="exclamation-circle"
                      class="anticon anticon-exclamation-circle ant-alert-icon"
                      role="img"
                    >
                      <svg
                        aria-hidden="true"
                        data-icon="exclamation-circle"
                        fill="currentColor"
                        focusable="false"
                        height="1em"
                        viewBox="64 64 896 896"
                        width="1em"
                      >
                        <path
                          d="M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm-32 232c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v272c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V296zm32 440a48.01 48.01 0 010-96 48.01 48.01 0 010 96z"
                        />
                      </svg>
                    </span>
                    <div
                      class="ant-alert-content"
                    >
                      <div
                        class="ant-alert-description"
                      >
                        Your seed phrase is the only way to restore your wallet. Write it down. Keep it safe.
                      </div>
                    </div>
                  </div>
                  <div
                    class="sc-jVODtj dXVIps"
                  />
                 ...
    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/Configure/__tests__/Configure.test.js:347:29)
====== CashTab Unit Tests: <Home /> Renders the loading component while loading, then the Home screen ======
Error: expect(element).not.toBeInTheDocument()

expected document not to contain element, found <div class="sc-jwKygS hNrbtP" data-testid="loading-ctn" /> instead

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div>
      <div
        class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
      >
        <div>
          <div
            aria-busy="true"
            aria-live="polite"
            class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
          >
            <span
              aria-label="loading"
              class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
              role="img"
            >
              <svg
                aria-hidden="true"
                data-icon="loading"
                fill="currentColor"
                focusable="false"
                height="1em"
                viewBox="0 0 1024 1024"
                width="1em"
              >
                <path
                  d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
                />
              </svg>
            </span>
          </div>
        </div>
        <div
          class="ant-spin-container ant-spin-blur"
        >
          <div
            class="sc-iBEsjs hYXNZl"
          >
            <div
              class="sc-RcBXQ krXqvz"
            >
              <div
                class="sc-iSDuPN cdWENt"
              >
                <div
                  class="sc-chbbiW kmKhFr"
                >
                  <div
                    class="sc-fZwumE jmbiQP"
                  >
                    <img
                      alt="cashtab"
                      class="sc-fQejPQ iclGva"
                      src="test-file-stub"
                    />
                  </div>
                </div>
                <div
                  class="sc-jwKygS hNrbtP"
                  data-testid="loading-ctn"
                />
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </body>
</html>...
    at toBeInTheDocument (/work/cashtab/src/components/Home/__tests__/Home.test.js:95:61)
    at runWithExpensiveErrorDiagnosticsDisabled (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:47:12)
    at checkCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:124:77)
    at checkRealTimersCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:118:16)
    at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)
====== CashTab Unit Tests: <Home /> Renders the Home screen with API error ======
Error: Unable to find an element with the text: Error in chronik connection. 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="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jwKygS hNrbtP"
                data-testid="loading-ctn"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    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/Home/__tests__/Home.test.js:122:26)
====== CashTab Unit Tests: <Home /> Renders Sideshift button if user loads with a new wallet ======
Error: expect(element).not.toBeInTheDocument()

expected document not to contain element, found <div class="sc-jwKygS hNrbtP" data-testid="loading-ctn" /> instead

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div>
      <div
        class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
      >
        <div>
          <div
            aria-busy="true"
            aria-live="polite"
            class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
          >
            <span
              aria-label="loading"
              class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
              role="img"
            >
              <svg
                aria-hidden="true"
                data-icon="loading"
                fill="currentColor"
                focusable="false"
                height="1em"
                viewBox="0 0 1024 1024"
                width="1em"
              >
                <path
                  d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
                />
              </svg>
            </span>
          </div>
        </div>
        <div
          class="ant-spin-container ant-spin-blur"
        >
          <div
            class="sc-iBEsjs hYXNZl"
          >
            <div
              class="sc-RcBXQ krXqvz"
            >
              <div
                class="sc-iSDuPN cdWENt"
              >
                <div
                  class="sc-chbbiW kmKhFr"
                >
                  <div
                    class="sc-fZwumE jmbiQP"
                  >
                    <img
                      alt="cashtab"
                      class="sc-fQejPQ iclGva"
                      src="test-file-stub"
                    />
                  </div>
                </div>
                <div
                  class="sc-jwKygS hNrbtP"
                  data-testid="loading-ctn"
                />
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </body>
</html>...
    at toBeInTheDocument (/work/cashtab/src/components/Home/__tests__/Home.test.js:135:61)
    at runWithExpensiveErrorDiagnosticsDisabled (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:47:12)
    at checkCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:124:77)
    at checkRealTimersCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:118:16)
    at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)
====== CashTab Unit Tests: <Receive /> Renders as expected on desktop, including copy paste functionality of clicking on the QR code ======
Error: expect(element).not.toBeInTheDocument()

expected document not to contain element, found <div class="sc-jwKygS hNrbtP" data-testid="rcv-loading" /> instead

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div>
      <div
        class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
      >
        <div>
          <div
            aria-busy="true"
            aria-live="polite"
            class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
          >
            <span
              aria-label="loading"
              class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
              role="img"
            >
              <svg
                aria-hidden="true"
                data-icon="loading"
                fill="currentColor"
                focusable="false"
                height="1em"
                viewBox="0 0 1024 1024"
                width="1em"
              >
                <path
                  d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
                />
              </svg>
            </span>
          </div>
        </div>
        <div
          class="ant-spin-container ant-spin-blur"
        >
          <div
            class="sc-iBEsjs hYXNZl"
          >
            <div
              class="sc-RcBXQ krXqvz"
            >
              <div
                class="sc-iSDuPN cdWENt"
              >
                <div
                  class="sc-chbbiW kmKhFr"
                >
                  <div
                    class="sc-fZwumE jmbiQP"
                  >
                    <img
                      alt="cashtab"
                      class="sc-fQejPQ iclGva"
                      src="test-file-stub"
                    />
                  </div>
                </div>
                <div
                  class="sc-jwKygS hNrbtP"
                  data-testid="rcv-loading"
                />
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </body>
</html>...
    at toBeInTheDocument (/work/cashtab/src/components/Receive/__tests__/Receive.test.js:105:61)
    at runWithExpensiveErrorDiagnosticsDisabled (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:47:12)
    at checkCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:124:77)
    at checkRealTimersCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:118:16)
    at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)
====== CashTab Unit Tests: <Receive /> Renders the Receive screen with QR code of expected width for smallest supported mobile view ======
Error: expect(element).not.toBeInTheDocument()

expected document not to contain element, found <div class="sc-jwKygS hNrbtP" data-testid="rcv-loading" /> instead

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div>
      <div
        class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
      >
        <div>
          <div
            aria-busy="true"
            aria-live="polite"
            class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
          >
            <span
              aria-label="loading"
              class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
              role="img"
            >
              <svg
                aria-hidden="true"
                data-icon="loading"
                fill="currentColor"
                focusable="false"
                height="1em"
                viewBox="0 0 1024 1024"
                width="1em"
              >
                <path
                  d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
                />
              </svg>
            </span>
          </div>
        </div>
        <div
          class="ant-spin-container ant-spin-blur"
        >
          <div
            class="sc-iBEsjs hYXNZl"
          >
            <div
              class="sc-RcBXQ krXqvz"
            >
              <div
                class="sc-iSDuPN cdWENt"
              >
                <div
                  class="sc-chbbiW kmKhFr"
                >
                  <div
                    class="sc-fZwumE jmbiQP"
                  >
                    <img
                      alt="cashtab"
                      class="sc-fQejPQ iclGva"
                      src="test-file-stub"
                    />
                  </div>
                </div>
                <div
                  class="sc-jwKygS hNrbtP"
                  data-testid="rcv-loading"
                />
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </body>
</html>...
    at toBeInTheDocument (/work/cashtab/src/components/Receive/__tests__/Receive.test.js:166:61)
    at runWithExpensiveErrorDiagnosticsDisabled (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:47:12)
    at checkCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:124:77)
    at checkRealTimersCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:118:16)
    at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)
====== CashTab Unit Tests: <Receive /> Renders the Receive screen with QR code of size that is fully viewable in extension dimensions ======
Error: expect(element).not.toBeInTheDocument()

expected document not to contain element, found <div class="sc-jwKygS hNrbtP" data-testid="rcv-loading" /> instead

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div>
      <div
        class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
      >
        <div>
          <div
            aria-busy="true"
            aria-live="polite"
            class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
          >
            <span
              aria-label="loading"
              class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
              role="img"
            >
              <svg
                aria-hidden="true"
                data-icon="loading"
                fill="currentColor"
                focusable="false"
                height="1em"
                viewBox="0 0 1024 1024"
                width="1em"
              >
                <path
                  d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
                />
              </svg>
            </span>
          </div>
        </div>
        <div
          class="ant-spin-container ant-spin-blur"
        >
          <div
            class="sc-iBEsjs hYXNZl"
          >
            <div
              class="sc-RcBXQ krXqvz"
            >
              <div
                class="sc-iSDuPN cdWENt"
              >
                <div
                  class="sc-chbbiW kmKhFr"
                >
                  <div
                    class="sc-fZwumE jmbiQP"
                  >
                    <img
                      alt="cashtab"
                      class="sc-fQejPQ iclGva"
                      src="test-file-stub"
                    />
                  </div>
                </div>
                <div
                  class="sc-jwKygS hNrbtP"
                  data-testid="rcv-loading"
                />
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </body>
</html>...
    at toBeInTheDocument (/work/cashtab/src/components/Receive/__tests__/Receive.test.js:215:61)
    at runWithExpensiveErrorDiagnosticsDisabled (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:47:12)
    at checkCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:124:77)
    at checkRealTimersCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:118:16)
    at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)
====== CashTab Unit Tests: <CreateToken /> If wallet has sufficient XEC, renders CreateTokenForm ======
Error: Unable to find an element with the text: Create a Token. 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="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-lhVmIH gJoLAm"
              >
                <p
                  class="sc-dqBHgY iOJezR"
                >
                  You need at least 
                  5.5
                   
                  XEC
                   (
                  $
                  0.0002
                   
                  USD
                  ) to create a token
                </p>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    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/Etokens/__tests__/CreateToken.test.js:85:29)
====== CashTab Unit Tests: <CreateToken /> If wallet has insufficient XEC, renders component but does not render CreateTokenForm ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== CashTab Unit Tests: <CashtabTestWrapper /> With default props, renders App component ======
Error: expect(element).not.toBeInTheDocument()

expected document not to contain element, found <div class="sc-jwKygS hNrbtP" data-testid="loading-ctn" /> instead

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div>
      <div
        class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
      >
        <div>
          <div
            aria-busy="true"
            aria-live="polite"
            class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
          >
            <span
              aria-label="loading"
              class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
              role="img"
            >
              <svg
                aria-hidden="true"
                data-icon="loading"
                fill="currentColor"
                focusable="false"
                height="1em"
                viewBox="0 0 1024 1024"
                width="1em"
              >
                <path
                  d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
                />
              </svg>
            </span>
          </div>
        </div>
        <div
          class="ant-spin-container ant-spin-blur"
        >
          <div
            class="sc-iBEsjs hYXNZl"
          >
            <div
              class="sc-RcBXQ krXqvz"
            >
              <div
                class="sc-iSDuPN cdWENt"
              >
                <div
                  class="sc-chbbiW kmKhFr"
                >
                  <div
                    class="sc-fZwumE jmbiQP"
                  >
                    <img
                      alt="cashtab"
                      class="sc-fQejPQ iclGva"
                      src="test-file-stub"
                    />
                  </div>
                </div>
                <div
                  class="sc-jwKygS hNrbtP"
                  data-testid="loading-ctn"
                />
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </body>
</html>...
    at toBeInTheDocument (/work/cashtab/src/components/fixtures/__tests__/CashtabTestWrapper.test.js:87:61)
    at runWithExpensiveErrorDiagnosticsDisabled (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:47:12)
    at checkCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:124:77)
    at checkRealTimersCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:118:16)
    at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)
====== CashTab Unit Tests: <CashtabTestWrapper /> We can render other pages by passing the route ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== CashTab Unit Tests: <SignVerifyMsg /> Notification is rendered upon successfully signing a message ======
Error: Unable to find an element with the text: Message Signature Generated. 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="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                  <div
                    class="sc-jXQZqI jNpDSO"
                  >
                     
                    Sign & Verify Msg
                    <svg
                      class="sc-chPdSV kiHcnD"
                    />
                  </div>
                </div>
              </div>
              <div
                class="sc-ipXKqB fnQgHb"
              >
                <div
                  class="sc-lhVmIH gJoLAm"
                  data-testid="signverifymsg-ctn"
                >
                  <div
                    class="sc-iuJeZd fbkGmg"
                  >
                    <div
                      class="ant-collapse ant-collapse-icon-position-start sc-cmthru bLbIvy css-dev-only-do-not-override-1rqnfsa"
                      style="margin-bottom: 24px;"
                    >
                      <div
                        class="ant-collapse-item ant-collapse-item-active"
                      >
                        <div
                          aria-disabled="false"
                          aria-expanded="true"
                          class="ant-collapse-header"
                          role="button"
                          tabindex="0"
                        >
                          <div
                            class="ant-collapse-expand-icon"
                          >
                            <span
                              aria-label="right"
                              class="anticon anticon-right ant-collapse-arrow"
                              role="img"
                            >
                              <svg
                                aria-hidden="true"
                                data-icon="right"
                                fill="currentColor"
                                focusable="false"
                                height="1em"
                                style="transform: rotate(90deg);"
                                viewBox="64 64 896 896"
                                width="1em"
                              >
                                <path
                                  d="M765.7 486.8L314.9 134.7A7.97 7.97 0 00302 141v77.3c0 4.9 2.3 9.6 6.1 12.6l360 281.1-360 281.1c-3.9 3-6.1 7.7-6.1 12.6V883c0 6.7 7.7 10.4 12.9 6.3l450.8-352.1a31.96 31.96 0 000-50.4z"
                                />
                              </svg>
                            </span>
                          </div>
                          <span
                            class="ant-collapse-header-text"
                          >
                            <div
                              class="sc-cMhqgX dwYjBs"
                            >
                              Sign
                            </div>
                          </span>
                        </div>
                        <div
                          class="ant-collapse-content ant-collapse-content-active"
                        >
                          <div
                            class="ant-collapse-content-box"
                          >
                            <div
                              class="sc-cvbbAY kdxSAu"
                            >
                              <form
                                class="ant-form ant-form-horizontal ant-form-small css-dev-only-do-not-o...
    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/SignVerifyMsg/__tests__/SignVerifyMsg.test.js:109:26)
====== CashTab Unit Tests: <SignVerifyMsg /> Notification is rendered upon successfully verifying a message ======
Error: Unable to perform pointer interaction as the element inherits `pointer-events: none`:

DIV  <-- This element declared `pointer-events: none`
 DIV
  DIV
   DIV
    DIV
     DIV(testId=signverifymsg-ctn)
      DIV
       DIV
        DIV
         DIV
          DIV
           DIV
            FORM
             DIV
              DIV
               DIV
                DIV
                 DIV
                  DIV
                   DIV
                    DIV
                     DIV
                      DIV
                       DIV
                        SPAN
                         INPUT(testId=destination-address-single-without-qrscan)  <-- Asserted pointer events here
    at Object.assertPointerEvents (/work/cashtab/node_modules/@testing-library/user-event/dist/cjs/utils/pointer/cssPointerEvents.js:47:15)
    at Object.enter (/work/cashtab/node_modules/@testing-library/user-event/dist/cjs/system/pointer/pointer.js:57:34)
    at PointerHost.move (/work/cashtab/node_modules/@testing-library/user-event/dist/cjs/system/pointer/index.js:50:79)
    at pointerAction (/work/cashtab/node_modules/@testing-library/user-event/dist/cjs/pointer/index.js:64:39)
    at Object.pointer (/work/cashtab/node_modules/@testing-library/user-event/dist/cjs/pointer/index.js:32:15)
    at Object.type (/work/cashtab/node_modules/@testing-library/user-event/dist/cjs/utility/type.js:18:9)
    at Object.asyncWrapper (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:88:22)
    at Object.<anonymous> (/work/cashtab/src/components/SignVerifyMsg/__tests__/SignVerifyMsg.test.js:136:9)
====== CashTab Unit Tests: <SignVerifyMsg /> Notification is rendered upon signature verification error ======
Error: Unable to perform pointer interaction as the element inherits `pointer-events: none`:

DIV  <-- This element declared `pointer-events: none`
 DIV
  DIV
   DIV
    DIV
     DIV(testId=signverifymsg-ctn)
      DIV
       DIV
        DIV
         DIV
          DIV
           DIV
            FORM
             DIV
              DIV
               DIV
                DIV
                 DIV
                  DIV
                   DIV
                    DIV
                     DIV
                      DIV
                       DIV
                        SPAN
                         INPUT(testId=destination-address-single-without-qrscan)  <-- Asserted pointer events here
    at Object.assertPointerEvents (/work/cashtab/node_modules/@testing-library/user-event/dist/cjs/utils/pointer/cssPointerEvents.js:47:15)
    at Object.enter (/work/cashtab/node_modules/@testing-library/user-event/dist/cjs/system/pointer/pointer.js:57:34)
    at PointerHost.move (/work/cashtab/node_modules/@testing-library/user-event/dist/cjs/system/pointer/index.js:50:79)
    at pointerAction (/work/cashtab/node_modules/@testing-library/user-event/dist/cjs/pointer/index.js:64:39)
    at Object.pointer (/work/cashtab/node_modules/@testing-library/user-event/dist/cjs/pointer/index.js:32:15)
    at Object.type (/work/cashtab/node_modules/@testing-library/user-event/dist/cjs/utility/type.js:18:9)
    at Object.asyncWrapper (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:88:22)
    at Object.<anonymous> (/work/cashtab/src/components/SignVerifyMsg/__tests__/SignVerifyMsg.test.js:183:9)
====== CashTab Unit Tests: <Alias /> Registered and Pending Aliases are correctly rendered ======
Error: expect(element).toHaveTextContent()

Expected element to have text content:
  chicken555.xecchicken666.xec
Received:
  No registered aliases

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div>
      <div
        class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
      >
        <div>
          <div
            aria-busy="true"
            aria-live="polite"
            class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
          >
            <span
              aria-label="loading"
              class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
              role="img"
            >
              <svg
                aria-hidden="true"
                data-icon="loading"
                fill="currentColor"
                focusable="false"
                height="1em"
                viewBox="0 0 1024 1024"
                width="1em"
              >
                <path
                  d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
                />
              </svg>
            </span>
          </div>
        </div>
        <div
          class="ant-spin-container ant-spin-blur"
        >
          <div
            class="sc-iBEsjs hYXNZl"
          >
            <div
              class="sc-RcBXQ krXqvz"
            >
              <div
                class="sc-iSDuPN cdWENt"
              >
                <div
                  class="sc-chbbiW kmKhFr"
                >
                  <div
                    class="sc-fZwumE jmbiQP"
                  >
                    <img
                      alt="cashtab"
                      class="sc-fQejPQ iclGva"
                      src="test-file-stub"
                    />
                  </div>
                </div>
                <div
                  class="sc-lhVmIH gJoLAm"
                >
                  <div
                    class="ant-row css-dev-only-do-not-override-1rqnfsa"
                    type="flex"
                  >
                    <div
                      class="ant-col ant-col-24 css-dev-only-do-not-override-1rqnfsa"
                    >
                      <div
                        class="sc-cpmLhU jXNcio"
                      >
                        <h2>
                          eCash Namespace Alias
                        </h2>
                      </div>
                      <div
                        class="sc-lhVmIH gJoLAm"
                      >
                        <div
                          class="sc-cvbbAY kdxSAu"
                        >
                          <form
                            class="ant-form ant-form-horizontal css-dev-only-do-not-override-1rqnfsa"
                            style="width: auto;"
                          >
                            <div
                              class="ant-form-item css-dev-only-do-not-override-1rqnfsa"
                            >
                              <div
                                class="ant-row ant-form-item-row css-dev-only-do-not-override-1rqnfsa"
                              >
                                <div
                                  class="ant-col ant-form-item-control css-dev-only-do-not-override-1rqnfsa"
                                >
                                  <div
                                    class="ant-form-item-control-input"
                                  >
                                    <div
                                      class="ant-form-item-control-input-content"
                                    >
                                      <div
                                        class="sc-cvbbAY kdxSAu"
                                      >
                                        <div
                                          class="ant-form-item css-dev-only-do-not-override-1rqnfsa ant-form-item-with-help ant-form-item-has-error"
                                        >
                                          <div
                                            class="ant-row ant-form-item-row css-dev-only-do-not-override-1rqnfsa"
                                          >
                                            <div
                                              class="ant-col ant-form-item-control css-dev-only-do-not-override-1rqnfsa"
                                            >
                                              <div
                                                class="ant-form-item-control-input"
                                              >
                                                <div
                                                  class="ant-form-item-control-input-content"
                                                >
                                                  <span
                                                    class="ant-input-group-wrapper ant-input-group-wrapper-outlined ant-input-group-wrapper-status-error css-dev-only-do-not-override-1rqnfsa"
                                                  >
                                                    <span
                                                      ...
    at toHaveTextContent (/work/cashtab/src/components/Alias/__tests__/Alias.test.js:118:15)
    at runWithExpensiveErrorDiagnosticsDisabled (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:47:12)
    at checkCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:124:77)
    at checkRealTimersCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:118:16)
    at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)
====== CashTab Unit Tests: <Alias /> Registered and Pending Aliases are correctly rendered when pending list is empty ======
Error: expect(element).toHaveTextContent()

Expected element to have text content:
  chicken555.xec
Received:
  No registered aliases

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div>
      <div
        class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
      >
        <div>
          <div
            aria-busy="true"
            aria-live="polite"
            class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
          >
            <span
              aria-label="loading"
              class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
              role="img"
            >
              <svg
                aria-hidden="true"
                data-icon="loading"
                fill="currentColor"
                focusable="false"
                height="1em"
                viewBox="0 0 1024 1024"
                width="1em"
              >
                <path
                  d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
                />
              </svg>
            </span>
          </div>
        </div>
        <div
          class="ant-spin-container ant-spin-blur"
        >
          <div
            class="sc-iBEsjs hYXNZl"
          >
            <div
              class="sc-RcBXQ krXqvz"
            >
              <div
                class="sc-iSDuPN cdWENt"
              >
                <div
                  class="sc-chbbiW kmKhFr"
                >
                  <div
                    class="sc-fZwumE jmbiQP"
                  >
                    <img
                      alt="cashtab"
                      class="sc-fQejPQ iclGva"
                      src="test-file-stub"
                    />
                  </div>
                </div>
                <div
                  class="sc-lhVmIH gJoLAm"
                >
                  <div
                    class="ant-row css-dev-only-do-not-override-1rqnfsa"
                    type="flex"
                  >
                    <div
                      class="ant-col ant-col-24 css-dev-only-do-not-override-1rqnfsa"
                    >
                      <div
                        class="sc-cpmLhU jXNcio"
                      >
                        <h2>
                          eCash Namespace Alias
                        </h2>
                      </div>
                      <div
                        class="sc-lhVmIH gJoLAm"
                      >
                        <div
                          class="sc-cvbbAY kdxSAu"
                        >
                          <form
                            class="ant-form ant-form-horizontal css-dev-only-do-not-override-1rqnfsa"
                            style="width: auto;"
                          >
                            <div
                              class="ant-form-item css-dev-only-do-not-override-1rqnfsa"
                            >
                              <div
                                class="ant-row ant-form-item-row css-dev-only-do-not-override-1rqnfsa"
                              >
                                <div
                                  class="ant-col ant-form-item-control css-dev-only-do-not-override-1rqnfsa"
                                >
                                  <div
                                    class="ant-form-item-control-input"
                                  >
                                    <div
                                      class="ant-form-item-control-input-content"
                                    >
                                      <div
                                        class="sc-cvbbAY kdxSAu"
                                      >
                                        <div
                                          class="ant-form-item css-dev-only-do-not-override-1rqnfsa ant-form-item-with-help ant-form-item-has-error"
                                        >
                                          <div
                                            class="ant-row ant-form-item-row css-dev-only-do-not-override-1rqnfsa"
                                          >
                                            <div
                                              class="ant-col ant-form-item-control css-dev-only-do-not-override-1rqnfsa"
                                            >
                                              <div
                                                class="ant-form-item-control-input"
                                              >
                                                <div
                                                  class="ant-form-item-control-input-content"
                                                >
                                                  <span
                                                    class="ant-input-group-wrapper ant-input-group-wrapper-outlined ant-input-group-wrapper-status-error css-dev-only-do-not-override-1rqnfsa"
                                                  >
                                                    <span
                                                      ...
    at toHaveTextContent (/work/cashtab/src/components/Alias/__tests__/Alias.test.js:162:15)
    at runWithExpensiveErrorDiagnosticsDisabled (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:47:12)
    at checkCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:124:77)
    at checkRealTimersCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:118:16)
    at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)
====== CashTab Unit Tests: <Alias /> Registered and Pending Aliases are correctly rendered when registered list is empty ======
Error: expect(element).toHaveTextContent()

Expected element to have text content:
  chicken444.xec
Received:
  No pending aliases

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div>
      <div
        class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
      >
        <div>
          <div
            aria-busy="true"
            aria-live="polite"
            class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
          >
            <span
              aria-label="loading"
              class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
              role="img"
            >
              <svg
                aria-hidden="true"
                data-icon="loading"
                fill="currentColor"
                focusable="false"
                height="1em"
                viewBox="0 0 1024 1024"
                width="1em"
              >
                <path
                  d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
                />
              </svg>
            </span>
          </div>
        </div>
        <div
          class="ant-spin-container ant-spin-blur"
        >
          <div
            class="sc-iBEsjs hYXNZl"
          >
            <div
              class="sc-RcBXQ krXqvz"
            >
              <div
                class="sc-iSDuPN cdWENt"
              >
                <div
                  class="sc-chbbiW kmKhFr"
                >
                  <div
                    class="sc-fZwumE jmbiQP"
                  >
                    <img
                      alt="cashtab"
                      class="sc-fQejPQ iclGva"
                      src="test-file-stub"
                    />
                  </div>
                </div>
                <div
                  class="sc-lhVmIH gJoLAm"
                >
                  <div
                    class="ant-row css-dev-only-do-not-override-1rqnfsa"
                    type="flex"
                  >
                    <div
                      class="ant-col ant-col-24 css-dev-only-do-not-override-1rqnfsa"
                    >
                      <div
                        class="sc-cpmLhU jXNcio"
                      >
                        <h2>
                          eCash Namespace Alias
                        </h2>
                      </div>
                      <div
                        class="sc-lhVmIH gJoLAm"
                      >
                        <div
                          class="sc-cvbbAY kdxSAu"
                        >
                          <form
                            class="ant-form ant-form-horizontal css-dev-only-do-not-override-1rqnfsa"
                            style="width: auto;"
                          >
                            <div
                              class="ant-form-item css-dev-only-do-not-override-1rqnfsa"
                            >
                              <div
                                class="ant-row ant-form-item-row css-dev-only-do-not-override-1rqnfsa"
                              >
                                <div
                                  class="ant-col ant-form-item-control css-dev-only-do-not-override-1rqnfsa"
                                >
                                  <div
                                    class="ant-form-item-control-input"
                                  >
                                    <div
                                      class="ant-form-item-control-input-content"
                                    >
                                      <div
                                        class="sc-cvbbAY kdxSAu"
                                      >
                                        <div
                                          class="ant-form-item css-dev-only-do-not-override-1rqnfsa ant-form-item-with-help ant-form-item-has-error"
                                        >
                                          <div
                                            class="ant-row ant-form-item-row css-dev-only-do-not-override-1rqnfsa"
                                          >
                                            <div
                                              class="ant-col ant-form-item-control css-dev-only-do-not-override-1rqnfsa"
                                            >
                                              <div
                                                class="ant-form-item-control-input"
                                              >
                                                <div
                                                  class="ant-form-item-control-input-content"
                                                >
                                                  <span
                                                    class="ant-input-group-wrapper ant-input-group-wrapper-outlined ant-input-group-wrapper-status-error css-dev-only-do-not-override-1rqnfsa"
                                                  >
                                                    <span
                                                      ...
    at toHaveTextContent (/work/cashtab/src/components/Alias/__tests__/Alias.test.js:211:15)
    at runWithExpensiveErrorDiagnosticsDisabled (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:47:12)
    at checkCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:124:77)
    at checkRealTimersCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:118:16)
    at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)
====== CashTab Unit Tests: <Alias /> Registered and Pending lists still renders when aliasValidationError is populated and aliasServerError is false ======
Error: expect(element).toHaveTextContent()

Expected element to have text content:
  chicken555.xecchicken666.xec
Received:
  No registered aliases

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div>
      <div
        class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
      >
        <div>
          <div
            aria-busy="true"
            aria-live="polite"
            class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
          >
            <span
              aria-label="loading"
              class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
              role="img"
            >
              <svg
                aria-hidden="true"
                data-icon="loading"
                fill="currentColor"
                focusable="false"
                height="1em"
                viewBox="0 0 1024 1024"
                width="1em"
              >
                <path
                  d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
                />
              </svg>
            </span>
          </div>
        </div>
        <div
          class="ant-spin-container ant-spin-blur"
        >
          <div
            class="sc-iBEsjs hYXNZl"
          >
            <div
              class="sc-RcBXQ krXqvz"
            >
              <div
                class="sc-iSDuPN cdWENt"
              >
                <div
                  class="sc-chbbiW kmKhFr"
                >
                  <div
                    class="sc-fZwumE jmbiQP"
                  >
                    <img
                      alt="cashtab"
                      class="sc-fQejPQ iclGva"
                      src="test-file-stub"
                    />
                  </div>
                </div>
                <div
                  class="sc-lhVmIH gJoLAm"
                >
                  <div
                    class="ant-row css-dev-only-do-not-override-1rqnfsa"
                    type="flex"
                  >
                    <div
                      class="ant-col ant-col-24 css-dev-only-do-not-override-1rqnfsa"
                    >
                      <div
                        class="sc-cpmLhU jXNcio"
                      >
                        <h2>
                          eCash Namespace Alias
                        </h2>
                      </div>
                      <div
                        class="sc-lhVmIH gJoLAm"
                      >
                        <div
                          class="sc-cvbbAY kdxSAu"
                        >
                          <form
                            class="ant-form ant-form-horizontal css-dev-only-do-not-override-1rqnfsa"
                            style="width: auto;"
                          >
                            <div
                              class="ant-form-item css-dev-only-do-not-override-1rqnfsa"
                            >
                              <div
                                class="ant-row ant-form-item-row css-dev-only-do-not-override-1rqnfsa"
                              >
                                <div
                                  class="ant-col ant-form-item-control css-dev-only-do-not-override-1rqnfsa"
                                >
                                  <div
                                    class="ant-form-item-control-input"
                                  >
                                    <div
                                      class="ant-form-item-control-input-content"
                                    >
                                      <div
                                        class="sc-cvbbAY kdxSAu"
                                      >
                                        <div
                                          class="ant-form-item css-dev-only-do-not-override-1rqnfsa ant-form-item-with-help ant-form-item-has-error"
                                        >
                                          <div
                                            class="ant-row ant-form-item-row css-dev-only-do-not-override-1rqnfsa"
                                          >
                                            <div
                                              class="ant-col ant-form-item-control css-dev-only-do-not-override-1rqnfsa"
                                            >
                                              <div
                                                class="ant-form-item-control-input"
                                              >
                                                <div
                                                  class="ant-form-item-control-input-content"
                                                >
                                                  <span
                                                    class="ant-input-group-wrapper ant-input-group-wrapper-outlined ant-input-group-wrapper-status-error css-dev-only-do-not-override-1rqnfsa"
                                                  >
                                                    <span
                                                      ...
    at toHaveTextContent (/work/cashtab/src/components/Alias/__tests__/Alias.test.js:244:15)
    at runWithExpensiveErrorDiagnosticsDisabled (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:47:12)
    at checkCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:124:77)
    at checkRealTimersCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:118:16)
    at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)
====== CashTab Unit Tests: <Alias /> Registered and Pending lists do not render when aliasValidationError is false and aliasServerError is populated ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== CashTab Unit Tests: <SendXec /> rendered with params in URL Legacy params. Address and value keys are set and valid. ======
Error: Unable to find an element with the text: 9,513.12 XEC. 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="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-lhVmIH gJoLAm"
                data-testid="send-xec-ctn"
              >
                <div
                  class="ant-row css-dev-only-do-not-override-1rqnfsa"
                  type="flex"
                >
                  <div
                    class="ant-col ant-col-24 css-dev-only-do-not-override-1rqnfsa"
                  >
                    <form
                      class="ant-form ant-form-horizontal css-dev-only-do-not-override-1rqnfsa"
                      style="width: auto; margin-top: 40px;"
                    >
                      <div
                        class="sc-cLQEGU kzenvK"
                        data-testid="app-created-tx"
                      >
                        Webapp Tx Request
                      </div>
                      <div
                        class="sc-iujRgT bugtRy"
                      >
                         
                        <label
                          class="sc-bYSBpT hSkhnP"
                        >
                          Send to
                        </label>
                      </div>
                      <div
                        class="sc-cQFLBn gLIPDU"
                      >
                        <div
                          class="sc-bMVAic cSvrrD"
                        >
                          <div
                            class="sc-GMQeP jXMCGy"
                          >
                            <div
                              class="sc-cvbbAY kdxSAu"
                            >
                              <div
                                class="ant-form-item css-dev-only-do-not-override-1rqnfsa ant-form-item-with-help"
                                style="margin-bottom: 0px;"
                              >
                                <div
                                  class="ant-row ant-form-item-row css-dev-only-do-not-override-1rqnfsa"
                                >
                                  <div
                                    class="ant-col ant-form-item-control css-dev-only-do-not-override-1rqnfsa"
                                  >
                                    <div
                                      class="ant-form-item-control-input"
                                    >
                                      <div
                                        class="ant-form-item-control-input-content"
                                      >
                                        <span
                                          class="ant-input-group-wrapper ant-input-group-wrapper-disabled ant-input-group-wrapper-outlined css-dev-only-do-not-override-1rqnfsa"
                                        >
                                          <span
                                            class="ant-input-wrapper ant-input-group css-dev-only-do-not-override-1rqnfsa"
                                          >
                                            <span
                                              class="ant-input-affix-wrapper ant-input-disabled ant-input-affix-wrapper-disabled css-dev-only-do-not-override-1rqnfsa ant-input-outlined"
                                            >
                                              <span
                                                class="ant-input-prefix"
                                              >
                               ...
    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/Send/__tests__/SendByUrlParams.test.js:127:29)
====== 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: Unable to find an element with the text: 9,513.12 XEC. 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="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-lhVmIH gJoLAm"
                data-testid="send-xec-ctn"
              >
                <div
                  class="ant-row css-dev-only-do-not-override-1rqnfsa"
                  type="flex"
                >
                  <div
                    class="ant-col ant-col-24 css-dev-only-do-not-override-1rqnfsa"
                  >
                    <form
                      class="ant-form ant-form-horizontal css-dev-only-do-not-override-1rqnfsa"
                      style="width: auto; margin-top: 40px;"
                    >
                      <div
                        class="sc-cLQEGU kzenvK"
                        data-testid="app-created-tx"
                      >
                        Webapp Tx Request
                      </div>
                      <div
                        class="sc-iujRgT bugtRy"
                      >
                         
                        <label
                          class="sc-bYSBpT hSkhnP"
                        >
                          Send to
                        </label>
                      </div>
                      <div
                        class="sc-cQFLBn gLIPDU"
                      >
                        <div
                          class="sc-bMVAic cSvrrD"
                        >
                          <div
                            class="sc-GMQeP jXMCGy"
                          >
                            <div
                              class="sc-cvbbAY kdxSAu"
                            >
                              <div
                                class="ant-form-item css-dev-only-do-not-override-1rqnfsa ant-form-item-with-help"
                                style="margin-bottom: 0px;"
                              >
                                <div
                                  class="ant-row ant-form-item-row css-dev-only-do-not-override-1rqnfsa"
                                >
                                  <div
                                    class="ant-col ant-form-item-control css-dev-only-do-not-override-1rqnfsa"
                                  >
                                    <div
                                      class="ant-form-item-control-input"
                                    >
                                      <div
                                        class="ant-form-item-control-input-content"
                                      >
                                        <span
                                          class="ant-input-group-wrapper ant-input-group-wrapper-disabled ant-input-group-wrapper-outlined css-dev-only-do-not-override-1rqnfsa"
                                        >
                                          <span
                                            class="ant-input-wrapper ant-input-group css-dev-only-do-not-override-1rqnfsa"
                                          >
                                            <span
                                              class="ant-input-affix-wrapper ant-input-disabled ant-input-affix-wrapper-disabled css-dev-only-do-not-override-1rqnfsa ant-input-outlined"
                                            >
                                              <span
                                                class="ant-input-prefix"
                                              >
                               ...
    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/Send/__tests__/SendByUrlParams.test.js:164:29)
====== 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 ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== 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 ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== CashTab Unit Tests: <SendXec /> rendered with params in URL Legacy params. Params are ignored if only value param is present ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at runNextTicks (node:internal/process/task_queues:60:5)
    at processImmediate (node:internal/timers:449:9)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== CashTab Unit Tests: <SendXec /> rendered with params in URL Legacy params. Params are ignored if param is duplicated ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== 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: Unable to find an element with the text: 9,513.12 XEC. 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="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-lhVmIH gJoLAm"
                data-testid="send-xec-ctn"
              >
                <div
                  class="ant-row css-dev-only-do-not-override-1rqnfsa"
                  type="flex"
                >
                  <div
                    class="ant-col ant-col-24 css-dev-only-do-not-override-1rqnfsa"
                  >
                    <form
                      class="ant-form ant-form-horizontal css-dev-only-do-not-override-1rqnfsa"
                      style="width: auto; margin-top: 40px;"
                    >
                      <div
                        class="sc-cLQEGU kzenvK"
                        data-testid="app-created-tx"
                      >
                        Webapp Tx Request
                      </div>
                      <div
                        class="sc-iujRgT bugtRy"
                      >
                         
                        <label
                          class="sc-bYSBpT hSkhnP"
                        >
                          Send to
                        </label>
                      </div>
                      <div
                        class="sc-cQFLBn gLIPDU"
                      >
                        <div
                          class="sc-bMVAic cSvrrD"
                        >
                          <div
                            class="sc-GMQeP jXMCGy"
                          >
                            <div
                              class="sc-cvbbAY kdxSAu"
                            >
                              <div
                                class="ant-form-item css-dev-only-do-not-override-1rqnfsa ant-form-item-with-help"
                                style="margin-bottom: 0px;"
                              >
                                <div
                                  class="ant-row ant-form-item-row css-dev-only-do-not-override-1rqnfsa"
                                >
                                  <div
                                    class="ant-col ant-form-item-control css-dev-only-do-not-override-1rqnfsa"
                                  >
                                    <div
                                      class="ant-form-item-control-input"
                                    >
                                      <div
                                        class="ant-form-item-control-input-content"
                                      >
                                        <span
                                          class="ant-input-group-wrapper ant-input-group-wrapper-disabled ant-input-group-wrapper-outlined css-dev-only-do-not-override-1rqnfsa"
                                        >
                                          <span
                                            class="ant-input-wrapper ant-input-group css-dev-only-do-not-override-1rqnfsa"
                                          >
                                            <span
                                              class="ant-input-affix-wrapper ant-input-disabled ant-input-affix-wrapper-disabled css-dev-only-do-not-override-1rqnfsa ant-input-outlined"
                                            >
                                              <span
                                                class="ant-input-prefix"
                                              >
                               ...
    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/Send/__tests__/SendByUrlParams.test.js:448:29)
====== 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: Unable to find an element with the text: 9,513.12 XEC. 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="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-lhVmIH gJoLAm"
                data-testid="send-xec-ctn"
              >
                <div
                  class="ant-row css-dev-only-do-not-override-1rqnfsa"
                  type="flex"
                >
                  <div
                    class="ant-col ant-col-24 css-dev-only-do-not-override-1rqnfsa"
                  >
                    <form
                      class="ant-form ant-form-horizontal css-dev-only-do-not-override-1rqnfsa"
                      style="width: auto; margin-top: 40px;"
                    >
                      <div
                        class="sc-cLQEGU kzenvK"
                        data-testid="app-created-tx"
                      >
                        Webapp Tx Request
                      </div>
                      <div
                        class="sc-iujRgT bugtRy"
                      >
                         
                        <label
                          class="sc-bYSBpT hSkhnP"
                        >
                          Send to
                        </label>
                      </div>
                      <div
                        class="sc-cQFLBn gLIPDU"
                      >
                        <div
                          class="sc-bMVAic cSvrrD"
                        >
                          <div
                            class="sc-GMQeP jXMCGy"
                          >
                            <div
                              class="sc-cvbbAY kdxSAu"
                            >
                              <div
                                class="ant-form-item css-dev-only-do-not-override-1rqnfsa ant-form-item-with-help"
                                style="margin-bottom: 0px;"
                              >
                                <div
                                  class="ant-row ant-form-item-row css-dev-only-do-not-override-1rqnfsa"
                                >
                                  <div
                                    class="ant-col ant-form-item-control css-dev-only-do-not-override-1rqnfsa"
                                  >
                                    <div
                                      class="ant-form-item-control-input"
                                    >
                                      <div
                                        class="ant-form-item-control-input-content"
                                      >
                                        <span
                                          class="ant-input-group-wrapper ant-input-group-wrapper-disabled ant-input-group-wrapper-outlined css-dev-only-do-not-override-1rqnfsa"
                                        >
                                          <span
                                            class="ant-input-wrapper ant-input-group css-dev-only-do-not-override-1rqnfsa"
                                          >
                                            <span
                                              class="ant-input-affix-wrapper ant-input-disabled ant-input-affix-wrapper-disabled css-dev-only-do-not-override-1rqnfsa ant-input-outlined"
                                            >
                                              <span
                                                class="ant-input-prefix"
                                              >
                               ...
    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/Send/__tests__/SendByUrlParams.test.js:513:29)
====== CashTab Unit Tests: <SendXec /> rendered with params in URL bip21 param - an invalid bip21 param shows validation errors but cannot be changed ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at runNextTicks (node:internal/process/task_queues:60:5)
    at processImmediate (node:internal/timers:449:9)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== CashTab Unit Tests: <SendXec /> rendered with params in URL No params. Send screen loads normally with no rendered input. ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at runNextTicks (node:internal/process/task_queues:60:5)
    at processImmediate (node:internal/timers:449:9)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== CashTab Unit Tests: <SendToken /> Renders the SendToken screen with send address input ======
Error: Unable to find an element with the text: BEAR. 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="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jwKygS hNrbtP"
                data-testid="loading-ctn"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    at waitForWrapper (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:163:27)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendToken.test.js:142:22)
    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: <SendToken /> Accepts a valid ecash: prefixed address ======
Error: Unable to find an element with the text: BEAR. 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="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jwKygS hNrbtP"
                data-testid="loading-ctn"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    at waitForWrapper (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:163:27)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendToken.test.js:175:22)
    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 _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: <SendToken /> Accepts a valid etoken: prefixed address ======
Error: Unable to find an element with the text: BEAR. 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="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jwKygS hNrbtP"
                data-testid="loading-ctn"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    at waitForWrapper (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:163:27)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendToken.test.js:206:22)
    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 _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: <SendToken /> Accepts a valid alias ======
Error: Unable to find an element with the text: BEAR. 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="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jwKygS hNrbtP"
                data-testid="loading-ctn"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    at waitForWrapper (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:163:27)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendToken.test.js:238:22)
    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 _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: <SendToken /> Displays a validation error for an invalid address ======
Error: Unable to find an element with the text: BEAR. 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="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jwKygS hNrbtP"
                data-testid="loading-ctn"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    at waitForWrapper (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:163:27)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendToken.test.js:298:22)
    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 _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: <SendToken /> Displays a validation error for an alias without .xec suffix ======
Error: Unable to find an element with the text: BEAR. 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="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jwKygS hNrbtP"
                data-testid="loading-ctn"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    at waitForWrapper (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:163:27)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendToken.test.js:323:22)
    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 _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: <SendToken /> Displays a validation error for valid alias that has not yet been registered ======
Error: Unable to find an element with the text: BEAR. 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="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jwKygS hNrbtP"
                data-testid="loading-ctn"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    at waitForWrapper (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:163:27)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendToken.test.js:350:22)
    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 _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: <SendToken /> Displays expected error if alias server gives a bad response ======
Error: Unable to find an element with the text: BEAR. 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="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jwKygS hNrbtP"
                data-testid="loading-ctn"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    at waitForWrapper (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:163:27)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendToken.test.js:397:22)
    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 _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: <SendToken /> Displays a validation error if the user includes any query string ======
Error: Unable to find an element with the text: BEAR. 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="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jwKygS hNrbtP"
                data-testid="loading-ctn"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    at waitForWrapper (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:163:27)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendToken.test.js:437:22)
    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 _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: <SendToken /> Renders the send token notification upon successful broadcast ======
Error: Unable to find an element with the text: BEAR. 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="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jwKygS hNrbtP"
                data-testid="loading-ctn"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    at waitForWrapper (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:163:27)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendToken.test.js:475:22)
    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 _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: <SendToken /> Renders the burn token success notification upon successful burn tx broadcast ======
Error: Unable to find an element with the text: BEAR. 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="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jwKygS hNrbtP"
                data-testid="loading-ctn"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    at waitForWrapper (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:163:27)
    at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendToken.test.js:519:22)
    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 _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: <App /> Navigation menu routes to expected components ======
Error: Unable to find an element by: [data-testid="home-ctn"]

Ignored nodes: comments, script, style
<body>
  <div>
    <div
      class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jwKygS hNrbtP"
                data-testid="loading-ctn"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    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.findByTestId (/work/cashtab/src/components/__tests__/App.test.js:117:22)
====== CashTab Unit Tests: <App /> Adding a contact to to a new contactList by clicking on tx history adds it to localforage and wallet context ======
Error: expect(element).not.toBeInTheDocument()

expected document not to contain element, found <div class="sc-jwKygS hNrbtP" data-testid="loading-ctn" /> instead

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div>
      <div
        class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
      >
        <div>
          <div
            aria-busy="true"
            aria-live="polite"
            class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
          >
            <span
              aria-label="loading"
              class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
              role="img"
            >
              <svg
                aria-hidden="true"
                data-icon="loading"
                fill="currentColor"
                focusable="false"
                height="1em"
                viewBox="0 0 1024 1024"
                width="1em"
              >
                <path
                  d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
                />
              </svg>
            </span>
          </div>
        </div>
        <div
          class="ant-spin-container ant-spin-blur"
        >
          <div
            class="sc-iBEsjs hYXNZl"
          >
            <div
              class="sc-RcBXQ krXqvz"
            >
              <div
                class="sc-iSDuPN cdWENt"
              >
                <div
                  class="sc-chbbiW kmKhFr"
                >
                  <div
                    class="sc-fZwumE jmbiQP"
                  >
                    <img
                      alt="cashtab"
                      class="sc-fQejPQ iclGva"
                      src="test-file-stub"
                    />
                  </div>
                </div>
                <div
                  class="sc-jwKygS hNrbtP"
                  data-testid="loading-ctn"
                />
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </body>
</html>...
    at toBeInTheDocument (/work/cashtab/src/components/__tests__/App.test.js:191:61)
    at runWithExpensiveErrorDiagnosticsDisabled (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:47:12)
    at checkCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:124:77)
    at checkRealTimersCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:118:16)
    at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)
====== CashTab Unit Tests: <App /> Adding a contact to an existing contactList by clicking on tx history adds it to localforage and wallet context ======
Error: expect(element).not.toBeInTheDocument()

expected document not to contain element, found <div class="sc-jwKygS hNrbtP" data-testid="loading-ctn" /> instead

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div>
      <div
        class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
      >
        <div>
          <div
            aria-busy="true"
            aria-live="polite"
            class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
          >
            <span
              aria-label="loading"
              class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
              role="img"
            >
              <svg
                aria-hidden="true"
                data-icon="loading"
                fill="currentColor"
                focusable="false"
                height="1em"
                viewBox="0 0 1024 1024"
                width="1em"
              >
                <path
                  d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
                />
              </svg>
            </span>
          </div>
        </div>
        <div
          class="ant-spin-container ant-spin-blur"
        >
          <div
            class="sc-iBEsjs hYXNZl"
          >
            <div
              class="sc-RcBXQ krXqvz"
            >
              <div
                class="sc-iSDuPN cdWENt"
              >
                <div
                  class="sc-chbbiW kmKhFr"
                >
                  <div
                    class="sc-fZwumE jmbiQP"
                  >
                    <img
                      alt="cashtab"
                      class="sc-fQejPQ iclGva"
                      src="test-file-stub"
                    />
                  </div>
                </div>
                <div
                  class="sc-jwKygS hNrbtP"
                  data-testid="loading-ctn"
                />
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </body>
</html>...
    at toBeInTheDocument (/work/cashtab/src/components/__tests__/App.test.js:254:61)
    at runWithExpensiveErrorDiagnosticsDisabled (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:47:12)
    at checkCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:124:77)
    at checkRealTimersCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:118:16)
    at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)
====== CashTab Unit Tests: <App /> A user with legacy blank contactList in localstorage is migrated on startup ======
Error: Unable to find an element by: [data-testid="wallet-info-ctn"]

Ignored nodes: comments, script, style
<body>
  <div>
    <div
      class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div
        class="ant-spin-container"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jlyJG gJnvjg"
              >
                <h2>
                  Welcome to Cashtab!
                </h2>
                <p
                  class="sc-gipzik sOyRw"
                >
                  Cashtab is an
                   
                  <a
                    class="sc-csuQGl ldOtyP"
                    href="https://github.com/bitcoin-abc/bitcoin-abc"
                    rel="noreferrer"
                    target="_blank"
                  >
                    open source,
                  </a>
                   
                  non-custodial web wallet for 
                  eCash
                  .
                </p>
                <button
                  class="sc-jAaTju dvdlmc"
                >
                  <span
                    aria-label="plus-square"
                    class="anticon anticon-plus-square"
                    role="img"
                  >
                    <svg
                      aria-hidden="true"
                      data-icon="plus-square"
                      fill="currentColor"
                      focusable="false"
                      height="1em"
                      viewBox="64 64 896 896"
                      width="1em"
                    >
                      <path
                        d="M328 544h152v152c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V544h152c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8H544V328c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v152H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8z"
                      />
                      <path
                        d="M880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-40 728H184V184h656v656z"
                      />
                    </svg>
                  </span>
                   New Wallet
                </button>
                <button
                  class="sc-jDwBTQ htrvtM"
                >
                  <span
                    aria-label="import"
                    class="anticon anticon-import"
                    role="img"
                  >
                    <svg
                      aria-hidden="true"
                      data-icon="import"
                      fill="currentColor"
                      fill-rule="evenodd"
                      focusable="false"
                      height="1em"
                      viewBox="64 64 896 896"
                      width="1em"
                    >
                      <path
                        d="M880 912H144c-17.7 0-32-14.3-32-32V144c0-17.7 14.3-32 32-32h360c4.4 0 8 3.6 8 8v56c0 4.4-3.6 8-8 8H184v656h656V520c0-4.4 3.6-8 8-8h56c4.4 0 8 3.6 8 8v360c0 17.7-14.3 32-32 32zM653.3 424.6l52.2 52.2a8.01 8.01 0 01-4.7 13.6l-179.4 21c-5.1.6-9.5-3.7-8.9-8.9l21-179.4c.8-6.6 8.9-9.4 13.6-4.7l52.4 52.4 256.2-256.2c3.1-3.1 8.2-3.1 11.3 0l42.4 42.4c3.1 3.1 3.1 8.2 0 11.3L653.3 424.6z"
                      />
                    </svg>
                  </span>
                   Import Wallet
                </button>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    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.findByTestId (/work/cashtab/src/components/__tests__/App.test.js:314:26)
====== CashTab Unit Tests: <App /> Clicking "reply" on a Cashtab Msg correctly populates the SendXec to address and amount fields ======
Error: Unable to find an element by: [data-testid="wallet-info-ctn"]

Ignored nodes: comments, script, style
<body>
  <div>
    <div
      class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jwKygS hNrbtP"
                data-testid="loading-ctn"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    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.findByTestId (/work/cashtab/src/components/__tests__/App.test.js:334:26)
====== CashTab Unit Tests: <App /> We do not see the camera auto-open setting in the config screen on a desktop device ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at runNextTicks (node:internal/process/task_queues:60:5)
    at processImmediate (node:internal/timers:449:9)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== CashTab Unit Tests: <App /> We do see the camera auto-open setting in the config screen on a mobile device ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== CashTab Unit Tests: <App /> Setting "Send Confirmations" settings will show send confirmations ======
Error: Unable to find an element by: [data-testid="home-ctn"]

Ignored nodes: comments, script, style
<body>
  <div>
    <div
      class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jwKygS hNrbtP"
                data-testid="loading-ctn"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    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.findByTestId (/work/cashtab/src/components/__tests__/App.test.js:435:22)
====== CashTab Unit Tests: <App /> If Cashtab starts up with some settings keys missing, the missing keys are migrated to default values ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== CashTab Unit Tests: <App /> Setting "ABSOLUTE MINIMUM fees" settings will reduce fees to absolute min ======
Error: Unable to find an element by: [data-testid="home-ctn"]

Ignored nodes: comments, script, style
<body>
  <div>
    <div
      class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jwKygS hNrbtP"
                data-testid="loading-ctn"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    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.findByTestId (/work/cashtab/src/components/__tests__/App.test.js:580:22)
====== CashTab Unit Tests: <App /> Wallet with easter egg token sees easter egg ======
Error: Unable to find an element with the alt text: tabcash

Ignored nodes: comments, script, style
<body>
  <div>
    <div
      class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jwKygS hNrbtP"
                data-testid="loading-ctn"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    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.findByAltText (/work/cashtab/src/components/__tests__/App.test.js:715:29)
====== CashTab Unit Tests: <App /> If Cashtab starts with 1.5.* cashtabCache, it is wiped and migrated to 1.6.* cashtabCache ======
Error: expect(received).toEqual(expected) // deep equality

- Expected  - 14
+ Received  +  1

  Object {
-   "tokens": Array [
-     Array [
-       "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109",
-       Object {
-         "decimals": 0,
-         "success": true,
-         "tokenDocumentHash": "",
-         "tokenDocumentUrl": "https://cashtab.com/",
-         "tokenId": "3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109",
-         "tokenName": "BearNip",
-         "tokenTicker": "BEAR",
-       },
-     ],
-   ],
+   "tokens": Array [],
  }

Ignored nodes: comments, script, style
<html>
  <head />
  <body>
    <div>
      <div
        class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
      >
        <div
          class="ant-spin-container"
        >
          <div
            class="sc-iBEsjs hYXNZl"
          >
            <div
              class="sc-RcBXQ krXqvz"
            >
              <div
                class="sc-iSDuPN cdWENt"
              >
                <div
                  class="sc-chbbiW kmKhFr"
                >
                  <div
                    class="sc-fZwumE jmbiQP"
                  >
                    <img
                      alt="cashtab"
                      class="sc-fQejPQ iclGva"
                      src="test-file-stub"
                    />
                  </div>
                </div>
                <div
                  class="sc-jlyJG gJnvjg"
                >
                  <h2>
                    Welcome to Cashtab!
                  </h2>
                  <p
                    class="sc-gipzik sOyRw"
                  >
                    Cashtab is an
                     
                    <a
                      class="sc-csuQGl ldOtyP"
                      href="https://github.com/bitcoin-abc/bitcoin-abc"
                      rel="noreferrer"
                      target="_blank"
                    >
                      open source,
                    </a>
                     
                    non-custodial web wallet for 
                    eCash
                    .
                  </p>
                  <button
                    class="sc-jAaTju dvdlmc"
                  >
                    <span
                      aria-label="plus-square"
                      class="anticon anticon-plus-square"
                      role="img"
                    >
                      <svg
                        aria-hidden="true"
                        data-icon="plus-square"
                        fill="currentColor"
                        focusable="false"
                        height="1em"
                        viewBox="64 64 896 896"
                        width="1em"
                      >
                        <path
                          d="M328 544h152v152c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V544h152c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8H544V328c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v152H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8z"
                        />
                        <path
                          d="M880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-40 728H184V184h656v656z"
                        />
                      </svg>
                    </span>
                     New Wallet
                  </button>
                  <button
                    class="sc-jDwBTQ htrvtM"
                  >
                    <span
                      aria-label="import"
                      class="anticon anticon-import"
                      role="img"
                    >
                      <svg
                        aria-hidden="true"
                        data-icon="import"
                        fill="currentColor"
                        fill-rule="evenodd"
                        focusable="false"
                        height="1em"
                        viewBox="64 64 896 896"
                        width="1em"
                      >
                        <path
                          d="M880 912H144c-17.7 0-32-14.3-32-32V144c0-17.7 14.3-32 32-32h360c4.4 0 8 3.6 8 8v56c0 4.4-3.6 8-8 8H184v656h656V520c0-4.4 3.6-8 8-8h56c4.4 0 8 3.6 8 8v360c0 17.7-14.3 32-32 32zM653.3 424.6l52.2 52.2a8.01 8.01 0 01-4.7 13.6l-179.4 21c-5.1.6-9.5-3.7-8.9-8.9l21-179.4c.8-6.6 8.9-9.4 13.6-4.7l52.4 52.4 256.2-256.2c3.1-3.1 8.2-3.1 11.3 0l42.4 42.4c3.1 3.1 3.1 8.2 0 11.3L653.3 424.6z"
                        />
                      </svg>
                    </span>
                     Import Wallet
                  </button>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </body>
</html>...
    at toEqual (/work/cashtab/src/components/__tests__/App.test.js:754:63)
====== CashTab Unit Tests: <App /> A new user can import a mnemonic ======
Error: Unable to find an element by: [data-testid="balance-xec"]

Ignored nodes: comments, script, style
<body>
  <div>
    <div
      class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div
        class="ant-spin-container"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jlyJG gJnvjg"
              >
                <h2>
                  Welcome to Cashtab!
                </h2>
                <p
                  class="sc-gipzik sOyRw"
                >
                  Cashtab is an
                   
                  <a
                    class="sc-csuQGl ldOtyP"
                    href="https://github.com/bitcoin-abc/bitcoin-abc"
                    rel="noreferrer"
                    target="_blank"
                  >
                    open source,
                  </a>
                   
                  non-custodial web wallet for 
                  eCash
                  .
                </p>
                <button
                  class="sc-jAaTju dvdlmc"
                >
                  <span
                    aria-label="plus-square"
                    class="anticon anticon-plus-square"
                    role="img"
                  >
                    <svg
                      aria-hidden="true"
                      data-icon="plus-square"
                      fill="currentColor"
                      focusable="false"
                      height="1em"
                      viewBox="64 64 896 896"
                      width="1em"
                    >
                      <path
                        d="M328 544h152v152c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V544h152c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8H544V328c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v152H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8z"
                      />
                      <path
                        d="M880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-40 728H184V184h656v656z"
                      />
                    </svg>
                  </span>
                   New Wallet
                </button>
                <button
                  class="sc-jDwBTQ htrvtM"
                >
                  <span
                    aria-label="import"
                    class="anticon anticon-import"
                    role="img"
                  >
                    <svg
                      aria-hidden="true"
                      data-icon="import"
                      fill="currentColor"
                      fill-rule="evenodd"
                      focusable="false"
                      height="1em"
                      viewBox="64 64 896 896"
                      width="1em"
                    >
                      <path
                        d="M880 912H144c-17.7 0-32-14.3-32-32V144c0-17.7 14.3-32 32-32h360c4.4 0 8 3.6 8 8v56c0 4.4-3.6 8-8 8H184v656h656V520c0-4.4 3.6-8 8-8h56c4.4 0 8 3.6 8 8v360c0 17.7-14.3 32-32 32zM653.3 424.6l52.2 52.2a8.01 8.01 0 01-4.7 13.6l-179.4 21c-5.1.6-9.5-3.7-8.9-8.9l21-179.4c.8-6.6 8.9-9.4 13.6-4.7l52.4 52.4 256.2-256.2c3.1-3.1 8.2-3.1 11.3 0l42.4 42.4c3.1 3.1 3.1 8.2 0 11.3L653.3 424.6z"
                      />
                    </svg>
                  </span>
                   Import Wallet
                </button>
                <div
                  class="sc-cvbbAY kdxSAu"
                >
                  <form
                    class="ant-form ant-form-horizontal css-dev-only-do-not-override-1rqnfsa"
                    style="width: auto;"
                  >
                    <div
                      class="ant-form-item css-dev-only-do-not-override-1rqnfsa ant-form-item-with-help"
                    >
                      <div
                        class="ant-row ant-form-item-row css-dev-only-do-not-override-1rqnfsa"
                      >
                        <div
                          class="ant-col ant-form-item-control css-dev-only-do-not-override-1rqnfsa"
                        >
                          <div
                            class="ant-form-item-control-input"
                          >
                            <div
                              class="ant-form-item-control-input-content"
                            >
                              <span
                                class="ant-input-affix-wrapper css-dev-only-do-not-override-1rqnfsa ant-input-outlined"
                              >
                                <span
                                  class="ant-input-prefix"
                                >
                                  <span
                                    aria-label="lock"
                                    class="anticon anticon-lock"
                                    role="img"
                                  >
                                    <svg
                                      aria-hidden="true"
                                      data-icon="lock"
                                      fill="currentColor"
                                      focusable="false"
                                      height="1em"
                                      viewBox="64 64 896 896"
                                      width="1em"
                                    >
                                      <path
                                        d="M832 464h-68V240c0-70.7-57.3-128-128-128H388c-70.7 0-128 57.3-128 128v224h-68c-17.7 0-32 14.3-32 32v384c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V496c0-17.7-14.3-32-32-32zM332 240c0-30.9 25.1-56 56-56h248c30.9 0 56 25.1 56 56v224H332V240zm460 600H232V536h560v304zM484 701v53c0 4.4 3.6 8 8 8h40c4.4 0 8-3.6 8-8v-53a48.01 48.01 0 10-56 0z"
                                      />
                                    </svg>
                                  </span>
                                </span>
                                <input
                                  autocomplete="off"
                                  class="ant-input css-dev-only-do-not-override-1rqnfsa"
                                  name="mnemonic"
                                  placeholder="mnemonic (seed phrase)"
                                  required=""
                                  title=""
                                  type="email"
                                  value="beauty shoe decline spend still weird slot snack coach flee between paper"
                                />
                              </span>
                            </div>
                          </div>
                          <div
                            style="display: flex; flex-wrap: nowrap;"
                          >
                            <div
                              class="ant-form-item-explain ant-form-item-explain-connected css-dev-only-do-not-override-1rqnfsa"
                              role="alert"
                            >
                              <div
                                class=""
                              />
                            </div>
                            <div
                              style="width: 0px; height: 24px;"
                            />
                          </div>
                        </div>
                      </div>
                      <div
                        class="ant-form-item-margin-offset"
                        style="margin-bottom: -24px;"
                      />
                    </div>
                    <button
                      class="sc-iRbamj eHLgjy"
                    >
                      Import
                    </button>
                  </form>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    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.findByTestId (/work/cashtab/src/components/__tests__/App.test.js:817:29)
====== CashTab Unit Tests: <App /> Migrating from wallet/savedWallet keys (version < 1.6.*): A user with an invalid Cashtab wallet as the active wallet is migrated on startup ======
Error: Unable to find an element by: [data-testid="balance-xec"]

Ignored nodes: comments, script, style
<body>
  <div>
    <div
      class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jwKygS hNrbtP"
                data-testid="loading-ctn"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    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.findByTestId (/work/cashtab/src/components/__tests__/App.test.js:859:29)
====== CashTab Unit Tests: <App /> Migrating from wallet/savedWallet keys (version < 1.6.*): A user with all valid wallets in savedWallets does not have any savedWallets migrated ======
Error: Unable to find an element by: [data-testid="balance-xec"]

Ignored nodes: comments, script, style
<body>
  <div>
    <div
      class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jwKygS hNrbtP"
                data-testid="loading-ctn"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    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.findByTestId (/work/cashtab/src/components/__tests__/App.test.js:889:29)
====== CashTab Unit Tests: <App /> Migrating from wallet/savedWallet keys (version < 1.6.*): A user with an invalid wallet in savedWallets has that savedWallet migrated ======
Error: Unable to find an element by: [data-testid="balance-xec"]

Ignored nodes: comments, script, style
<body>
  <div>
    <div
      class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jwKygS hNrbtP"
                data-testid="loading-ctn"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    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.findByTestId (/work/cashtab/src/components/__tests__/App.test.js:940:29)
====== CashTab Unit Tests: <App /> Migrating from wallet/savedWallet keys (version < 1.6.*): A user with multiple invalid wallets in savedWallets has them migrated ======
Error: Unable to find an element by: [data-testid="balance-xec"]

Ignored nodes: comments, script, style
<body>
  <div>
    <div
      class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jwKygS hNrbtP"
                data-testid="loading-ctn"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    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.findByTestId (/work/cashtab/src/components/__tests__/App.test.js:1028:29)
====== CashTab Unit Tests: <App /> A user with an invalid Cashtab wallet as the active wallet is migrated on startup ======
Error: Unable to find an element by: [data-testid="balance-xec"]

Ignored nodes: comments, script, style
<body>
  <div>
    <div
      class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jwKygS hNrbtP"
                data-testid="loading-ctn"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    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.findByTestId (/work/cashtab/src/components/__tests__/App.test.js:1066:29)
====== CashTab Unit Tests: <App /> A user with all valid wallets in savedWallets does not have any savedWallets migrated ======
Error: Unable to find an element by: [data-testid="balance-xec"]

Ignored nodes: comments, script, style
<body>
  <div>
    <div
      class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jwKygS hNrbtP"
                data-testid="loading-ctn"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    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.findByTestId (/work/cashtab/src/components/__tests__/App.test.js:1096:29)
====== CashTab Unit Tests: <App /> A user with an invalid wallet in savedWallets has that savedWallet migrated ======
Error: Unable to find an element by: [data-testid="balance-xec"]

Ignored nodes: comments, script, style
<body>
  <div>
    <div
      class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jwKygS hNrbtP"
                data-testid="loading-ctn"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    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.findByTestId (/work/cashtab/src/components/__tests__/App.test.js:1143:29)
====== CashTab Unit Tests: <App /> A user with multiple invalid wallets in savedWallets has them migrated ======
Error: Unable to find an element by: [data-testid="balance-xec"]

Ignored nodes: comments, script, style
<body>
  <div>
    <div
      class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-jwKygS hNrbtP"
                data-testid="loading-ctn"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
    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.findByTestId (/work/cashtab/src/components/__tests__/App.test.js:1227:29)
====== CashTab Unit Tests: <SendXec /> Renders the SendXec screen with send address input ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at runNextTicks (node:internal/process/task_queues:60:5)
    at processImmediate (node:internal/timers:449:9)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== CashTab Unit Tests: <SendXec /> Pass valid address to Send To field ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== CashTab Unit Tests: <SendXec /> Pass valid alias to Send To field ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== CashTab Unit Tests: <SendXec /> Pass an invalid address to Send To field and get a validation error ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== CashTab Unit Tests: <SendXec /> Pass a possibly valid alias without .xec suffix to Send To field and get expected error ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== CashTab Unit Tests: <SendXec /> Pass a valid alias to Send To field that has not yet been registered and get expected error ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== CashTab Unit Tests: <SendXec /> Get expected error msg and send disabled if bad response from alias server ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== CashTab Unit Tests: <SendXec /> Pass a valid address and bip21 query string with valid amount param to Send To field ======
Error: expect(element).not.toBeInTheDocument()

expected document not to contain element, found <div class="ant-form-item-explain-error">Amount cannot exceed your XEC balance</div> instead
    at Object.toBeInTheDocument (/work/cashtab/src/components/Send/__tests__/SendXec.test.js:490:55)
====== CashTab Unit Tests: <SendXec /> Pass a valid alias and bip21 query string with valid amount param to Send To field ======
Error: expect(element).not.toBeInTheDocument()

expected document not to contain element, found <div class="ant-form-item-explain-error">Amount cannot exceed your XEC balance</div> instead
    at Object.toBeInTheDocument (/work/cashtab/src/components/Send/__tests__/SendXec.test.js:558:55)
====== CashTab Unit Tests: <SendXec /> Pass a valid address and bip21 query string with invalid amount param (dust) to Send To field ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== CashTab Unit Tests: <SendXec /> Valid address with valid bip21 query string with valid amount param rejected if amount exceeds wallet balance ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== CashTab Unit Tests: <SendXec /> Pass a valid alias and bip21 query string with invalid amount param (too many decimals) to Send To field ======
TestingLibraryElementError: Unable to find an element with the text: XEC transactions do not support more than 2 decimal places. 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="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
    >
      <div>
        <div
          aria-busy="true"
          aria-live="polite"
          class="ant-spin ant-spin-spinning css-dev-only-do-not-override-1rqnfsa"
        >
          <span
            aria-label="loading"
            class="anticon anticon-loading anticon-spin cashLoadingIcon ant-spin-dot"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="loading"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="0 0 1024 1024"
              width="1em"
            >
              <path
                d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"
              />
            </svg>
          </span>
        </div>
      </div>
      <div
        class="ant-spin-container ant-spin-blur"
      >
        <div
          class="sc-iBEsjs hYXNZl"
        >
          <div
            class="sc-RcBXQ krXqvz"
          >
            <div
              class="sc-iSDuPN cdWENt"
            >
              <div
                class="sc-chbbiW kmKhFr"
              >
                <div
                  class="sc-fZwumE jmbiQP"
                >
                  <img
                    alt="cashtab"
                    class="sc-fQejPQ iclGva"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="sc-lhVmIH gJoLAm"
                data-testid="send-xec-ctn"
              >
                <div
                  class="ant-row css-dev-only-do-not-override-1rqnfsa"
                  type="flex"
                >
                  <div
                    class="ant-col ant-col-24 css-dev-only-do-not-override-1rqnfsa"
                  >
                    <form
                      class="ant-form ant-form-horizontal css-dev-only-do-not-override-1rqnfsa"
                      style="width: auto; margin-top: 40px;"
                    >
                      <div
                        class="sc-iujRgT bugtRy"
                      >
                         
                        <label
                          class="sc-bYSBpT hSkhnP"
                        >
                          Send to
                        </label>
                      </div>
                      <div
                        class="sc-cQFLBn gLIPDU"
                      >
                        <div
                          class="sc-bMVAic cSvrrD"
                        >
                          <div
                            class="sc-GMQeP jXMCGy"
                          >
                            <div
                              class="sc-cvbbAY kdxSAu"
                            >
                              <div
                                class="ant-form-item css-dev-only-do-not-override-1rqnfsa ant-form-item-with-help"
                                style="margin-bottom: 0px;"
                              >
                                <div
                                  class="ant-row ant-form-item-row css-dev-only-do-not-override-1rqnfsa"
                                >
                                  <div
                                    class="ant-col ant-form-item-control css-dev-only-do-not-override-1rqnfsa"
                                  >
                                    <div
                                      class="ant-form-item-control-input"
                                    >
                                      <div
                                        class="ant-form-item-control-input-content"
                                      >
                                        <span
                                          class="ant-input-group-wrapper ant-input-group-wrapper-outlined css-dev-only-do-not-override-1rqnfsa"
                                        >
                                          <span
                                            class="ant-input-wrapper ant-input-group css-dev-only-do-not-override-1rqnfsa"
                                          >
                                            <span
                                              class="ant-input-affix-wrapper ant-input-affix-wrapper-focused css-dev-only-do-not-override-1rqnfsa ant-input-outlined"
                                            >
                                              <span
                                                class="ant-input-prefix"
                                              >
                                                <span
                                                  aria-label="wallet"
                                                  class="anticon anticon-wallet sc-bxivhb iBBRHU"
                                                  role="img"
                                 ...
    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:109:15
    at Object.getAllByText (/work/cashtab/src/components/Send/__tests__/SendXec.test.js:722:20)
====== CashTab Unit Tests: <SendXec /> Pass a valid address and an invalid bip21 query string ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== CashTab Unit Tests: <SendXec /> Pass a valid address and bip21 query string with op_return_raw param to Send To field ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== CashTab Unit Tests: <SendXec /> Pass a valid address and bip21 query string with valid amount and op_return_raw params to Send To field ======
Error: expect(element).not.toBeInTheDocument()

expected document not to contain element, found <div class="ant-form-item-explain-error">Amount cannot exceed your XEC balance</div> instead
    at Object.toBeInTheDocument (/work/cashtab/src/components/Send/__tests__/SendXec.test.js:894:55)
====== CashTab Unit Tests: <SendXec /> Pass a valid address and bip21 query string with valid amount and invalid op_return_raw params to Send To field ======
ReferenceError: Cannot access 'wallet' before initialization
    at wallet (/work/cashtab/src/wallet/index.js:86:5)
    at /work/cashtab/src/hooks/useWallet.js:390:77
    at Array.map (<anonymous>)
    at map (/work/cashtab/src/hooks/useWallet.js:387:29)
    at cashtabBootup (/work/cashtab/src/hooks/useWallet.js:758:9)
====== CashTab Unit Tests: <SendXec /> Clicking "Send" will send a valid tx with op_return_raw after entry of a valid address and bip21 query string with valid amount and op_return_raw params to Send To field ======
Error: expect(element).not.toBeInTheDocument()

expected document not to contain element, found <div class="ant-form-item-explain-error">Amount cannot exceed your XEC balance</div> instead
    at Object.toBeInTheDocument (/work/cashtab/src/components/Send/__tests__/SendXec.test.js:1020:55)
====== CashTab Unit Tests: <SendXec /> We can calculate max send amount with and without a cashtab msg, and send a max sat tx with a cashtab msg ======
Error: expect(element).toHaveValue(9509.26)

Expected the element to have value:
  9509.26
Received:
  0
    at Object.toHaveValue (/work/cashtab/src/components/Send/__tests__/SendXec.test.js:1114:31)
====== CashTab Unit Tests: <SendXec /> If the user has minFeeSends set to true but no longer has the right token amount, the feature is disabled ======
Error: expect(element).not.toBeInTheDocument()

expected document not to contain element, found <div class="ant-form-item-explain-error">Amount cannot exceed your XEC balance</div> instead
    at Object.toBeInTheDocument (/work/cashtab/src/components/Send/__tests__/SendXec.test.js:1224:55)

Each failure log is accessible here:
CashTab Unit Tests: <CreateTokenForm /> User can input valid token parameters, generate a token, and view a success notification
CashTab Unit Tests: useWallet hook rendering in different localforage states XEC price is set in state on successful API fetch
CashTab Unit Tests: useWallet hook rendering in different localforage states XEC price remains null in state on API error
CashTab Unit Tests: useWallet hook rendering in different localforage states XEC price is set in state to fiat currency of user settings on successful API fetch
CashTab Unit Tests: useWallet hook rendering in different localforage states Cashtab loads wallet, settings, cache, and contactlist from localforage to context if they are present
CashTab Unit Tests: useWallet hook rendering in different localforage states processChronikWsMsg() refreshes alias prices when aliasPrices is null
CashTab Unit Tests: useWallet hook rendering in different localforage states processChronikWsMsg() refreshes alias prices when aliasPrices exists, server and cashtab prices array length do not match
CashTab Unit Tests: useWallet hook rendering in different localforage states processChronikWsMsg() does not refresh alias prices when aliasPrices exists, server and cashtab array length do match
[[https://build.bitcoinabc.org/viewLog.html?tab=buildLog&logTab=tree&filter=debug&expand=all&buildId=717981&_focus=136629&guest=1 | CashTab Unit Tests: useWallet hook rendering in different localforage states Verify a processChronikWsMsg() new block event updates the aliasServerError state var upon a /prices/ endpoint error]]
[[https://build.bitcoinabc.org/viewLog.html?tab=buildLog&logTab=tree&filter=debug&expand=all&buildId=717981&_focus=136632&guest=1 | CashTab Unit Tests: useWallet hook rendering in different localforage states Verify refreshAliases() updates the aliases state variable on a successful /address/ endpoint response]]
[[https://build.bitcoinabc.org/viewLog.html?tab=buildLog&logTab=tree&filter=debug&expand=all&buildId=717981&_focus=136635&guest=1 | CashTab Unit Tests: useWallet hook rendering in different localforage states Verify refreshAliases() updates the aliasServerError state variable upon an /address/ endpoint error]]
CashTab Unit Tests: useWallet hook rendering in different localforage states An incoming tx message from the websocket causes the wallet to update
CashTab Unit Tests: <Configure /> We can add, delete, rename, contacts from the Configure screen, and add a savedWallet as a contact
CashTab Unit Tests: <Configure /> We can rename the active wallet or a saved wallet, we can add a wallet, we can import a wallet, we can delete a wallet
CashTab Unit Tests: <Home /> Renders the loading component while loading, then the Home screen
CashTab Unit Tests: <Home /> Renders the Home screen with API error
CashTab Unit Tests: <Home /> Renders Sideshift button if user loads with a new wallet
CashTab Unit Tests: <Receive /> Renders as expected on desktop, including copy paste functionality of clicking on the QR code
CashTab Unit Tests: <Receive /> Renders the Receive screen with QR code of expected width for smallest supported mobile view
CashTab Unit Tests: <Receive /> Renders the Receive screen with QR code of size that is fully viewable in extension dimensions
CashTab Unit Tests: <CreateToken /> If wallet has sufficient XEC, renders CreateTokenForm
CashTab Unit Tests: <CreateToken /> If wallet has insufficient XEC, renders component but does not render CreateTokenForm
CashTab Unit Tests: <CashtabTestWrapper /> With default props, renders App component
CashTab Unit Tests: <CashtabTestWrapper /> We can render other pages by passing the route
CashTab Unit Tests: <SignVerifyMsg /> Notification is rendered upon successfully signing a message
CashTab Unit Tests: <SignVerifyMsg /> Notification is rendered upon successfully verifying a message
CashTab Unit Tests: <SignVerifyMsg /> Notification is rendered upon signature verification error
CashTab Unit Tests: <Alias /> Registered and Pending Aliases are correctly rendered
CashTab Unit Tests: <Alias /> Registered and Pending Aliases are correctly rendered when pending list is empty
CashTab Unit Tests: <Alias /> Registered and Pending Aliases are correctly rendered when registered list is empty
CashTab Unit Tests: <Alias /> Registered and Pending lists still renders when aliasValidationError is populated and aliasServerError is false
CashTab Unit Tests: <Alias /> Registered and Pending lists do not render when aliasValidationError is false and aliasServerError is populated
CashTab Unit Tests: <SendXec /> rendered with params in URL Legacy params. Address and value keys are set and valid.
CashTab Unit Tests: <SendXec /> rendered with params in URL Legacy params. Address and value keys are set and valid. Invalid bip21 string is ignored.
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
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
CashTab Unit Tests: <SendXec /> rendered with params in URL Legacy params. Params are ignored if only value param is present
CashTab Unit Tests: <SendXec /> rendered with params in URL Legacy params. Params are ignored if param is duplicated
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
CashTab Unit Tests: <SendXec /> rendered with params in URL bip21 param - valid bip21 param with amount and op_return_raw is parsed as expected
CashTab Unit Tests: <SendXec /> rendered with params in URL bip21 param - an invalid bip21 param shows validation errors but cannot be changed
CashTab Unit Tests: <SendXec /> rendered with params in URL No params. Send screen loads normally with no rendered input.
CashTab Unit Tests: <SendToken /> Renders the SendToken screen with send address input
CashTab Unit Tests: <SendToken /> Accepts a valid ecash: prefixed address
CashTab Unit Tests: <SendToken /> Accepts a valid etoken: prefixed address
CashTab Unit Tests: <SendToken /> Accepts a valid alias
CashTab Unit Tests: <SendToken /> Displays a validation error for an invalid address
CashTab Unit Tests: <SendToken /> Displays a validation error for an alias without .xec suffix
CashTab Unit Tests: <SendToken /> Displays a validation error for valid alias that has not yet been registered
CashTab Unit Tests: <SendToken /> Displays expected error if alias server gives a bad response
CashTab Unit Tests: <SendToken /> Displays a validation error if the user includes any query string
CashTab Unit Tests: <SendToken /> Renders the send token notification upon successful broadcast
CashTab Unit Tests: <SendToken /> Renders the burn token success notification upon successful burn tx broadcast
CashTab Unit Tests: <App /> Navigation menu routes to expected components
CashTab Unit Tests: <App /> Adding a contact to to a new contactList by clicking on tx history adds it to localforage and wallet context
CashTab Unit Tests: <App /> Adding a contact to an existing contactList by clicking on tx history adds it to localforage and wallet context
CashTab Unit Tests: <App /> A user with legacy blank contactList in localstorage is migrated on startup
CashTab Unit Tests: <App /> Clicking "reply" on a Cashtab Msg correctly populates the SendXec to address and amount fields
CashTab Unit Tests: <App /> We do not see the camera auto-open setting in the config screen on a desktop device
CashTab Unit Tests: <App /> We do see the camera auto-open setting in the config screen on a mobile device
CashTab Unit Tests: <App /> Setting "Send Confirmations" settings will show send confirmations
CashTab Unit Tests: <App /> If Cashtab starts up with some settings keys missing, the missing keys are migrated to default values
CashTab Unit Tests: <App /> Setting "ABSOLUTE MINIMUM fees" settings will reduce fees to absolute min
CashTab Unit Tests: <App /> Wallet with easter egg token sees easter egg
CashTab Unit Tests: <App /> If Cashtab starts with 1.5.* cashtabCache, it is wiped and migrated to 1.6.* cashtabCache
CashTab Unit Tests: <App /> A new user can import a mnemonic
CashTab Unit Tests: <App /> Migrating from wallet/savedWallet keys (version < 1.6.*): A user with an invalid Cashtab wallet as the active wallet is migrated on startup
CashTab Unit Tests: <App /> Migrating from wallet/savedWallet keys (version < 1.6.*): A user with all valid wallets in savedWallets does not have any savedWallets migrated
CashTab Unit Tests: <App /> Migrating from wallet/savedWallet keys (version < 1.6.*): A user with an invalid wallet in savedWallets has that savedWallet migrated
CashTab Unit Tests: <App /> Migrating from wallet/savedWallet keys (version < 1.6.*): A user with multiple invalid wallets in savedWallets has them migrated
CashTab Unit Tests: <App /> A user with an invalid Cashtab wallet as the active wallet is migrated on startup
CashTab Unit Tests: <App /> A user with all valid wallets in savedWallets does not have any savedWallets migrated
CashTab Unit Tests: <App /> A user with an invalid wallet in savedWallets has that savedWallet migrated
CashTab Unit Tests: <App /> A user with multiple invalid wallets in savedWallets has them migrated
CashTab Unit Tests: <SendXec /> Renders the SendXec screen with send address input
CashTab Unit Tests: <SendXec /> Pass valid address to Send To field
CashTab Unit Tests: <SendXec /> Pass valid alias to Send To field
CashTab Unit Tests: <SendXec /> Pass an invalid address to Send To field and get a validation error
CashTab Unit Tests: <SendXec /> Pass a possibly valid alias without .xec suffix to Send To field and get expected error
CashTab Unit Tests: <SendXec /> Pass a valid alias to Send To field that has not yet been registered and get expected error
CashTab Unit Tests: <SendXec /> Get expected error msg and send disabled if bad response from alias server
CashTab Unit Tests: <SendXec /> Pass a valid address and bip21 query string with valid amount param to Send To field
CashTab Unit Tests: <SendXec /> Pass a valid alias and bip21 query string with valid amount param to Send To field
CashTab Unit Tests: <SendXec /> Pass a valid address and bip21 query string with invalid amount param (dust) to Send To field
CashTab Unit Tests: <SendXec /> Valid address with valid bip21 query string with valid amount param rejected if amount exceeds wallet balance
CashTab Unit Tests: <SendXec /> Pass a valid alias and bip21 query string with invalid amount param (too many decimals) to Send To field
CashTab Unit Tests: <SendXec /> Pass a valid address and an invalid bip21 query string
CashTab Unit Tests: <SendXec /> Pass a valid address and bip21 query string with op_return_raw param to Send To field
CashTab Unit Tests: <SendXec /> Pass a valid address and bip21 query string with valid amount and op_return_raw params to Send To field
CashTab Unit Tests: <SendXec /> Pass a valid address and bip21 query string with valid amount and invalid op_return_raw params to Send To field
CashTab Unit Tests: <SendXec /> Clicking "Send" will send a valid tx with op_return_raw after entry of a valid address and bip21 query string with valid amount and op_return_raw params to Send To field
CashTab Unit Tests: <SendXec /> We can calculate max send amount with and without a cashtab msg, and send a max sat tx with a cashtab msg
CashTab Unit Tests: <SendXec /> If the user has minFeeSends set to true but no longer has the right token amount, the feature is disabled

Migrate balanceSats and paths

remove parenthesis from sendtoken button

bytesofman retitled this revision from [Cashtab] Improve wallet shape to [Cashtab] Improve Cashtab wallet shape.
bytesofman edited the summary of this revision. (Show Details)
bytesofman edited the test plan for this revision. (Show Details)
bytesofman added inline comments.
cashtab/src/components/Configure/Configure.js
1585 ↗(On Diff #46140)

this is the only place where we were using totalBalance and actually wanted an XEC amount. It is handled by toXec in the new change.

emack requested changes to this revision.Mar 13 2024, 11:51
emack added a subscriber: emack.
emack added inline comments.
cashtab/src/components/SignVerifyMsg/SignVerifyMsg.js
276–281 ↗(On Diff #46142)

The convertToEcashPrefix here is redundant since it's already getting the cash address stored in wallet.paths.1899.

284–288 ↗(On Diff #46142)

ditto

292–297 ↗(On Diff #46142)

ditto

cashtab/src/validation/index.js
552–553 ↗(On Diff #46142)
This revision now requires changes to proceed.Mar 13 2024, 11:51
bytesofman marked 4 inline comments as done.
bytesofman edited the summary of this revision. (Show Details)

do not use redundant address prefix check (now address validation happens at startup)

This revision is now accepted and ready to land.Mar 13 2024, 12:22
This revision was automatically updated to reflect the committed changes.