Page MenuHomePhabricator

[Cashtab] Better validation functions for token send or burn amounts
ClosedPublic

Authored by bytesofman on Mar 30 2024, 22:09.

Details

Summary

T3496

Use a standardized and tested validation function for token send or burn amounts.

Currently, Cashtab uses a custom send validation function, and a bad burn validation function (does not check decimals). Use a better function for both since they have the same rules.

Test Plan

npm test

Diff Detail

Repository
rABC Bitcoin ABC
Lint
Lint Not Applicable
Unit
Tests Not Applicable

Event Timeline

Failed tests logs:

====== CashTab Unit Tests: <SendToken /> Renders the send token notification upon successful broadcast ======
Error: Unable to find an element with the text: eToken sent. 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-kcDeIU kgKfDI"
        >
          <div
            class="Toastify"
          />
          <div
            class="sc-cmjSyW jwpsva"
          >
            <div
              class="sc-sdtwF ijCnPZ"
            >
              <div
                class="sc-bFADNz cZpbyk"
              >
                <div
                  class="sc-iYUSvU MWsTz"
                >
                  <img
                    alt="cashtab"
                    class="sc-cHSUfg jyjdjN"
                    src="test-file-stub"
                  />
                </div>
                <div
                  class="sc-bbmXgH fLVOGg"
                  data-testid="wallet-info-ctn"
                >
                  <div
                    class="sc-iomxrj dYTJKM"
                  >
                    <select
                      class="sc-dvCyap dfxYvF"
                      id="wallets"
                      name="wallets"
                    >
                      <option
                        class="sc-iFMziU fiPrpy"
                        value="Transaction Fixtures"
                      >
                        Transaction Fixtures
                      </option>
                    </select>
                    <div
                      class="sc-hMqMXs cAbGIb"
                    >
                      <svg
                        class="sc-htoDjs dHRdfz"
                        style="margin-top: 8px;"
                      />
                    </div>
                    <div
                      class="sc-eLExRp icFLqc"
                    >
                      <input
                        checked=""
                        class="sc-fOKMvo cmysrp"
                        data-testid="show-hide-balance"
                        id="show-hide-balance"
                        name="show-hide-balance"
                        type="checkbox"
                      />
                      <label
                        class="sc-cbkKFq kCEdvn"
                        for="show-hide-balance"
                      >
                        <span
                          class="sc-krvtoX cOEecR"
                          data-off=""
                          data-on=""
                        />
                        <span
                          class="sc-fYiAbW ehbNtR"
                        />
                      </label>
                    </div>
                  </div>
                  <div
                    class="sc-keVrkP bVZapW"
                    data-testid="balance-xec"
                  >
                    9,513.12
                     
                    XEC
                     
                  </div>
                  <div
                    class="sc-gVLVqr cpEyGe"
                    data-testid="balance-fiat"
                  >
                    $
                    0.29
                     
                    USD
                  </div>
                  <p
                    class="sc-cBdUnI fWqlMo"
                    data-testid="ecash-price"
                  >
                    1 
                    XEC
                     = 
                    0.00003000
                     
                    USD
                  </p>
                </div>
              </div>
              <div
                class="sc-jqCOkK dpFugr"
              >
                <div
                  class="sc-hmXxxW fkVZQE"
                >
                  1
                   
                  BEAR
                </div>
                <div
                  class="sc-cqCuEk elJtl"
                  title="Token info for \"BearNip\""
                >
                  <div
                    class="sc-dliRfk jZcTsb"
                  >
                    <div
                      class="sc-kLIISr bYcVtm"
                      colspan="2"
                    >
                      <div
                        class="sc-hMqMXs cAbGIb"
                      >
                        <img
                          height="128"
                          src="https://icons.etokens.cash/128/3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109.png"
                          width="128"
                        />
                      </div>
                    </div>
                  </div>
                  <div
                    class="sc-dliRfk jZcTsb"
                  >
                    <div
                      class="sc-kLIISr bYcVtm"
                    >
                      Token Id: 
                      3fe
                      ...
                      109
                    </div>
                    <div
                      class="sc-kLIISr bYcVtm"
                    >
                      <div
                        class="sc-hMqMXs cAbGIb"
                      >
                        <svg
                          class="sc-htoDjs dHRdfz"
                        />
                      </div>
                    </div>
                  </div>
                  <div
                    class="sc-dliRfk jZcTsb"
                  >
                    <div
                      class="sc-kLIISr bYcVtm"
                    >
                      0
                       decimal places
                    </div>
                  </div>
                  <div
                    class="sc-dliRfk jZcTsb"
                  />
                  <div
                    class="sc-dliRfk jZcTsb"
                  >
                    Minted
                     
                    Mar 30, 2024
                  </div>
                  <div
                    class="sc-dliRfk jZcTsb"
                  >
                    Genesis Supply:
                     
                    4,444
                  </div>
                  <div
                    class="sc-dliRfk jZcTsb"
                  >
                    Fixed Supply
                  </div>
                </div>
                <div
                  class="sc-iQNlJl gSDyLy"
                >
                  <div
                    class="sc-bsbRJL gVlzfi"
                  >
                    <input
                      class="sc-hZSUBg sc-esOvli bxcKZR"
                      name="address"
                      placeholder="Address"
                      value="ecash:qp89xgjhcqdnzzemts0aj378nfe2mhu9yvxj9nhgg6"
                    />
                    <button
                      class="sc-gwVKww iuRbCt"
                      data-testid="scan-qr-code"
                    >
                      <svg />
                    </button>
                  </div>
                  <div
                    class="sc-hORach fnZTRV"
                  />
                </div>
                <div
                  class="sc-iqzUVk giZKtF"
                >
                  <a
                    class="sc-dNLxif idXNLy"
                    href="https://explorer.e.cash/address/false"
                    rel="noreferrer"
                    target="_blank"
                  />
                </div>
                <br />
                <div
                  class="sc-iQNlJl gSDyLy"
                >
                  <div
                    class="sc-bsbRJL gVlzfi"
                  >
                    <input
                      class="sc-hZSUBg sc-esOvli bxcKZR"
                      name="amount"
                      placeholder="Amount"
                      step="1"
                      type="number"
                      value="1"
                    />
                    <button
                      class="sc-cmthru sc-hMFtBS jmuqrV"
                    >
                      max
                    </button>
                  </div>
                  <div
                    class="sc-hORach fnZTRV"
                  />
                </div>
                <button
                  class="sc-ibxdXY sc-hrWEMg dCUaFy"
                  disabled=""
                  style="margin-top: 24px;"
                >
                  Send 
                  BearNip
                </button>
                <div
                  class="sc-cqCuEk elJtl"
                  title="Token info for \"BearNip\""
                >
                  <div
                    class="sc-dliRfk jZcTsb"
                  >
                    <a
                      href="/airdrop"
                      style="width: 100%;"
                    >
                      <button
                        class="sc-ibxdXY sc-iQKALj krPYXi"
                        style="margin-top: 12px;"
                      >
                        Airdrop
                      </button>
                    </a>
                  </div>
                  <div
                    class="sc-dliRfk jZcTsb"
                  >
                    <div
                      class="sc-bMVAic hxyVPp"
                    >
                      <div
                        class="sc-iQNlJl gSDyLy"
                      >
                        <div
                          class="sc-bsbRJL gVlzfi"
                        >
                          <input
                            class="sc-hZSUBg sc-esOvli bxcKZR"
                            name="burnAmount"
                            placeholder="Burn Amount"
                            step="1"
                            type="number"
                            value=""
                          />
                          <button
                            class="sc-cmthru sc-hMFtBS jmuqrV"
                          >
                            max
                          </button>
                        </div>
                        <div
                          class="sc-hORach fnZTRV"
                        />
                      </div>
                      <button
                        class="ant-btn css-dev-only-do-not-override-1rqnfsa ant-btn-primary ant-btn-dangerous"
                        type="button"
                      >
                        <span>
                          Burn BEAR
                        </span>
                      </button>
                    </div>
                  </div>
                </div>
              </div>
            </div>
            <div
              class="sc-BngTV dCDCyP"
            >
              <button
                class="sc-gRnDUn bgTXzO"
              >
                <svg />
              </button>
              <button
                class="sc-gRnDUn bgTXzO"
                data-testid="nav-btn-send"
              >
                <svg
                  class="sc-jKJlTe fTQyTm"
                  style="margin-top: -9px;"
                />
              </button>
              <button
                class="sc-gRnDUn bgTXzO"
                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-gRnDUn bgTXzO"
                data-testid="nav-btn-receive"
              >
                <svg />
              </button>
              <div
                class="sc-cqpYsc dcCFkQ"
                data-testid="hamburger"
              >
                <span
                  class="sc-hBbWxd gyoWfB"
                />
                <div
                  class="sc-dyGzUR iWnlwd"
                  data-testid="hamburger-menu"
                >
                  <button
                    class="sc-drKuOJ cFmRbo"
                    data-testid="nav-btn-airdrop"
                  >
                     
                    <p>
                      Airdrop
                    </p>
                    <svg
                      height="33px"
                      width="30px"
                    />
                  </button>
                  <button
                    class="sc-drKuOJ cFmRbo"
                    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-drKuOJ cFmRbo"
                    data-testid="nav-btn-signverifymsg"
                  >
                    <p>
                      Sign & Verify
                    </p>
                    <svg
                      class="sc-jzJRlG kclOxT"
                    />
                  </button>
                  <button
                    class="sc-drKuOJ cFmRbo"
                    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.findByText (/work/cashtab/src/components/Send/__tests__/SendToken.test.js:465:59)
