Page MenuHomePhabricator

[Cashtab] Replace HashRouter with BrowserRouter
AbandonedPublicDraft

Authored by bytesofman on Feb 10 2024, 15:06.

Details

Reviewers
None
Group Reviewers
Restricted Project
Summary

HashRouter was necessary for legacy reasons, not with v6. Clean up URLs using BrowserRouter instead.

Update how link passing is handled in extension and how params are parsed throughout the app to support.

Test Plan

npm test

Diff Detail

Repository
rABC Bitcoin ABC
Branch
no-hashrouter
Lint
Lint Passed
Unit
No Test Coverage
Build Status
Buildable 27059
Build 53684: Build Diffcashtab-tests
Build 53683: arc lint + arc unit

Event Timeline

Failed tests logs:

====== CashTab Unit Tests: <App /> Renders onboarding screen if cashtab.com opened with no local storage and no wallet ======
Error: Unable to find an element by: [data-testid="onboarding"]

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-LKuAh jSXNAo"
        >
          <div
            class="sc-kZmsYB eHkWzo"
          >
            <div
              class="sc-RcBXQ gMCskf"
            >
              <div
                class="sc-hzNEM iiFjIO"
              >
                <div
                  class="sc-iSDuPN ccpgHi"
                >
                  <img
                    alt="cashtab"
                    class="sc-fZwumE bcurWd"
                    src="test-file-stub"
                  />
                </div>
              </div>
              <div
                class="ant-row ant-row-center css-dev-only-do-not-override-1rqnfsa"
                data-testid="not-found"
                type="flex"
              >
                <div
                  class="ant-col ant-col-8 css-dev-only-do-not-override-1rqnfsa"
                >
                  <h1>
                    Page not found
                  </h1>
                </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 Object.<anonymous> (/work/cashtab/src/components/__tests__/AppIntegrations.test.js:163: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:96: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: <App /> Renders API error if called with wallet in localforage but chronik utxo calls fail ======
Error: Unable to find an element by: [data-testid="api-error"]

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-LKuAh jSXNAo"
        >
          <div
            class="sc-kZmsYB eHkWzo"
          >
            <div
              class="sc-RcBXQ gMCskf"
            >
              <div
                class="sc-hzNEM iiFjIO"
              >
                <div
                  class="sc-iSDuPN ccpgHi"
                >
                  <img
                    alt="cashtab"
                    class="sc-fZwumE bcurWd"
                    src="test-file-stub"
                  />
                </div>
                <div
                  class="sc-elJkPf geNavj"
                  data-testid="wallet-info-ctn"
                >
                  <div
                    class="sc-dEoRIm iVOOxs"
                  >
                    <div
                      class="sc-jtggT dNidya"
                    >
                      Transaction Fixtures
                    </div>
                    <a
                      href="/configure"
                    >
                      <svg
                        class="sc-jTzLTM bTdWCF"
                      />
                    </a>
                    <div>
                       
                      <button
                        aria-checked="true"
                        class="ant-switch ant-switch-small css-dev-only-do-not-override-1rqnfsa ant-switch-checked"
                        role="switch"
                        type="button"
                      >
                        <div
                          class="ant-switch-handle"
                        />
                        <span
                          class="ant-switch-inner"
                        >
                          <span
                            class="ant-switch-inner-checked"
                          >
                            <svg
                              class="sc-cSHVUG bgwEHu"
                            />
                          </span>
                          <span
                            class="ant-switch-inner-unchecked"
                          >
                            <svg
                              class="sc-kAzzGY fUTkYj"
                            />
                          </span>
                        </span>
                      </button>
                    </div>
                  </div>
                  <div
                    class="sc-ebFjAB kxaSkj"
                    data-testid="balance-xec"
                  >
                    9,513.12
                     
                    XEC
                     
                  </div>
                  <div
                    class="sc-jKVCRD bKzIGa"
                    data-testid="balance-fiat"
                  >
                    $
                    0.29
                     
                    USD
                  </div>
                  <p
                    class="sc-kaNhvL kDOvrh"
                    data-testid="ecash-price"
                  >
                    1 
                    XEC
                     = 
                    0.00003000
                     
                    USD
                  </p>
                </div>
              </div>
              <div
                class="ant-row ant-row-center css-dev-only-do-not-override-1rqnfsa"
                data-testid="not-found"
                type="flex"
              >
                <div
                  class="ant-col ant-col-8 css-dev-only-do-not-override-1rqnfsa"
                >
                  <h1>
                    Page not found
                  </h1>
                </div>
              </div>
            </div>
            <div
              class="sc-iBEsjs jmPiFQ"
            >
              <button
                class="sc-gmeYpB dpikyJ"
              >
                <svg />
              </button>
              <button
                class="sc-gmeYpB eQwTbZ"
                data-testid="nav-btn-send"
              >
                <svg
                  class="sc-kEYyzF dWIuoY"
                  style="margin-top: -9px;"
                />
              </button>
              <button
                class="sc-gmeYpB eQwTbZ"
                data-testid="nav-btn-etokens"
              >
                <span
                  aria-label="appstore-add"
                  class="anticon anticon-appstore-add"
                  role="img"
                  style="font-size: 24px;"
                >
                  <svg
                    aria-hidden="true"
                    data-icon="appstore-add"
                    fill="currentColor"
                    focusable="false"
                    height="1em"
                    viewBox="64 64 896 896"
                    width="1em"
                  >
                    <defs />
                    <path
                      d="M464 144H160c-8.8 0-16 7.2-16 16v304c0 8.8 7.2 16 16 16h304c8.8 0 16-7.2 16-16V160c0-8.8-7.2-16-16-16zm-52 268H212V212h200v200zm452-268H560c-8.8 0-16 7.2-16 16v304c0 8.8 7.2 16 16 16h304c8.8 0 16-7.2 16-16V160c0-8.8-7.2-16-16-16zm-52 268H612V212h200v200zm52 132H560c-8.8 0-16 7.2-16 16v304c0 8.8 7.2 16 16 16h304c8.8 0 16-7.2 16-16V560c0-8.8-7.2-16-16-16zm-52 268H612V612h200v200zM424 712H296V584c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v128H104c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h128v128c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V776h128c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8z"
                    />
                  </svg>
                </span>
              </button>
              <button
                class="sc-gmeYpB eQwTbZ"
                data-testid="nav-btn-receive"
              >
                <svg />
              </button>
              <div
                class="sc-chbbiW ktwTIv"
                data-testid="hamburger"
              >
                <span
                  class="sc-kxynE bbUulF"
                />
                <div
                  class="sc-cooIXK gkGTON"
                  data-testid="hamburger-menu"
                >
                  <button
                    class="sc-fcdeBU RXlWo"
                    data-testid="nav-btn-airdrop"
                  >
                     
                    <p>
                      Airdrop
                    </p>
                    <svg
                      height="33px"
                      width="30px"
                    />
                  </button>
                  <button
                    class="sc-fcdeBU RXlWo"
                    data-testid="nav-btn-swap"
                  >
                     
                    <p>
                      Swap
                    </p>
                    <span
                      aria-label="swap"
                      class="anticon anticon-swap"
                      role="img"
                      style="font-size: 24px;"
                    >
                      <svg
                        aria-hidden="true"
                        data-icon="swap"
                        fill="currentColor"
                        focusable="false"
                        height="1em"
                        viewBox="64 64 896 896"
                        width="1em"
                      >
                        <path
                          d="M847.9 592H152c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h605.2L612.9 851c-4.1 5.2-.4 13 6.3 13h72.5c4.9 0 9.5-2.2 12.6-6.1l168.8-214.1c16.5-21 1.6-51.8-25.2-51.8zM872 356H266.8l144.3-183c4.1-5.2.4-13-6.3-13h-72.5c-4.9 0-9.5 2.2-12.6 6.1L150.9 380.2c-16.5 21-1.6 51.8 25.1 51.8h696c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8z"
                        />
                      </svg>
                    </span>
                  </button>
                  <button
                    class="sc-fcdeBU RXlWo"
                    data-testid="nav-btn-signverifymsg"
                  >
                    <p>
                      Sign & Verify
                    </p>
                    <svg
                      class="sc-chPdSV kiHcnD"
                    />
                  </button>
                  <button
                    class="sc-fcdeBU RXlWo"
                    data-testid="nav-btn-configure"
                  >
                    <p>
                      Settings
                    </p>
                    <svg
                      height="33px"
                      width="30px"
                    />
                  </button>
                </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__/AppIntegrations.test.js:182:22)