====== CashTab Unit Tests: <App /> Setting "ABSOLUTE MINIMUM fees" settings will reduce fees to absolute min ======
Error: Unable to find an element with the text: eToken sent. 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-kcDeIU kgKfDI"
        >
          <div
            class="Toastify"
          >
            <div
              class="Toastify__toast-container Toastify__toast-container--top-right sc-exkUMo bQfCal"
            >
              <div
                class="Toastify__toast Toastify__toast-theme--light Toastify__toast--default Toastify__toast--close-on-click Toastify--animate Toastify__bounce-enter--top-right"
                data-in="true"
                id="4"
              >
                <div
                  class="Toastify__toast-body"
                  role="alert"
                >
                  <div
                    class="Toastify__toast-icon Toastify--animate-icon Toastify__zoom-enter"
                  >
                    <div
                      class="ant-image css-dev-only-do-not-override-1rqnfsa"
                      style="width: 24px; height: 24px;"
                    >
                      <img
                        class="ant-image-img css-dev-only-do-not-override-1rqnfsa"
                        height="24px"
                        src="test-file-stub"
                        style="height: 24px;"
                        width="24px"
                      />
                    </div>
                  </div>
                  <div>
                    <a
                      class="sc-krDsej bDQWZX"
                      href="https://explorer.e.cash/tx/6d2e157e2e2b1fa47cc63ede548375213942e29c090f5d9cbc2722258f720c08"
                      rel="noopener noreferrer"
                      target="_blank"
                    >
                      eCash sent
                    </a>
                  </div>
                </div>
                <button
                  aria-label="close"
                  class="Toastify__close-button Toastify__close-button--light"
                  type="button"
                >
                  <svg
                    aria-hidden="true"
                    viewBox="0 0 14 16"
                  >
                    <path
                      d="M7.71 8.23l3.75 3.75-1.48 1.48-3.75-3.75-3.75 3.75L1 11.98l3.75-3.75L1 4.48 2.48 3l3.75 3.75L9.98 3l1.48 1.48-3.75 3.75z"
                      fill-rule="evenodd"
                    />
                  </svg>
                </button>
                <div
                  class="Toastify__progress-bar--wrp"
                  data-hidden="false"
                >
                  <div
                    class="Toastify__progress-bar--bg Toastify__progress-bar-theme--light Toastify__progress-bar--default"
                  />
                  <div
                    aria-hidden="false"
                    aria-label="notification timer"
                    class="Toastify__progress-bar Toastify__progress-bar--animated Toastify__progress-bar-theme--light Toastify__progress-bar--default"
                    role="progressbar"
                    style="animation-duration: 5000ms; animation-play-state: running;"
                  />
                </div>
              </div>
            </div>
          </div>
          <div
            class="sc-cmjSyW jwpsva"
          >
            <div
              class="sc-sdtwF ijCnPZ"
            >
              <div
                class="sc-bFADNz cZpbyk"
              >
                <div
                  class="sc-iYUSvU MWsTz"
                >
                  <img
                    alt="cashtab"
                    class="sc-cHSUfg jyjdjN"
                    src="test-file-stub"
                  />
                </div>
                <div
                  class="sc-bbmXgH fLVOGg"
                  data-testid="wallet-info-ctn"
                >
                  <div
                    class="sc-iomxrj dYTJKM"
                  >
                    <select
                      class="sc-dvCyap dfxYvF"
                      id="wallets"
                      name="wallets"
                    >
                      <option
                        class="sc-iFMziU fiPrpy"
                        value="Transaction Fixtures"
                      >
                        Transaction Fixtures
                      </option>
                    </select>
                    <div
                      class="sc-hMqMXs cAbGIb"
                    >
                      <svg
                        class="sc-htoDjs dHRdfz"
                        style="margin-top: 8px;"
                      />
                    </div>
                    <div
                      class="sc-eLExRp icFLqc"
                    >
                      <input
                        checked=""
                        class="sc-fOKMvo cmysrp"
                        data-testid="show-hide-balance"
                        id="show-hide-balance"
                        ...
    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/__tests__/App.test.js:710:59)

Each failure log is accessible here:
CashTab Unit Tests: <SendToken /> Renders the send token notification upon successful broadcast
CashTab Unit Tests: <App /> Setting "ABSOLUTE MINIMUM fees" settings will reduce fees to absolute min

Failed tests logs:

====== CashTab Unit Tests: <SendToken /> Renders the send token notification upon successful broadcast ======
Error: Unable to find an element with the text: eToken sent. 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-kcDeIU kgKfDI"
        >
          <div
            class="Toastify"
          />
          <div
            class="sc-cmjSyW jwpsva"
          >
            <div
              class="sc-sdtwF ijCnPZ"
            >
              <div
                class="sc-bFADNz cZpbyk"
              >
                <div
                  class="sc-iYUSvU MWsTz"
                >
                  <img
                    alt="cashtab"
                    class="sc-cHSUfg jyjdjN"
                    src="test-file-stub"
                  />
                </div>
                <div
                  class="sc-bbmXgH fLVOGg"
                  data-testid="wallet-info-ctn"
                >
                  <div
                    class="sc-iomxrj dYTJKM"
                  >
                    <select
                      class="sc-dvCyap dfxYvF"
                      id="wallets"
                      name="wallets"
                    >
                      <option
                        class="sc-iFMziU fiPrpy"
                        value="Transaction Fixtures"
                      >
                        Transaction Fixtures
                      </option>
                    </select>
                    <div
                      class="sc-hMqMXs cAbGIb"
                    >
                      <svg
                        class="sc-htoDjs dHRdfz"
                        style="margin-top: 8px;"
                      />
                    </div>
                    <div
                      class="sc-eLExRp icFLqc"
                    >
                      <input
                        checked=""
                        class="sc-fOKMvo cmysrp"
                        data-testid="show-hide-balance"
                        id="show-hide-balance"
                        name="show-hide-balance"
                        type="checkbox"
                      />
                      <label
                        class="sc-cbkKFq kCEdvn"
                        for="show-hide-balance"
                      >
                        <span
                          class="sc-krvtoX cOEecR"
                          data-off=""
                          data-on=""
                        />
                        <span
                          class="sc-fYiAbW ehbNtR"
                        />
                      </label>
                    </div>
                  </div>
                  <div
                    class="sc-keVrkP bVZapW"
                    data-testid="balance-xec"
                  >
                    9,513.12
                     
                    XEC
                     
                  </div>
                  <div
                    class="sc-gVLVqr cpEyGe"
                    data-testid="balance-fiat"
                  >
                    $
                    0.29
                     
                    USD
                  </div>
                  <p
                    class="sc-cBdUnI fWqlMo"
                    data-testid="ecash-price"
                  >
                    1 
                    XEC
                     = 
                    0.00003000
                     
                    USD
                  </p>
                </div>
              </div>
              <div
                class="sc-jqCOkK dpFugr"
              >
                <div
                  class="sc-hmXxxW fkVZQE"
                >
                  1
                   
                  BEAR
                </div>
                <div
                  class="sc-cqCuEk elJtl"
                  title="Token info for \"BearNip\""
                >
                  <div
                    class="sc-dliRfk jZcTsb"
                  >
                    <div
                      class="sc-kLIISr bYcVtm"
                      colspan="2"
                    >
                      <div
                        class="sc-hMqMXs cAbGIb"
                      >
                        <img
                          height="128"
                          src="https://icons.etokens.cash/128/3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109.png"
                          width="128"
                        />
                      </div>
                    </div>
                  </div>
                  <div
                    class="sc-dliRfk jZcTsb"
                  >
                    <div
                      class="sc-kLIISr bYcVtm"
                    >
                      Token Id: 
                      3fe
                      ...
                      109
                    </div>
                    <div
                      class="sc-kLIISr bYcVtm"
                    >
                      <div
                        class="sc-hMqMXs cAbGIb"
                      >
                        <svg
                          class="sc-htoDjs dHRdfz"
                        />
                      </div>
                    </div>
                  </div>
                  <div
                    class="sc-dliRfk jZcTsb"
                  >
                    <div
                      class="sc-kLIISr bYcVtm"
                    >
                      0
                       decimal places
                    </div>
                  </div>
                  <div
                    class="sc-dliRfk jZcTsb"
                  />
                  <div
                    class="sc-dliRfk jZcTsb"
                  >
                    Minted
                     
                    Mar 30, 2024
                  </div>
                  <div
                    class="sc-dliRfk jZcTsb"
                  >
                    Genesis Supply:
                     
                    4,444
                  </div>
                  <div
                    class="sc-dliRfk jZcTsb"
                  >
                    Fixed Supply
                  </div>
                </div>
                <div
                  class="sc-iQNlJl gSDyLy"
                >
                  <div
                    class="sc-bsbRJL gVlzfi"
                  >
                    <input
                      class="sc-hZSUBg sc-esOvli bxcKZR"
                      name="address"
                      placeholder="Address"
                      value="ecash:qp89xgjhcqdnzzemts0aj378nfe2mhu9yvxj9nhgg6"
                    />
                    <button
                      class="sc-gwVKww iuRbCt"
                      data-testid="scan-qr-code"
                    >
                      <svg />
                    </button>
                  </div>
                  <div
                    class="sc-hORach fnZTRV"
                  />
                </div>
                <div
                  class="sc-iqzUVk giZKtF"
                >
                  <a
                    class="sc-dNLxif idXNLy"
                    href="https://explorer.e.cash/address/false"
                    rel="noreferrer"
                    target="_blank"
                  />
                </div>
                <br />
                <div
                  class="sc-iQNlJl gSDyLy"
                >
                  <div
                    class="sc-bsbRJL gVlzfi"
                  >
                    <input
                      class="sc-hZSUBg sc-esOvli bxcKZR"
                      name="amount"
                      placeholder="Amount"
                      step="1"
                      type="number"
                      value="1"
                    />
                    <button
                      class="sc-cmthru sc-hMFtBS jmuqrV"
                    >
                      max
                    </button>
                  </div>
                  <div
                    class="sc-hORach fnZTRV"
                  />
                </div>
                <button
                  class="sc-ibxdXY sc-hrWEMg dCUaFy"
                  disabled=""
                  style="margin-top: 24px;"
                >
                  Send 
                  BearNip
                </button>
                <div
                  class="sc-cqCuEk elJtl"
                  title="Token info for \"BearNip\""
                >
                  <div
                    class="sc-dliRfk jZcTsb"
                  >
                    <a
                      href="/airdrop"
                      style="width: 100%;"
                    >
                      <button
                        class="sc-ibxdXY sc-iQKALj krPYXi"
                        style="margin-top: 12px;"
                      >
                        Airdrop
                      </button>
                    </a>
                  </div>
                  <div
                    class="sc-dliRfk jZcTsb"
                  >
                    <div
                      class="sc-bMVAic hxyVPp"
                    >
                      <div
                        class="sc-iQNlJl gSDyLy"
                      >
                        <div
                          class="sc-bsbRJL gVlzfi"
                        >
                          <input
                            class="sc-hZSUBg sc-esOvli bxcKZR"
                            name="burnAmount"
                            placeholder="Burn Amount"
                            step="1"
                            type="number"
                            value=""
                          />
                          <button
                            class="sc-cmthru sc-hMFtBS jmuqrV"
                          >
                            max
                          </button>
                        </div>
                        <div
                          class="sc-hORach fnZTRV"
                        />
                      </div>
                      <button
                        class="ant-btn css-dev-only-do-not-override-1rqnfsa ant-btn-primary ant-btn-dangerous"
                        type="button"
                      >
                        <span>
                          Burn BEAR
                        </span>
                      </button>
                    </div>
                  </div>
                </div>
              </div>
            </div>
            <div
              class="sc-BngTV dCDCyP"
            >
              <button
                class="sc-gRnDUn bgTXzO"
              >
                <svg />
              </button>
              <button
                class="sc-gRnDUn bgTXzO"
                data-testid="nav-btn-send"
              >
                <svg
                  class="sc-jKJlTe fTQyTm"
                  style="margin-top: -9px;"
                />
              </button>
              <button
                class="sc-gRnDUn bgTXzO"
                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-gRnDUn bgTXzO"
                data-testid="nav-btn-receive"
              >
                <svg />
              </button>
              <div
                class="sc-cqpYsc dcCFkQ"
                data-testid="hamburger"
              >
                <span
                  class="sc-hBbWxd gyoWfB"
                />
                <div
                  class="sc-dyGzUR iWnlwd"
                  data-testid="hamburger-menu"
                >
                  <button
                    class="sc-drKuOJ cFmRbo"
                    data-testid="nav-btn-airdrop"
                  >
                     
                    <p>
                      Airdrop
                    </p>
                    <svg
                      height="33px"
                      width="30px"
                    />
                  </button>
                  <button
                    class="sc-drKuOJ cFmRbo"
                    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-drKuOJ cFmRbo"
                    data-testid="nav-btn-signverifymsg"
                  >
                    <p>
                      Sign & Verify
                    </p>
                    <svg
                      class="sc-jzJRlG kclOxT"
                    />
                  </button>
                  <button
                    class="sc-drKuOJ cFmRbo"
                    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.findByText (/work/cashtab/src/components/Send/__tests__/SendToken.test.js:465:59)