====== CashTab Unit Tests: <App /> Adding a contact to Configure.js from clicking on tx history adds it to localforage and wallet context ======
TypeError: Cannot read properties of null (reading 'querySelector')

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-LKuAh jSXNAo"
          >
            <div
              class="sc-kZmsYB eHkWzo"
            >
              <div
                class="sc-RcBXQ gMCskf"
              >
                <div
                  class="sc-hzNEM iiFjIO"
                >
                  <div
                    class="sc-iSDuPN ccpgHi"
                  >
                    <img
                      alt="cashtab"
                      class="sc-fZwumE bcurWd"
                      src="test-file-stub"
                    />
                  </div>
                  <div
                    class="sc-elJkPf geNavj"
                    data-testid="wallet-info-ctn"
                  >
                    <div
                      class="sc-dEoRIm iVOOxs"
                    >
                      <div
                        class="sc-jtggT dNidya"
                      >
                        [Burned] useWallet Mock
                      </div>
                      <a
                        href="/configure"
                      >
                        <svg
                          class="sc-jTzLTM bTdWCF"
                        />
                      </a>
                      <div>
                         
                        <button
                          aria-checked="true"
                          class="ant-switch ant-switch-small css-dev-only-do-not-override-1rqnfsa ant-switch-checked"
                          role="switch"
                          type="button"
                        >
                          <div
                            class="ant-switch-handle"
                          />
                          <span
                            class="ant-switch-inner"
                          >
                            <span
                              class="ant-switch-inner-checked"
                            >
                              <svg
                                class="sc-cSHVUG bgwEHu"
                              />
                            </span>
                            <span
                              class="ant-switch-inner-unchecked"
                            >
                              <svg
                                class="sc-kAzzGY fUTkYj"
                              />
                            </span>
                          </span>
                        </button>
                      </div>
                    </div>
                    <div
                      class="sc-ebFjAB kxaSkj"
                      data-testid="balance-xec"
                    >
                      10,000.00
                       
                      XEC
                       
                    </div>
                    <div
                      class="sc-jKVCRD bKzIGa"
                      data-testid="balance-fiat"
                    >
                      $
                      0.30
                       
                      USD
                    </div>
                    <p
                      class="sc-kaNhvL kDOvrh"
                      data-testid="ecash-price"
                    >
                      1 
                      XEC
                       = 
                      0.00003000
                       
                      USD
                    </p>
                  </div>
                </div>
                <div
                  class="ant-row ant-row-center css-dev-only-do-not-override-1rqnfsa"
                  data-testid="not-found"
                  type="flex"
                >
                  <div
                    class="ant-col ant-col-8 css-dev-only-do-not-override-1rqnfsa"
                  >
                    <h1>
                      Page not found
                    </h1>
                  </div>
                </div>
              </div>
              <div
                class="sc-iBEsjs jmPiFQ"
              >
                <button
                  class="sc-gmeYpB dpikyJ"
                >
                  <svg />
                </button>
                <button
                  class="sc-gmeYpB eQwTbZ"
                  data-testid="nav-btn-send"
                >
                  <svg
                    class="sc-kEYyzF dWIuoY"
                    style="margin-top: -9px;"
                  />
                </button>
                <button
                  class="sc-gmeYpB eQwTbZ"
                  data-testid="nav-btn-etokens"
                >
                  <span
                    aria-label="appstore-add"
                    class="anticon anticon-appstore-add"
                    role="img"
                    style="font-size: 24px;"
                  >
                    <svg
                      aria-h...
    at /work/cashtab/src/components/__tests__/AppIntegrations.test.js:269:46
    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:559:17)
    at processTimers (node:internal/timers:502:7)