====== CashTab Unit Tests: <App /> Setting "ABSOLUTE MINIMUM fees" settings will reduce fees to absolute min ======
Error: Unable to find an element with the text: eToken sent. 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-kcDeIU kgKfDI"
        >
          <div
            class="Toastify"
          >
            <div
              class="Toastify__toast-container Toastify__toast-container--top-right sc-exkUMo bQfCal"
            >
              <div
                class="Toastify__toast Toastify__toast-theme--light Toastify__toast--default Toastify__toast--close-on-click Toastify--animate Toastify__bounce-enter--top-right"
                data-in="true"
                id="4"
              >
                <div
                  class="Toastify__toast-body"
                  role="alert"
                >
                  <div
                    class="Toastify__toast-icon Toastify--animate-icon Toastify__zoom-enter"
                  >
                    <div
                      class="ant-image css-dev-only-do-not-override-1rqnfsa"
                      style="width: 24px; height: 24px;"
                    >
                      <img
                        class="ant-image-img css-dev-only-do-not-override-1rqnfsa"
                        height="24px"
                        src="test-file-stub"
                        style="height: 24px;"
                        width="24px"
                      />
                    </div>
                  </div>
                  <div>
                    <a
                      class="sc-krDsej bDQWZX"
                      href="https://explorer.e.cash/tx/6d2e157e2e2b1fa47cc63ede548375213942e29c090f5d9cbc2722258f720c08"
                      rel="noopener noreferrer"
                      target="_blank"
                    >
                      eCash sent
                    </a>
                  </div>
                </div>
                <button
                  aria-label="close"
                  class="Toastify__close-button Toastify__close-button--light"
                  type="button"
                >
                  <svg
                    aria-hidden="true"
                    viewBox="0 0 14 16"
                  >
                    <path
                      d="M7.71 8.23l3.75 3.75-1.48 1.48-3.75-3.75-3.75 3.75L1 11.98l3.75-3.75L1 4.48 2.48 3l3.75 3.75L9.98 3l1.48 1.48-3.75 3.75z"
                      fill-rule="evenodd"
                    />
                  </svg>
                </button>
                <div
                  class="Toastify__progress-bar--wrp"
                  data-hidden="false"
                >
                  <div
                    class="Toastify__progress-bar--bg Toastify__progress-bar-theme--light Toastify__progress-bar--default"
                  />
                  <div
                    aria-hidden="false"
                    aria-label="notification timer"
                    class="Toastify__progress-bar Toastify__progress-bar--animated Toastify__progress-bar-theme--light Toastify__progress-bar--default"
                    role="progressbar"
                    style="animation-duration: 5000ms; animation-play-state: running;"
                  />
                </div>
              </div>
            </div>
          </div>
          <div
            class="sc-cmjSyW jwpsva"
          >
            <div
              class="sc-sdtwF ijCnPZ"
            >
              <div
                class="sc-bFADNz cZpbyk"
              >
                <div
                  class="sc-iYUSvU MWsTz"
                >
                  <img
                    alt="cashtab"
                    class="sc-cHSUfg jyjdjN"
                    src="test-file-stub"
                  />
                </div>
                <div
                  class="sc-bbmXgH fLVOGg"
                  data-testid="wallet-info-ctn"
                >
                  <div
                    class="sc-iomxrj dYTJKM"
                  >
                    <select
                      class="sc-dvCyap dfxYvF"
                      id="wallets"
                      name="wallets"
                    >
                      <option
                        class="sc-iFMziU fiPrpy"
                        value="Transaction Fixtures"
                      >
                        Transaction Fixtures
                      </option>
                    </select>
                    <div
                      class="sc-hMqMXs cAbGIb"
                    >
                      <svg
                        class="sc-htoDjs dHRdfz"
                        style="margin-top: 8px;"
                      />
                    </div>
                    <div
                      class="sc-eLExRp icFLqc"
                    >
                      <input
                        checked=""
                        class="sc-fOKMvo cmysrp"
                        data-testid="show-hide-balance"
                        id="show-hide-balance"
                        ...
    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/__tests__/App.test.js:710:59)

Each failure log is accessible here:
CashTab Unit Tests: <SendToken /> Renders the send token notification upon successful broadcast
CashTab Unit Tests: <App /> Setting "ABSOLUTE MINIMUM fees" settings will reduce fees to absolute min

Implement function correctly

bytesofman added inline comments.
cashtab/src/validation/index.js
807 ↗(On Diff #46652)

I tested with the fr-FR locale and the input form still only accepts a '.' decimal place. If anyone asks, I can probably figure out a way to support arbitrary locale decimal places. But seems like the input form is only using '.'

emack added a subscriber: emack.

Subject to some material rebases

This revision is now accepted and ready to land.Mar 31 2024, 00:40