====== 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 read properties of null (reading 'querySelector')

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-LKuAh jSXNAo"
          >
            <div
              class="sc-kZmsYB eHkWzo"
            >
              <div
                class="sc-RcBXQ gMCskf"
              >
                <div
                  class="sc-hzNEM iiFjIO"
                >
                  <div
                    class="sc-iSDuPN ccpgHi"
                  >
                    <img
                      alt="cashtab"
                      class="sc-fZwumE bcurWd"
                      src="test-file-stub"
                    />
                  </div>
                  <div
                    class="sc-elJkPf geNavj"
                    data-testid="wallet-info-ctn"
                  >
                    <div
                      class="sc-dEoRIm iVOOxs"
                    >
                      <div
                        class="sc-jtggT dNidya"
                      >
                        [Burned] useWallet Mock
                      </div>
                      <a
                        href="/configure"
                      >
                        <svg
                          class="sc-jTzLTM bTdWCF"
                        />
                      </a>
                      <div>
                         
                        <button
                          aria-checked="true"
                          class="ant-switch ant-switch-small css-dev-only-do-not-override-1rqnfsa ant-switch-checked"
                          role="switch"
                          type="button"
                        >
                          <div
                            class="ant-switch-handle"
                          />
                          <span
                            class="ant-switch-inner"
                          >
                            <span
                              class="ant-switch-inner-checked"
                            >
                              <svg
                                class="sc-cSHVUG bgwEHu"
                              />
                            </span>
                            <span
                              class="ant-switch-inner-unchecked"
                            >
                              <svg
                                class="sc-kAzzGY fUTkYj"
                              />
                            </span>
                          </span>
                        </button>
                      </div>
                    </div>
                    <div
                      class="sc-ebFjAB kxaSkj"
                      data-testid="balance-xec"
                    >
                      10,000.00
                       
                      XEC
                       
                    </div>
                    <div
                      class="sc-jKVCRD bKzIGa"
                      data-testid="balance-fiat"
                    >
                      $
                      0.30
                       
                      USD
                    </div>
                    <p
                      class="sc-kaNhvL kDOvrh"
                      data-testid="ecash-price"
                    >
                      1 
                      XEC
                       = 
                      0.00003000
                       
                      USD
                    </p>
                  </div>
                </div>
                <div
                  class="ant-row ant-row-center css-dev-only-do-not-override-1rqnfsa"
                  data-testid="not-found"
                  type="flex"
                >
                  <div
                    class="ant-col ant-col-8 css-dev-only-do-not-override-1rqnfsa"
                  >
                    <h1>
                      Page not found
                    </h1>
                  </div>
                </div>
              </div>
              <div
                class="sc-iBEsjs jmPiFQ"
              >
                <button
                  class="sc-gmeYpB dpikyJ"
                >
                  <svg />
                </button>
                <button
                  class="sc-gmeYpB eQwTbZ"
                  data-testid="nav-btn-send"
                >
                  <svg
                    class="sc-kEYyzF dWIuoY"
                    style="margin-top: -9px;"
                  />
                </button>
                <button
                  class="sc-gmeYpB eQwTbZ"
                  data-testid="nav-btn-etokens"
                >
                  <span
                    aria-label="appstore-add"
                    class="anticon anticon-appstore-add"
                    role="img"
                    style="font-size: 24px;"
                  >
                    <svg
                      aria-h...
    at /work/cashtab/src/components/__tests__/AppIntegrations.test.js:333:46
    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:559:17)
    at processTimers (node:internal/timers:502:7)
====== 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="cashtab-msg-reply"]

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-LKuAh jSXNAo"
        >
          <div
            class="sc-kZmsYB eHkWzo"
          >
            <div
              class="sc-RcBXQ gMCskf"
            >
              <div
                class="sc-hzNEM iiFjIO"
              >
                <div
                  class="sc-iSDuPN ccpgHi"
                >
                  <img
                    alt="cashtab"
                    class="sc-fZwumE bcurWd"
                    src="test-file-stub"
                  />
                </div>
                <div
                  class="sc-elJkPf geNavj"
                  data-testid="wallet-info-ctn"
                >
                  <div
                    class="sc-dEoRIm iVOOxs"
                  >
                    <div
                      class="sc-jtggT dNidya"
                    >
                      [Burned] useWallet Mock
                    </div>
                    <a
                      href="/configure"
                    >
                      <svg
                        class="sc-jTzLTM bTdWCF"
                      />
                    </a>
                    <div>
                       
                      <button
                        aria-checked="true"
                        class="ant-switch ant-switch-small css-dev-only-do-not-override-1rqnfsa ant-switch-checked"
                        role="switch"
                        type="button"
                      >
                        <div
                          class="ant-switch-handle"
                        />
                        <span
                          class="ant-switch-inner"
                        >
                          <span
                            class="ant-switch-inner-checked"
                          >
                            <svg
                              class="sc-cSHVUG bgwEHu"
                            />
                          </span>
                          <span
                            class="ant-switch-inner-unchecked"
                          >
                            <svg
                              class="sc-kAzzGY fUTkYj"
                            />
                          </span>
                        </span>
                      </button>
                    </div>
                  </div>
                  <div
                    class="sc-ebFjAB kxaSkj"
                    data-testid="balance-xec"
                  >
                    10,000.00
                     
                    XEC
                     
                  </div>
                  <div
                    class="sc-jKVCRD bKzIGa"
                    data-testid="balance-fiat"
                  >
                    $
                    0.30
                     
                    USD
                  </div>
                  <p
                    class="sc-kaNhvL kDOvrh"
                    data-testid="ecash-price"
                  >
                    1 
                    XEC
                     = 
                    0.00003000
                     
                    USD
                  </p>
                </div>
              </div>
              <div
                class="ant-row ant-row-center css-dev-only-do-not-override-1rqnfsa"
                data-testid="not-found"
                type="flex"
              >
                <div
                  class="ant-col ant-col-8 css-dev-only-do-not-override-1rqnfsa"
                >
                  <h1>
                    Page not found
                  </h1>
                </div>
              </div>
            </div>
            <div
              class="sc-iBEsjs jmPiFQ"
            >
              <button
                class="sc-gmeYpB dpikyJ"
              >
                <svg />
              </button>
              <button
                class="sc-gmeYpB eQwTbZ"
                data-testid="nav-btn-send"
              >
                <svg
                  class="sc-kEYyzF dWIuoY"
                  style="margin-top: -9px;"
                />
              </button>
              <button
                class="sc-gmeYpB eQwTbZ"
                data-testid="nav-btn-etokens"
              >
                <span
                  aria-label="appstore-add"
                  class="anticon anticon-appstore-add"
                  role="img"
                  style="font-size: 24px;"
                >
                  <svg
                    aria-hidden="true"
                    data-icon="appstore-add"
                    fill="currentColor"
                    focusable="false"
                    height="1em"
                    viewBox="64 64 896 896"
                    width="1em"
                  >
                    <defs />
                    <path
                      d="M464 144H160c-8.8 0-16 7.2-16 16v304c0 8.8 7.2 16 16 16h304c8.8 0 16-7.2 16-16V160c0-8.8-7.2-16-16-16zm-52 268H212V212h200v200zm452-268H560c-8.8 0-16 7.2-16 16v304c0 8.8 7.2 16 16 16h304c8.8 0 16-7.2 16-16V160c0-8.8-7.2-16-16-16zm-52 268H612V212h200v200zm52 132H560c-8.8 0-16 7.2-16 16v304c0 8.8 7.2 16 16 16h304c8.8 0 16-7.2 16-16V560c0-8.8-7.2-16-16-16zm-52 268H612V612h200v200zM424 712H296V584c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v128H104c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h128v128c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V776h128c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8z"
                    />
                  </svg>
                </span>
              </button>
              <button
                class="sc-gmeYpB eQwTbZ"
                data-testid="nav-btn-receive"
              >
                <svg />
              </button>
              <div
                class="sc-chbbiW ktwTIv"
                data-testid="hamburger"
              >
                <span
                  class="sc-kxynE bbUulF"
                />
                <div
                  class="sc-cooIXK gkGTON"
                  data-testid="hamburger-menu"
                >
                  <button
                    class="sc-fcdeBU RXlWo"
                    data-testid="nav-btn-airdrop"
                  >
                     
                    <p>
                      Airdrop
                    </p>
                    <svg
                      height="33px"
                      width="30px"
                    />
                  </button>
                  <button
                    class="sc-fcdeBU RXlWo"
                    data-testid="nav-btn-swap"
                  >
                     
                    <p>
                      Swap
                    </p>
                    <span
                      aria-label="swap"
                      class="anticon anticon-swap"
                      role="img"
                      style="font-size: 24px;"
                    >
                      <svg
                        aria-hidden="true"
                        data-icon="swap"
                        fill="currentColor"
                        focusable="false"
                        height="1em"
                        viewBox="64 64 896 896"
                        width="1em"
                      >
                        <path
                          d="M847.9 592H152c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h605.2L612.9 851c-4.1 5.2-.4 13 6.3 13h72.5c4.9 0 9.5-2.2 12.6-6.1l168.8-214.1c16.5-21 1.6-51.8-25.2-51.8zM872 356H266.8l144.3-183c4.1-5.2.4-13-6.3-13h-72.5c-4.9 0-9.5 2.2-12.6 6.1L150.9 380.2c-16.5 21-1.6 51.8 25.1 51.8h696c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8z"
                        />
                      </svg>
                    </span>
                  </button>
                  <button
                    class="sc-fcdeBU RXlWo"
                    data-testid="nav-btn-signverifymsg"
                  >
                    <p>
                      Sign & Verify
                    </p>
                    <svg
                      class="sc-chPdSV kiHcnD"
                    />
                  </button>
                  <button
                    class="sc-fcdeBU RXlWo"
                    data-testid="nav-btn-configure"
                  >
                    <p>
                      Settings
                    </p>
                    <svg
                      height="33px"
                      width="30px"
                    />
                  </button>
                </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 Object.<anonymous> (/work/cashtab/src/components/__tests__/AppIntegrations.test.js:449:22)

Each failure log is accessible here:
CashTab Unit Tests: <App /> Renders onboarding screen if cashtab.com opened with no local storage and no wallet
CashTab Unit Tests: <App /> Renders API error if called with wallet in localforage but chronik utxo calls fail
CashTab Unit Tests: <App /> Adding a contact to Configure.js from 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 /> Clicking "reply" on a Cashtab Msg correctly populates the SendXec to address and amount fields

  • Need to maintain hashrouter for the extension
  • So, this change is mb not worth the complication, as would need to maintain separate ways of getting url info