Loading...
Guest user 

First recorded build

 
All history
 

Last recorded build

[23:05:07][Step 1/1] at executeDispatch (node_modules/react-dom/cjs/react-dom.development.js:9041:3)
[23:05:07][Step 1/1] at processDispatchQueueItemsInOrder (node_modules/react-dom/cjs/react-dom.development.js:9073:7)
[23:05:07][Step 1/1] at processDispatchQueue (node_modules/react-dom/cjs/react-dom.development.js:9086:5)
[23:05:07][Step 1/1] at dispatchEventsForPlugins (node_modules/react-dom/cjs/react-dom.development.js:9097:3)
[23:05:07][Step 1/1] at node_modules/react-dom/cjs/react-dom.development.js:9288:12
[23:05:07][Step 1/1] at batchedUpdates$1 (node_modules/react-dom/cjs/react-dom.development.js:26140:12)
[23:05:07][Step 1/1] at batchedUpdates (node_modules/react-dom/cjs/react-dom.development.js:3991:12)
[23:05:07][Step 1/1] at dispatchEventForPluginEventSystem (node_modules/react-dom/cjs/react-dom.development.js:9287:3)
[23:05:07][Step 1/1] at dispatchEventWithEnableCapturePhaseSelectiveHydrationWithoutDiscreteEventReplay (node_modules/react-dom/cjs/react-dom.development.js:6465:5)
[23:05:07][Step 1/1] at dispatchEvent (node_modules/react-dom/cjs/react-dom.development.js:6457:5)
[23:05:07][Step 1/1] at dispatchDiscreteEvent (node_modules/react-dom/cjs/react-dom.development.js:6430:5)
[23:05:07][Step 1/1] at HTMLDivElement.callTheUserObjectsOperation (node_modules/jsdom/lib/jsdom/living/generated/EventListener.js:26:30)
[23:05:07][Step 1/1] at innerInvokeEventListeners (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:350:25)
[23:05:07][Step 1/1] at invokeEventListeners (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:286:3)
[23:05:07][Step 1/1] at HTMLButtonElementImpl._dispatch (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:233:9)
[23:05:07][Step 1/1] at HTMLButtonElementImpl.dispatchEvent (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:104:17)
[23:05:07][Step 1/1] at HTMLButtonElement.dispatchEvent (node_modules/jsdom/lib/jsdom/living/generated/EventTarget.js:241:34)
[23:05:07][Step 1/1] at node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:45:43
[23:05:07][Step 1/1] at node_modules/@testing-library/react/dist/pure.js:108:16
[23:05:07][Step 1/1] at node_modules/@testing-library/react/dist/act-compat.js:47:24
[23:05:07][Step 1/1] at act (node_modules/react/cjs/react.development.js:2512:16)
[23:05:07][Step 1/1] at node_modules/@testing-library/react/dist/act-compat.js:46:25
[23:05:07][Step 1/1] at Object.eventWrapper (node_modules/@testing-library/react/dist/pure.js:107:28)
[23:05:07][Step 1/1] at Object.wrapEvent (node_modules/@testing-library/user-event/dist/cjs/event/wrapEvent.js:6:28)
[23:05:07][Step 1/1] at Object.dispatchEvent (node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:45:22)
[23:05:07][Step 1/1] at Object.dispatchUIEvent (node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:22:26)
[23:05:07][Step 1/1] at Mouse.up (node_modules/@testing-library/user-event/dist/cjs/system/pointer/mouse.js:100:30)
[23:05:07][Step 1/1] at PointerHost.release (node_modules/@testing-library/user-event/dist/cjs/system/pointer/index.js:84:28)
[23:05:07][Step 1/1] at pointerAction (node_modules/@testing-library/user-event/dist/cjs/pointer/index.js:59:47)
[23:05:07][Step 1/1] at Object.pointer (node_modules/@testing-library/user-event/dist/cjs/pointer/index.js:32:9)
[23:05:07][Step 1/1] at Object.asyncWrapper (node_modules/@testing-library/react/dist/pure.js:88:22)
[23:05:07][Step 1/1] at Object.<anonymous> (src/components/Send/__tests__/SendXec.test.js:1464:9)
[23:05:07][Step 1/1]
[23:05:07][Step 1/1] console.warn
[23:05:07][Step 1/1] Deprecation Warning: TransactionBuilder will be removed in the future. (v6.x.x or later) Please use the Psbt class instead. Examples of usage are available in the transactions-psbt.js integration test file on our Github. A high level explanation is available in the psbt.ts and psbt.js files as well.
[23:05:07][Step 1/1]
[23:05:07][Step 1/1] 78 |
[23:05:07][Step 1/1] 79 | // Initialize TransactionBuilder
[23:05:07][Step 1/1] > 80 | let txBuilder = utxolib.bitgo.createTransactionBuilderForNetwork(
[23:05:07][Step 1/1] | ^
[23:05:07][Step 1/1] 81 | utxolib.networks.ecash,
[23:05:07][Step 1/1] 82 | );
[23:05:07][Step 1/1] 83 |
[23:05:07][Step 1/1]
[23:05:07][Step 1/1] at new TransactionBuilder (node_modules/@bitgo/utxo-lib/src/transaction_builder.ts:172:13)
[23:05:07][Step 1/1] at new UtxoTransactionBuilder (node_modules/@bitgo/utxo-lib/src/bitgo/UtxoTransactionBuilder.ts:24:5)
[23:05:07][Step 1/1] at Object.createTransactionBuilderForNetwork (node_modules/@bitgo/utxo-lib/src/bitgo/transaction.ts:257:13)
[23:05:07][Step 1/1] at createTransactionBuilderForNetwork (src/transactions/index.js:80:35)
[23:05:07][Step 1/1] at send (src/components/Send/SendXec.js:491:40)
[23:05:07][Step 1/1] at send (src/components/Send/SendXec.js:248:13)
[23:05:07][Step 1/1] at checkForConfirmationBeforeSendXec (src/components/Send/SendXec.js:1097:21)
[23:05:07][Step 1/1] at HTMLUnknownElement.callCallback (node_modules/react-dom/cjs/react-dom.development.js:4164:14)
[23:05:07][Step 1/1] at HTMLUnknownElement.callTheUserObjectsOperation (node_modules/jsdom/lib/jsdom/living/generated/EventListener.js:26:30)
[23:05:07][Step 1/1] at innerInvokeEventListeners (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:350:25)
[23:05:07][Step 1/1] at invokeEventListeners (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:286:3)
[23:05:07][Step 1/1] at HTMLUnknownElementImpl._dispatch (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:233:9)
[23:05:07][Step 1/1] at HTMLUnknownElementImpl.dispatchEvent (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:104:17)
[23:05:07][Step 1/1] at HTMLUnknownElement.dispatchEvent (node_modules/jsdom/lib/jsdom/living/generated/EventTarget.js:241:34)
[23:05:07][Step 1/1] at Object.invokeGuardedCallbackDev (node_modules/react-dom/cjs/react-dom.development.js:4213:16)
[23:05:07][Step 1/1] at invokeGuardedCallback (node_modules/react-dom/cjs/react-dom.development.js:4277:31)
[23:05:07][Step 1/1] at invokeGuardedCallbackAndCatchFirstError (node_modules/react-dom/cjs/react-dom.development.js:4291:25)
[23:05:07][Step 1/1] at executeDispatch (node_modules/react-dom/cjs/react-dom.development.js:9041:3)
[23:05:07][Step 1/1] at processDispatchQueueItemsInOrder (node_modules/react-dom/cjs/react-dom.development.js:9073:7)
[23:05:07][Step 1/1] at processDispatchQueue (node_modules/react-dom/cjs/react-dom.development.js:9086:5)
[23:05:07][Step 1/1] at dispatchEventsForPlugins (node_modules/react-dom/cjs/react-dom.development.js:9097:3)
[23:05:07][Step 1/1] at node_modules/react-dom/cjs/react-dom.development.js:9288:12
[23:05:07][Step 1/1] at batchedUpdates$1 (node_modules/react-dom/cjs/react-dom.development.js:26140:12)
[23:05:07][Step 1/1] at batchedUpdates (node_modules/react-dom/cjs/react-dom.development.js:3991:12)
[23:05:07][Step 1/1] at dispatchEventForPluginEventSystem (node_modules/react-dom/cjs/react-dom.development.js:9287:3)
[23:05:07][Step 1/1] at dispatchEventWithEnableCapturePhaseSelectiveHydrationWithoutDiscreteEventReplay (node_modules/react-dom/cjs/react-dom.development.js:6465:5)
[23:05:07][Step 1/1] at dispatchEvent (node_modules/react-dom/cjs/react-dom.development.js:6457:5)
[23:05:07][Step 1/1] at dispatchDiscreteEvent (node_modules/react-dom/cjs/react-dom.development.js:6430:5)
[23:05:07][Step 1/1] at HTMLDivElement.callTheUserObjectsOperation (node_modules/jsdom/lib/jsdom/living/generated/EventListener.js:26:30)
[23:05:07][Step 1/1] at innerInvokeEventListeners (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:350:25)
[23:05:07][Step 1/1] at invokeEventListeners (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:286:3)
[23:05:07][Step 1/1] at HTMLButtonElementImpl._dispatch (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:233:9)
[23:05:07][Step 1/1] at HTMLButtonElementImpl.dispatchEvent (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:104:17)
[23:05:07][Step 1/1] at HTMLButtonElement.dispatchEvent (node_modules/jsdom/lib/jsdom/living/generated/EventTarget.js:241:34)
[23:05:07][Step 1/1] at node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:45:43
[23:05:07][Step 1/1] at node_modules/@testing-library/react/dist/pure.js:108:16
[23:05:07][Step 1/1] at node_modules/@testing-library/react/dist/act-compat.js:47:24
[23:05:07][Step 1/1] at act (node_modules/react/cjs/react.development.js:2512:16)
[23:05:07][Step 1/1] at node_modules/@testing-library/react/dist/act-compat.js:46:25
[23:05:07][Step 1/1] at Object.eventWrapper (node_modules/@testing-library/react/dist/pure.js:107:28)
[23:05:07][Step 1/1] at Object.wrapEvent (node_modules/@testing-library/user-event/dist/cjs/event/wrapEvent.js:6:28)
[23:05:07][Step 1/1] at Object.dispatchEvent (node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:45:22)
[23:05:07][Step 1/1] at Object.dispatchUIEvent (node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:22:26)
[23:05:07][Step 1/1] at Mouse.up (node_modules/@testing-library/user-event/dist/cjs/system/pointer/mouse.js:100:30)
[23:05:07][Step 1/1] at PointerHost.release (node_modules/@testing-library/user-event/dist/cjs/system/pointer/index.js:84:28)
[23:05:07][Step 1/1] at pointerAction (node_modules/@testing-library/user-event/dist/cjs/pointer/index.js:59:47)
[23:05:07][Step 1/1] at Object.pointer (node_modules/@testing-library/user-event/dist/cjs/pointer/index.js:32:9)
[23:05:07][Step 1/1] at Object.asyncWrapper (node_modules/@testing-library/react/dist/pure.js:88:22)
[23:05:07][Step 1/1] at Object.<anonymous> (src/components/Send/__tests__/SendXec.test.js:1464:9)
[23:05:07][Step 1/1]
[23:05:07][Step 1/1] console.warn
[23:05:07][Step 1/1] DEPRECATED: TransactionBuilder sign method arguments will change in v6, please use the TxbSignArg interface
[23:05:07][Step 1/1]
[23:05:07][Step 1/1] 32 |
[23:05:07][Step 1/1] 33 | // Sign this input
[23:05:07][Step 1/1] > 34 | txBuilder.sign(
[23:05:07][Step 1/1] | ^
[23:05:07][Step 1/1] 35 | index, // vin
[23:05:07][Step 1/1] 36 | utxoECPair, // keyPair
[23:05:07][Step 1/1] 37 | undefined, // redeemScript
[23:05:07][Step 1/1]
[23:05:07][Step 1/1] at getSigningData (node_modules/@bitgo/utxo-lib/src/transaction_builder.ts:1299:13)
[23:05:07][Step 1/1] at UtxoTransactionBuilder.sign (node_modules/@bitgo/utxo-lib/src/transaction_builder.ts:278:7)
[23:05:07][Step 1/1] at UtxoTransactionBuilder.sign (node_modules/@bitgo/utxo-lib/src/bitgo/UtxoTransactionBuilder.ts:94:20)
[23:05:07][Step 1/1] at sign (src/transactions/index.js:34:19)
[23:05:07][Step 1/1] at Array.forEach (<anonymous>)
[23:05:07][Step 1/1] at forEach (src/transactions/index.js:19:12)
[23:05:07][Step 1/1] at signInputs (src/transactions/index.js:108:5)
[23:05:07][Step 1/1] at send (src/components/Send/SendXec.js:491:40)
[23:05:07][Step 1/1] at send (src/components/Send/SendXec.js:248:13)
[23:05:07][Step 1/1] at checkForConfirmationBeforeSendXec (src/components/Send/SendXec.js:1097:21)
[23:05:07][Step 1/1] at HTMLUnknownElement.callCallback (node_modules/react-dom/cjs/react-dom.development.js:4164:14)
[23:05:07][Step 1/1] at HTMLUnknownElement.callTheUserObjectsOperation (node_modules/jsdom/lib/jsdom/living/generated/EventListener.js:26:30)
[23:05:07][Step 1/1] at innerInvokeEventListeners (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:350:25)
[23:05:07][Step 1/1] at invokeEventListeners (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:286:3)
[23:05:07][Step 1/1] at HTMLUnknownElementImpl._dispatch (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:233:9)
[23:05:07][Step 1/1] at HTMLUnknownElementImpl.dispatchEvent (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:104:17)
[23:05:07][Step 1/1] at HTMLUnknownElement.dispatchEvent (node_modules/jsdom/lib/jsdom/living/generated/EventTarget.js:241:34)
[23:05:07][Step 1/1] at Object.invokeGuardedCallbackDev (node_modules/react-dom/cjs/react-dom.development.js:4213:16)
[23:05:07][Step 1/1] at invokeGuardedCallback (node_modules/react-dom/cjs/react-dom.development.js:4277:31)
[23:05:07][Step 1/1] at invokeGuardedCallbackAndCatchFirstError (node_modules/react-dom/cjs/react-dom.development.js:4291:25)
[23:05:07][Step 1/1] at executeDispatch (node_modules/react-dom/cjs/react-dom.development.js:9041:3)
[23:05:07][Step 1/1] at processDispatchQueueItemsInOrder (node_modules/react-dom/cjs/react-dom.development.js:9073:7)
[23:05:07][Step 1/1] at processDispatchQueue (node_modules/react-dom/cjs/react-dom.development.js:9086:5)
[23:05:07][Step 1/1] at dispatchEventsForPlugins (node_modules/react-dom/cjs/react-dom.development.js:9097:3)
[23:05:07][Step 1/1] at node_modules/react-dom/cjs/react-dom.development.js:9288:12
[23:05:07][Step 1/1] at batchedUpdates$1 (node_modules/react-dom/cjs/react-dom.development.js:26140:12)
[23:05:07][Step 1/1] at batchedUpdates (node_modules/react-dom/cjs/react-dom.development.js:3991:12)
[23:05:07][Step 1/1] at dispatchEventForPluginEventSystem (node_modules/react-dom/cjs/react-dom.development.js:9287:3)
[23:05:07][Step 1/1] at dispatchEventWithEnableCapturePhaseSelectiveHydrationWithoutDiscreteEventReplay (node_modules/react-dom/cjs/react-dom.development.js:6465:5)
[23:05:07][Step 1/1] at dispatchEvent (node_modules/react-dom/cjs/react-dom.development.js:6457:5)
[23:05:07][Step 1/1] at dispatchDiscreteEvent (node_modules/react-dom/cjs/react-dom.development.js:6430:5)
[23:05:07][Step 1/1] at HTMLDivElement.callTheUserObjectsOperation (node_modules/jsdom/lib/jsdom/living/generated/EventListener.js:26:30)
[23:05:07][Step 1/1] at innerInvokeEventListeners (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:350:25)
[23:05:07][Step 1/1] at invokeEventListeners (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:286:3)
[23:05:07][Step 1/1] at HTMLButtonElementImpl._dispatch (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:233:9)
[23:05:07][Step 1/1] at HTMLButtonElementImpl.dispatchEvent (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:104:17)
[23:05:07][Step 1/1] at HTMLButtonElement.dispatchEvent (node_modules/jsdom/lib/jsdom/living/generated/EventTarget.js:241:34)
[23:05:07][Step 1/1] at node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:45:43
[23:05:07][Step 1/1] at node_modules/@testing-library/react/dist/pure.js:108:16
[23:05:07][Step 1/1] at node_modules/@testing-library/react/dist/act-compat.js:47:24
[23:05:07][Step 1/1] at act (node_modules/react/cjs/react.development.js:2512:16)
[23:05:07][Step 1/1] at node_modules/@testing-library/react/dist/act-compat.js:46:25
[23:05:07][Step 1/1] at Object.eventWrapper (node_modules/@testing-library/react/dist/pure.js:107:28)
[23:05:07][Step 1/1] at Object.wrapEvent (node_modules/@testing-library/user-event/dist/cjs/event/wrapEvent.js:6:28)
[23:05:07][Step 1/1] at Object.dispatchEvent (node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:45:22)
[23:05:07][Step 1/1] at Object.dispatchUIEvent (node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:22:26)
[23:05:07][Step 1/1] at Mouse.up (node_modules/@testing-library/user-event/dist/cjs/system/pointer/mouse.js:100:30)
[23:05:07][Step 1/1] at PointerHost.release (node_modules/@testing-library/user-event/dist/cjs/system/pointer/index.js:84:28)
[23:05:07][Step 1/1] at pointerAction (node_modules/@testing-library/user-event/dist/cjs/pointer/index.js:59:47)
[23:05:07][Step 1/1] at Object.pointer (node_modules/@testing-library/user-event/dist/cjs/pointer/index.js:32:9)
[23:05:07][Step 1/1] at Object.asyncWrapper (node_modules/@testing-library/react/dist/pure.js:88:22)
[23:05:07][Step 1/1] at Object.<anonymous> (src/components/Send/__tests__/SendXec.test.js:1464:9)
[23:05:07][Step 1/1]
[23:05:07][Step 1/1] console.error
[23:05:07][Step 1/1] Error: Not implemented: HTMLCanvasElement.prototype.getContext (without installing the canvas npm package)
[23:05:07][Step 1/1] at module.exports (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/not-implemented.js:9:17)
[23:05:07][Step 1/1] at HTMLCanvasElementImpl.getContext (/work/cashtab/node_modules/jsdom/lib/jsdom/living/nodes/HTMLCanvasElement-impl.js:42:5)
[23:05:07][Step 1/1] at HTMLCanvasElement.getContext (/work/cashtab/node_modules/jsdom/lib/jsdom/living/generated/HTMLCanvasElement.js:131:58)
[23:05:07][Step 1/1] at getContext (/work/cashtab/src/helpers/index.js:148:32)
[23:05:07][Step 1/1] at /work/cashtab/src/components/Common/WalletLabel.js:34:31
[23:05:07][Step 1/1] at flatten (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:1310:21)
[23:05:07][Step 1/1] at flatten (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:1290:16)
[23:05:07][Step 1/1] at ComponentStyle.generateAndInjectStyles (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:1497:19)
[23:05:07][Step 1/1] at StyledComponent.generateAndInjectStyles (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:2116:36)
[23:05:07][Step 1/1] at StyledComponent.renderInner (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:2021:33)
[23:05:07][Step 1/1] at updateContextConsumer (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21207:19)
[23:05:07][Step 1/1] at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21652:14)
[23:05:07][Step 1/1] at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
[23:05:07][Step 1/1] at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
[23:05:07][Step 1/1] at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
[23:05:07][Step 1/1] at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
[23:05:07][Step 1/1] at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25738:74)
[23:05:07][Step 1/1] at workLoop (/work/cashtab/node_modules/scheduler/cjs/scheduler.development.js:266:34)
[23:05:07][Step 1/1] at flushWork (/work/cashtab/node_modules/scheduler/cjs/scheduler.development.js:239:14)
[23:05:07][Step 1/1] at performWorkUntilDeadline (/work/cashtab/node_modules/scheduler/cjs/scheduler.development.js:533:21)
[23:05:07][Step 1/1] at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
[23:05:07][Step 1/1] at listOnTimeout (node:internal/timers:573:17)
[23:05:07][Step 1/1] at processTimers (node:internal/timers:514:7) {
[23:05:07][Step 1/1] type: 'not implemented'
[23:05:07][Step 1/1] }
[23:05:07][Step 1/1]
[23:05:07][Step 1/1] 146 | try {
[23:05:07][Step 1/1] 147 | const canvas = document.createElement('canvas');
[23:05:07][Step 1/1] > 148 | const context = canvas.getContext('2d');
[23:05:07][Step 1/1] | ^
[23:05:07][Step 1/1] 149 | context.font = font || getComputedStyle(document.body).font;
[23:05:07][Step 1/1] 150 | return context.measureText(text).width;
[23:05:07][Step 1/1] 151 | } catch (err) {
[23:05:07][Step 1/1]
[23:05:07][Step 1/1] at VirtualConsole.<anonymous> (node_modules/jest-environment-jsdom/build/index.js:63:23)
[23:05:07][Step 1/1] at module.exports (node_modules/jsdom/lib/jsdom/browser/not-implemented.js:12:26)
[23:05:07][Step 1/1] at HTMLCanvasElementImpl.getContext (node_modules/jsdom/lib/jsdom/living/nodes/HTMLCanvasElement-impl.js:42:5)
[23:05:07][Step 1/1] at HTMLCanvasElement.getContext (node_modules/jsdom/lib/jsdom/living/generated/HTMLCanvasElement.js:131:58)
[23:05:07][Step 1/1] at getContext (src/helpers/index.js:148:32)
[23:05:07][Step 1/1] at src/components/Common/WalletLabel.js:34:31
[23:05:07][Step 1/1] at flatten (node_modules/styled-components/dist/styled-components.cjs.js:1310:21)
[23:05:07][Step 1/1] at flatten (node_modules/styled-components/dist/styled-components.cjs.js:1290:16)
[23:05:07][Step 1/1] at ComponentStyle.generateAndInjectStyles (node_modules/styled-components/dist/styled-components.cjs.js:1497:19)
[23:05:07][Step 1/1] at StyledComponent.generateAndInjectStyles (node_modules/styled-components/dist/styled-components.cjs.js:2116:36)
[23:05:07][Step 1/1] at StyledComponent.renderInner (node_modules/styled-components/dist/styled-components.cjs.js:2021:33)
[23:05:07][Step 1/1] at updateContextConsumer (node_modules/react-dom/cjs/react-dom.development.js:21207:19)
[23:05:07][Step 1/1] at beginWork (node_modules/react-dom/cjs/react-dom.development.js:21652:14)
[23:05:07][Step 1/1] at beginWork$1 (node_modules/react-dom/cjs/react-dom.development.js:27426:14)
[23:05:07][Step 1/1] at performUnitOfWork (node_modules/react-dom/cjs/react-dom.development.js:26560:12)
[23:05:07][Step 1/1] at workLoopSync (node_modules/react-dom/cjs/react-dom.development.js:26466:5)
[23:05:07][Step 1/1] at renderRootSync (node_modules/react-dom/cjs/react-dom.development.js:26434:7)
[23:05:07][Step 1/1] at performConcurrentWorkOnRoot (node_modules/react-dom/cjs/react-dom.development.js:25738:74)
[23:05:07][Step 1/1] at workLoop (node_modules/scheduler/cjs/scheduler.development.js:266:34)
[23:05:07][Step 1/1] at flushWork (node_modules/scheduler/cjs/scheduler.development.js:239:14)
[23:05:07][Step 1/1] at performWorkUntilDeadline (node_modules/scheduler/cjs/scheduler.development.js:533:21)
[23:05:07][Step 1/1] at Timeout.task [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
[23:05:07][Step 1/1]
[23:05:07][Step 1/1] console.error
[23:05:07][Step 1/1] Error: Not implemented: HTMLCanvasElement.prototype.getContext (without installing the canvas npm package)
[23:05:07][Step 1/1] at module.exports (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/not-implemented.js:9:17)
[23:05:07][Step 1/1] at HTMLCanvasElementImpl.getContext (/work/cashtab/node_modules/jsdom/lib/jsdom/living/nodes/HTMLCanvasElement-impl.js:42:5)
[23:05:07][Step 1/1] at HTMLCanvasElement.getContext (/work/cashtab/node_modules/jsdom/lib/jsdom/living/generated/HTMLCanvasElement.js:131:58)
[23:05:07][Step 1/1] at getContext (/work/cashtab/src/helpers/index.js:148:32)
[23:05:07][Step 1/1] at /work/cashtab/src/components/Common/WalletLabel.js:34:31
[23:05:07][Step 1/1] at flatten (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:1310:21)
[23:05:07][Step 1/1] at flatten (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:1290:16)
[23:05:07][Step 1/1] at ComponentStyle.generateAndInjectStyles (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:1497:19)
[23:05:07][Step 1/1] at StyledComponent.generateAndInjectStyles (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:2116:36)
[23:05:07][Step 1/1] at StyledComponent.renderInner (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:2021:33)
[23:05:07][Step 1/1] at updateContextConsumer (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21207:19)
[23:05:07][Step 1/1] at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21652:14)
[23:05:07][Step 1/1] at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
[23:05:07][Step 1/1] at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
[23:05:07][Step 1/1] at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
[23:05:07][Step 1/1] at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
[23:05:07][Step 1/1] at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25738:74)
[23:05:07][Step 1/1] at workLoop (/work/cashtab/node_modules/scheduler/cjs/scheduler.development.js:266:34)
[23:05:07][Step 1/1] at flushWork (/work/cashtab/node_modules/scheduler/cjs/scheduler.development.js:239:14)
[23:05:07][Step 1/1] at performWorkUntilDeadline (/work/cashtab/node_modules/scheduler/cjs/scheduler.development.js:533:21)
[23:05:07][Step 1/1] at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
[23:05:07][Step 1/1] at listOnTimeout (node:internal/timers:573:17)
[23:05:07][Step 1/1] at processTimers (node:internal/timers:514:7) {
[23:05:07][Step 1/1] type: 'not implemented'
[23:05:07][Step 1/1] }
[23:05:07][Step 1/1]
[23:05:07][Step 1/1] 146 | try {
[23:05:07][Step 1/1] 147 | const canvas = document.createElement('canvas');
[23:05:07][Step 1/1] > 148 | const context = canvas.getContext('2d');
[23:05:07][Step 1/1] | ^
[23:05:07][Step 1/1] 149 | context.font = font || getComputedStyle(document.body).font;
[23:05:07][Step 1/1] 150 | return context.measureText(text).width;
[23:05:07][Step 1/1] 151 | } catch (err) {
[23:05:07][Step 1/1]
[23:05:07][Step 1/1] at VirtualConsole.<anonymous> (node_modules/jest-environment-jsdom/build/index.js:63:23)
[23:05:07][Step 1/1] at module.exports (node_modules/jsdom/lib/jsdom/browser/not-implemented.js:12:26)
[23:05:07][Step 1/1] at HTMLCanvasElementImpl.getContext (node_modules/jsdom/lib/jsdom/living/nodes/HTMLCanvasElement-impl.js:42:5)
[23:05:07][Step 1/1] at HTMLCanvasElement.getContext (node_modules/jsdom/lib/jsdom/living/generated/HTMLCanvasElement.js:131:58)
[23:05:07][Step 1/1] at getContext (src/helpers/index.js:148:32)
[23:05:07][Step 1/1] at src/components/Common/WalletLabel.js:34:31
[23:05:07][Step 1/1] at flatten (node_modules/styled-components/dist/styled-components.cjs.js:1310:21)
[23:05:07][Step 1/1] at flatten (node_modules/styled-components/dist/styled-components.cjs.js:1290:16)
[23:05:07][Step 1/1] at ComponentStyle.generateAndInjectStyles (node_modules/styled-components/dist/styled-components.cjs.js:1497:19)
[23:05:07][Step 1/1] at StyledComponent.generateAndInjectStyles (node_modules/styled-components/dist/styled-components.cjs.js:2116:36)
[23:05:07][Step 1/1] at StyledComponent.renderInner (node_modules/styled-components/dist/styled-components.cjs.js:2021:33)
[23:05:07][Step 1/1] at updateContextConsumer (node_modules/react-dom/cjs/react-dom.development.js:21207:19)
[23:05:07][Step 1/1] at beginWork (node_modules/react-dom/cjs/react-dom.development.js:21652:14)
[23:05:07][Step 1/1] at beginWork$1 (node_modules/react-dom/cjs/react-dom.development.js:27426:14)
[23:05:07][Step 1/1] at performUnitOfWork (node_modules/react-dom/cjs/react-dom.development.js:26560:12)
[23:05:07][Step 1/1] at workLoopSync (node_modules/react-dom/cjs/react-dom.development.js:26466:5)
[23:05:07][Step 1/1] at renderRootSync (node_modules/react-dom/cjs/react-dom.development.js:26434:7)
[23:05:07][Step 1/1] at performConcurrentWorkOnRoot (node_modules/react-dom/cjs/react-dom.development.js:25738:74)
[23:05:07][Step 1/1] at workLoop (node_modules/scheduler/cjs/scheduler.development.js:266:34)
[23:05:07][Step 1/1] at flushWork (node_modules/scheduler/cjs/scheduler.development.js:239:14)
[23:05:07][Step 1/1] at performWorkUntilDeadline (node_modules/scheduler/cjs/scheduler.development.js:533:21)
[23:05:07][Step 1/1] at Timeout.task [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
[23:05:07][Step 1/1]
[23:05:07][Step 1/1] console.error
[23:05:07][Step 1/1] Error: Not implemented: HTMLCanvasElement.prototype.getContext (without installing the canvas npm package)
[23:05:07][Step 1/1] at module.exports (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/not-implemented.js:9:17)
[23:05:07][Step 1/1] at HTMLCanvasElementImpl.getContext (/work/cashtab/node_modules/jsdom/lib/jsdom/living/nodes/HTMLCanvasElement-impl.js:42:5)
[23:05:07][Step 1/1] at HTMLCanvasElement.getContext (/work/cashtab/node_modules/jsdom/lib/jsdom/living/generated/HTMLCanvasElement.js:131:58)
[23:05:07][Step 1/1] at getContext (/work/cashtab/src/helpers/index.js:148:32)
[23:05:07][Step 1/1] at /work/cashtab/src/components/Common/WalletLabel.js:34:31
[23:05:07][Step 1/1] at flatten (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:1310:21)
[23:05:07][Step 1/1] at flatten (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:1290:16)
[23:05:07][Step 1/1] at ComponentStyle.generateAndInjectStyles (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:1497:19)
[23:05:07][Step 1/1] at StyledComponent.generateAndInjectStyles (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:2116:36)
[23:05:07][Step 1/1] at StyledComponent.renderInner (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:2021:33)
[23:05:07][Step 1/1] at updateContextConsumer (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21207:19)
[23:05:07][Step 1/1] at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21652:14)
[23:05:07][Step 1/1] at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
[23:05:07][Step 1/1] at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
[23:05:07][Step 1/1] at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
[23:05:07][Step 1/1] at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
[23:05:07][Step 1/1] at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25738:74)
[23:05:07][Step 1/1] at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
[23:05:07][Step 1/1] at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
[23:05:07][Step 1/1] at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
[23:05:07][Step 1/1] at Object.eventWrapper (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:107:28)
[23:05:07][Step 1/1] at Object.wrapEvent (/work/cashtab/node_modules/@testing-library/user-event/dist/cjs/event/wrapEvent.js:6:28)
[23:05:07][Step 1/1] at Object.dispatchEvent (/work/cashtab/node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:45:22)
[23:05:07][Step 1/1] at Object.dispatchUIEvent (/work/cashtab/node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:22:26)
[23:05:07][Step 1/1] at Mouse.up (/work/cashtab/node_modules/@testing-library/user-event/dist/cjs/system/pointer/mouse.js:100:30)
[23:05:07][Step 1/1] at PointerHost.release (/work/cashtab/node_modules/@testing-library/user-event/dist/cjs/system/pointer/index.js:84:28)
[23:05:07][Step 1/1] at pointerAction (/work/cashtab/node_modules/@testing-library/user-event/dist/cjs/pointer/index.js:59:47)
[23:05:07][Step 1/1] at runNextTicks (node:internal/process/task_queues:60:5)
[23:05:07][Step 1/1] at listOnTimeout (node:internal/timers:540:9)
[23:05:07][Step 1/1] at processTimers (node:internal/timers:514:7)
[23:05:07][Step 1/1] at Object.pointer (/work/cashtab/node_modules/@testing-library/user-event/dist/cjs/pointer/index.js:32:9)
[23:05:07][Step 1/1] at Object.asyncWrapper (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:88:22)
[23:05:07][Step 1/1] at Object.<anonymous> (/work/cashtab/src/components/Send/__tests__/SendXec.test.js:1505:9) {
[23:05:07][Step 1/1] type: 'not implemented'
[23:05:07][Step 1/1] }
[23:05:07][Step 1/1]
[23:05:07][Step 1/1] 146 | try {
[23:05:07][Step 1/1] 147 | const canvas = document.createElement('canvas');
[23:05:07][Step 1/1] > 148 | const context = canvas.getContext('2d');
[23:05:07][Step 1/1] | ^
[23:05:07][Step 1/1] 149 | context.font = font || getComputedStyle(document.body).font;
[23:05:07][Step 1/1] 150 | return context.measureText(text).width;
[23:05:07][Step 1/1] 151 | } catch (err) {
[23:05:07][Step 1/1]
[23:05:07][Step 1/1] at VirtualConsole.<anonymous> (node_modules/jest-environment-jsdom/build/index.js:63:23)
[23:05:07][Step 1/1] at module.exports (node_modules/jsdom/lib/jsdom/browser/not-implemented.js:12:26)
[23:05:07][Step 1/1] at HTMLCanvasElementImpl.getContext (node_modules/jsdom/lib/jsdom/living/nodes/HTMLCanvasElement-impl.js:42:5)
[23:05:07][Step 1/1] at HTMLCanvasElement.getContext (node_modules/jsdom/lib/jsdom/living/generated/HTMLCanvasElement.js:131:58)
[23:05:07][Step 1/1] at getContext (src/helpers/index.js:148:32)
[23:05:07][Step 1/1] at src/components/Common/WalletLabel.js:34:31
[23:05:07][Step 1/1] at flatten (node_modules/styled-components/dist/styled-components.cjs.js:1310:21)
[23:05:07][Step 1/1] at flatten (node_modules/styled-components/dist/styled-components.cjs.js:1290:16)
[23:05:07][Step 1/1] at ComponentStyle.generateAndInjectStyles (node_modules/styled-components/dist/styled-components.cjs.js:1497:19)
[23:05:07][Step 1/1] at StyledComponent.generateAndInjectStyles (node_modules/styled-components/dist/styled-components.cjs.js:2116:36)
[23:05:07][Step 1/1] at StyledComponent.renderInner (node_modules/styled-components/dist/styled-components.cjs.js:2021:33)
[23:05:07][Step 1/1] at updateContextConsumer (node_modules/react-dom/cjs/react-dom.development.js:21207:19)
[23:05:07][Step 1/1] at beginWork (node_modules/react-dom/cjs/react-dom.development.js:21652:14)
[23:05:07][Step 1/1] at beginWork$1 (node_modules/react-dom/cjs/react-dom.development.js:27426:14)
[23:05:07][Step 1/1] at performUnitOfWork (node_modules/react-dom/cjs/react-dom.development.js:26560:12)
[23:05:07][Step 1/1] at workLoopSync (node_modules/react-dom/cjs/react-dom.development.js:26466:5)
[23:05:07][Step 1/1] at renderRootSync (node_modules/react-dom/cjs/react-dom.development.js:26434:7)
[23:05:07][Step 1/1] at performConcurrentWorkOnRoot (node_modules/react-dom/cjs/react-dom.development.js:25738:74)
[23:05:07][Step 1/1] at flushActQueue (node_modules/react/cjs/react.development.js:2667:24)
[23:05:07][Step 1/1] at act (node_modules/react/cjs/react.development.js:2582:11)
[23:05:07][Step 1/1] at node_modules/@testing-library/react/dist/act-compat.js:46:25
[23:05:07][Step 1/1] at Object.eventWrapper (node_modules/@testing-library/react/dist/pure.js:107:28)
[23:05:07][Step 1/1] at Object.wrapEvent (node_modules/@testing-library/user-event/dist/cjs/event/wrapEvent.js:6:28)
[23:05:07][Step 1/1] at Object.dispatchEvent (node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:45:22)
[23:05:07][Step 1/1] at Object.dispatchUIEvent (node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:22:26)
[23:05:07][Step 1/1] at Mouse.up (node_modules/@testing-library/user-event/dist/cjs/system/pointer/mouse.js:100:30)
[23:05:07][Step 1/1] at PointerHost.release (node_modules/@testing-library/user-event/dist/cjs/system/pointer/index.js:84:28)
[23:05:07][Step 1/1] at pointerAction (node_modules/@testing-library/user-event/dist/cjs/pointer/index.js:59:47)
[23:05:07][Step 1/1] at Object.pointer (node_modules/@testing-library/user-event/dist/cjs/pointer/index.js:32:9)
[23:05:07][Step 1/1] at Object.asyncWrapper (node_modules/@testing-library/react/dist/pure.js:88:22)
[23:05:07][Step 1/1] at Object.<anonymous> (src/components/Send/__tests__/SendXec.test.js:1505:9)
[23:05:07][Step 1/1]
[23:05:07][Step 1/1] console.warn
[23:05:07][Step 1/1] [react-ga] ReactGA.initialize must be called first or GoogleAnalytics should be loaded manually
[23:05:07][Step 1/1]
[23:05:07][Step 1/1] 38 | ? // If you are not building the extension, export GA event tracking function
[23:05:07][Step 1/1] 39 | (category, action, label) => {
[23:05:07][Step 1/1] > 40 | ReactGA.event({
[23:05:07][Step 1/1] | ^
[23:05:07][Step 1/1] 41 | category: category,
[23:05:07][Step 1/1] 42 | action: action,
[23:05:07][Step 1/1] 43 | label: label,
[23:05:07][Step 1/1]
[23:05:07][Step 1/1] at warn (node_modules/react-ga/dist/react-ga.js:110:11)
[23:05:07][Step 1/1] at internalGa (node_modules/react-ga/dist/react-ga.js:211:47)
[23:05:07][Step 1/1] at _gaCommand (node_modules/react-ga/dist/react-ga.js:232:81)
[23:05:07][Step 1/1] at send (node_modules/react-ga/dist/react-ga.js:367:3)
[23:05:07][Step 1/1] at Object.event (node_modules/react-ga/dist/react-ga.js:577:5)
[23:05:07][Step 1/1] at event (src/components/Common/GoogleAnalytics.js:40:23)
[23:05:07][Step 1/1] at send (src/components/Send/SendXec.js:465:18)
[23:05:07][Step 1/1] at send (src/components/Send/SendXec.js:248:13)
[23:05:07][Step 1/1] at checkForConfirmationBeforeSendXec (src/components/Send/SendXec.js:1097:21)
[23:05:07][Step 1/1] at HTMLUnknownElement.callCallback (node_modules/react-dom/cjs/react-dom.development.js:4164:14)
[23:05:07][Step 1/1] at HTMLUnknownElement.callTheUserObjectsOperation (node_modules/jsdom/lib/jsdom/living/generated/EventListener.js:26:30)
[23:05:07][Step 1/1] at innerInvokeEventListeners (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:350:25)
[23:05:07][Step 1/1] at invokeEventListeners (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:286:3)
[23:05:07][Step 1/1] at HTMLUnknownElementImpl._dispatch (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:233:9)
[23:05:07][Step 1/1] at HTMLUnknownElementImpl.dispatchEvent (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:104:17)
[23:05:07][Step 1/1] at HTMLUnknownElement.dispatchEvent (node_modules/jsdom/lib/jsdom/living/generated/EventTarget.js:241:34)
[23:05:07][Step 1/1] at Object.invokeGuardedCallbackDev (node_modules/react-dom/cjs/react-dom.development.js:4213:16)
[23:05:07][Step 1/1] at invokeGuardedCallback (node_modules/react-dom/cjs/react-dom.development.js:4277:31)
[23:05:07][Step 1/1] at invokeGuardedCallbackAndCatchFirstError (node_modules/react-dom/cjs/react-dom.development.js:4291:25)
[23:05:07][Step 1/1] at executeDispatch (node_modules/react-dom/cjs/react-dom.development.js:9041:3)
[23:05:07][Step 1/1] at processDispatchQueueItemsInOrder (node_modules/react-dom/cjs/react-dom.development.js:9073:7)
[23:05:07][Step 1/1] at processDispatchQueue (node_modules/react-dom/cjs/react-dom.development.js:9086:5)
[23:05:07][Step 1/1] at dispatchEventsForPlugins (node_modules/react-dom/cjs/react-dom.development.js:9097:3)
[23:05:07][Step 1/1] at node_modules/react-dom/cjs/react-dom.development.js:9288:12
[23:05:07][Step 1/1] at batchedUpdates$1 (node_modules/react-dom/cjs/react-dom.development.js:26140:12)
[23:05:07][Step 1/1] at batchedUpdates (node_modules/react-dom/cjs/react-dom.development.js:3991:12)
[23:05:07][Step 1/1] at dispatchEventForPluginEventSystem (node_modules/react-dom/cjs/react-dom.development.js:9287:3)
[23:05:07][Step 1/1] at dispatchEventWithEnableCapturePhaseSelectiveHydrationWithoutDiscreteEventReplay (node_modules/react-dom/cjs/react-dom.development.js:6465:5)
[23:05:07][Step 1/1] at dispatchEvent (node_modules/react-dom/cjs/react-dom.development.js:6457:5)
[23:05:07][Step 1/1] at dispatchDiscreteEvent (node_modules/react-dom/cjs/react-dom.development.js:6430:5)
[23:05:07][Step 1/1] at HTMLDivElement.callTheUserObjectsOperation (node_modules/jsdom/lib/jsdom/living/generated/EventListener.js:26:30)
[23:05:07][Step 1/1] at innerInvokeEventListeners (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:350:25)
[23:05:07][Step 1/1] at invokeEventListeners (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:286:3)
[23:05:07][Step 1/1] at HTMLButtonElementImpl._dispatch (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:233:9)
[23:05:07][Step 1/1] at HTMLButtonElementImpl.dispatchEvent (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:104:17)
[23:05:07][Step 1/1] at HTMLButtonElement.dispatchEvent (node_modules/jsdom/lib/jsdom/living/generated/EventTarget.js:241:34)
[23:05:07][Step 1/1] at node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:45:43
[23:05:07][Step 1/1] at node_modules/@testing-library/react/dist/pure.js:108:16
[23:05:07][Step 1/1] at node_modules/@testing-library/react/dist/act-compat.js:47:24
[23:05:07][Step 1/1] at act (node_modules/react/cjs/react.development.js:2512:16)
[23:05:07][Step 1/1] at node_modules/@testing-library/react/dist/act-compat.js:46:25
[23:05:07][Step 1/1] at Object.eventWrapper (node_modules/@testing-library/react/dist/pure.js:107:28)
[23:05:07][Step 1/1] at Object.wrapEvent (node_modules/@testing-library/user-event/dist/cjs/event/wrapEvent.js:6:28)
[23:05:07][Step 1/1] at Object.dispatchEvent (node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:45:22)
[23:05:07][Step 1/1] at Object.dispatchUIEvent (node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:22:26)
[23:05:07][Step 1/1] at Mouse.up (node_modules/@testing-library/user-event/dist/cjs/system/pointer/mouse.js:100:30)
[23:05:07][Step 1/1] at PointerHost.release (node_modules/@testing-library/user-event/dist/cjs/system/pointer/index.js:84:28)
[23:05:07][Step 1/1] at pointerAction (node_modules/@testing-library/user-event/dist/cjs/pointer/index.js:59:47)
[23:05:07][Step 1/1] at Object.pointer (node_modules/@testing-library/user-event/dist/cjs/pointer/index.js:32:9)
[23:05:07][Step 1/1] at Object.asyncWrapper (node_modules/@testing-library/react/dist/pure.js:88:22)
[23:05:07][Step 1/1] at Object.<anonymous> (src/components/Send/__tests__/SendXec.test.js:1524:9)
[23:05:07][Step 1/1]
[23:05:07][Step 1/1] console.warn
[23:05:07][Step 1/1] Deprecation Warning: TransactionBuilder will be removed in the future. (v6.x.x or later) Please use the Psbt class instead. Examples of usage are available in the transactions-psbt.js integration test file on our Github. A high level explanation is available in the psbt.ts and psbt.js files as well.
[23:05:07][Step 1/1]
[23:05:07][Step 1/1] 78 |
[23:05:07][Step 1/1] 79 | // Initialize TransactionBuilder
[23:05:07][Step 1/1] > 80 | let txBuilder = utxolib.bitgo.createTransactionBuilderForNetwork(
[23:05:07][Step 1/1] | ^
[23:05:07][Step 1/1] 81 | utxolib.networks.ecash,
[23:05:07][Step 1/1] 82 | );
[23:05:07][Step 1/1] 83 |
[23:05:07][Step 1/1]
[23:05:07][Step 1/1] at new TransactionBuilder (node_modules/@bitgo/utxo-lib/src/transaction_builder.ts:172:13)
[23:05:07][Step 1/1] at new UtxoTransactionBuilder (node_modules/@bitgo/utxo-lib/src/bitgo/UtxoTransactionBuilder.ts:24:5)
[23:05:07][Step 1/1] at Object.createTransactionBuilderForNetwork (node_modules/@bitgo/utxo-lib/src/bitgo/transaction.ts:257:13)
[23:05:07][Step 1/1] at createTransactionBuilderForNetwork (src/transactions/index.js:80:35)
[23:05:07][Step 1/1] at send (src/components/Send/SendXec.js:491:40)
[23:05:07][Step 1/1] at send (src/components/Send/SendXec.js:248:13)
[23:05:07][Step 1/1] at checkForConfirmationBeforeSendXec (src/components/Send/SendXec.js:1097:21)
[23:05:07][Step 1/1] at HTMLUnknownElement.callCallback (node_modules/react-dom/cjs/react-dom.development.js:4164:14)
[23:05:07][Step 1/1] at HTMLUnknownElement.callTheUserObjectsOperation (node_modules/jsdom/lib/jsdom/living/generated/EventListener.js:26:30)
[23:05:07][Step 1/1] at innerInvokeEventListeners (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:350:25)
[23:05:07][Step 1/1] at invokeEventListeners (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:286:3)
[23:05:07][Step 1/1] at HTMLUnknownElementImpl._dispatch (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:233:9)
[23:05:07][Step 1/1] at HTMLUnknownElementImpl.dispatchEvent (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:104:17)
[23:05:07][Step 1/1] at HTMLUnknownElement.dispatchEvent (node_modules/jsdom/lib/jsdom/living/generated/EventTarget.js:241:34)
[23:05:07][Step 1/1] at Object.invokeGuardedCallbackDev (node_modules/react-dom/cjs/react-dom.development.js:4213:16)
[23:05:07][Step 1/1] at invokeGuardedCallback (node_modules/react-dom/cjs/react-dom.development.js:4277:31)
[23:05:07][Step 1/1] at invokeGuardedCallbackAndCatchFirstError (node_modules/react-dom/cjs/react-dom.development.js:4291:25)
[23:05:07][Step 1/1] at executeDispatch (node_modules/react-dom/cjs/react-dom.development.js:9041:3)
[23:05:07][Step 1/1] at processDispatchQueueItemsInOrder (node_modules/react-dom/cjs/react-dom.development.js:9073:7)
[23:05:07][Step 1/1] at processDispatchQueue (node_modules/react-dom/cjs/react-dom.development.js:9086:5)
[23:05:07][Step 1/1] at dispatchEventsForPlugins (node_modules/react-dom/cjs/react-dom.development.js:9097:3)
[23:05:07][Step 1/1] at node_modules/react-dom/cjs/react-dom.development.js:9288:12
[23:05:07][Step 1/1] at batchedUpdates$1 (node_modules/react-dom/cjs/react-dom.development.js:26140:12)
[23:05:07][Step 1/1] at batchedUpdates (node_modules/react-dom/cjs/react-dom.development.js:3991:12)
[23:05:07][Step 1/1] at dispatchEventForPluginEventSystem (node_modules/react-dom/cjs/react-dom.development.js:9287:3)
[23:05:07][Step 1/1] at dispatchEventWithEnableCapturePhaseSelectiveHydrationWithoutDiscreteEventReplay (node_modules/react-dom/cjs/react-dom.development.js:6465:5)
[23:05:07][Step 1/1] at dispatchEvent (node_modules/react-dom/cjs/react-dom.development.js:6457:5)
[23:05:07][Step 1/1] at dispatchDiscreteEvent (node_modules/react-dom/cjs/react-dom.development.js:6430:5)
[23:05:07][Step 1/1] at HTMLDivElement.callTheUserObjectsOperation (node_modules/jsdom/lib/jsdom/living/generated/EventListener.js:26:30)
[23:05:07][Step 1/1] at innerInvokeEventListeners (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:350:25)
[23:05:07][Step 1/1] at invokeEventListeners (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:286:3)
[23:05:07][Step 1/1] at HTMLButtonElementImpl._dispatch (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:233:9)
[23:05:07][Step 1/1] at HTMLButtonElementImpl.dispatchEvent (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:104:17)
[23:05:07][Step 1/1] at HTMLButtonElement.dispatchEvent (node_modules/jsdom/lib/jsdom/living/generated/EventTarget.js:241:34)
[23:05:07][Step 1/1] at node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:45:43
[23:05:07][Step 1/1] at node_modules/@testing-library/react/dist/pure.js:108:16
[23:05:07][Step 1/1] at node_modules/@testing-library/react/dist/act-compat.js:47:24
[23:05:07][Step 1/1] at act (node_modules/react/cjs/react.development.js:2512:16)
[23:05:07][Step 1/1] at node_modules/@testing-library/react/dist/act-compat.js:46:25
[23:05:07][Step 1/1] at Object.eventWrapper (node_modules/@testing-library/react/dist/pure.js:107:28)
[23:05:07][Step 1/1] at Object.wrapEvent (node_modules/@testing-library/user-event/dist/cjs/event/wrapEvent.js:6:28)
[23:05:07][Step 1/1] at Object.dispatchEvent (node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:45:22)
[23:05:07][Step 1/1] at Object.dispatchUIEvent (node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:22:26)
[23:05:07][Step 1/1] at Mouse.up (node_modules/@testing-library/user-event/dist/cjs/system/pointer/mouse.js:100:30)
[23:05:07][Step 1/1] at PointerHost.release (node_modules/@testing-library/user-event/dist/cjs/system/pointer/index.js:84:28)
[23:05:07][Step 1/1] at pointerAction (node_modules/@testing-library/user-event/dist/cjs/pointer/index.js:59:47)
[23:05:07][Step 1/1] at Object.pointer (node_modules/@testing-library/user-event/dist/cjs/pointer/index.js:32:9)
[23:05:07][Step 1/1] at Object.asyncWrapper (node_modules/@testing-library/react/dist/pure.js:88:22)
[23:05:07][Step 1/1] at Object.<anonymous> (src/components/Send/__tests__/SendXec.test.js:1524:9)
[23:05:07][Step 1/1]
[23:05:07][Step 1/1] console.warn
[23:05:07][Step 1/1] DEPRECATED: TransactionBuilder sign method arguments will change in v6, please use the TxbSignArg interface
[23:05:07][Step 1/1]
[23:05:07][Step 1/1] 32 |
[23:05:07][Step 1/1] 33 | // Sign this input
[23:05:07][Step 1/1] > 34 | txBuilder.sign(
[23:05:07][Step 1/1] | ^
[23:05:07][Step 1/1] 35 | index, // vin
[23:05:07][Step 1/1] 36 | utxoECPair, // keyPair
[23:05:07][Step 1/1] 37 | undefined, // redeemScript
[23:05:07][Step 1/1]
[23:05:07][Step 1/1] at getSigningData (node_modules/@bitgo/utxo-lib/src/transaction_builder.ts:1299:13)
[23:05:07][Step 1/1] at UtxoTransactionBuilder.sign (node_modules/@bitgo/utxo-lib/src/transaction_builder.ts:278:7)
[23:05:07][Step 1/1] at UtxoTransactionBuilder.sign (node_modules/@bitgo/utxo-lib/src/bitgo/UtxoTransactionBuilder.ts:94:20)
[23:05:07][Step 1/1] at sign (src/transactions/index.js:34:19)
[23:05:07][Step 1/1] at Array.forEach (<anonymous>)
[23:05:07][Step 1/1] at forEach (src/transactions/index.js:19:12)
[23:05:07][Step 1/1] at signInputs (src/transactions/index.js:108:5)
[23:05:07][Step 1/1] at send (src/components/Send/SendXec.js:491:40)
[23:05:07][Step 1/1] at send (src/components/Send/SendXec.js:248:13)
[23:05:07][Step 1/1] at checkForConfirmationBeforeSendXec (src/components/Send/SendXec.js:1097:21)
[23:05:07][Step 1/1] at HTMLUnknownElement.callCallback (node_modules/react-dom/cjs/react-dom.development.js:4164:14)
[23:05:07][Step 1/1] at HTMLUnknownElement.callTheUserObjectsOperation (node_modules/jsdom/lib/jsdom/living/generated/EventListener.js:26:30)
[23:05:07][Step 1/1] at innerInvokeEventListeners (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:350:25)
[23:05:07][Step 1/1] at invokeEventListeners (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:286:3)
[23:05:07][Step 1/1] at HTMLUnknownElementImpl._dispatch (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:233:9)
[23:05:07][Step 1/1] at HTMLUnknownElementImpl.dispatchEvent (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:104:17)
[23:05:07][Step 1/1] at HTMLUnknownElement.dispatchEvent (node_modules/jsdom/lib/jsdom/living/generated/EventTarget.js:241:34)
[23:05:07][Step 1/1] at Object.invokeGuardedCallbackDev (node_modules/react-dom/cjs/react-dom.development.js:4213:16)
[23:05:07][Step 1/1] at invokeGuardedCallback (node_modules/react-dom/cjs/react-dom.development.js:4277:31)
[23:05:07][Step 1/1] at invokeGuardedCallbackAndCatchFirstError (node_modules/react-dom/cjs/react-dom.development.js:4291:25)
[23:05:07][Step 1/1] at executeDispatch (node_modules/react-dom/cjs/react-dom.development.js:9041:3)
[23:05:07][Step 1/1] at processDispatchQueueItemsInOrder (node_modules/react-dom/cjs/react-dom.development.js:9073:7)
[23:05:07][Step 1/1] at processDispatchQueue (node_modules/react-dom/cjs/react-dom.development.js:9086:5)
[23:05:07][Step 1/1] at dispatchEventsForPlugins (node_modules/react-dom/cjs/react-dom.development.js:9097:3)
[23:05:07][Step 1/1] at node_modules/react-dom/cjs/react-dom.development.js:9288:12
[23:05:07][Step 1/1] at batchedUpdates$1 (node_modules/react-dom/cjs/react-dom.development.js:26140:12)
[23:05:07][Step 1/1] at batchedUpdates (node_modules/react-dom/cjs/react-dom.development.js:3991:12)
[23:05:07][Step 1/1] at dispatchEventForPluginEventSystem (node_modules/react-dom/cjs/react-dom.development.js:9287:3)
[23:05:07][Step 1/1] at dispatchEventWithEnableCapturePhaseSelectiveHydrationWithoutDiscreteEventReplay (node_modules/react-dom/cjs/react-dom.development.js:6465:5)
[23:05:07][Step 1/1] at dispatchEvent (node_modules/react-dom/cjs/react-dom.development.js:6457:5)
[23:05:07][Step 1/1] at dispatchDiscreteEvent (node_modules/react-dom/cjs/react-dom.development.js:6430:5)
[23:05:07][Step 1/1] at HTMLDivElement.callTheUserObjectsOperation (node_modules/jsdom/lib/jsdom/living/generated/EventListener.js:26:30)
[23:05:07][Step 1/1] at innerInvokeEventListeners (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:350:25)
[23:05:07][Step 1/1] at invokeEventListeners (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:286:3)
[23:05:07][Step 1/1] at HTMLButtonElementImpl._dispatch (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:233:9)
[23:05:07][Step 1/1] at HTMLButtonElementImpl.dispatchEvent (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:104:17)
[23:05:07][Step 1/1] at HTMLButtonElement.dispatchEvent (node_modules/jsdom/lib/jsdom/living/generated/EventTarget.js:241:34)
[23:05:07][Step 1/1] at node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:45:43
[23:05:07][Step 1/1] at node_modules/@testing-library/react/dist/pure.js:108:16
[23:05:07][Step 1/1] at node_modules/@testing-library/react/dist/act-compat.js:47:24
[23:05:07][Step 1/1] at act (node_modules/react/cjs/react.development.js:2512:16)
[23:05:07][Step 1/1] at node_modules/@testing-library/react/dist/act-compat.js:46:25
[23:05:07][Step 1/1] at Object.eventWrapper (node_modules/@testing-library/react/dist/pure.js:107:28)
[23:05:07][Step 1/1] at Object.wrapEvent (node_modules/@testing-library/user-event/dist/cjs/event/wrapEvent.js:6:28)
[23:05:07][Step 1/1] at Object.dispatchEvent (node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:45:22)
[23:05:07][Step 1/1] at Object.dispatchUIEvent (node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:22:26)
[23:05:07][Step 1/1] at Mouse.up (node_modules/@testing-library/user-event/dist/cjs/system/pointer/mouse.js:100:30)
[23:05:07][Step 1/1] at PointerHost.release (node_modules/@testing-library/user-event/dist/cjs/system/pointer/index.js:84:28)
[23:05:07][Step 1/1] at pointerAction (node_modules/@testing-library/user-event/dist/cjs/pointer/index.js:59:47)
[23:05:07][Step 1/1] at Object.pointer (node_modules/@testing-library/user-event/dist/cjs/pointer/index.js:32:9)
[23:05:07][Step 1/1] at Object.asyncWrapper (node_modules/@testing-library/react/dist/pure.js:88:22)
[23:05:07][Step 1/1] at Object.<anonymous> (src/components/Send/__tests__/SendXec.test.js:1524:9)
[23:05:07][Step 1/1]
[23:05:07][Step 1/1] console.error
[23:05:07][Step 1/1] Error: Not implemented: HTMLCanvasElement.prototype.getContext (without installing the canvas npm package)
[23:05:07][Step 1/1] at module.exports (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/not-implemented.js:9:17)
[23:05:07][Step 1/1] at HTMLCanvasElementImpl.getContext (/work/cashtab/node_modules/jsdom/lib/jsdom/living/nodes/HTMLCanvasElement-impl.js:42:5)
[23:05:07][Step 1/1] at HTMLCanvasElement.getContext (/work/cashtab/node_modules/jsdom/lib/jsdom/living/generated/HTMLCanvasElement.js:131:58)
[23:05:07][Step 1/1] at getContext (/work/cashtab/src/helpers/index.js:148:32)
[23:05:07][Step 1/1] at /work/cashtab/src/components/Common/WalletLabel.js:34:31
[23:05:07][Step 1/1] at flatten (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:1310:21)
[23:05:07][Step 1/1] at flatten (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:1290:16)
[23:05:07][Step 1/1] at ComponentStyle.generateAndInjectStyles (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:1497:19)
[23:05:07][Step 1/1] at StyledComponent.generateAndInjectStyles (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:2116:36)
[23:05:07][Step 1/1] at StyledComponent.renderInner (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:2021:33)
[23:05:07][Step 1/1] at updateContextConsumer (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21207:19)
[23:05:07][Step 1/1] at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21652:14)
[23:05:07][Step 1/1] at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
[23:05:07][Step 1/1] at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
[23:05:07][Step 1/1] at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
[23:05:07][Step 1/1] at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
[23:05:07][Step 1/1] at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25738:74)
[23:05:07][Step 1/1] at workLoop (/work/cashtab/node_modules/scheduler/cjs/scheduler.development.js:266:34)
[23:05:07][Step 1/1] at flushWork (/work/cashtab/node_modules/scheduler/cjs/scheduler.development.js:239:14)
[23:05:07][Step 1/1] at performWorkUntilDeadline (/work/cashtab/node_modules/scheduler/cjs/scheduler.development.js:533:21)
[23:05:07][Step 1/1] at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
[23:05:07][Step 1/1] at listOnTimeout (node:internal/timers:573:17)
[23:05:07][Step 1/1] at processTimers (node:internal/timers:514:7) {
[23:05:07][Step 1/1] type: 'not implemented'
[23:05:07][Step 1/1] }
[23:05:07][Step 1/1]
[23:05:07][Step 1/1] 146 | try {
[23:05:07][Step 1/1] 147 | const canvas = document.createElement('canvas');
[23:05:07][Step 1/1] > 148 | const context = canvas.getContext('2d');
[23:05:07][Step 1/1] | ^
[23:05:07][Step 1/1] 149 | context.font = font || getComputedStyle(document.body).font;
[23:05:07][Step 1/1] 150 | return context.measureText(text).width;
[23:05:07][Step 1/1] 151 | } catch (err) {
[23:05:07][Step 1/1]
[23:05:07][Step 1/1] at VirtualConsole.<anonymous> (node_modules/jest-environment-jsdom/build/index.js:63:23)
[23:05:07][Step 1/1] at module.exports (node_modules/jsdom/lib/jsdom/browser/not-implemented.js:12:26)
[23:05:07][Step 1/1] at HTMLCanvasElementImpl.getContext (node_modules/jsdom/lib/jsdom/living/nodes/HTMLCanvasElement-impl.js:42:5)
[23:05:07][Step 1/1] at HTMLCanvasElement.getContext (node_modules/jsdom/lib/jsdom/living/generated/HTMLCanvasElement.js:131:58)
[23:05:07][Step 1/1] at getContext (src/helpers/index.js:148:32)
[23:05:07][Step 1/1] at src/components/Common/WalletLabel.js:34:31
[23:05:07][Step 1/1] at flatten (node_modules/styled-components/dist/styled-components.cjs.js:1310:21)
[23:05:07][Step 1/1] at flatten (node_modules/styled-components/dist/styled-components.cjs.js:1290:16)
[23:05:07][Step 1/1] at ComponentStyle.generateAndInjectStyles (node_modules/styled-components/dist/styled-components.cjs.js:1497:19)
[23:05:07][Step 1/1] at StyledComponent.generateAndInjectStyles (node_modules/styled-components/dist/styled-components.cjs.js:2116:36)
[23:05:07][Step 1/1] at StyledComponent.renderInner (node_modules/styled-components/dist/styled-components.cjs.js:2021:33)
[23:05:07][Step 1/1] at updateContextConsumer (node_modules/react-dom/cjs/react-dom.development.js:21207:19)
[23:05:07][Step 1/1] at beginWork (node_modules/react-dom/cjs/react-dom.development.js:21652:14)
[23:05:07][Step 1/1] at beginWork$1 (node_modules/react-dom/cjs/react-dom.development.js:27426:14)
[23:05:07][Step 1/1] at performUnitOfWork (node_modules/react-dom/cjs/react-dom.development.js:26560:12)
[23:05:07][Step 1/1] at workLoopSync (node_modules/react-dom/cjs/react-dom.development.js:26466:5)
[23:05:07][Step 1/1] at renderRootSync (node_modules/react-dom/cjs/react-dom.development.js:26434:7)
[23:05:07][Step 1/1] at performConcurrentWorkOnRoot (node_modules/react-dom/cjs/react-dom.development.js:25738:74)
[23:05:07][Step 1/1] at workLoop (node_modules/scheduler/cjs/scheduler.development.js:266:34)
[23:05:07][Step 1/1] at flushWork (node_modules/scheduler/cjs/scheduler.development.js:239:14)
[23:05:07][Step 1/1] at performWorkUntilDeadline (node_modules/scheduler/cjs/scheduler.development.js:533:21)
[23:05:07][Step 1/1] at Timeout.task [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
[23:05:07][Step 1/1]
[23:05:07][Step 1/1] console.error
[23:05:07][Step 1/1] Error: Not implemented: HTMLCanvasElement.prototype.getContext (without installing the canvas npm package)
[23:05:07][Step 1/1] at module.exports (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/not-implemented.js:9:17)
[23:05:07][Step 1/1] at HTMLCanvasElementImpl.getContext (/work/cashtab/node_modules/jsdom/lib/jsdom/living/nodes/HTMLCanvasElement-impl.js:42:5)
[23:05:07][Step 1/1] at HTMLCanvasElement.getContext (/work/cashtab/node_modules/jsdom/lib/jsdom/living/generated/HTMLCanvasElement.js:131:58)
[23:05:07][Step 1/1] at getContext (/work/cashtab/src/helpers/index.js:148:32)
[23:05:07][Step 1/1] at /work/cashtab/src/components/Common/WalletLabel.js:34:31
[23:05:07][Step 1/1] at flatten (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:1310:21)
[23:05:07][Step 1/1] at flatten (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:1290:16)
[23:05:07][Step 1/1] at ComponentStyle.generateAndInjectStyles (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:1497:19)
[23:05:07][Step 1/1] at StyledComponent.generateAndInjectStyles (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:2116:36)
[23:05:07][Step 1/1] at StyledComponent.renderInner (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:2021:33)
[23:05:07][Step 1/1] at updateContextConsumer (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21207:19)
[23:05:07][Step 1/1] at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21652:14)
[23:05:07][Step 1/1] at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
[23:05:07][Step 1/1] at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
[23:05:07][Step 1/1] at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
[23:05:07][Step 1/1] at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
[23:05:07][Step 1/1] at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25738:74)
[23:05:07][Step 1/1] at workLoop (/work/cashtab/node_modules/scheduler/cjs/scheduler.development.js:266:34)
[23:05:07][Step 1/1] at flushWork (/work/cashtab/node_modules/scheduler/cjs/scheduler.development.js:239:14)
[23:05:07][Step 1/1] at performWorkUntilDeadline (/work/cashtab/node_modules/scheduler/cjs/scheduler.development.js:533:21)
[23:05:07][Step 1/1] at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
[23:05:07][Step 1/1] at listOnTimeout (node:internal/timers:573:17)
[23:05:07][Step 1/1] at processTimers (node:internal/timers:514:7) {
[23:05:07][Step 1/1] type: 'not implemented'
[23:05:07][Step 1/1] }
[23:05:07][Step 1/1]
[23:05:07][Step 1/1] 146 | try {
[23:05:07][Step 1/1] 147 | const canvas = document.createElement('canvas');
[23:05:07][Step 1/1] > 148 | const context = canvas.getContext('2d');
[23:05:07][Step 1/1] | ^
[23:05:07][Step 1/1] 149 | context.font = font || getComputedStyle(document.body).font;
[23:05:07][Step 1/1] 150 | return context.measureText(text).width;
[23:05:07][Step 1/1] 151 | } catch (err) {
[23:05:07][Step 1/1]
[23:05:07][Step 1/1] at VirtualConsole.<anonymous> (node_modules/jest-environment-jsdom/build/index.js:63:23)
[23:05:07][Step 1/1] at module.exports (node_modules/jsdom/lib/jsdom/browser/not-implemented.js:12:26)
[23:05:07][Step 1/1] at HTMLCanvasElementImpl.getContext (node_modules/jsdom/lib/jsdom/living/nodes/HTMLCanvasElement-impl.js:42:5)
[23:05:07][Step 1/1] at HTMLCanvasElement.getContext (node_modules/jsdom/lib/jsdom/living/generated/HTMLCanvasElement.js:131:58)
[23:05:07][Step 1/1] at getContext (src/helpers/index.js:148:32)
[23:05:07][Step 1/1] at src/components/Common/WalletLabel.js:34:31
[23:05:07][Step 1/1] at flatten (node_modules/styled-components/dist/styled-components.cjs.js:1310:21)
[23:05:07][Step 1/1] at flatten (node_modules/styled-components/dist/styled-components.cjs.js:1290:16)
[23:05:07][Step 1/1] at ComponentStyle.generateAndInjectStyles (node_modules/styled-components/dist/styled-components.cjs.js:1497:19)
[23:05:07][Step 1/1] at StyledComponent.generateAndInjectStyles (node_modules/styled-components/dist/styled-components.cjs.js:2116:36)
[23:05:07][Step 1/1] at StyledComponent.renderInner (node_modules/styled-components/dist/styled-components.cjs.js:2021:33)
[23:05:07][Step 1/1] at updateContextConsumer (node_modules/react-dom/cjs/react-dom.development.js:21207:19)
[23:05:07][Step 1/1] at beginWork (node_modules/react-dom/cjs/react-dom.development.js:21652:14)
[23:05:07][Step 1/1] at beginWork$1 (node_modules/react-dom/cjs/react-dom.development.js:27426:14)
[23:05:07][Step 1/1] at performUnitOfWork (node_modules/react-dom/cjs/react-dom.development.js:26560:12)
[23:05:07][Step 1/1] at workLoopSync (node_modules/react-dom/cjs/react-dom.development.js:26466:5)
[23:05:07][Step 1/1] at renderRootSync (node_modules/react-dom/cjs/react-dom.development.js:26434:7)
[23:05:07][Step 1/1] at performConcurrentWorkOnRoot (node_modules/react-dom/cjs/react-dom.development.js:25738:74)
[23:05:07][Step 1/1] at workLoop (node_modules/scheduler/cjs/scheduler.development.js:266:34)
[23:05:07][Step 1/1] at flushWork (node_modules/scheduler/cjs/scheduler.development.js:239:14)
[23:05:07][Step 1/1] at performWorkUntilDeadline (node_modules/scheduler/cjs/scheduler.development.js:533:21)
[23:05:07][Step 1/1] at Timeout.task [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
[23:05:07][Step 1/1]
[23:05:07][Step 1/1] console.error
[23:05:07][Step 1/1] Error: Not implemented: HTMLCanvasElement.prototype.getContext (without installing the canvas npm package)
[23:05:07][Step 1/1] at module.exports (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/not-implemented.js:9:17)
[23:05:07][Step 1/1] at HTMLCanvasElementImpl.getContext (/work/cashtab/node_modules/jsdom/lib/jsdom/living/nodes/HTMLCanvasElement-impl.js:42:5)
[23:05:07][Step 1/1] at HTMLCanvasElement.getContext (/work/cashtab/node_modules/jsdom/lib/jsdom/living/generated/HTMLCanvasElement.js:131:58)
[23:05:07][Step 1/1] at getContext (/work/cashtab/src/helpers/index.js:148:32)
[23:05:07][Step 1/1] at /work/cashtab/src/components/Common/WalletLabel.js:34:31
[23:05:07][Step 1/1] at flatten (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:1310:21)
[23:05:07][Step 1/1] at flatten (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:1290:16)
[23:05:07][Step 1/1] at ComponentStyle.generateAndInjectStyles (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:1497:19)
[23:05:07][Step 1/1] at StyledComponent.generateAndInjectStyles (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:2116:36)
[23:05:07][Step 1/1] at StyledComponent.renderInner (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:2021:33)
[23:05:07][Step 1/1] at updateContextConsumer (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21207:19)
[23:05:07][Step 1/1] at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21652:14)
[23:05:07][Step 1/1] at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
[23:05:07][Step 1/1] at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
[23:05:07][Step 1/1] at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
[23:05:07][Step 1/1] at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
[23:05:07][Step 1/1] at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25738:74)
[23:05:07][Step 1/1] at workLoop (/work/cashtab/node_modules/scheduler/cjs/scheduler.development.js:266:34)
[23:05:07][Step 1/1] at flushWork (/work/cashtab/node_modules/scheduler/cjs/scheduler.development.js:239:14)
[23:05:07][Step 1/1] at performWorkUntilDeadline (/work/cashtab/node_modules/scheduler/cjs/scheduler.development.js:533:21)
[23:05:07][Step 1/1] at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
[23:05:07][Step 1/1] at listOnTimeout (node:internal/timers:573:17)
[23:05:07][Step 1/1] at processTimers (node:internal/timers:514:7) {
[23:05:07][Step 1/1] type: 'not implemented'
[23:05:07][Step 1/1] }
[23:05:07][Step 1/1]
[23:05:07][Step 1/1] 146 | try {
[23:05:07][Step 1/1] 147 | const canvas = document.createElement('canvas');
[23:05:07][Step 1/1] > 148 | const context = canvas.getContext('2d');
[23:05:07][Step 1/1] | ^
[23:05:07][Step 1/1] 149 | context.font = font || getComputedStyle(document.body).font;
[23:05:07][Step 1/1] 150 | return context.measureText(text).width;
[23:05:07][Step 1/1] 151 | } catch (err) {
[23:05:07][Step 1/1]
[23:05:07][Step 1/1] at VirtualConsole.<anonymous> (node_modules/jest-environment-jsdom/build/index.js:63:23)
[23:05:07][Step 1/1] at module.exports (node_modules/jsdom/lib/jsdom/browser/not-implemented.js:12:26)
[23:05:07][Step 1/1] at HTMLCanvasElementImpl.getContext (node_modules/jsdom/lib/jsdom/living/nodes/HTMLCanvasElement-impl.js:42:5)
[23:05:07][Step 1/1] at HTMLCanvasElement.getContext (node_modules/jsdom/lib/jsdom/living/generated/HTMLCanvasElement.js:131:58)
[23:05:07][Step 1/1] at getContext (src/helpers/index.js:148:32)
[23:05:07][Step 1/1] at src/components/Common/WalletLabel.js:34:31
[23:05:07][Step 1/1] at flatten (node_modules/styled-components/dist/styled-components.cjs.js:1310:21)
[23:05:07][Step 1/1] at flatten (node_modules/styled-components/dist/styled-components.cjs.js:1290:16)
[23:05:07][Step 1/1] at ComponentStyle.generateAndInjectStyles (node_modules/styled-components/dist/styled-components.cjs.js:1497:19)
[23:05:07][Step 1/1] at StyledComponent.generateAndInjectStyles (node_modules/styled-components/dist/styled-components.cjs.js:2116:36)
[23:05:07][Step 1/1] at StyledComponent.renderInner (node_modules/styled-components/dist/styled-components.cjs.js:2021:33)
[23:05:07][Step 1/1] at updateContextConsumer (node_modules/react-dom/cjs/react-dom.development.js:21207:19)
[23:05:07][Step 1/1] at beginWork (node_modules/react-dom/cjs/react-dom.development.js:21652:14)
[23:05:07][Step 1/1] at beginWork$1 (node_modules/react-dom/cjs/react-dom.development.js:27426:14)
[23:05:07][Step 1/1] at performUnitOfWork (node_modules/react-dom/cjs/react-dom.development.js:26560:12)
[23:05:07][Step 1/1] at workLoopSync (node_modules/react-dom/cjs/react-dom.development.js:26466:5)
[23:05:07][Step 1/1] at renderRootSync (node_modules/react-dom/cjs/react-dom.development.js:26434:7)
[23:05:07][Step 1/1] at performConcurrentWorkOnRoot (node_modules/react-dom/cjs/react-dom.development.js:25738:74)
[23:05:07][Step 1/1] at workLoop (node_modules/scheduler/cjs/scheduler.development.js:266:34)
[23:05:07][Step 1/1] at flushWork (node_modules/scheduler/cjs/scheduler.development.js:239:14)
[23:05:07][Step 1/1] at performWorkUntilDeadline (node_modules/scheduler/cjs/scheduler.development.js:533:21)
[23:05:07][Step 1/1] at Timeout.task [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
[23:05:07][Step 1/1]
[23:05:07][Step 1/1] console.warn
[23:05:07][Step 1/1] [react-ga] ReactGA.initialize must be called first or GoogleAnalytics should be loaded manually
[23:05:07][Step 1/1]
[23:05:07][Step 1/1] 38 | ? // If you are not building the extension, export GA event tracking function
[23:05:07][Step 1/1] 39 | (category, action, label) => {
[23:05:07][Step 1/1] > 40 | ReactGA.event({
[23:05:07][Step 1/1] | ^
[23:05:07][Step 1/1] 41 | category: category,
[23:05:07][Step 1/1] 42 | action: action,
[23:05:07][Step 1/1] 43 | label: label,
[23:05:07][Step 1/1]
[23:05:07][Step 1/1] at warn (node_modules/react-ga/dist/react-ga.js:110:11)
[23:05:07][Step 1/1] at internalGa (node_modules/react-ga/dist/react-ga.js:211:47)
[23:05:07][Step 1/1] at _gaCommand (node_modules/react-ga/dist/react-ga.js:232:81)
[23:05:07][Step 1/1] at send (node_modules/react-ga/dist/react-ga.js:367:3)
[23:05:07][Step 1/1] at Object.event (node_modules/react-ga/dist/react-ga.js:577:5)
[23:05:07][Step 1/1] at event (src/components/Common/GoogleAnalytics.js:40:23)
[23:05:07][Step 1/1] at send (src/components/Send/SendXec.js:486:18)
[23:05:07][Step 1/1] at send (src/components/Send/SendXec.js:248:13)
[23:05:07][Step 1/1] at checkForConfirmationBeforeSendXec (src/components/Send/SendXec.js:1097:21)
[23:05:07][Step 1/1] at HTMLUnknownElement.callCallback (node_modules/react-dom/cjs/react-dom.development.js:4164:14)
[23:05:07][Step 1/1] at HTMLUnknownElement.callTheUserObjectsOperation (node_modules/jsdom/lib/jsdom/living/generated/EventListener.js:26:30)
[23:05:07][Step 1/1] at innerInvokeEventListeners (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:350:25)
[23:05:07][Step 1/1] at invokeEventListeners (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:286:3)
[23:05:07][Step 1/1] at HTMLUnknownElementImpl._dispatch (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:233:9)
[23:05:07][Step 1/1] at HTMLUnknownElementImpl.dispatchEvent (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:104:17)
[23:05:07][Step 1/1] at HTMLUnknownElement.dispatchEvent (node_modules/jsdom/lib/jsdom/living/generated/EventTarget.js:241:34)
[23:05:07][Step 1/1] at Object.invokeGuardedCallbackDev (node_modules/react-dom/cjs/react-dom.development.js:4213:16)
[23:05:07][Step 1/1] at invokeGuardedCallback (node_modules/react-dom/cjs/react-dom.development.js:4277:31)
[23:05:07][Step 1/1] at invokeGuardedCallbackAndCatchFirstError (node_modules/react-dom/cjs/react-dom.development.js:4291:25)
[23:05:07][Step 1/1] at executeDispatch (node_modules/react-dom/cjs/react-dom.development.js:9041:3)
[23:05:07][Step 1/1] at processDispatchQueueItemsInOrder (node_modules/react-dom/cjs/react-dom.development.js:9073:7)
[23:05:07][Step 1/1] at processDispatchQueue (node_modules/react-dom/cjs/react-dom.development.js:9086:5)
[23:05:07][Step 1/1] at dispatchEventsForPlugins (node_modules/react-dom/cjs/react-dom.development.js:9097:3)
[23:05:07][Step 1/1] at node_modules/react-dom/cjs/react-dom.development.js:9288:12
[23:05:07][Step 1/1] at batchedUpdates$1 (node_modules/react-dom/cjs/react-dom.development.js:26140:12)
[23:05:07][Step 1/1] at batchedUpdates (node_modules/react-dom/cjs/react-dom.development.js:3991:12)
[23:05:07][Step 1/1] at dispatchEventForPluginEventSystem (node_modules/react-dom/cjs/react-dom.development.js:9287:3)
[23:05:07][Step 1/1] at dispatchEventWithEnableCapturePhaseSelectiveHydrationWithoutDiscreteEventReplay (node_modules/react-dom/cjs/react-dom.development.js:6465:5)
[23:05:07][Step 1/1] at dispatchEvent (node_modules/react-dom/cjs/react-dom.development.js:6457:5)
[23:05:07][Step 1/1] at dispatchDiscreteEvent (node_modules/react-dom/cjs/react-dom.development.js:6430:5)
[23:05:07][Step 1/1] at HTMLDivElement.callTheUserObjectsOperation (node_modules/jsdom/lib/jsdom/living/generated/EventListener.js:26:30)
[23:05:07][Step 1/1] at innerInvokeEventListeners (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:350:25)
[23:05:07][Step 1/1] at invokeEventListeners (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:286:3)
[23:05:07][Step 1/1] at HTMLButtonElementImpl._dispatch (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:233:9)
[23:05:07][Step 1/1] at HTMLButtonElementImpl.dispatchEvent (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:104:17)
[23:05:07][Step 1/1] at HTMLButtonElement.dispatchEvent (node_modules/jsdom/lib/jsdom/living/generated/EventTarget.js:241:34)
[23:05:07][Step 1/1] at node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:45:43
[23:05:07][Step 1/1] at node_modules/@testing-library/react/dist/pure.js:108:16
[23:05:07][Step 1/1] at node_modules/@testing-library/react/dist/act-compat.js:47:24
[23:05:07][Step 1/1] at act (node_modules/react/cjs/react.development.js:2512:16)
[23:05:07][Step 1/1] at node_modules/@testing-library/react/dist/act-compat.js:46:25
[23:05:07][Step 1/1] at Object.eventWrapper (node_modules/@testing-library/react/dist/pure.js:107:28)
[23:05:07][Step 1/1] at Object.wrapEvent (node_modules/@testing-library/user-event/dist/cjs/event/wrapEvent.js:6:28)
[23:05:07][Step 1/1] at Object.dispatchEvent (node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:45:22)
[23:05:07][Step 1/1] at Object.dispatchUIEvent (node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:22:26)
[23:05:07][Step 1/1] at Mouse.up (node_modules/@testing-library/user-event/dist/cjs/system/pointer/mouse.js:100:30)
[23:05:07][Step 1/1] at PointerHost.release (node_modules/@testing-library/user-event/dist/cjs/system/pointer/index.js:84:28)
[23:05:07][Step 1/1] at pointerAction (node_modules/@testing-library/user-event/dist/cjs/pointer/index.js:59:47)
[23:05:07][Step 1/1] at Object.pointer (node_modules/@testing-library/user-event/dist/cjs/pointer/index.js:32:9)
[23:05:07][Step 1/1] at Object.asyncWrapper (node_modules/@testing-library/react/dist/pure.js:88:22)
[23:05:07][Step 1/1] at Object.<anonymous> (src/components/Send/__tests__/SendXec.test.js:1623:9)
[23:05:07][Step 1/1]
[23:05:07][Step 1/1] console.warn
[23:05:07][Step 1/1] Deprecation Warning: TransactionBuilder will be removed in the future. (v6.x.x or later) Please use the Psbt class instead. Examples of usage are available in the transactions-psbt.js integration test file on our Github. A high level explanation is available in the psbt.ts and psbt.js files as well.
[23:05:07][Step 1/1]
[23:05:07][Step 1/1] 78 |
[23:05:07][Step 1/1] 79 | // Initialize TransactionBuilder
[23:05:07][Step 1/1] > 80 | let txBuilder = utxolib.bitgo.createTransactionBuilderForNetwork(
[23:05:07][Step 1/1] | ^
[23:05:07][Step 1/1] 81 | utxolib.networks.ecash,
[23:05:07][Step 1/1] 82 | );
[23:05:07][Step 1/1] 83 |
[23:05:07][Step 1/1]
[23:05:07][Step 1/1] at new TransactionBuilder (node_modules/@bitgo/utxo-lib/src/transaction_builder.ts:172:13)
[23:05:07][Step 1/1] at new UtxoTransactionBuilder (node_modules/@bitgo/utxo-lib/src/bitgo/UtxoTransactionBuilder.ts:24:5)
[23:05:07][Step 1/1] at Object.createTransactionBuilderForNetwork (node_modules/@bitgo/utxo-lib/src/bitgo/transaction.ts:257:13)
[23:05:07][Step 1/1] at createTransactionBuilderForNetwork (src/transactions/index.js:80:35)
[23:05:07][Step 1/1] at send (src/components/Send/SendXec.js:491:40)
[23:05:07][Step 1/1] at send (src/components/Send/SendXec.js:248:13)
[23:05:07][Step 1/1] at checkForConfirmationBeforeSendXec (src/components/Send/SendXec.js:1097:21)
[23:05:07][Step 1/1] at HTMLUnknownElement.callCallback (node_modules/react-dom/cjs/react-dom.development.js:4164:14)
[23:05:07][Step 1/1] at HTMLUnknownElement.callTheUserObjectsOperation (node_modules/jsdom/lib/jsdom/living/generated/EventListener.js:26:30)
[23:05:07][Step 1/1] at innerInvokeEventListeners (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:350:25)
[23:05:07][Step 1/1] at invokeEventListeners (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:286:3)
[23:05:07][Step 1/1] at HTMLUnknownElementImpl._dispatch (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:233:9)
[23:05:07][Step 1/1] at HTMLUnknownElementImpl.dispatchEvent (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:104:17)
[23:05:07][Step 1/1] at HTMLUnknownElement.dispatchEvent (node_modules/jsdom/lib/jsdom/living/generated/EventTarget.js:241:34)
[23:05:07][Step 1/1] at Object.invokeGuardedCallbackDev (node_modules/react-dom/cjs/react-dom.development.js:4213:16)
[23:05:07][Step 1/1] at invokeGuardedCallback (node_modules/react-dom/cjs/react-dom.development.js:4277:31)
[23:05:07][Step 1/1] at invokeGuardedCallbackAndCatchFirstError (node_modules/react-dom/cjs/react-dom.development.js:4291:25)
[23:05:07][Step 1/1] at executeDispatch (node_modules/react-dom/cjs/react-dom.development.js:9041:3)
[23:05:07][Step 1/1] at processDispatchQueueItemsInOrder (node_modules/react-dom/cjs/react-dom.development.js:9073:7)
[23:05:07][Step 1/1] at processDispatchQueue (node_modules/react-dom/cjs/react-dom.development.js:9086:5)
[23:05:07][Step 1/1] at dispatchEventsForPlugins (node_modules/react-dom/cjs/react-dom.development.js:9097:3)
[23:05:07][Step 1/1] at node_modules/react-dom/cjs/react-dom.development.js:9288:12
[23:05:07][Step 1/1] at batchedUpdates$1 (node_modules/react-dom/cjs/react-dom.development.js:26140:12)
[23:05:07][Step 1/1] at batchedUpdates (node_modules/react-dom/cjs/react-dom.development.js:3991:12)
[23:05:07][Step 1/1] at dispatchEventForPluginEventSystem (node_modules/react-dom/cjs/react-dom.development.js:9287:3)
[23:05:07][Step 1/1] at dispatchEventWithEnableCapturePhaseSelectiveHydrationWithoutDiscreteEventReplay (node_modules/react-dom/cjs/react-dom.development.js:6465:5)
[23:05:07][Step 1/1] at dispatchEvent (node_modules/react-dom/cjs/react-dom.development.js:6457:5)
[23:05:07][Step 1/1] at dispatchDiscreteEvent (node_modules/react-dom/cjs/react-dom.development.js:6430:5)
[23:05:07][Step 1/1] at HTMLDivElement.callTheUserObjectsOperation (node_modules/jsdom/lib/jsdom/living/generated/EventListener.js:26:30)
[23:05:07][Step 1/1] at innerInvokeEventListeners (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:350:25)
[23:05:07][Step 1/1] at invokeEventListeners (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:286:3)
[23:05:07][Step 1/1] at HTMLButtonElementImpl._dispatch (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:233:9)
[23:05:07][Step 1/1] at HTMLButtonElementImpl.dispatchEvent (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:104:17)
[23:05:07][Step 1/1] at HTMLButtonElement.dispatchEvent (node_modules/jsdom/lib/jsdom/living/generated/EventTarget.js:241:34)
[23:05:07][Step 1/1] at node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:45:43
[23:05:07][Step 1/1] at node_modules/@testing-library/react/dist/pure.js:108:16
[23:05:07][Step 1/1] at node_modules/@testing-library/react/dist/act-compat.js:47:24
[23:05:07][Step 1/1] at act (node_modules/react/cjs/react.development.js:2512:16)
[23:05:07][Step 1/1] at node_modules/@testing-library/react/dist/act-compat.js:46:25
[23:05:07][Step 1/1] at Object.eventWrapper (node_modules/@testing-library/react/dist/pure.js:107:28)
[23:05:07][Step 1/1] at Object.wrapEvent (node_modules/@testing-library/user-event/dist/cjs/event/wrapEvent.js:6:28)
[23:05:07][Step 1/1] at Object.dispatchEvent (node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:45:22)
[23:05:07][Step 1/1] at Object.dispatchUIEvent (node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:22:26)
[23:05:07][Step 1/1] at Mouse.up (node_modules/@testing-library/user-event/dist/cjs/system/pointer/mouse.js:100:30)
[23:05:07][Step 1/1] at PointerHost.release (node_modules/@testing-library/user-event/dist/cjs/system/pointer/index.js:84:28)
[23:05:07][Step 1/1] at pointerAction (node_modules/@testing-library/user-event/dist/cjs/pointer/index.js:59:47)
[23:05:07][Step 1/1] at Object.pointer (node_modules/@testing-library/user-event/dist/cjs/pointer/index.js:32:9)
[23:05:07][Step 1/1] at Object.asyncWrapper (node_modules/@testing-library/react/dist/pure.js:88:22)
[23:05:07][Step 1/1] at Object.<anonymous> (src/components/Send/__tests__/SendXec.test.js:1623:9)
[23:05:07][Step 1/1]
[23:05:07][Step 1/1] console.warn
[23:05:07][Step 1/1] DEPRECATED: TransactionBuilder sign method arguments will change in v6, please use the TxbSignArg interface
[23:05:07][Step 1/1]
[23:05:07][Step 1/1] 32 |
[23:05:07][Step 1/1] 33 | // Sign this input
[23:05:07][Step 1/1] > 34 | txBuilder.sign(
[23:05:07][Step 1/1] | ^
[23:05:07][Step 1/1] 35 | index, // vin
[23:05:07][Step 1/1] 36 | utxoECPair, // keyPair
[23:05:07][Step 1/1] 37 | undefined, // redeemScript
[23:05:07][Step 1/1]
[23:05:07][Step 1/1] at getSigningData (node_modules/@bitgo/utxo-lib/src/transaction_builder.ts:1299:13)
[23:05:07][Step 1/1] at UtxoTransactionBuilder.sign (node_modules/@bitgo/utxo-lib/src/transaction_builder.ts:278:7)
[23:05:07][Step 1/1] at UtxoTransactionBuilder.sign (node_modules/@bitgo/utxo-lib/src/bitgo/UtxoTransactionBuilder.ts:94:20)
[23:05:07][Step 1/1] at sign (src/transactions/index.js:34:19)
[23:05:07][Step 1/1] at Array.forEach (<anonymous>)
[23:05:07][Step 1/1] at forEach (src/transactions/index.js:19:12)
[23:05:07][Step 1/1] at signInputs (src/transactions/index.js:108:5)
[23:05:07][Step 1/1] at send (src/components/Send/SendXec.js:491:40)
[23:05:07][Step 1/1] at send (src/components/Send/SendXec.js:248:13)
[23:05:07][Step 1/1] at checkForConfirmationBeforeSendXec (src/components/Send/SendXec.js:1097:21)
[23:05:07][Step 1/1] at HTMLUnknownElement.callCallback (node_modules/react-dom/cjs/react-dom.development.js:4164:14)
[23:05:07][Step 1/1] at HTMLUnknownElement.callTheUserObjectsOperation (node_modules/jsdom/lib/jsdom/living/generated/EventListener.js:26:30)
[23:05:07][Step 1/1] at innerInvokeEventListeners (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:350:25)
[23:05:07][Step 1/1] at invokeEventListeners (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:286:3)
[23:05:07][Step 1/1] at HTMLUnknownElementImpl._dispatch (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:233:9)
[23:05:07][Step 1/1] at HTMLUnknownElementImpl.dispatchEvent (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:104:17)
[23:05:07][Step 1/1] at HTMLUnknownElement.dispatchEvent (node_modules/jsdom/lib/jsdom/living/generated/EventTarget.js:241:34)
[23:05:07][Step 1/1] at Object.invokeGuardedCallbackDev (node_modules/react-dom/cjs/react-dom.development.js:4213:16)
[23:05:07][Step 1/1] at invokeGuardedCallback (node_modules/react-dom/cjs/react-dom.development.js:4277:31)
[23:05:07][Step 1/1] at invokeGuardedCallbackAndCatchFirstError (node_modules/react-dom/cjs/react-dom.development.js:4291:25)
[23:05:07][Step 1/1] at executeDispatch (node_modules/react-dom/cjs/react-dom.development.js:9041:3)
[23:05:07][Step 1/1] at processDispatchQueueItemsInOrder (node_modules/react-dom/cjs/react-dom.development.js:9073:7)
[23:05:07][Step 1/1] at processDispatchQueue (node_modules/react-dom/cjs/react-dom.development.js:9086:5)
[23:05:07][Step 1/1] at dispatchEventsForPlugins (node_modules/react-dom/cjs/react-dom.development.js:9097:3)
[23:05:07][Step 1/1] at node_modules/react-dom/cjs/react-dom.development.js:9288:12
[23:05:07][Step 1/1] at batchedUpdates$1 (node_modules/react-dom/cjs/react-dom.development.js:26140:12)
[23:05:07][Step 1/1] at batchedUpdates (node_modules/react-dom/cjs/react-dom.development.js:3991:12)
[23:05:07][Step 1/1] at dispatchEventForPluginEventSystem (node_modules/react-dom/cjs/react-dom.development.js:9287:3)
[23:05:07][Step 1/1] at dispatchEventWithEnableCapturePhaseSelectiveHydrationWithoutDiscreteEventReplay (node_modules/react-dom/cjs/react-dom.development.js:6465:5)
[23:05:07][Step 1/1] at dispatchEvent (node_modules/react-dom/cjs/react-dom.development.js:6457:5)
[23:05:07][Step 1/1] at dispatchDiscreteEvent (node_modules/react-dom/cjs/react-dom.development.js:6430:5)
[23:05:07][Step 1/1] at HTMLDivElement.callTheUserObjectsOperation (node_modules/jsdom/lib/jsdom/living/generated/EventListener.js:26:30)
[23:05:07][Step 1/1] at innerInvokeEventListeners (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:350:25)
[23:05:07][Step 1/1] at invokeEventListeners (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:286:3)
[23:05:07][Step 1/1] at HTMLButtonElementImpl._dispatch (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:233:9)
[23:05:07][Step 1/1] at HTMLButtonElementImpl.dispatchEvent (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:104:17)
[23:05:07][Step 1/1] at HTMLButtonElement.dispatchEvent (node_modules/jsdom/lib/jsdom/living/generated/EventTarget.js:241:34)
[23:05:07][Step 1/1] at node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:45:43
[23:05:07][Step 1/1] at node_modules/@testing-library/react/dist/pure.js:108:16
[23:05:07][Step 1/1] at node_modules/@testing-library/react/dist/act-compat.js:47:24
[23:05:07][Step 1/1] at act (node_modules/react/cjs/react.development.js:2512:16)
[23:05:07][Step 1/1] at node_modules/@testing-library/react/dist/act-compat.js:46:25
[23:05:07][Step 1/1] at Object.eventWrapper (node_modules/@testing-library/react/dist/pure.js:107:28)
[23:05:07][Step 1/1] at Object.wrapEvent (node_modules/@testing-library/user-event/dist/cjs/event/wrapEvent.js:6:28)
[23:05:07][Step 1/1] at Object.dispatchEvent (node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:45:22)
[23:05:07][Step 1/1] at Object.dispatchUIEvent (node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:22:26)
[23:05:07][Step 1/1] at Mouse.up (node_modules/@testing-library/user-event/dist/cjs/system/pointer/mouse.js:100:30)
[23:05:07][Step 1/1] at PointerHost.release (node_modules/@testing-library/user-event/dist/cjs/system/pointer/index.js:84:28)
[23:05:07][Step 1/1] at pointerAction (node_modules/@testing-library/user-event/dist/cjs/pointer/index.js:59:47)
[23:05:07][Step 1/1] at Object.pointer (node_modules/@testing-library/user-event/dist/cjs/pointer/index.js:32:9)
[23:05:07][Step 1/1] at Object.asyncWrapper (node_modules/@testing-library/react/dist/pure.js:88:22)
[23:05:07][Step 1/1] at Object.<anonymous> (src/components/Send/__tests__/SendXec.test.js:1623:9)
[23:05:07][Step 1/1]
[23:05:07][Step 1/1] ----------------------------------------|---------|----------|---------|---------|------------------------------------------------------------------------------------------------------
[23:05:07][Step 1/1] File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
[23:05:07][Step 1/1] ----------------------------------------|---------|----------|---------|---------|------------------------------------------------------------------------------------------------------
[23:05:07][Step 1/1] All files | 82.96 | 78.65 | 75.67 | 83.09 |
[23:05:07][Step 1/1] src | 2.98 | 5.35 | 4.76 | 2.98 |
[23:05:07][Step 1/1] index.js | 0 | 0 | 100 | 0 | 13-27
[23:05:07][Step 1/1] service-worker.js | 0 | 0 | 0 | 0 | 18-88
[23:05:07][Step 1/1] serviceWorkerRegistration.js | 5.12 | 9.37 | 6.25 | 5.12 | 30-143
[23:05:07][Step 1/1] src/airdrop | 97.87 | 95.74 | 100 | 97.87 |
[23:05:07][Step 1/1] index.js | 97.87 | 95.74 | 100 | 97.87 | 117,181
[23:05:07][Step 1/1] src/airdrop/fixtures | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] mocks.js | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] vectors.js | 0 | 0 | 0 | 0 |
[23:05:07][Step 1/1] src/alias | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] index.js | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] src/alias/fixtures | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] mocks.js | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] src/assets/styles | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] theme.js | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] src/chronik | 90.25 | 89.58 | 72.72 | 90.84 |
[23:05:07][Step 1/1] index.js | 90.25 | 89.58 | 72.72 | 90.84 | 17-24,37-46,53-62,307
[23:05:07][Step 1/1] src/chronik/fixtures | 100 | 50 | 100 | 100 |
[23:05:07][Step 1/1] chronikUtxos.js | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] mocks.js | 100 | 50 | 100 | 100 | 17358-18642
[23:05:07][Step 1/1] vectors.js | 0 | 0 | 0 | 0 |
[23:05:07][Step 1/1] src/components/Airdrop | 85.06 | 87.01 | 86.2 | 85.03 |
[23:05:07][Step 1/1] Airdrop.js | 85.06 | 87.01 | 86.2 | 85.03 | 107-111,137,162,192,241-245,250,255-260,276-281,310-311,323,337,445,573
[23:05:07][Step 1/1] src/components/Alias | 48.78 | 35.05 | 42.85 | 49.37 |
[23:05:07][Step 1/1] Alias.js | 48.78 | 35.05 | 42.85 | 49.37 | 88,93,97,106-110,166,196-217,229,238-243,247-305,309-310,314,318-391,395-406,436,443-446,515-568,633
[23:05:07][Step 1/1] src/components/Alias/fixtures | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] mocks.js | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] src/components/App | 97.08 | 91.56 | 94.91 | 97.05 |
[23:05:07][Step 1/1] App.js | 92.5 | 89.47 | 83.33 | 92.3 | 108,424,538
[23:05:07][Step 1/1] NotFound.js | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] styles.js | 100 | 96.15 | 100 | 100 | 327
[23:05:07][Step 1/1] src/components/App/fixtures | 92.91 | 82.19 | 94.44 | 92.91 |
[23:05:07][Step 1/1] CashtabTestWrapper.js | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] helpers.js | 89.02 | 82.85 | 87.5 | 89.02 | 90-117,254
[23:05:07][Step 1/1] mocks.js | 100 | 50 | 100 | 100 | 2263
[23:05:07][Step 1/1] vectors.js | 0 | 0 | 0 | 0 |
[23:05:07][Step 1/1] src/components/AppModes | 14.77 | 8.82 | 18.18 | 14.94 |
[23:05:07][Step 1/1] Extension.js | 4 | 0 | 0 | 4 | 13-131
[23:05:07][Step 1/1] WebApp.js | 28.94 | 13.04 | 40 | 29.72 | 20-41,50-76,89-91,96-98
[23:05:07][Step 1/1] src/components/BackupWallet | 92.85 | 50 | 66.66 | 92.85 |
[23:05:07][Step 1/1] BackupWallet.js | 92.85 | 50 | 66.66 | 92.85 | 74
[23:05:07][Step 1/1] src/components/Common | 83.63 | 63.39 | 78.87 | 83.04 |
[23:05:07][Step 1/1] ApiError.js | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] Atoms.js | 86.36 | 100 | 66.66 | 86.36 | 9,50,84
[23:05:07][Step 1/1] AvalancheFinalized.js | 100 | 66.66 | 100 | 100 | 66
[23:05:07][Step 1/1] BalanceHeader.js | 100 | 75.75 | 100 | 100 | 19-28,55-57,62,75
[23:05:07][Step 1/1] BalanceHeaderToken.js | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] Buttons.js | 100 | 76.92 | 100 | 100 | 64,95-146,153-157
[23:05:07][Step 1/1] CopyToClipboard.js | 77.77 | 62.5 | 100 | 77.77 | 27-30
[23:05:07][Step 1/1] CustomIcons.js | 96.84 | 100 | 93.33 | 97.18 | 110,125
[23:05:07][Step 1/1] ExtensionHeader.js | 63.63 | 100 | 0 | 63.63 | 50-57
[23:05:07][Step 1/1] GoogleAnalytics.js | 42.85 | 40 | 14.28 | 42.85 | 14-16,23-33
[23:05:07][Step 1/1] HideBalanceSwitch.js | 80 | 100 | 50 | 80 | 14
[23:05:07][Step 1/1] Inputs.js | 84.42 | 49.51 | 84.31 | 84.29 | 304,447,472-482,551-558,563-567,573-575,583
[23:05:07][Step 1/1] Modal.js | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] ScanQRCode.js | 63.63 | 45 | 75 | 63.63 | 38,56-102,117
[23:05:07][Step 1/1] Seed.js | 46.15 | 100 | 0 | 46.15 | 23-40
[23:05:07][Step 1/1] ServiceWorkerWrapper.js | 57.14 | 50 | 40 | 57.14 | 15-16,24-26,33
[23:05:07][Step 1/1] Spinner.js | 92.3 | 100 | 80 | 92.3 | 103
[23:05:07][Step 1/1] Switch.js | 100 | 92.3 | 100 | 100 | 105,109
[23:05:07][Step 1/1] UpgradeModal.js | 39.13 | 0 | 0 | 39.13 | 26,43-45,49-52,55-60,69-73,78
[23:05:07][Step 1/1] WalletHeaderActions.js | 100 | 0 | 100 | 100 | 22
[23:05:07][Step 1/1] WalletLabel.js | 65.38 | 60 | 75 | 65.38 | 70-92,101
[23:05:07][Step 1/1] src/components/Configure | 96.77 | 87.5 | 90.9 | 96.77 |
[23:05:07][Step 1/1] Configure.js | 96.77 | 87.5 | 90.9 | 96.77 | 115
[23:05:07][Step 1/1] src/components/Contacts | 82.02 | 87.17 | 82.14 | 80.48 |
[23:05:07][Step 1/1] index.js | 80 | 87.17 | 80 | 78.08 | 117,158,185-208,218-239,347
[23:05:07][Step 1/1] styles.js | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] src/components/Etokens | 100 | 66.66 | 100 | 100 |
[23:05:07][Step 1/1] CreateToken.js | 100 | 75 | 100 | 100 | 30-36
[23:05:07][Step 1/1] Etokens.js | 100 | 62.5 | 100 | 100 | 36-55
[23:05:07][Step 1/1] TokenIcon.js | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] TokenList.js | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] TokenListItem.js | 100 | 50 | 100 | 100 | 52
[23:05:07][Step 1/1] src/components/Etokens/CreateTokenForm | 48.74 | 47.43 | 39.02 | 47.89 |
[23:05:07][Step 1/1] index.js | 44.38 | 47.43 | 35.29 | 43.19 | 123,127-156,161,165-245,250-264,311-316,349,360-363,380-430,438,492-495,506,606-645
[23:05:07][Step 1/1] styles.js | 85.71 | 100 | 57.14 | 85.71 | 25-27,47
[23:05:07][Step 1/1] src/components/Etokens/Token | 85.11 | 81.81 | 71.79 | 84.76 |
[23:05:07][Step 1/1] index.js | 83.91 | 81.81 | 69.44 | 83.5 | 128,140,248,269,281,333-334,420-430,435-437,447,455-456,460,500,510,563-565,585,618,651-712,830,918
[23:05:07][Step 1/1] styled.js | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] src/components/Etokens/fixtures | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] mocks.js | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] src/components/Etokens/icons | 2.56 | 0 | 0 | 2.77 |
[23:05:07][Step 1/1] cropImage.js | 2.32 | 0 | 0 | 2.5 | 6-81
[23:05:07][Step 1/1] resizeImage.js | 2.77 | 0 | 0 | 3.03 | 6-55
[23:05:07][Step 1/1] roundImage.js | 2.63 | 0 | 0 | 2.85 | 6-60
[23:05:07][Step 1/1] src/components/Home | 59.45 | 57.89 | 21.05 | 59.45 |
[23:05:07][Step 1/1] Home.js | 54.54 | 61.11 | 11.76 | 54.54 | 30-50,65-81,91-108
[23:05:07][Step 1/1] TxHistory.js | 100 | 0 | 100 | 100 | 17
[23:05:07][Step 1/1] src/components/Home/Tx | 95.21 | 93.22 | 93.33 | 95.12 |
[23:05:07][Step 1/1] index.js | 92.95 | 93.14 | 81.25 | 92.75 | 125,179-190,494-501,634,719,722
[23:05:07][Step 1/1] styles.js | 100 | 94.11 | 100 | 100 | 187
[23:05:07][Step 1/1] src/components/Home/fixtures | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] mocks.js | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] src/components/OnBoarding | 83.87 | 83.33 | 83.33 | 83.33 |
[23:05:07][Step 1/1] OnBoarding.js | 83.87 | 83.33 | 83.33 | 83.33 | 53,65-67,95
[23:05:07][Step 1/1] src/components/Receive | 97.01 | 96 | 91.66 | 96.92 |
[23:05:07][Step 1/1] QRCode.js | 97.5 | 100 | 93.75 | 97.43 | 126
[23:05:07][Step 1/1] Receive.js | 100 | 91.66 | 100 | 100 | 29
[23:05:07][Step 1/1] useWindowDimensions.js | 88.88 | 100 | 80 | 87.5 | 25
[23:05:07][Step 1/1] src/components/Rewards | 91.93 | 80 | 100 | 91.8 |
[23:05:07][Step 1/1] index.js | 91.8 | 80 | 100 | 91.66 | 60,72,86,99,123
[23:05:07][Step 1/1] styles.js | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] src/components/Send | 92.62 | 84.51 | 93.18 | 92.43 |
[23:05:07][Step 1/1] SendXec.js | 92.62 | 84.51 | 93.18 | 92.43 | 258,295-308,416-428,444,471,523-526,702,743,962,1001,1021
[23:05:07][Step 1/1] src/components/Send/fixtures | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] mocks.js | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] src/components/SignVerifyMsg | 88.23 | 69.56 | 90.9 | 89.36 |
[23:05:07][Step 1/1] SignVerifyMsg.js | 88.23 | 69.56 | 90.9 | 89.36 | 98-99,128-129,154
[23:05:07][Step 1/1] src/components/Swap | 80 | 50 | 50 | 80 |
[23:05:07][Step 1/1] Swap.js | 80 | 50 | 50 | 80 | 21
[23:05:07][Step 1/1] src/components/Wallets | 92.5 | 92.1 | 90 | 92.1 |
[23:05:07][Step 1/1] index.js | 91.08 | 92.1 | 87.5 | 90.52 | 128,223-230,268,304-346,389
[23:05:07][Step 1/1] styles.js | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] src/config | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] CashtabCache.js | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] CashtabState.js | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] alias.js | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] app.js | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] cashtabSettings.js | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] chronik.js | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] explorer.js | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] opreturn.js | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] token.js | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] tokenBlacklist.js | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] src/helpers | 97.14 | 92.85 | 100 | 97.14 |
[23:05:07][Step 1/1] index.js | 97.14 | 92.85 | 100 | 97.14 | 150
[23:05:07][Step 1/1] src/helpers/fixtures | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] mocks.js | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] vectors.js | 0 | 0 | 0 | 0 |
[23:05:07][Step 1/1] src/opreturn | 96.8 | 94.44 | 100 | 96.8 |
[23:05:07][Step 1/1] index.js | 96.8 | 94.44 | 100 | 96.8 | 152,168-169,304
[23:05:07][Step 1/1] src/opreturn/fixtures | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] vectors.js | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] src/slpv1 | 97.12 | 92.94 | 100 | 97.1 |
[23:05:07][Step 1/1] index.js | 97.12 | 92.94 | 100 | 97.1 | 280,291,343,347,352
[23:05:07][Step 1/1] src/slpv1/fixtures | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] mocks.js | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] vectors.js | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] src/transactions | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] index.js | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] src/transactions/fixtures | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] mocks.js | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] vectors.js | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] src/utils | 92.06 | 92 | 100 | 92.06 |
[23:05:07][Step 1/1] cashMethods.js | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] formatting.js | 91.07 | 90.47 | 100 | 91.07 | 20,30,53-55
[23:05:07][Step 1/1] src/utils/fixtures | 0 | 0 | 0 | 0 |
[23:05:07][Step 1/1] vectors.js | 0 | 0 | 0 | 0 |
[23:05:07][Step 1/1] src/validation | 96.17 | 97.19 | 100 | 96.46 |
[23:05:07][Step 1/1] index.js | 96.17 | 97.19 | 100 | 96.46 | 118-119,277,309,329,376,574,670-671,805,810
[23:05:07][Step 1/1] src/validation/fixtures | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] mocks.js | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] vectors.js | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] src/wallet | 94.69 | 85.5 | 87.5 | 95.11 |
[23:05:07][Step 1/1] context.js | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] index.js | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] useWallet.js | 92.25 | 79.72 | 79.41 | 92.85 | 86,159,451-457,494,564,650,678,715-716,725-738,794,825,831-834,902,968-969,996
[23:05:07][Step 1/1] src/wallet/fixtures | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] mocks.js | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] vectors.js | 100 | 100 | 100 | 100 |
[23:05:07][Step 1/1] ----------------------------------------|---------|----------|---------|---------|------------------------------------------------------------------------------------------------------
[23:05:07][Step 1/1]
[23:05:07][Step 1/1] Code Coverage Summary
[23:05:07][Step 1/1] Summary of all failing tests
[23:05:07][Step 1/1] FAIL src/components/Home/Tx/__tests__/index.test.js (6.674 s)
[23:05:07][Step 1/1] ● <Tx /> › Received airdrop with msg (legacy push) with no token info in cache
[23:05:07][Step 1/1]
[23:05:07][Step 1/1] TestingLibraryElementError: Unable to find an element with the text: bdb3b4215ca0622e0c4c07655522c376eaa891838a82f0217fa453bb0595a37c. 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.
[23:05:07][Step 1/1]
[23:05:07][Step 1/1] Ignored nodes: comments, script, style
[23:05:07][Step 1/1] <body>
[23:05:07][Step 1/1] <div>
[23:05:07][Step 1/1] <div
[23:05:07][Step 1/1] class="sc-bdVaJa jjgtxs"
[23:05:07][Step 1/1] >
[23:05:07][Step 1/1] <div
[23:05:07][Step 1/1] class="sc-bwzfXH evareY"
[23:05:07][Step 1/1] >
[23:05:07][Step 1/1] <div
[23:05:07][Step 1/1] class="sc-htpNat fTPTBn"
[23:05:07][Step 1/1] type="Received"
[23:05:07][Step 1/1] >
[23:05:07][Step 1/1] <div
[23:05:07][Step 1/1] class="sc-bxivhb cHJlww"
[23:05:07][Step 1/1] >
[23:05:07][Step 1/1] <svg
[23:05:07][Step 1/1] title="tx-received"
[23:05:07][Step 1/1] />
[23:05:07][Step 1/1] <div
[23:05:07][Step 1/1] class="sc-EHOje eTNtAZ"
[23:05:07][Step 1/1] >
[23:05:07][Step 1/1] <div
[23:05:07][Step 1/1] class="sc-gzVnrw heeZCw"
[23:05:07][Step 1/1] >
[23:05:07][Step 1/1] <div
[23:05:07][Step 1/1] class="sc-bZQynM kOWhJU"
[23:05:07][Step 1/1] >
[23:05:07][Step 1/1] Received
[23:05:07][Step 1/1] from
[23:05:07][Step 1/1] <a
[23:05:07][Step 1/1] class="sc-kGXeez fCnRQr"
[23:05:07][Step 1/1] rel="noreferrer"
[23:05:07][Step 1/1] target="_blank"
[23:05:07][Step 1/1] >
[23:05:07][Step 1/1] qp3...fwd
[23:05:07][Step 1/1] </a>
[23:05:07][Step 1/1] </div>
[23:05:07][Step 1/1] <div
[23:05:07][Step 1/1] class="sc-hwwEjo cQMDVj"
[23:05:07][Step 1/1] >
[23:05:07][Step 1/1] <svg
[23:05:07][Step 1/1] class="sc-kPVwWT jkJnoM"
[23:05:07][Step 1/1] title="Finalized by Avalanche"
[23:05:07][Step 1/1] viewBox="0 0 52 52"
[23:05:07][Step 1/1] xmlns="http://www.w3.org/2000/svg"
[23:05:07][Step 1/1] >
[23:05:07][Step 1/1] <circle
[23:05:07][Step 1/1] class="sc-kfGgVZ eVBTzZ"
[23:05:07][Step 1/1] cx="26"
[23:05:07][Step 1/1] ##teamcity[importData timestamp='2024-04-18T23:05:07.643' path='results/artifacts/junit/*.xml' type='junit']
[23:05:07][Step 1/1] Importing data from 'results/artifacts/junit/*.xml' (not existing file) with 'junit' processor
[23:05:07][Step 1/1] Publishing artifacts (2s)
[23:05:07][Publishing artifacts] Collecting files to publish: [+:results/artifacts=>artifacts.tar.gz]
[23:05:07][Step 1/1] Ant JUnit report watcher
[23:05:07][Ant JUnit report watcher] Watching paths:
[23:05:07][Ant JUnit report watcher] /home/teamcity/buildAgent/work/jailed-build/results/artifacts/junit/*.xml
[23:05:07][Publishing artifacts] Creating archive artifacts.tar.gz
[23:05:07][Creating archive artifacts.tar.gz] Creating /home/teamcity/buildAgent/temp/buildTmp/TarPreprocessor3090397625089472263/artifacts.tar.gz
[23:05:07][Step 1/1] CashTab Unit Tests
[23:05:07][CashTab Unit Tests] slpv1 methods Generating etoken genesis tx target outputs getSlpGenesisTargetOutput: Fixed supply eToken mint for token with decimals
[23:05:07][CashTab Unit Tests] slpv1 methods Generating etoken genesis tx target outputs getSlpGenesisTargetOutput: Variable supply eToken mint for token with decimals
[23:05:07][CashTab Unit Tests] slpv1 methods Generating etoken genesis tx target outputs getSlpGenesisTargetOutput: Fixed supply eToken mint for tokenId 50d8292c6255cda7afc6c8566fed3cf42a2794e9619740fe8f4c95431271410e
[23:05:07][CashTab Unit Tests] slpv1 methods Generating etoken genesis tx target outputs getSlpGenesisTargetOutput: Fixed supply eToken mint at max supply for 9 decimal token
[23:05:07][CashTab Unit Tests] slpv1 methods Generating etoken genesis tx target outputs getSlpGenesisTargetOutput: Variable supply eToken mint at max supply for 0 decimal token
[23:05:07][CashTab Unit Tests] slpv1 methods Generating etoken genesis tx target outputs getSlpGenesisTargetOutput throws error for: Variable supply eToken with mint baton at index other than 2
[23:05:07][CashTab Unit Tests] slpv1 methods Generating etoken genesis tx target outputs getSlpGenesisTargetOutput throws error for: Exceed 0xffffffffffffffff for genesis qty
[23:05:07][CashTab Unit Tests] slpv1 methods Generating etoken genesis tx target outputs getSlpGenesisTargetOutput throws error for: Invalid document hash
[23:05:07][CashTab Unit Tests] slpv1 methods Generating etoken genesis tx target outputs getSlpGenesisTargetOutput throws error for: Missing decimals
[23:05:07][CashTab Unit Tests] slpv1 methods Generating etoken genesis tx target outputs getSlpGenesisTargetOutput throws error for: Non-string name
[23:05:07][CashTab Unit Tests] slpv1 methods Get all slpv1 SEND utxos from a mixed utxo set from ChronikClientNode getAllSendUtxos: In-node: We can get a single token utxo from an array including other token utxos and non-token utxos
[23:05:07][CashTab Unit Tests] slpv1 methods Get all slpv1 SEND utxos from a mixed utxo set from ChronikClientNode getAllSendUtxos: In-node: We can get a multiple token utxos from an array including other token utxos and non-token utxos
[23:05:07][CashTab Unit Tests] slpv1 methods Get all slpv1 SEND utxos from a mixed utxo set from ChronikClientNode getAllSendUtxos: We return an empty array if no matches are found from a bad tokenId
[23:05:07][CashTab Unit Tests] slpv1 methods Get all slpv1 SEND utxos from a mixed utxo set from ChronikClientNode getAllSendUtxos: In-node: We return an empty array if we have no tokenUtxos for a given tokenId
[23:05:07][CashTab Unit Tests] slpv1 methods Get slpv1 send token inputs and outputs from in-node chronik-client getSendTokenInputs: Token send with change output
[23:05:07][CashTab Unit Tests] slpv1 methods Get slpv1 send token inputs and outputs from in-node chronik-client getSlpSendTargetOutputs with in-node inputs: Token send with change output
[23:05:07][CashTab Unit Tests] slpv1 methods Get slpv1 send token inputs and outputs from in-node chronik-client getSendTokenInputs: Token send with no change output
[23:05:07][CashTab Unit Tests] slpv1 methods Get slpv1 send token inputs and outputs from in-node chronik-client getSlpSendTargetOutputs with in-node inputs: Token send with no change output
[23:05:07][CashTab Unit Tests] slpv1 methods Get slpv1 send token inputs and outputs from in-node chronik-client getSendTokenInputs: Token send with decimals and change output
[23:05:07][CashTab Unit Tests] slpv1 methods Get slpv1 send token inputs and outputs from in-node chronik-client getSlpSendTargetOutputs with in-node inputs: Token send with decimals and change output
[23:05:07][CashTab Unit Tests] slpv1 methods Get slpv1 send token inputs and outputs from in-node chronik-client getSlpBurnTargetOutput throws error for: Sending more than utxos with decimals and change output
[23:05:07][CashTab Unit Tests] slpv1 methods Get slpv1 send token inputs and outputs from in-node chronik-client getSlpBurnTargetOutput throws error for: Sending more than utxos with no decimals
[23:05:07][CashTab Unit Tests] slpv1 methods Get slpv1 send token inputs and outputs from in-node chronik-client getSlpBurnTargetOutput throws error for: Invalid decimals
[23:05:07][CashTab Unit Tests] slpv1 methods Get slpv1 send token inputs and outputs from in-node chronik-client getSlpBurnTargetOutput throws error for: No token utxos
[23:05:07][CashTab Unit Tests] slpv1 methods Get slpv1 send token inputs and outputs from in-node chronik-client getSlpBurnTargetOutput throws error for: Send qty is empty string
[23:05:07][CashTab Unit Tests] slpv1 methods Get slpv1 send input utxos from in-node chronik-client getSendTokenInputs with in-node chronik utxos: Token send with change output
[23:05:07][CashTab Unit Tests] slpv1 methods Get slpv1 send input utxos from in-node chronik-client getSlpSendTargetOutputs with in-node inputs: Token send with change output
[23:05:07][CashTab Unit Tests] slpv1 methods Get slpv1 send input utxos from in-node chronik-client getSendTokenInputs with in-node chronik utxos: Token send with no change output
[23:05:07][CashTab Unit Tests] slpv1 methods Get slpv1 send input utxos from in-node chronik-client getSlpSendTargetOutputs with in-node inputs: Token send with no change output
[23:05:07][CashTab Unit Tests] slpv1 methods Get slpv1 send input utxos from in-node chronik-client getSendTokenInputs with in-node chronik utxos: Token send with decimals and change output
[23:05:07][CashTab Unit Tests] slpv1 methods Get slpv1 send input utxos from in-node chronik-client getSlpSendTargetOutputs with in-node inputs: Token send with decimals and change output
[23:05:07][CashTab Unit Tests] slpv1 methods Get slpv1 send input utxos from in-node chronik-client getSendTokenInputs with in-node chronik utxos throws error for: Sending more than utxos with decimals and change output
[23:05:07][CashTab Unit Tests] slpv1 methods Get slpv1 send input utxos from in-node chronik-client getSendTokenInputs with in-node chronik utxos throws error for: Sending more than utxos with no decimals
[23:05:07][CashTab Unit Tests] slpv1 methods Get slpv1 send input utxos from in-node chronik-client getSendTokenInputs with in-node chronik utxos throws error for: Invalid decimals
[23:05:07][CashTab Unit Tests] slpv1 methods Get slpv1 send input utxos from in-node chronik-client getSendTokenInputs with in-node chronik utxos throws error for: No token utxos
[23:05:07][CashTab Unit Tests] slpv1 methods Get slpv1 send input utxos from in-node chronik-client getSendTokenInputs with in-node chronik utxos throws error for: Send qty is empty string
[23:05:07][CashTab Unit Tests] slpv1 methods Generating etoken burn tx target outputs getSlpBurnTargetOutputs: Burn a fraction of balance
[23:05:07][CashTab Unit Tests] slpv1 methods Generating etoken burn tx target outputs getSlpBurnTargetOutputs: Burn all balance
[23:05:07][CashTab Unit Tests] slpv1 methods Generating explicit etoken burn tx target output from in-node utxos getExplicitBurnTargetOutputs: Burn a single token utxo
[23:05:07][CashTab Unit Tests] slpv1 methods Generating explicit etoken burn tx target output from in-node utxos getExplicitBurnTargetOutputs: Burns multiple token utxos
[23:05:07][CashTab Unit Tests] slpv1 methods Generating explicit etoken burn tx target output from in-node utxos getExplicitBurnTargetOutputs: Burns max slp quantity for 9 decimals
[23:05:07][CashTab Unit Tests] slpv1 methods Generating explicit etoken burn tx target output from in-node utxos getExplicitBurnTargetOutputs throws error if called with in-node utxos and no specified decimals
[23:05:07][CashTab Unit Tests] slpv1 methods Get slpv1 mint baton(s) getMintBatons: We can get a single mint baton
[23:05:07][CashTab Unit Tests] slpv1 methods Get slpv1 mint baton(s) getMintBatons: We can get the correct mint baton from from an array including other token utxos, mint batons, and non-token utxos
[23:05:07][CashTab Unit Tests] slpv1 methods Get slpv1 mint baton(s) getMintBatons: We can get multiple mint batons
[23:05:07][CashTab Unit Tests] slpv1 methods Get slpv1 mint baton(s) getMintBatons: We return an empty array if no matches are found from a bad tokenId
[23:05:07][CashTab Unit Tests] slpv1 methods Get slpv1 mint baton(s) getMintBatons: We return an empty array if we have no mint batons for a given tokenId
[23:05:07][CashTab Unit Tests] slpv1 methods Generate target outputs for an slpv1 mint tx getMintTargetOutputs: Creates expected mint outputs for a 0-decimal token
[23:05:07][CashTab Unit Tests] slpv1 methods Generate target outputs for an slpv1 mint tx getMintTargetOutputs: Creates expected mint outputs for a 9-decimal token
[23:05:07][CashTab Unit Tests] slpv1 methods Generate target outputs for an slpv1 mint tx getMintTargetOutputs: Can create a target output for the largest mint qty supported by slpv1
[23:05:07][CashTab Unit Tests] slpv1 methods Generate target outputs for an slpv1 mint tx getMintTargetOutputs throws error for: Throws expected error if asked to mint 1 more than slpv1 max qty
[23:05:07][CashTab Unit Tests] slpv1 methods Gets max mint amount, decimalized getMaxMintAmount: 0 decimals
[23:05:07][CashTab Unit Tests] slpv1 methods Gets max mint amount, decimalized getMaxMintAmount: 1 decimals
[23:05:07][CashTab Unit Tests] slpv1 methods Gets max mint amount, decimalized getMaxMintAmount: 2 decimals
[23:05:07][CashTab Unit Tests] slpv1 methods Gets max mint amount, decimalized getMaxMintAmount: 3 decimals
[23:05:07][CashTab Unit Tests] slpv1 methods Gets max mint amount, decimalized getMaxMintAmount: 4 decimals
[23:05:07][CashTab Unit Tests] slpv1 methods Gets max mint amount, decimalized getMaxMintAmount: 5 decimals
[23:05:07][CashTab Unit Tests] slpv1 methods Gets max mint amount, decimalized getMaxMintAmount: 6 decimals
[23:05:07][CashTab Unit Tests] slpv1 methods Gets max mint amount, decimalized getMaxMintAmount: 7 decimals
[23:05:07][CashTab Unit Tests] slpv1 methods Gets max mint amount, decimalized getMaxMintAmount: 8 decimals
[23:05:07][CashTab Unit Tests] slpv1 methods Gets max mint amount, decimalized getMaxMintAmount: 9 decimals
[23:05:07][CashTab Unit Tests] slpv1 methods Get targetOutputs for NFT1 parent genesis tx getNftParentGenesisTargetOutputs: Fixed supply NFT1 parent
[23:05:07][CashTab Unit Tests] slpv1 methods Get targetOutputs for NFT1 parent genesis tx getNftParentGenesisTargetOutputs: Variable supply NFT1 parent
[23:05:07][CashTab Unit Tests] slpv1 methods Get targetOutputs for NFT1 parent genesis tx getNftParentGenesisTargetOutputs: NFT1 parent genesis at max supply
[23:05:07][CashTab Unit Tests] slpv1 methods Get targetOutputs for NFT1 parent genesis tx getNftParentGenesisTargetOutputs throws error for: Variable supply NFT1 parent with mintBatonVout !== 2
[23:05:07][CashTab Unit Tests] slpv1 methods Get targetOutputs for NFT1 parent genesis tx getNftParentGenesisTargetOutputs throws error for: Exceed 0xffffffffffffffff for genesis qty
[23:05:07][CashTab Unit Tests] slpv1 methods Get targetOutputs for NFT1 parent genesis tx getNftParentGenesisTargetOutputs throws error for: Initial qty is not an integer
[23:05:07][CashTab Unit Tests] slpv1 methods Generate target outputs for an slpv1 nft parent mint tx getNftParentMintTargetOutputs: Generates expected outputs for an NFT1 parent mint
[23:05:07][CashTab Unit Tests] slpv1 methods Generate target outputs for an slpv1 nft parent mint tx getNftParentMintTargetOutputs: Can create a target output for the largest mint qty supported by slpv1
[23:05:07][CashTab Unit Tests] slpv1 methods Generate target outputs for an slpv1 nft parent mint tx getNftParentMintTargetOutputs throws error for: Throws expected error if asked to mint 1 more than slpv1 max qty
[23:05:07][CashTab Unit Tests] slpv1 methods Generate target outputs for an slpv1 nft parent mint tx getNftParentMintTargetOutputs throws error for: Throws expected error if asked to mint a non-integer quantity
[23:05:07][CashTab Unit Tests] slpv1 methods Gets required inputs for an NFT1 parent fan-out tx, if present in given slpUtxos getNftParentFanInputs: Gets NFT1 parent spendable utxo with qty !== 1
[23:05:07][CashTab Unit Tests] slpv1 methods Gets required inputs for an NFT1 parent fan-out tx, if present in given slpUtxos getNftParentFanInputs: Ignores NFT1 parent spendable utxo with qty === 1
[23:05:07][CashTab Unit Tests] slpv1 methods Gets required inputs for an NFT1 parent fan-out tx, if present in given slpUtxos getNftParentFanInputs: Returns multiple utxos at multiple amounts and ignores amount === 1
[23:05:07][CashTab Unit Tests] slpv1 methods Gets required inputs for an NFT1 parent fan-out tx, if present in given slpUtxos getNftParentFanInputs: Ignores a utxo if it has the right tokenId, the right amount, but is a mint baton for some reason (not expected to ever happen)
[23:05:07][CashTab Unit Tests] slpv1 methods Gets required inputs for an NFT1 parent fan-out tx, if present in given slpUtxos getNftParentFanInputs: Ignores a utxo if it has the right amount, is not a mint baton, but has the wrong token id
[23:05:07][CashTab Unit Tests] slpv1 methods Generate target outputs for an NFT1 parent fan-out tx getNftParentFanTxTargetOutputs: Gets 19 fan outputs for an NFT1 parent fan tx for max outputs and no change
[23:05:07][CashTab Unit Tests] slpv1 methods Generate target outputs for an NFT1 parent fan-out tx getNftParentFanTxTargetOutputs: Gets 18 fan outputs for an NFT1 parent fan tx for max outputs if we have change
[23:05:07][CashTab Unit Tests] slpv1 methods Generate target outputs for an NFT1 parent fan-out tx getNftParentFanTxTargetOutputs: Gets token amount fan outputs for an NFT1 parent fan tx if user has less than 19 of this token left
[23:05:07][CashTab Unit Tests] slpv1 methods Generate target outputs for an NFT1 parent fan-out tx getNftParentFanTxTargetOutputs throws error for: Throws error if called with no fanInputs
[23:05:07][CashTab Unit Tests] slpv1 methods Gets required input for an NFT1 child genesis tx, if present in given slpUtxos getNftChildGenesisInput: Returns a single utxo of amount 1 if it exists in given utxo set
[23:05:07][CashTab Unit Tests] slpv1 methods Gets required input for an NFT1 child genesis tx, if present in given slpUtxos getNftChildGenesisInput: Does not return a single utxo of amount 1 if it exists in given utxo set and is a mint baton (not expected to ever happen)
[23:05:07][CashTab Unit Tests] slpv1 methods Gets required input for an NFT1 child genesis tx, if present in given slpUtxos getNftChildGenesisInput: Returns a single utxo of amount 1 even if more than 1 eligible utxos exist in given utxo set
[23:05:07][CashTab Unit Tests] slpv1 methods Gets required input for an NFT1 child genesis tx, if present in given slpUtxos getNftChildGenesisInput: Returns an empty array even if parent token utxos exist but do not have amount === 1
[23:05:07][CashTab Unit Tests] slpv1 methods Gets required input for an NFT1 child genesis tx, if present in given slpUtxos getNftChildGenesisInput: Returns an empty array if no utxos of correct tokenId and amount exist
[23:05:07][CashTab Unit Tests] slpv1 methods Get targetOutputs for an NFT1 child genesis tx getNftChildGenesisTargetOutputs: We can generate the correct targetOutput for minting an NFT child genesis tx with data in all available fields
[23:05:07][CashTab Unit Tests] slpv1 methods Get targetOutputs for an NFT1 child genesis tx getNftChildGenesisTargetOutputs: We can generate the correct targetOutput for minting an NFT child genesis tx with no data in any available fields
[23:05:07][CashTab Unit Tests] slpv1 methods Gets NFT utxo for an NFT 1 child getNft: Returns the NFT if it exists in given utxo set
[23:05:07][CashTab Unit Tests] slpv1 methods Gets NFT utxo for an NFT 1 child getNft: Returns an empty array if no utxos of correct tokenId are in this utxo set
[23:05:07][CashTab Unit Tests] slpv1 methods Get targetOutputs for an NFT1 child send tx getNftChildSendTargetOutputs: We can get the target outputs for sending an NFT
[23:05:07][Step 1/1] CashTab Unit Tests
[23:05:07][CashTab Unit Tests] Cashtab validation functions isValidSideshiftObj() returns true for a valid sideshift library object
[23:05:07][CashTab Unit Tests] Cashtab validation functions isValidSideshiftObj() returns false if the sideshift library object failed to instantiate
[23:05:07][CashTab Unit Tests] Cashtab validation functions isValidSideshiftObj() returns false for an invalid sideshift library object
[23:05:07][CashTab Unit Tests] Cashtab validation functions validateMnemonic() returns true for a valid mnemonic
[23:05:07][CashTab Unit Tests] Cashtab validation functions validateMnemonic() returns false for an invalid mnemonic
[23:05:07][CashTab Unit Tests] Cashtab validation functions validateMnemonic() returns false for an empty string mnemonic
[23:05:07][CashTab Unit Tests] Cashtab validation functions Accepts a valid eToken token name
[23:05:07][CashTab Unit Tests] Cashtab validation functions Accepts a valid eToken token name that is a stringified number
[23:05:07][CashTab Unit Tests] Cashtab validation functions Rejects eToken token name if longer than 68 characters
[23:05:07][CashTab Unit Tests] Cashtab validation functions Rejects eToken token name if empty string
[23:05:07][CashTab Unit Tests] Cashtab validation functions Accepts a 4-char eToken token ticker
[23:05:07][CashTab Unit Tests] Cashtab validation functions Accepts a 12-char eToken token ticker
[23:05:07][CashTab Unit Tests] Cashtab validation functions Rejects eToken token ticker if empty string
[23:05:07][CashTab Unit Tests] Cashtab validation functions Rejects eToken token ticker if > 12 chars
[23:05:07][CashTab Unit Tests] Cashtab validation functions Accepts tokenDecimals if zero
[23:05:07][CashTab Unit Tests] Cashtab validation functions Accepts tokenDecimals if between 0 and 9 inclusive
[23:05:07][CashTab Unit Tests] Cashtab validation functions Rejects tokenDecimals if empty string
[23:05:07][CashTab Unit Tests] Cashtab validation functions Rejects tokenDecimals if non-integer
[23:05:07][CashTab Unit Tests] Cashtab validation functions No error for a valid eToken token document URL
[23:05:07][CashTab Unit Tests] Cashtab validation functions No error for a valid eToken token document URL including special URL characters
[23:05:07][CashTab Unit Tests] Cashtab validation functions No error for a blank string as a valid eToken token document URL
[23:05:07][CashTab Unit Tests] Cashtab validation functions Expected error for valid url longer than 68 characters
[23:05:07][CashTab Unit Tests] Cashtab validation functions No error for a domain input with https protocol as eToken token document URL
[23:05:07][CashTab Unit Tests] Cashtab validation functions No error for a domain input with http protocol as eToken token document URL
[23:05:07][CashTab Unit Tests] Cashtab validation functions No error for a domain input with a primary and secondary top level domain as eToken token document URL
[23:05:07][CashTab Unit Tests] Cashtab validation functions No error for a domain input with just a subdomain as eToken token document URL
[23:05:07][CashTab Unit Tests] Cashtab validation functions Expected error for a domain input with no top level domain, protocol or subdomain eToken token document URL
[23:05:07][CashTab Unit Tests] Cashtab validation functions Expected error for a domain input as numbers eToken token document URL
[23:05:07][CashTab Unit Tests] Cashtab validation functions isValidTokenId accepts valid token ID that is 64 chars in length
[23:05:07][CashTab Unit Tests] Cashtab validation functions isValidTokenId rejects a token ID that is less than 64 chars in length
[23:05:07][CashTab Unit Tests] Cashtab validation functions isValidTokenId rejects a token ID that is more than 64 chars in length
[23:05:07][CashTab Unit Tests] Cashtab validation functions isValidTokenId rejects a token ID number that is 64 digits in length
[23:05:07][CashTab Unit Tests] Cashtab validation functions isValidTokenId rejects null
[23:05:07][CashTab Unit Tests] Cashtab validation functions isValidTokenId rejects undefined
[23:05:07][CashTab Unit Tests] Cashtab validation functions isValidTokenId rejects empty string
[23:05:07][CashTab Unit Tests] Cashtab validation functions isValidTokenId rejects special character input
[23:05:07][CashTab Unit Tests] Cashtab validation functions isValidTokenId rejects non-alphanumeric input
[23:05:07][CashTab Unit Tests] Cashtab validation functions isValidXecAirdrop accepts valid Total Airdrop Amount
[23:05:07][CashTab Unit Tests] Cashtab validation functions isValidXecAirdrop rejects null
[23:05:07][CashTab Unit Tests] Cashtab validation functions isValidXecAirdrop rejects undefined
[23:05:07][CashTab Unit Tests] Cashtab validation functions isValidXecAirdrop rejects empty string
[23:05:07][CashTab Unit Tests] Cashtab validation functions isValidTokenId rejects an alphanumeric input
[23:05:07][CashTab Unit Tests] Cashtab validation functions isValidTokenId rejects a number !> 0 in string format
[23:05:07][CashTab Unit Tests] Cashtab validation functions isValidAirdropExclusionArray accepts a valid airdrop exclusion list
[23:05:07][CashTab Unit Tests] Cashtab validation functions isValidAirdropExclusionArray rejects an invalid airdrop exclusion list
[23:05:07][CashTab Unit Tests] Cashtab validation functions isValidAirdropExclusionArray rejects a list of addresses if any are not prefixed
[23:05:07][CashTab Unit Tests] Cashtab validation functions isValidAirdropExclusionArray rejects an empty airdrop exclusion list
[23:05:07][CashTab Unit Tests] Cashtab validation functions isValidAirdropExclusionArray rejects a null airdrop exclusion list
[23:05:07][CashTab Unit Tests] Cashtab validation functions isProbablyNotAScam recognizes "bitcoin" is probably a scam token name
[23:05:07][CashTab Unit Tests] Cashtab validation functions isProbablyNotAScam recognizes "ebitcoin" is probably a scam token name
[23:05:07][CashTab Unit Tests] Cashtab validation functions isProbablyNotAScam recognizes "Lido Staked Ether", from coingeckoTop500Names, is probably a scam token name
[23:05:07][CashTab Unit Tests] Cashtab validation functions isProbablyNotAScam recognizes 'matic-network', from coingeckoTop500Ids, is probably a scam token name
[23:05:07][CashTab Unit Tests] Cashtab validation functions isProbablyNotAScam recognizes 'Australian Dollar', from Cashtab supported fiat currencies, is probably a scam token name
[23:05:07][CashTab Unit Tests] Cashtab validation functions isProbablyNotAScam recognizes 'ebtc', from bannedTickers, is probably a scam token name
[23:05:07][CashTab Unit Tests] Cashtab validation functions isProbablyNotAScam recognizes 'gbp', from bannedTickers, is probably a scam
[23:05:07][CashTab Unit Tests] Cashtab validation functions isProbablyNotAScam recognizes 'Hong Kong Dollar', from fiatNames, is probably a scam
[23:05:07][CashTab Unit Tests] Cashtab validation functions isProbablyNotAScam recognizes '₪', from fiat symbols, is probably a scam
[23:05:07][CashTab Unit Tests] Cashtab validation functions isProbablyNotAScam recognizes an ordinary token name as acceptable
[23:05:07][CashTab Unit Tests] Cashtab validation functions isProbablyNotAScam accepts a token name with fragments of banned potential scam names
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determining whether Send button should be disabled on SendXec screen shouldSendXecBeDisabled: Disabled on startup
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determining whether Send button should be disabled on SendXec screen shouldSendXecBeDisabled: Disabled if address has been entered but no amount
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determining whether Send button should be disabled on SendXec screen shouldSendXecBeDisabled: Disabled if amount has been entered but no address
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determining whether Send button should be disabled on SendXec screen shouldSendXecBeDisabled: Enabled for valid address and amount in send to one mode
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determining whether Send button should be disabled on SendXec screen shouldSendXecBeDisabled: Disabled for valid address and amount entered in send to one mode, but app is in send to many mode and input is blank
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determining whether Send button should be disabled on SendXec screen shouldSendXecBeDisabled: Disabled on zero balance for send to one
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determining whether Send button should be disabled on SendXec screen shouldSendXecBeDisabled: Disabled on zero balance for send to many
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determining whether Send button should be disabled on SendXec screen shouldSendXecBeDisabled: Disabled for invalid address
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determining whether Send button should be disabled on SendXec screen shouldSendXecBeDisabled: Disabled for invalid amount
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determining whether Send button should be disabled on SendXec screen shouldSendXecBeDisabled: Disabled for invalid cashtab msg send to one if user has cashtab msg enabled
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determining whether Send button should be disabled on SendXec screen shouldSendXecBeDisabled: Enabled for invalid cashtab msg send to one if user has cashtab msg disabled
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determining whether Send button should be disabled on SendXec screen shouldSendXecBeDisabled: Disabled for invalid op_return_raw send to one if user has op_return_raw enabled
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determining whether Send button should be disabled on SendXec screen shouldSendXecBeDisabled: Enabled for invalid op_return_raw if user has op_return_raw disabled
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determining whether Send button should be disabled on SendXec screen shouldSendXecBeDisabled: Disabled for invalid opreturn msg send to many if cashtab msg is invalid and enabled
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determining whether Send button should be disabled on SendXec screen shouldSendXecBeDisabled: Disabled on priceApi error
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determining whether Send button should be disabled on SendXec screen shouldSendXecBeDisabled: Enabled if isOneToManyXECSend and amount is not entered
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determining whether Send button should be disabled on SendXec screen shouldSendXecBeDisabled: Disabled if isOneToManyXECSend and we have a multiSendAddressError
[23:05:07][CashTab Unit Tests] Cashtab validation functions Parses user input address strings with parseAddressInput parseAddressInput: Blank string
[23:05:07][CashTab Unit Tests] Cashtab validation functions Parses user input address strings with parseAddressInput parseAddressInput: Address only and no querystring
[23:05:07][CashTab Unit Tests] Cashtab validation functions Parses user input address strings with parseAddressInput parseAddressInput: prefixless address input
[23:05:07][CashTab Unit Tests] Cashtab validation functions Parses user input address strings with parseAddressInput parseAddressInput: alias only and no querystring
[23:05:07][CashTab Unit Tests] Cashtab validation functions Parses user input address strings with parseAddressInput parseAddressInput: alias missing .xec suffix
[23:05:07][CashTab Unit Tests] Cashtab validation functions Parses user input address strings with parseAddressInput parseAddressInput: Valid address with valid amount param equal to user balance, no decimals
[23:05:07][CashTab Unit Tests] Cashtab validation functions Parses user input address strings with parseAddressInput parseAddressInput: Valid address with valid amount param exceeding user balance by one satoshi, no decimals
[23:05:07][CashTab Unit Tests] Cashtab validation functions Parses user input address strings with parseAddressInput parseAddressInput: Valid address with valid amount param, with decimals
[23:05:07][CashTab Unit Tests] Cashtab validation functions Parses user input address strings with parseAddressInput parseAddressInput: Invalid address with valid amount param
[23:05:07][CashTab Unit Tests] Cashtab validation functions Parses user input address strings with parseAddressInput parseAddressInput: etoken address with valid amount param
[23:05:07][CashTab Unit Tests] Cashtab validation functions Parses user input address strings with parseAddressInput parseAddressInput: Valid address with invalid amount param (too many decimal places)
[23:05:07][CashTab Unit Tests] Cashtab validation functions Parses user input address strings with parseAddressInput parseAddressInput: Valid alias with valid amount param
[23:05:07][CashTab Unit Tests] Cashtab validation functions Parses user input address strings with parseAddressInput parseAddressInput: Invalid alias with valid amount param
[23:05:07][CashTab Unit Tests] Cashtab validation functions Parses user input address strings with parseAddressInput parseAddressInput: Valid address with valid op_return_raw param
[23:05:07][CashTab Unit Tests] Cashtab validation functions Parses user input address strings with parseAddressInput parseAddressInput: Valid alias with valid op_return_raw param
[23:05:07][CashTab Unit Tests] Cashtab validation functions Parses user input address strings with parseAddressInput parseAddressInput: Valid address with invalid op_return_raw param
[23:05:07][CashTab Unit Tests] Cashtab validation functions Parses user input address strings with parseAddressInput parseAddressInput: Valid amount and op_return_raw params
[23:05:07][CashTab Unit Tests] Cashtab validation functions Parses user input address strings with parseAddressInput parseAddressInput: invalid querystring (unsupported params)
[23:05:07][CashTab Unit Tests] Cashtab validation functions Parses user input address strings with parseAddressInput parseAddressInput: Invalid queryString, repeated param
[23:05:07][CashTab Unit Tests] Cashtab validation functions Parses user input address strings with parseAddressInput parseAddressInput: Repeated op_return_raw param
[23:05:07][CashTab Unit Tests] Cashtab validation functions Returns true if a given input meets alias spec or expected error msg if it does not meetsAliasSpec: returns true for a valid lowercase alphanumeric input
[23:05:07][CashTab Unit Tests] Cashtab validation functions Returns true if a given input meets alias spec or expected error msg if it does not meetsAliasSpec: returns expected error if input contains uppercase char
[23:05:07][CashTab Unit Tests] Cashtab validation functions Returns true if a given input meets alias spec or expected error msg if it does not meetsAliasSpec: returns expected error if input contains special char
[23:05:07][CashTab Unit Tests] Cashtab validation functions Returns true if a given input meets alias spec or expected error msg if it does not meetsAliasSpec: returns expected error if input contains emoji
[23:05:07][CashTab Unit Tests] Cashtab validation functions Returns true if a given input meets alias spec or expected error msg if it does not meetsAliasSpec: returns expected error if input contains other special characters
[23:05:07][CashTab Unit Tests] Cashtab validation functions Returns true if a given input meets alias spec or expected error msg if it does not meetsAliasSpec: returns expected error if input is an empty string
[23:05:07][CashTab Unit Tests] Cashtab validation functions Returns true if a given input meets alias spec or expected error msg if it does not meetsAliasSpec: returns expected error if input contains an empty space
[23:05:07][CashTab Unit Tests] Cashtab validation functions Returns true if a given input meets alias spec or expected error msg if it does not meetsAliasSpec: returns expected error if input contains symbols
[23:05:07][CashTab Unit Tests] Cashtab validation functions Returns true if a given input meets alias spec or expected error msg if it does not meetsAliasSpec: returns expected error if input is not a string
[23:05:07][CashTab Unit Tests] Cashtab validation functions Returns true if a given input meets alias spec or expected error msg if it does not meetsAliasSpec: returns expected error if input contains underscores
[23:05:07][CashTab Unit Tests] Cashtab validation functions Returns true if a given input meets alias spec or expected error msg if it does not meetsAliasSpec: returns expected error if exceeds byte restriction
[23:05:07][CashTab Unit Tests] Cashtab validation functions Returns true if a given input meets alias spec or expected error msg if it does not meetsAliasSpec: returns true for an alias of max bytecount
[23:05:07][CashTab Unit Tests] Cashtab validation functions Validates user alias input on Send and SendToken screens isValidAliasSendInput: Valid alias send input
[23:05:07][CashTab Unit Tests] Cashtab validation functions Validates user alias input on Send and SendToken screens isValidAliasSendInput: Valid alias missing prefix
[23:05:07][CashTab Unit Tests] Cashtab validation functions Validates user alias input on Send and SendToken screens isValidAliasSendInput: Valid alias with double suffix
[23:05:07][CashTab Unit Tests] Cashtab validation functions Validates user alias input on Send and SendToken screens isValidAliasSendInput: Valid alias with bad suffix
[23:05:07][CashTab Unit Tests] Cashtab validation functions Validates user alias input on Send and SendToken screens isValidAliasSendInput: Invalid alias (too long)
[23:05:07][CashTab Unit Tests] Cashtab validation functions Validates user alias input on Send and SendToken screens isValidAliasSendInput: Invalid alias (nonalphanumeric)
[23:05:07][CashTab Unit Tests] Cashtab validation functions Validating Cashtab Contact Lists isValidContactList: Legacy empty contact list
[23:05:07][CashTab Unit Tests] Cashtab validation functions Validating Cashtab Contact Lists isValidContactList: Empty contact list
[23:05:07][CashTab Unit Tests] Cashtab validation functions Validating Cashtab Contact Lists isValidContactList: Array of more than one empty object is invalid
[23:05:07][CashTab Unit Tests] Cashtab validation functions Validating Cashtab Contact Lists isValidContactList: List with one valid entry
[23:05:07][CashTab Unit Tests] Cashtab validation functions Validating Cashtab Contact Lists isValidContactList: Multiple valid entries
[23:05:07][CashTab Unit Tests] Cashtab validation functions Validating Cashtab Contact Lists isValidContactList: Valid objects but also an empty object is false
[23:05:07][CashTab Unit Tests] Cashtab validation functions Validating Cashtab Contact Lists isValidContactList: Valid alias formats are accepted
[23:05:07][CashTab Unit Tests] Cashtab validation functions Appropriately migrates users with legacy settings migrateLegacyCashtabSettings: Migrates a 1.4.x user to 1.5.0 settings
[23:05:07][CashTab Unit Tests] Cashtab validation functions Appropriately migrates users with legacy settings migrateLegacyCashtabSettings: User with only fiatCurrency in settings
[23:05:07][CashTab Unit Tests] Cashtab validation functions Appropriately migrates users with legacy settings migrateLegacyCashtabSettings: Migrates an empty object to default settings
[23:05:07][CashTab Unit Tests] Cashtab validation functions Appropriately migrates users with legacy settings migrateLegacyCashtabSettings: Returns object unchanged if it has all expected keys
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if the user has valid cashtab settings isValidCashtabSettings: A 1.4.x settings object is invalid
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if the user has valid cashtab settings isValidCashtabSettings: A 1.5.0 settings object is valid
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if the user has valid cashtab settings isValidCashtabSettings: Rejects an otherwise-valid settings object if the currency is not supported
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if the user has valid cashtab settings isValidCashtabSettings: Rejects an otherwise-valid settings object if a ticker is misnamed
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if the user has valid cashtab settings isValidCashtabSettings: Rejects an otherwise-valid settings object if it is from before the introduction of sendModal
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if cashtabCache is valid or invalid isValidCashtabCache: Returns false for legacy cashtabCache
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if cashtabCache is valid or invalid isValidCashtabCache: Returns false if there is not a map at tokens key
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if cashtabCache is valid or invalid isValidCashtabCache: Returns false for cashtabCache before 2.9.0
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if cashtabCache is valid or invalid isValidCashtabCache: Returns false for current version cashtabCache if it is missing the unknown token id
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if cashtabCache is valid or invalid isValidCashtabCache: Returns true for current version cashtabCache
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if cashtabCache is valid or invalid isValidCashtabCache: Returns true for current version cashtabCache if blocks key is missing
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if cashtabCache is valid or invalid isValidCashtabCache: Returns true for default cashtabCache
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a cashtab wallet is valid or invalid isValidCashtabWallet: Returns true for a valid Cashtab wallet
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a cashtab wallet is valid or invalid isValidCashtabWallet: Returns false for a JSON-loaded pre-2.9.0 Cashtab wallet
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a cashtab wallet is valid or invalid isValidCashtabWallet: Returns false for a pre-2.9.0 Cashtab wallet
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a cashtab wallet is valid or invalid isValidCashtabWallet: Returns false if not an object
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a cashtab wallet is valid or invalid isValidCashtabWallet: Returns false if false (used to indicate no wallet yet set)
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a cashtab wallet is valid or invalid isValidCashtabWallet: Returns false if wallet is missing state
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a cashtab wallet is valid or invalid isValidCashtabWallet: Returns false if wallet is missing mnemonic
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a cashtab wallet is valid or invalid isValidCashtabWallet: Returns false if wallet is missing name
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a cashtab wallet is valid or invalid isValidCashtabWallet: Returns false if wallet is missing paths
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a cashtab wallet is valid or invalid isValidCashtabWallet: Returns false if wallet is missing hash in path1899 path object
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a cashtab wallet is valid or invalid isValidCashtabWallet: Returns false if wallet is missing address in path1899 path object
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a cashtab wallet is valid or invalid isValidCashtabWallet: Returns false if wallet is missing address in path1899 path object
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a cashtab wallet is valid or invalid isValidCashtabWallet: Returns true for a multi-path wallet
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a cashtab wallet is valid or invalid isValidCashtabWallet: Returns false if wallet is missing wif in a secondary path object
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a cashtab wallet is valid or invalid isValidCashtabWallet: Returns false if wallet has no path info objects
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a cashtab wallet is valid or invalid isValidCashtabWallet: Returns false if wallet.state is not an object
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a cashtab wallet is valid or invalid isValidCashtabWallet: Returns false if no balanceSats in wallet.state
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a cashtab wallet is valid or invalid isValidCashtabWallet: Returns false if balances in wallet.state
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a cashtab wallet is valid or invalid isValidCashtabWallet: Returns false if balanceSats is not a number
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a cashtab wallet is valid or invalid isValidCashtabWallet: Returns false if no slpUtxos in wallet.state
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a cashtab wallet is valid or invalid isValidCashtabWallet: Returns false if no nonSlpUtxos in wallet.state
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a cashtab wallet is valid or invalid isValidCashtabWallet: Returns false if no tokens in wallet.state
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a cashtab wallet is valid or invalid isValidCashtabWallet: Returns false if hydratedUtxoDetails is in wallet.state
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a cashtab wallet is valid or invalid isValidCashtabWallet: Returns false if slpBalancesAndUtxos is in wallet.state
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input send amount is valid isValidXecSendAmount: Dust minimum is valid
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input send amount is valid isValidXecSendAmount: 1 satoshi below dust min is invalid
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input send amount is valid isValidXecSendAmount: 0 is not a valid send amount
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input send amount is valid isValidXecSendAmount: A value with one decimal place not exceeding user balance is accepted
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input send amount is valid isValidXecSendAmount: A value with two decimal places not exceeding user balance is accepted
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input send amount is valid isValidXecSendAmount: A value with more than two decimal places not exceeding user balance is rejected
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input send amount is valid isValidXecSendAmount: A value using a decimal marker other than "." is rejected
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input send amount is valid isValidXecSendAmount: A non-number string is rejected
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input send amount is valid isValidXecSendAmount: null is rejected
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input send amount is valid isValidXecSendAmount: undefined is rejected
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input send amount is valid isValidXecSendAmount: A value including non-numerical characters is rejected
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input send amount is valid isValidXecSendAmount: A value exactly matching wallet balance is accepted
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input send amount is valid isValidXecSendAmount: A value exceeding wallet balance by 1 satoshi is rejected
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input send amount is valid isValidXecSendAmount: A fiat value that converts to less than the user total balance is accepted
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input send amount is valid isValidXecSendAmount: A fiat value that converts to one satoshi more than the user total balance is rejected
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input send amount is valid isValidXecSendAmount: A fiat value that converts to more than the user total balance is rejected
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input send amount is valid isValidXecSendAmount: A fiat value that converts to more than the user total balance is rejected with error formatted in non-default locale
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input multi-send CSV is valid isValidMultiSendUserInput: Accepts correctly formed multisend output for amount exactly equal to wallet total balance
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input multi-send CSV is valid isValidMultiSendUserInput: Rejects correctly formed multisend output for amount exceeding wallet total balance by 1 satoshi
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input multi-send CSV is valid isValidMultiSendUserInput: Accepts correctly formed multisend output for amount exactly equal to wallet total balance if addresses are padded by extra spaces
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input multi-send CSV is valid isValidMultiSendUserInput: Returns expected error msg and line number if string includes an invalid address
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input multi-send CSV is valid isValidMultiSendUserInput: Returns expected error msg for invalid value (dust)
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input multi-send CSV is valid isValidMultiSendUserInput: Returns expected error msg and line numberfor invalid value (too many decimal places)
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input multi-send CSV is valid isValidMultiSendUserInput: Returns expected error msg for an empty input
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input multi-send CSV is valid isValidMultiSendUserInput: Returns expected error msg and line number for an empty row
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input multi-send CSV is valid isValidMultiSendUserInput: Returns expected error msg for non-string input
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input multi-send CSV is valid isValidMultiSendUserInput: Returns expected error msg and line number if csv line does not include address and value
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input multi-send CSV is valid isValidMultiSendUserInput: Returns expected error msg and line number if a line has more than one comma
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input send or burn token amount is valid isValidTokenSendOrBurnAmount: A decimalized string with no decimals equivalent to the user balance of this token is valid for a token with no decimals
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input send or burn token amount is valid isValidTokenSendOrBurnAmount: 0 is rejected
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input send or burn token amount is valid isValidTokenSendOrBurnAmount: Blank input is rejected
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input send or burn token amount is valid isValidTokenSendOrBurnAmount: Rejects non-string input
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input send or burn token amount is valid isValidTokenSendOrBurnAmount: Rejects input including a decimal marker other than "."
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input send or burn token amount is valid isValidTokenSendOrBurnAmount: Rejects input multiple decimal points
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input send or burn token amount is valid isValidTokenSendOrBurnAmount: Rejects input multiple consecutive decimal points
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input send or burn token amount is valid isValidTokenSendOrBurnAmount: Rejects input containing non-decimal characters
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input send or burn token amount is valid isValidTokenSendOrBurnAmount: We cannot send a token satoshi more than tokenBalance
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input send or burn token amount is valid isValidTokenSendOrBurnAmount: We get non-plural error msg if token supports only 1 decimal place
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input send or burn token amount is valid isValidTokenSendOrBurnAmount: We cannot specify more decimal places than supported by the token
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input send or burn token amount is valid isValidTokenSendOrBurnAmount: We cannot have decimals for a token supporting 0 decimals
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input send or burn token amount is valid isValidTokenSendOrBurnAmount: We can specify fewer decimal places than supported by the token
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input send or burn token amount is valid isValidTokenSendOrBurnAmount: We can specify the exact decimal places supported by the token
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input send or burn token amount is valid isValidTokenSendOrBurnAmount: We can include a decimal point at the end of the string and no decimal places
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input send or burn token amount is valid isValidTokenSendOrBurnAmount: We can include a decimal point at the end of the string and no decimal places, even if the token supports 0 decimals
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input token mint amount is valid isValidTokenMintAmount: A decimalized string with no decimals is valid for a token with no decimals
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input token mint amount is valid isValidTokenMintAmount: 0 is rejected
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input token mint amount is valid isValidTokenMintAmount: Blank input is rejected
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input token mint amount is valid isValidTokenMintAmount: Rejects non-string input
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input token mint amount is valid isValidTokenMintAmount: Rejects input including a decimal marker other than "."
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input token mint amount is valid isValidTokenMintAmount: Rejects input with multiple decimal points
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input token mint amount is valid isValidTokenMintAmount: Rejects input multiple consecutive decimal points
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input token mint amount is valid isValidTokenMintAmount: Rejects input containing non-decimal characters
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input token mint amount is valid isValidTokenMintAmount: We get non-plural error msg if token supports only 1 decimal place
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input token mint amount is valid isValidTokenMintAmount: We cannot specify more decimal places than supported by the token
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input token mint amount is valid isValidTokenMintAmount: We cannot have decimals for a token supporting 0 decimals
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input token mint amount is valid isValidTokenMintAmount: We can specify fewer decimal places than supported by the token
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input token mint amount is valid isValidTokenMintAmount: We can specify the exact decimal places supported by the token
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input token mint amount is valid isValidTokenMintAmount: We can include a decimal point at the end of the string and no decimal places
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input token mint amount is valid isValidTokenMintAmount: We can include a decimal point at the end of the string and no decimal places, even if the token supports 0 decimals
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input token mint amount is valid isValidTokenMintAmount: We accept the max mint amount
[23:05:07][CashTab Unit Tests] Cashtab validation functions Determines if a user input token mint amount is valid isValidTokenMintAmount: We reject one token satoshi more than the max mint amount
[23:05:07][CashTab Unit Tests] Cashtab validation functions Can tell if a string is valid bip21 op_return_raw input, or why it is not getOpReturnRawError: Valid lowercase hex of max length is good
[23:05:07][CashTab Unit Tests] Cashtab validation functions Can tell if a string is valid bip21 op_return_raw input, or why it is not getOpReturnRawError: Valid lowercase hex of 1 more than max length is rejected
[23:05:07][CashTab Unit Tests] Cashtab validation functions Can tell if a string is valid bip21 op_return_raw input, or why it is not getOpReturnRawError: Valid lowercase hex of max length that starts with "6a" is rejected
[23:05:07][CashTab Unit Tests] Cashtab validation functions Can tell if a string is valid bip21 op_return_raw input, or why it is not getOpReturnRawError: Valid hex of odd length below max is rejected
[23:05:07][CashTab Unit Tests] Cashtab validation functions Can tell if a string is valid bip21 op_return_raw input, or why it is not getOpReturnRawError: Uppercase hex is rejected
[23:05:07][CashTab Unit Tests] Cashtab validation functions Can tell if a string is valid bip21 op_return_raw input, or why it is not getOpReturnRawError: Even-length string containing non-hex characters is rejected
[23:05:07][CashTab Unit Tests] Cashtab validation functions Can tell if a string is valid bip21 op_return_raw input, or why it is not getOpReturnRawError: Even-length string containing a space is rejected
[23:05:07][CashTab Unit Tests] Cashtab validation functions Can tell if a string is valid bip21 op_return_raw input, or why it is not getOpReturnRawError: Empty string is rejected
[23:05:07][CashTab Unit Tests] Cashtab validation functions Can tell if a string is valid bip21 op_return_raw input, or why it is not getOpReturnRawError: String of even spaces is rejected
[23:05:07][CashTab Unit Tests] Cashtab validation functions Validates OP_RETURN raw for eCash node broadcast nodeWillAcceptOpReturnRaw: Rejects a string that starts with 6a
[23:05:07][CashTab Unit Tests] Cashtab validation functions Validates OP_RETURN raw for eCash node broadcast nodeWillAcceptOpReturnRaw: Rejects a string that starts with invalid pushdata
[23:05:07][CashTab Unit Tests] Cashtab validation functions Validates OP_RETURN raw for eCash node broadcast nodeWillAcceptOpReturnRaw: Rejects non-string input
[23:05:07][CashTab Unit Tests] Cashtab validation functions Validates OP_RETURN raw for eCash node broadcast nodeWillAcceptOpReturnRaw: Rejects non-hex input
[23:05:07][CashTab Unit Tests] Cashtab validation functions Validates OP_RETURN raw for eCash node broadcast nodeWillAcceptOpReturnRaw: Accepts a valid hex string under max length
[23:05:07][CashTab Unit Tests] Cashtab validation functions Validates OP_RETURN raw for eCash node broadcast nodeWillAcceptOpReturnRaw: Accepts a valid hex string of max length
[23:05:07][CashTab Unit Tests] Cashtab validation functions Validates OP_RETURN raw for eCash node broadcast nodeWillAcceptOpReturnRaw: Rejects a valid hex string over max length
[23:05:07][CashTab Unit Tests] Cashtab validation functions Validates OP_RETURN raw for eCash node broadcast nodeWillAcceptOpReturnRaw: Rejects a valid hex string of odd length
[23:05:07][CashTab Unit Tests] Cashtab validation functions Gets error or false for contact name input getContactNameError: Accepts a max-length contact name if it does not exist in current contacts
[23:05:07][CashTab Unit Tests] Cashtab validation functions Gets error or false for contact name input getContactNameError: Accepts a max-length contact name if no contacts exist
[23:05:07][CashTab Unit Tests] Cashtab validation functions Gets error or false for contact name input getContactNameError: Rejects a max-length + 1 contact name if it does not exist in current contacts
[23:05:07][CashTab Unit Tests] Cashtab validation functions Gets error or false for contact name input getContactNameError: Rejects an empty string
[23:05:07][CashTab Unit Tests] Cashtab validation functions Gets error or false for contact name input getContactNameError: Rejects a contact name if it already exists in contacts
[23:05:07][CashTab Unit Tests] Cashtab validation functions Gets error or false for contact address input getContactAddressError: No error from a valid ecash: prefixed address to an empty contact list
[23:05:07][CashTab Unit Tests] Cashtab validation functions Gets error or false for contact address input getContactAddressError: Expected error from a valid ecash: prefixed address if exists in contact list
[23:05:07][CashTab Unit Tests] Cashtab validation functions Gets error or false for contact address input getContactAddressError: Expected error from a valid prefixless ecash: address
[23:05:07][CashTab Unit Tests] Cashtab validation functions Gets error or false for contact address input getContactAddressError: Expected error from an invalid address
[23:05:07][CashTab Unit Tests] Cashtab validation functions Gets error or false for wallet name input getWalletNameError: Accepts a string of max length if no wallets exist with the same name
[23:05:07][CashTab Unit Tests] Cashtab validation functions Gets error or false for wallet name input getWalletNameError: Returns expected error for a string of max length if wallet exists with the same name
[23:05:07][CashTab Unit Tests] Cashtab validation functions Gets error or false for wallet name input getWalletNameError: Returns expected error for an empty string
[23:05:07][CashTab Unit Tests] Cashtab validation functions Gets error or false for wallet name input getWalletNameError: Returns expected error for blank spaces
[23:05:07][CashTab Unit Tests] Cashtab validation functions Gets error or false for wallet name input getWalletNameError: Returns expected error for wallet 1 char over the max name length
[23:05:07][Step 1/1] CashTab Unit Tests
[23:05:07][CashTab Unit Tests] Correctly prepares Cashtab mocked chronik client and localforage environment for Cashtab pre 1.7.* for unit tests initializeCashtabStateAtLegacyWalletKeysForTests mocks a new Cashtab user or incognito visitor
[23:05:07][CashTab Unit Tests] Correctly prepares Cashtab mocked chronik client and localforage environment for Cashtab pre 1.7.* for unit tests initializeCashtabStateAtLegacyWalletKeysForTests: Wallet with xec and tokens
[23:05:07][CashTab Unit Tests] Correctly prepares Cashtab mocked chronik client and localforage environment for unit tests initializeCashtabStateForTests mocks a new Cashtab user or incognito visitor
[23:05:07][CashTab Unit Tests] Correctly prepares Cashtab mocked chronik client and localforage environment for unit tests initializeCashtabStateForTests: Wallet with xec and tokens
[23:05:07][CashTab Unit Tests] Correctly prepares Cashtab mocked chronik client and localforage environment for unit tests initializeCashtabStateForTests: Multiple wallets
[23:05:07][Step 1/1] CashTab Unit Tests
[23:05:07][CashTab Unit Tests] Cashtab chronik.js functions flattenChronikTxHistory successfully combines the result of getHistory into a single array
[23:05:07][CashTab Unit Tests] Cashtab chronik.js functions Parses supported tx types parseTx: Staking rewards coinbase tx
[23:05:07][CashTab Unit Tests] Cashtab chronik.js functions Parses supported tx types parseTx: Incoming XEC tx
[23:05:07][CashTab Unit Tests] Cashtab chronik.js functions Parses supported tx types parseTx: Outgoing XEC tx
[23:05:07][CashTab Unit Tests] Cashtab chronik.js functions Parses supported tx types parseTx: Alias registration
[23:05:07][CashTab Unit Tests] Cashtab chronik.js functions Parses supported tx types parseTx: Incoming eToken
[23:05:07][CashTab Unit Tests] Cashtab chronik.js functions Parses supported tx types parseTx: Outgoing eToken
[23:05:07][CashTab Unit Tests] Cashtab chronik.js functions Parses supported tx types parseTx: Genesis tx
[23:05:07][CashTab Unit Tests] Cashtab chronik.js functions Parses supported tx types parseTx: Incoming eToken tx with 9 decimals
[23:05:07][CashTab Unit Tests] Cashtab chronik.js functions Parses supported tx types parseTx: Legacy airdrop tx
[23:05:07][CashTab Unit Tests] Cashtab chronik.js functions Parses supported tx types parseTx: Outgoing encrypted msg (deprecated)
[23:05:07][CashTab Unit Tests] Cashtab chronik.js functions Parses supported tx types parseTx: Incoming encrypted msg (deprecated)
[23:05:07][CashTab Unit Tests] Cashtab chronik.js functions Parses supported tx types parseTx: Token burn tx
[23:05:07][CashTab Unit Tests] Cashtab chronik.js functions Parses supported tx types parseTx: Token burn tx with decimals
[23:05:07][CashTab Unit Tests] Cashtab chronik.js functions Parses supported tx types parseTx: SWaP tx
[23:05:07][CashTab Unit Tests] Cashtab chronik.js functions Parses supported tx types parseTx: PayButton tx with no data and payment id
[23:05:07][CashTab Unit Tests] Cashtab chronik.js functions Parses supported tx types parseTx: PayButton tx with data and payment id
[23:05:07][CashTab Unit Tests] Cashtab chronik.js functions Parses supported tx types parseTx: PayButton tx with no data and no payment id
[23:05:07][CashTab Unit Tests] Cashtab chronik.js functions Parses supported tx types parseTx: PayButton tx with data and no payment id
[23:05:07][CashTab Unit Tests] Cashtab chronik.js functions Parses supported tx types parseTx: PayButton tx with unsupported version number
[23:05:07][CashTab Unit Tests] Cashtab chronik.js functions Parses supported tx types parseTx: Paybutton tx that does not have spec number of pushes
[23:05:07][CashTab Unit Tests] Cashtab chronik.js functions Parses supported tx types parseTx: External msg received from Electrum
[23:05:07][CashTab Unit Tests] Cashtab chronik.js functions Parses supported tx types parseTx: Unknown app tx
[23:05:07][CashTab Unit Tests] Cashtab chronik.js functions Parses supported tx types parseTx: We can parse a received ALP tx
[23:05:07][CashTab Unit Tests] Cashtab chronik.js functions Parses supported tx types parseTx: External msg received from eCash Chat
[23:05:07][CashTab Unit Tests] Cashtab chronik.js functions Parses supported tx types parseTx: slp v1 mint tx
[23:05:07][CashTab Unit Tests] Cashtab chronik.js functions Sorts and trims chronik tx history sortAndTrimChronikTxHistory: successfully orders the result of flattenChronikTxHistory by blockheight and firstSeenTime if all txs are confirmed
[23:05:07][CashTab Unit Tests] Cashtab chronik.js functions Sorts and trims chronik tx history sortAndTrimChronikTxHistory: orders the result of flattenChronikTxHistory by blockheight and firstSeenTime if some txs are confirmed and others unconfirmed
[23:05:07][CashTab Unit Tests] Cashtab chronik.js functions Sorts and trims chronik tx history sortAndTrimChronikTxHistory: orders the result of flattenChronikTxHistory by blockheight and firstSeenTime if all txs are unconfirmed,
[23:05:07][CashTab Unit Tests] Cashtab chronik.js functions Separates SLP and non-SLP utxos organizeUtxosByType: Splits token utxos and non-token utxos using real in-node utxos
[23:05:07][CashTab Unit Tests] Cashtab chronik.js functions Separates SLP and non-SLP utxos organizeUtxosByType: Splits token utxos and non-token utxos
[23:05:07][CashTab Unit Tests] Cashtab chronik.js functions Separates SLP and non-SLP utxos organizeUtxosByType: Returns empty array for nonSlpUtxos if all utxos are token utxos
[23:05:07][CashTab Unit Tests] Cashtab chronik.js functions Separates SLP and non-SLP utxos organizeUtxosByType: Returns empty array for preliminarySlpUtxos if no token utxos found
[23:05:07][CashTab Unit Tests] Cashtab chronik.js functions We get info we want to cache about a token from its genesis tx and chronik token info endpoint getTokenGenesisInfo: slpv1 token with no minting batons
[23:05:07][CashTab Unit Tests] Cashtab chronik.js functions We get info we want to cache about a token from its genesis tx and chronik token info endpoint getTokenGenesisInfo: slpv1 token with no minting batons unconfirmed genesis tx
[23:05:07][CashTab Unit Tests] Cashtab chronik.js functions We get info we want to cache about a token from its genesis tx and chronik token info endpoint getTokenGenesisInfo: slpv1 token with minting baton
[23:05:07][CashTab Unit Tests] Cashtab chronik.js functions We get info we want to cache about a token from its genesis tx and chronik token info endpoint getTokenGenesisInfo: ALP token with a minting baton
[23:05:07][CashTab Unit Tests] Cashtab chronik.js functions We get info we want to cache about a token from its genesis tx and chronik token info endpoint getTokenGenesisInfo: slpv2 genesis tx
[23:05:07][CashTab Unit Tests] Cashtab chronik.js functions We get info we want to cache about a token from its genesis tx and chronik token info endpoint getTokenGenesisInfo: Slp type 2 token (BUX)
[23:05:07][CashTab Unit Tests] Cashtab chronik.js functions We get info we want to cache about a token from its genesis tx and chronik token info endpoint getTokenGenesisInfo: Error is thrown if 1st chronik API call not completed successfully
[23:05:07][CashTab Unit Tests] Cashtab chronik.js functions We get info we want to cache about a token from its genesis tx and chronik token info endpoint getTokenGenesisInfo: Error is thrown if 2nd chronik API call not completed successfully
[23:05:07][CashTab Unit Tests] Cashtab chronik.js functions We can get token balance from a large token utxo set and update the cache
[23:05:07][CashTab Unit Tests] Cashtab chronik.js functions We can get token balance form a large token utxo set that includes a utxo of unknown tokenId and update the cache
[23:05:07][CashTab Unit Tests] Cashtab chronik.js functions We can get utxos from multiple paths and tag each one with its path
[23:05:07][CashTab Unit Tests] Cashtab chronik.js functions We can get and parse tx history from a multi-path wallet, and update the token cache at the same time
[23:05:07][CashTab Unit Tests] Cashtab chronik.js functions We can get and parse tx history from a multi-path wallet. If there is an error in getting cached token data, we still parse tx history. We add to token cache and get parsed tx history
[23:05:07][Step 1/1] CashTab Unit Tests
[23:05:07][CashTab Unit Tests] useWallet hook rendering in different localforage states localforage can set and get a map of tokeninfo by tokenId
[23:05:07][CashTab Unit Tests] useWallet hook rendering in different localforage states XEC price is set in state on successful API fetch
[23:05:07][CashTab Unit Tests] useWallet hook rendering in different localforage states XEC price remains null in state on API error
[23:05:07][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
[23:05:07][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
[23:05:07][CashTab Unit Tests] useWallet hook rendering in different localforage states processChronikWsMsg() refreshes alias prices when aliasPrices is null
[23:05:07][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
[23:05:07][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
[23:05:07][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
[23:05:07][CashTab Unit Tests] useWallet hook rendering in different localforage states Verify refreshAliases() updates the `aliases` state variable on a successful /address/ endpoint response
[23:05:07][CashTab Unit Tests] useWallet hook rendering in different localforage states Verify refreshAliases() updates the `aliasServerError` state variable upon an /address/ endpoint error
[23:05:07][CashTab Unit Tests] useWallet hook rendering in different localforage states An incoming tx message from the websocket causes the wallet to update
[23:05:07][Step 1/1] CashTab Unit Tests
[23:05:07][CashTab Unit Tests] <Tx /> Incoming XEC-only, avalanche finalized
[23:05:07][CashTab Unit Tests] <Tx /> Incoming XEC-only, not yet finalized by Avalanche
[23:05:07][CashTab Unit Tests] <Tx /> Outgoing XEC-only
[23:05:07][CashTab Unit Tests] <Tx /> Staking reward received by Cashtab wallet
[23:05:07][CashTab Unit Tests] <Tx /> Alias registration (v0)
[23:05:07][CashTab Unit Tests] <Tx /> Invalid alias registration (v0)
[23:05:07][CashTab Unit Tests] <Tx /> Another invalid alias registration (v0)
[23:05:07][CashTab Unit Tests] <Tx /> Received slpv1 fungible token
[23:05:07][CashTab Unit Tests] <Tx /> Received slpv1 fungible token with no token info in cache
[23:05:07][CashTab Unit Tests] <Tx /> Sent slpv1 fungible token
[23:05:07][CashTab Unit Tests] <Tx /> Sent slpv1 fungible token with no token info in cache
[23:05:07][CashTab Unit Tests] <Tx /> slpv1 fungible token GENESIS
[23:05:07][CashTab Unit Tests] <Tx /> slpv1 fungible token GENESIS with no token info in cache
[23:05:07][CashTab Unit Tests] <Tx /> Received slpv1 fungible token amount less than 1 with 9 decimals
[23:05:07][CashTab Unit Tests] <Tx /> Received slpv1 fungible token with 9 decimals with no token info in cache
[23:05:07][CashTab Unit Tests] <Tx /> Received airdrop with msg (legacy push) with no token info in cache
[23:05:07][<Tx /> Received airdrop with msg (legacy push) with no token info in cache] TestingLibraryElementError: Unable to find an element with the text: bdb3b4215ca0622e0c4c07655522c376eaa891838a82f0217fa453bb0595a37c. This could be because the text is broken up by multiple elements. In this case, you can provide a function for your text matcher to make your matcher more flexible. Ignored nodes: comments, script, style <body> <div> <div class="sc-bdVaJa jjgtxs" > <div class="sc-bwzfXH evareY" > <div class="sc-htpNat fTPTBn" type="Received" > <div class="sc-bxivhb cHJlww" > <svg title="tx-received" /> <div class="sc-EHOje eTNtAZ" > <div class="sc-gzVnrw heeZCw" > <div class="sc-bZQynM kOWhJU" > Received from <a class="sc-kGXeez fCnRQr" href="https://explorer.e.cash/address/ecash:qp36z7k8xt7k4l5xnxeypg5mfqeyvvyduu04m37fwd" rel="noreferrer" target="_blank" > qp3...fwd </a> </div> <div class="sc-hwwEjo cQMDVj" > <svg class="sc-kPVwWT jkJnoM" title="Finalized by Avalanche" viewBox="0 0 52 52" xmlns="http://www.w3.org/2000/svg" > <circle class="sc-kfGgVZ eVBTzZ" cx="26" cy="26" fill="none" r="25" /> <path class="sc-esjQYD cnXDYD" d="M14.1 27.2l7.1 7.2 16.7-16.8" fill="none" /> </svg> </div> </div> <div class="sc-htoDjs kcOqHg" > Oct 1, 2022, 23:36:08 </div> </div> </div> <div class="sc-dnqmqq cGIJgt" > <div class="sc-iwsKbI bFYjcF" > 5.69 XEC </div> <div class="sc-gZMcBi duMjuZ" > $ 0.00 </div> </div> </div> <div class="sc-kpOJdX kTGcaF" > <div class="sc-ckVGcZ duFkoQ" > <svg title="tx-airdrop" /> <div class="sc-dxgOiQ cclswX" > Airdrop to holders of <a class="sc-jWBwVP fDrbnp" href="https://explorer.e.cash/tx/bdb3b4215ca0622e0c4c07655522c376eaa891838a82f0217fa453bb0595a37c" rel="noreferrer" target="_blank" > bdb...37c </a> </div> </div> <img alt="icon for bdb3b4215ca0622e0c4c07655522c376eaa891838a82f0217fa453bb0595a37c" height="32" src="https://icons.etokens.cash/32/bdb3b4215ca0622e0c4c07655522c376eaa891838a82f0217fa453bb0595a37c.png" width="32" /> <div class="sc-jKJlTe itNDJR" > evc token service holders air drop ❤ </div> </div> </div> <div class="sc-jTzLTM btsHzU" > <div class="sc-fjdhpX dnUlwb" > <div class="sc-jzJRlG gEyaXg" > Avalanche Finalized </div> <div class="sc-hwwEjo cQMDVj" > <svg class="sc-kPVwWT hxPyUc" title="Finalized by Avalanche" viewBox="0 0 52 52" xmlns="http://www.w3.org/2000/svg" > <circle class="sc-kfGgVZ eVBTzZ" cx="26" cy="26" fill="none" r="25" /> <path class="sc-esjQYD cnXDYD" d="M14.1 27.2l7.1 7.2 16.7-16.8" fill="none" /> </svg> </div> </div> <div class="sc-cSHVUG gDEcVa" > <div class="sc-fAjcbJ dKNdXN" > <button class="sc-kAzzGY jjfqUh" > <svg title="copy-paste" /> </button> </div> <a class="sc-chPdSV fCIcLj" href="https://explorer.e.cash/tx/6e3baf279770c3ed84981c414f433e654cdc1b12df3024051f0f7c215a13dca9" rel="noreferrer" target="_blank" > <svg class="sc-brqgnP czEshA" /> </a> <a class="sc-chPdSV fCIcLj" href="https://blockchair.com/ecash/transaction/6e3baf279770c3ed84981c414f433e654cdc1b12df3024051f0f7c215a13dca9.pdf" rel="noreferrer" target="_blank" > <svg class="sc-cMljjf hlUukk" /> </a> <button class="sc-kAzzGY jjfqUh" > <svg title="add-contact" /> </button> </div> </div> </div> , </div> </body> at Object.getElementError (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:37:19) at /work/cashtab/node_modules/@testing-library/dom/dist/query-helpers.js:76:38 at /work/cashtab/node_modules/@testing-library/dom/dist/query-helpers.js:52:17 at /work/cashtab/node_modules/@testing-library/dom/dist/query-helpers.js:95:19 at Object.getByText (/work/cashtab/src/components/Home/Tx/__tests__/index.test.js:869:20) 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)
[23:05:07][CashTab Unit Tests] <Tx /> Sent airdrop with msg with token info in cache
[23:05:07][CashTab Unit Tests] <Tx /> Off-spec airdrop tx
[23:05:07][CashTab Unit Tests] <Tx /> Sent encrypted msg
[23:05:07][CashTab Unit Tests] <Tx /> Received encrypted msg
[23:05:07][CashTab Unit Tests] <Tx /> Burn slpv1 fungible token
[23:05:07][CashTab Unit Tests] <Tx /> Burn slpv1 fungible token with no token info in cache
[23:05:07][CashTab Unit Tests] <Tx /> Burn slpv1 fungible token with 9 decimals
[23:05:07][CashTab Unit Tests] <Tx /> Swap tx
[23:05:07][CashTab Unit Tests] <Tx /> Received PayButton tx with nonce and no data
[23:05:07][CashTab Unit Tests] <Tx /> Sent PayButton tx with nonce and data
[23:05:07][CashTab Unit Tests] <Tx /> Sent empty PayButton tx (no nonce, no data)
[23:05:07][CashTab Unit Tests] <Tx /> Sent PayButton tx with data but no nonce
[23:05:07][CashTab Unit Tests] <Tx /> Off-spec PayButton tx
[23:05:07][CashTab Unit Tests] <Tx /> Unsupported version PayButton tx
[23:05:07][CashTab Unit Tests] <Tx /> eCash chat tx
[23:05:07][CashTab Unit Tests] <Tx /> off-spec eCash chat tx
[23:05:07][CashTab Unit Tests] <Tx /> slpv1 fungible token MINT
[23:05:07][CashTab Unit Tests] <Tx /> slpv1 fungible token MINT with no token info in cache
[23:05:07][CashTab Unit Tests] <Tx /> Msg sent by ElectrumABC
[23:05:07][CashTab Unit Tests] <Tx /> Unknown App tx with long push in stackArray
[23:05:07][CashTab Unit Tests] <Tx /> Received ALP tx
[23:05:07][CashTab Unit Tests] <Tx /> Received ALP tx with token not in cache
[23:05:07][CashTab Unit Tests] <Tx /> Received Cashtab message
[23:05:07][CashTab Unit Tests] <Tx /> off-spec Cashtab msg
[23:05:07][Step 1/1] CashTab Unit Tests
[23:05:07][CashTab Unit Tests] Cashtab wallet methods Calculates total balance in satoshis from a valid set of chronik utxos getBalanceSats: Kind of a normal balance calculation
[23:05:07][CashTab Unit Tests] Cashtab wallet methods Calculates total balance in satoshis from a valid set of chronik utxos getBalanceSats: Wallet balance of total XEC supply
[23:05:07][CashTab Unit Tests] Cashtab wallet methods Calculates total balance in satoshis from a valid set of chronik utxos getBalanceSats: Empty array returns 0 balance
[23:05:07][CashTab Unit Tests] Cashtab wallet methods Calculates total balance in satoshis from a valid set of chronik utxos getBalanceSats: Array containing valid and invalid chronik utxos returns NaN
[23:05:07][CashTab Unit Tests] Cashtab wallet methods Calculates total balance in satoshis from a valid set of chronik utxos getBalanceSats: Array containing invalid chronik utxos returns NaN
[23:05:07][CashTab Unit Tests] Cashtab wallet methods Calculates total balance in satoshis from a valid set of chronik utxos getBalanceSats throws error for: Call with non-Array
[23:05:07][CashTab Unit Tests] Cashtab wallet methods Converts satoshis to XEC and XEC to satoshis Converts satoshis to xec: Total XEC supply
[23:05:07][CashTab Unit Tests] Cashtab wallet methods Converts satoshis to XEC and XEC to satoshis Converts xec to satoshis: Total XEC supply
[23:05:07][CashTab Unit Tests] Cashtab wallet methods Converts satoshis to XEC and XEC to satoshis Converts satoshis to xec: Total XEC supply less 1 satoshi
[23:05:07][CashTab Unit Tests] Cashtab wallet methods Converts satoshis to XEC and XEC to satoshis Converts xec to satoshis: Total XEC supply less 1 satoshi
[23:05:07][CashTab Unit Tests] Cashtab wallet methods Converts satoshis to XEC and XEC to satoshis Converts satoshis to xec: 0 is 0
[23:05:07][CashTab Unit Tests] Cashtab wallet methods Converts satoshis to XEC and XEC to satoshis Converts xec to satoshis: 0 is 0
[23:05:07][CashTab Unit Tests] Cashtab wallet methods Converts satoshis to XEC and XEC to satoshis toXec throws error for: Bad XEC amount, too many decimal places
[23:05:07][CashTab Unit Tests] Cashtab wallet methods Converts satoshis to XEC and XEC to satoshis toSatoshis throws error for: Bad XEC amount, too many decimal places
[23:05:07][CashTab Unit Tests] Cashtab wallet methods Determines if the wallet has greater than or equal to a specified qty of a specified token hasEnoughToken: Returns true if wallet has token in exactly required amount
[23:05:07][CashTab Unit Tests] Cashtab wallet methods Determines if the wallet has greater than or equal to a specified qty of a specified token hasEnoughToken: Returns false if wallet has token but less than required amount
[23:05:07][CashTab Unit Tests] Cashtab wallet methods Determines if the wallet has greater than or equal to a specified qty of a specified token hasEnoughToken: Returns false if wallet does not have this token
[23:05:07][CashTab Unit Tests] Cashtab wallet methods Creates a wallet from valid bip39 mnemonic createCashtabWallet: Creates a Cashtab wallet from a valid bip39 mnemonic
[23:05:07][CashTab Unit Tests] Cashtab wallet methods Converts string input of fiat send amount to satoshis XEC createCashtabWallet: Converts 1 USD from fiat to satoshis for string input
[23:05:07][CashTab Unit Tests] Cashtab wallet methods Converts string input of fiat send amount to satoshis XEC createCashtabWallet: Converts total XEC supply in USD from fiat to satoshis for string input
[23:05:07][CashTab Unit Tests] Cashtab wallet methods Converts string input of fiat send amount to satoshis XEC createCashtabWallet: Returns an integer even if input has arbitrarily high decimal precision for string input
[23:05:07][CashTab Unit Tests] Cashtab wallet methods Converts string input of fiat send amount to satoshis XEC createCashtabWallet: Converts 1 USD from fiat to satoshis for number input
[23:05:07][CashTab Unit Tests] Cashtab wallet methods Converts string input of fiat send amount to satoshis XEC createCashtabWallet: Converts total XEC supply in USD from fiat to satoshis for number input
[23:05:07][CashTab Unit Tests] Cashtab wallet methods Converts string input of fiat send amount to satoshis XEC createCashtabWallet: Returns an integer even if input has arbitrarily high decimal precision for number input
[23:05:07][CashTab Unit Tests] Cashtab wallet methods Gets legacy paths from a legacy wallet requiring migration getLegacyPaths: Determines legacy paths for a post-2.2.0 wallet with legacy paths
[23:05:07][CashTab Unit Tests] Cashtab wallet methods Gets legacy paths from a legacy wallet requiring migration getLegacyPaths: Determines legacy paths for a post-2.9.0 wallet with legacy paths
[23:05:07][CashTab Unit Tests] Cashtab wallet methods Gets legacy paths from a legacy wallet requiring migration getLegacyPaths: Determines legacy paths for a pre-2.2.0 wallet with legacy paths
[23:05:07][CashTab Unit Tests] Cashtab wallet methods Gets legacy paths from a legacy wallet requiring migration getLegacyPaths: Returns an empty array if the wallet contains no legacy paths
[23:05:07][CashTab Unit Tests] Cashtab wallet methods Gets expected array when activating a new wallet getWalletsForNewActiveWallet: Return expected wallets array
[23:05:07][CashTab Unit Tests] Cashtab wallet methods Gets expected array when activating a new wallet getWalletsForNewActiveWallet: Returns wallets array unchanged if walletToActivate is already wallets[0]
[23:05:07][CashTab Unit Tests] Cashtab wallet methods Gets expected array when activating a new wallet getWalletsForNewActiveWallet throws error for: Throws error if called with a wallet that is not in wallets
[23:05:07][CashTab Unit Tests] Cashtab wallet methods We can decimalize a token amount string and undecimalize it back decimalizeTokenAmount: Decimalizes amount for 0-decimal token amount larger than JS max safe integer
[23:05:07][CashTab Unit Tests] Cashtab wallet methods We can decimalize a token amount string and undecimalize it back undecimalizeTokenAmount: Decimalizes amount for 0-decimal token amount larger than JS max safe integer
[23:05:07][CashTab Unit Tests] Cashtab wallet methods We can decimalize a token amount string and undecimalize it back decimalizeTokenAmount: Decimalizes amount for 9-decimal token amount larger than JS max safe integer
[23:05:07][CashTab Unit Tests] Cashtab wallet methods We can decimalize a token amount string and undecimalize it back undecimalizeTokenAmount: Decimalizes amount for 9-decimal token amount larger than JS max safe integer
[23:05:07][CashTab Unit Tests] Cashtab wallet methods We can decimalize a token amount string and undecimalize it back decimalizeTokenAmount: Decimalizes amount for 9-decimal token amount larger than JS max safe integer with non-zero decimal places
[23:05:07][CashTab Unit Tests] Cashtab wallet methods We can decimalize a token amount string and undecimalize it back undecimalizeTokenAmount: Decimalizes amount for 9-decimal token amount larger than JS max safe integer with non-zero decimal places
[23:05:07][CashTab Unit Tests] Cashtab wallet methods We can decimalize a token amount string and undecimalize it back decimalizeTokenAmount: Decimalizes 0 by adding expected decimal places
[23:05:07][CashTab Unit Tests] Cashtab wallet methods We can decimalize a token amount string and undecimalize it back undecimalizeTokenAmount: Decimalizes 0 by adding expected decimal places
[23:05:07][CashTab Unit Tests] Cashtab wallet methods We can decimalize a token amount string and undecimalize it back decimalizeTokenAmount: Decimalizes a number less than 1 by adding expected decimal places
[23:05:07][CashTab Unit Tests] Cashtab wallet methods We can decimalize a token amount string and undecimalize it back undecimalizeTokenAmount: Decimalizes a number less than 1 by adding expected decimal places
[23:05:07][CashTab Unit Tests] Cashtab wallet methods We can decimalize a token amount string and undecimalize it back decimalizeTokenAmount: Decimalizes smallest amount of slpv1 spec
[23:05:07][CashTab Unit Tests] Cashtab wallet methods We can decimalize a token amount string and undecimalize it back undecimalizeTokenAmount: Decimalizes smallest amount of slpv1 spec
[23:05:07][CashTab Unit Tests] Cashtab wallet methods We can decimalize a token amount string and undecimalize it back decimalizeTokenAmount: Can decimalize for arbitrary decimals, as long as decimals is an integer
[23:05:07][CashTab Unit Tests] Cashtab wallet methods We can decimalize a token amount string and undecimalize it back undecimalizeTokenAmount: Can decimalize for arbitrary decimals, as long as decimals is an integer
[23:05:07][CashTab Unit Tests] Cashtab wallet methods We can decimalize a token amount string and undecimalize it back decimalizeTokenAmount throws error for: Throws error if input is not a string
[23:05:07][CashTab Unit Tests] Cashtab wallet methods We can decimalize a token amount string and undecimalize it back decimalizeTokenAmount throws error for: Throws error if input is not a stringified integer
[23:05:07][CashTab Unit Tests] Cashtab wallet methods We can decimalize a token amount string and undecimalize it back decimalizeTokenAmount throws error for: Throws error if decimals is not an integer
[23:05:07][CashTab Unit Tests] Cashtab wallet methods We can undecimalize a decimalizedTokenAmount string, and we throw expected errors if undecimalizeTokenAmount is invalid undecimalizeTokenAmount: Returns expected amount for a 0-decimal token that has a decimal point at the end
[23:05:07][CashTab Unit Tests] Cashtab wallet methods We can undecimalize a decimalizedTokenAmount string, and we throw expected errors if undecimalizeTokenAmount is invalid undecimalizeTokenAmount: Handles a decimalized amount with no decimal place
[23:05:07][CashTab Unit Tests] Cashtab wallet methods We can undecimalize a decimalizedTokenAmount string, and we throw expected errors if undecimalizeTokenAmount is invalid undecimalizeTokenAmount: Handles a decimalized amount with under-specified decimal places
[23:05:07][CashTab Unit Tests] Cashtab wallet methods We can undecimalize a decimalizedTokenAmount string, and we throw expected errors if undecimalizeTokenAmount is invalid undecimalizeTokenAmount throws error for: Throws error if decimalizedAmount is not a string
[23:05:07][CashTab Unit Tests] Cashtab wallet methods We can undecimalize a decimalizedTokenAmount string, and we throw expected errors if undecimalizeTokenAmount is invalid undecimalizeTokenAmount throws error for: Throws error if decimalizedAmount is an empty string
[23:05:07][CashTab Unit Tests] Cashtab wallet methods We can undecimalize a decimalizedTokenAmount string, and we throw expected errors if undecimalizeTokenAmount is invalid undecimalizeTokenAmount throws error for: Throws error if decimalizedAmount includes more than one decimal
[23:05:07][CashTab Unit Tests] Cashtab wallet methods We can undecimalize a decimalizedTokenAmount string, and we throw expected errors if undecimalizeTokenAmount is invalid undecimalizeTokenAmount throws error for: Throws error if decimalizedAmount includes a decimal point that is not a period
[23:05:07][CashTab Unit Tests] Cashtab wallet methods We can undecimalize a decimalizedTokenAmount string, and we throw expected errors if undecimalizeTokenAmount is invalid undecimalizeTokenAmount throws error for: Throws error if decimalizedAmount includes alphabet characters
[23:05:07][CashTab Unit Tests] Cashtab wallet methods We can undecimalize a decimalizedTokenAmount string, and we throw expected errors if undecimalizeTokenAmount is invalid undecimalizeTokenAmount throws error for: Throws error if decimals is invalid
[23:05:07][CashTab Unit Tests] Cashtab wallet methods We can undecimalize a decimalizedTokenAmount string, and we throw expected errors if undecimalizeTokenAmount is invalid undecimalizeTokenAmount throws error for: Throws precision error if decimals are over-specified for a 0-decimal token
[23:05:07][CashTab Unit Tests] Cashtab wallet methods We can undecimalize a decimalizedTokenAmount string, and we throw expected errors if undecimalizeTokenAmount is invalid undecimalizeTokenAmount throws error for: Throws precision error if decimals are over-specified for a 9-decimal token
[23:05:07][CashTab Unit Tests] Cashtab wallet methods Removes leading zeros from a string removeLeadingZeros: Removes leading zeros from a number string
[23:05:07][CashTab Unit Tests] Cashtab wallet methods Removes leading zeros from a string removeLeadingZeros: Removes leading zeros from a string of all zeros
[23:05:07][CashTab Unit Tests] Cashtab wallet methods Removes leading zeros from a string removeLeadingZeros: Preserves trailing zeros
[23:05:07][CashTab Unit Tests] Cashtab wallet methods Removes leading zeros from a string removeLeadingZeros: Removes leading zeros and preserves trailing zeros from an arbitrary string
[23:05:07][CashTab Unit Tests] Cashtab wallet methods Successfully extracts a hash160 array from valid cashtab wallet
[23:05:07][CashTab Unit Tests] Cashtab wallet methods Determines if a wallet has unfinalized txs in history hasUnfinalizedTxsInHistory: Returns true if valid wallet history has an unfinalized tx
[23:05:07][CashTab Unit Tests] Cashtab wallet methods Determines if a wallet has unfinalized txs in history hasUnfinalizedTxsInHistory: Returns true for cashtab test wallet mock, which has an unconfirmed tx
[23:05:07][CashTab Unit Tests] Cashtab wallet methods Determines if a wallet has unfinalized txs in history hasUnfinalizedTxsInHistory: Returns false if valid wallet history has no unfinalized txs
[23:05:07][CashTab Unit Tests] Cashtab wallet methods Determines if a wallet has unfinalized txs in history hasUnfinalizedTxsInHistory: Returns false if parsedTxHistory is not an array accessible at the state key
[23:05:07][Step 1/1] CashTab Unit Tests
[23:05:07][CashTab Unit Tests] <Alias /> Registered and Pending Aliases are correctly rendered
[23:05:07][CashTab Unit Tests] <Alias /> Registered and Pending Aliases are correctly rendered when pending list is empty
[23:05:07][CashTab Unit Tests] <Alias /> Registered and Pending Aliases are correctly rendered when registered list is empty
[23:05:07][CashTab Unit Tests] <Alias /> Registered and Pending lists still renders when aliasValidationError is populated and aliasServerError is false
[23:05:07][CashTab Unit Tests] <Alias /> Registered and Pending lists do not render when aliasValidationError is false and aliasServerError is populated
[23:05:07][Step 1/1] CashTab Unit Tests
[23:05:07][CashTab Unit Tests] <Rewards /> Renders the loading component while loading, then the Rewards screen
[23:05:07][CashTab Unit Tests] <Rewards /> An eligible cashtab wallet can claim a token reward
[23:05:07][CashTab Unit Tests] <Rewards /> An ineligible cashtab wallet sees a countdown to eligibility
[23:05:07][CashTab Unit Tests] <Rewards /> We see expected error if token server is out of money
[23:05:07][Step 1/1] CashTab Unit Tests
[23:05:07][CashTab Unit Tests] <Token /> available actions rendered SLP1 fixed supply token
[23:05:07][CashTab Unit Tests] <Token /> available actions rendered SLP1 variable supply token with mint baton
[23:05:07][CashTab Unit Tests] <Token /> available actions rendered SLP1 NFT Parent token
[23:05:07][CashTab Unit Tests] <Token /> available actions rendered ALP token
[23:05:07][Step 1/1] CashTab Unit Tests
[23:05:07][CashTab Unit Tests] Cashtab functions that build and broadcast rawtxs We can broadcast XEC transactions sendXec: 1000 satoshis with 1 change output at 1 sat/byte to p2pkh address
[23:05:07][CashTab Unit Tests] Cashtab functions that build and broadcast rawtxs We can broadcast XEC transactions sendXec: 1000 satoshis with 1 change output at 1 sat/byte to p2pkh address if all utxos are mature coinbase utxos
[23:05:07][CashTab Unit Tests] Cashtab functions that build and broadcast rawtxs We can broadcast XEC transactions sendXec: 1000 satoshis with 1 change output at 1 sat/byte to p2pkh address with an OP_RETURN output
[23:05:07][CashTab Unit Tests] Cashtab functions that build and broadcast rawtxs We can broadcast XEC transactions sendXec: 1000 satoshis with 1 change output at 1 sat/byte to p2pkh address with an OP_RETURN output at index 0
[23:05:07][CashTab Unit Tests] Cashtab functions that build and broadcast rawtxs We can broadcast XEC transactions sendXec: 1000 satoshis with 1 change output at 1 sat/byte to p2sh address
[23:05:07][CashTab Unit Tests] Cashtab functions that build and broadcast rawtxs We can broadcast XEC transactions sendXec: 1000 satoshis with 1 change output at 10 sat/byte
[23:05:07][CashTab Unit Tests] Cashtab functions that build and broadcast rawtxs We can broadcast XEC transactions sendXec: 1 satoshi per byte tx with no change outputs
[23:05:07][CashTab Unit Tests] Cashtab functions that build and broadcast rawtxs We can broadcast XEC transactions sendXec: 1 satoshi per byte tx with no change outputs from a wallet with utxos at many addresses
[23:05:07][CashTab Unit Tests] Cashtab functions that build and broadcast rawtxs We can broadcast XEC transactions sendXec: 1 satoshi per byte tx broadcast actually broadcast with this function
[23:05:07][CashTab Unit Tests] Cashtab functions that build and broadcast rawtxs We can broadcast XEC transactions sendXec: No precision error using JS Number on utxo with highest theoretically possible value
[23:05:07][CashTab Unit Tests] Cashtab functions that build and broadcast rawtxs We can broadcast XEC transactions sendXec: 15000 satoshis with 1 change output at 1 sat/byte to 5 p2pkh addresses
[23:05:07][CashTab Unit Tests] Cashtab functions that build and broadcast rawtxs We can broadcast XEC transactions sendXec: 15000 satoshis with 1 change output at 1 sat/byte to 5 p2sh outputs
[23:05:07][CashTab Unit Tests] Cashtab functions that build and broadcast rawtxs We can broadcast XEC transactions sendXec: Sending below dust threshold
[23:05:07][CashTab Unit Tests] Cashtab functions that build and broadcast rawtxs We can broadcast XEC transactions sendXec: Sending above wallet balance
[23:05:07][CashTab Unit Tests] Cashtab functions that build and broadcast rawtxs We can broadcast XEC transactions sendXec: Sending within wallet balance but insufficient to cover fee
[23:05:07][CashTab Unit Tests] Cashtab functions that build and broadcast rawtxs We can broadcast XEC transactions sendXec: Attempting to create a tx with fee rate below 1 sat/byte
[23:05:07][CashTab Unit Tests] Cashtab functions that build and broadcast rawtxs We can broadcast XEC transactions sendXec: Tx with utxos for which the wallet has no private keys
[23:05:07][CashTab Unit Tests] Cashtab functions that build and broadcast rawtxs We can broadcast XEC transactions sendXec: throws broadcast error from the node
[23:05:07][CashTab Unit Tests] Cashtab functions that build and broadcast rawtxs We can broadcast XEC transactions sendXec: Insufficient balance due to immature coinbase utxos
[23:05:07][CashTab Unit Tests] Cashtab functions that build and broadcast rawtxs Forming multisend targetOutputs getMultisendTargetOutputs: Airdrop
[23:05:07][CashTab Unit Tests] Cashtab functions that build and broadcast rawtxs Forming multisend targetOutputs getMultisendTargetOutputs: Multisend format with extra space around address and value
[23:05:07][CashTab Unit Tests] Cashtab functions that build and broadcast rawtxs Forming multisend targetOutputs getMultisendTargetOutputs: One address in multi format
[23:05:07][CashTab Unit Tests] Cashtab functions that build and broadcast rawtxs Forming multisend targetOutputs getMultisendTargetOutputs: Multisend including a non-integer JS result
[23:05:07][CashTab Unit Tests] Cashtab functions that build and broadcast rawtxs Forming multisend targetOutputs getMultisendTargetOutputs throws error for: Invalid multisend input (dust)
[23:05:07][CashTab Unit Tests] Cashtab functions that build and broadcast rawtxs Forming multisend targetOutputs getMultisendTargetOutputs throws error for: Too many decimal places
[23:05:07][CashTab Unit Tests] Cashtab functions that build and broadcast rawtxs Forming multisend targetOutputs getMultisendTargetOutputs throws error for: Use of comma as decimal place marker
[23:05:07][CashTab Unit Tests] Cashtab functions that build and broadcast rawtxs Forming multisend targetOutputs getMultisendTargetOutputs throws error for: Too many commas on one line
[23:05:07][CashTab Unit Tests] Cashtab functions that build and broadcast rawtxs Ignore unspendable coinbase utxos ignoreUnspendableUtxos: Array with no coinbase utxos returned unchanged
[23:05:07][CashTab Unit Tests] Cashtab functions that build and broadcast rawtxs Ignore unspendable coinbase utxos ignoreUnspendableUtxos: Array with immature coinbase utxo returned without immature coinbase utxo
[23:05:07][CashTab Unit Tests] Cashtab functions that build and broadcast rawtxs Ignore unspendable coinbase utxos ignoreUnspendableUtxos: Array with some immature coinbase utxos and some mature coinbase utxos returned without immature coinbase utxo
[23:05:07][CashTab Unit Tests] Cashtab functions that build and broadcast rawtxs Ignore unspendable coinbase utxos ignoreUnspendableUtxos: If blockheight is zero, all coinbase utxos are removed
[23:05:07][CashTab Unit Tests] Cashtab functions that build and broadcast rawtxs We can create and broadcast SLP v1 SEND and BURN txs from utxos of nng or in-node chronik shape Build and broadcast an SLP V1 SEND and BURN tx from in-node chronik-client utxos: SLP send and burn with token change
[23:05:07][CashTab Unit Tests] Cashtab functions that build and broadcast rawtxs We can create and broadcast SLP v1 SEND and BURN txs from utxos of nng or in-node chronik shape Build and broadcast an SLP V1 SEND and BURN tx from in-node chronik-client utxos: SLP send and BURN with no token change
[23:05:07][CashTab Unit Tests] Cashtab functions that build and broadcast rawtxs We can create and broadcast SLP v1 SEND and BURN txs from utxos of nng or in-node chronik shape Build and broadcast an SLP V1 SEND and BURN tx from in-node chronik-client utxos: SLP max send tx using all available input utxos
[23:05:07][CashTab Unit Tests] Cashtab functions that build and broadcast rawtxs We can build and broadcast NFT1 parent fan-out txs sendXec: Gets 19 fan outputs for an NFT1 parent fan tx for max outputs and no change
[23:05:07][CashTab Unit Tests] Cashtab functions that build and broadcast rawtxs We can build and broadcast NFT1 parent fan-out txs sendXec: Gets 18 fan outputs for an NFT1 parent fan tx for max outputs if we have change
[23:05:07][CashTab Unit Tests] Cashtab functions that build and broadcast rawtxs We can build and broadcast NFT1 parent fan-out txs sendXec: Gets token amount fan outputs for an NFT1 parent fan tx if user has less than 19 of this token left
[23:05:07][Step 1/1] CashTab Unit Tests
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods Cashtab Msg building functions getCashtabMsgTargetOutput: Alphanumeric string
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods Cashtab Msg building functions getCashtabMsgTargetOutput: String with emojis
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods Cashtab Msg building functions getCashtabMsgTargetOutput: String of max length for Cashtab Msg
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods Cashtab Msg building functions getCashtabMsgTargetOutput throws error for: String exceeding max length for Cashtab Msg by 1 byte
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods Cashtab Msg building functions getCashtabMsgTargetOutput throws error for: non-string input
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods Cashtab Msg building functions getCashtabMsgTargetOutput throws error for: Empty string
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods getAirdropTargetOutput Airdrop with no optional msg
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods getAirdropTargetOutput Airdrop with many spaces for optional msg treated as no optional msg
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods getAirdropTargetOutput Airdrop with optional alphanumeric msg
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods getAirdropTargetOutput Airdrop with optional emoji and special characters msg
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods getAirdropTargetOutput Airdrop with optional msg of max allowable length
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods getAirdropTargetOutput getAirdropTargetOutput throws error for: Invalid tokenId provided
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods getAirdropTargetOutput getAirdropTargetOutput throws error for: Airdrop msg exceeding max length for airdrop msg by 1 byte
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods getAirdropTargetOutput getAirdropTargetOutput throws error for: non-string input for airdrop msg
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods Alias registration target output building functions getAliasTargetOutput: Valid alias to p2pkh address
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods Alias registration target output building functions getAliasTargetOutput: Valid alias to p2sh address
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods Alias registration target output building functions getAliasTargetOutput throws error for: Invalid alias
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods Alias registration target output building functions getAliasTargetOutput throws error for: Invalid address
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods Determines byte count of user input alias registrations getAliasByteCount: Alias with emoji
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods Determines byte count of user input alias registrations getAliasByteCount: Alias with emoji and text
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods Determines byte count of user input alias registrations getAliasByteCount: Alias with special characters
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods Determines byte count of user input alias registrations getAliasByteCount: Alias with Korean text
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods Determines byte count of user input alias registrations getAliasByteCount: Alias with Arabic text
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods Determines byte count of user input alias registrations getAliasByteCount: Alias with Chinese text
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods Determines byte count of user input alias registrations getAliasByteCount: Alias with mixed foreign alphabets and emoji
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods Determines byte count of user input alias registrations getAliasByteCount: Alphanumeric valid v0 alias
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods Determines byte count of user input alias registrations getAliasByteCount throws error for: non-text input
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods Determines bytecount of user input Cashtab Msg getCashtabMsgByteCount: a single emoji
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods Determines bytecount of user input Cashtab Msg getCashtabMsgByteCount: msg input with characters and emojis
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods Determines bytecount of user input Cashtab Msg getCashtabMsgByteCount: msg input with special characters
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods Determines bytecount of user input Cashtab Msg getCashtabMsgByteCount: msg input with a mixture of symbols, multilingual characters and emojis
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods Determines bytecount of user input Cashtab Msg getCashtabMsgByteCount: Alphanumeric string
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods Determines bytecount of user input Cashtab Msg getCashtabMsgByteCount: String with emojis
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods Determines bytecount of user input Cashtab Msg getCashtabMsgByteCount: String of max length for Cashtab Msg
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods Determines bytecount of user input Cashtab Msg getCashtabMsgByteCount throws error for: non-text input
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods Build target output for opreturn as bip21 param getOpreturnParamTargetOutput: Valid opreturn param input
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods Build target output for opreturn as bip21 param getOpreturnParamTargetOutput: Max length for opreturn param
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods Build target output for opreturn as bip21 param getOpreturnParamTargetOutput throws error for: Invalid opreturn param input
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods Parse op_return_raw input for display on Send screen parseOpReturnRaw: Returns protocol identifier and raw hex for an SLP tx
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods Parse op_return_raw input for display on Send screen parseOpReturnRaw: Returns protocol identifier and decoded message for a valid Cashtab msg
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods Parse op_return_raw input for display on Send screen parseOpReturnRaw: Returns protocol identifier and decoded message for an invalid Cashtab msg
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods Parse op_return_raw input for display on Send screen parseOpReturnRaw: Returns protocol identifier and decoded message for an encrypted Cashtab msg
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods Parse op_return_raw input for display on Send screen parseOpReturnRaw: Returns protocol identifier and tokenId for a valid airdrop with no msg
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods Parse op_return_raw input for display on Send screen parseOpReturnRaw: Returns protocol identifier and tokenId for a valid airdrop with msg
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods Parse op_return_raw input for display on Send screen parseOpReturnRaw: Returns protocol identifier and raw hex for invalid airdrop
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods Parse op_return_raw input for display on Send screen parseOpReturnRaw: Returns protocol identifier and raw hex for valid alias registration
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods Parse op_return_raw input for display on Send screen parseOpReturnRaw: Returns protocol identifier and raw hex for invalid alias registration
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods Parse op_return_raw input for display on Send screen parseOpReturnRaw: Valid paybutton with data and nonce
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods Parse op_return_raw input for display on Send screen parseOpReturnRaw: Valid paybutton with no data and nonce
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods Parse op_return_raw input for display on Send screen parseOpReturnRaw: Valid paybutton with data and no nonce
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods Parse op_return_raw input for display on Send screen parseOpReturnRaw: Valid empty paybutton
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods Parse op_return_raw input for display on Send screen parseOpReturnRaw: Invalid paybutton
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods Parse op_return_raw input for display on Send screen parseOpReturnRaw: Valid eCash chat
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods Parse op_return_raw input for display on Send screen parseOpReturnRaw: Invalid eCash chat
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods Parse op_return_raw input for display on Send screen parseOpReturnRaw: Returns unknown for unknown OP_RETURN
[23:05:07][CashTab Unit Tests] Cashtab opreturn methods Parse op_return_raw input for display on Send screen parseOpReturnRaw throws error for: Throws error if op_return_raw is invalid OP_RETURN
[23:05:07][Step 1/1] CashTab Unit Tests
[23:05:07][CashTab Unit Tests] <BalanceHeader /> Renders the loader if balanceSats is not an integer
[23:05:07][CashTab Unit Tests] <BalanceHeader /> Renders the BalanceHeader component correctly with default locale en-US
[23:05:07][CashTab Unit Tests] <BalanceHeader /> Renders the BalanceHeader component correctly with fr-FR locale
[23:05:07][CashTab Unit Tests] <BalanceHeader /> Balance is hidden if cashtabSettings.balanceVisible is false
[23:05:07][CashTab Unit Tests] <BalanceHeader /> Renders fiat price for a non-USD currency
[23:05:07][CashTab Unit Tests] <BalanceHeader /> Fiat price and forex are not displayed if fiatPrice is unavailable
[23:05:07][Step 1/1] CashTab Unit Tests
[23:05:07][CashTab Unit Tests] <Receive /> Renders as expected on desktop, including copy paste functionality of clicking on the QR code
[23:05:07][CashTab Unit Tests] <Receive /> Renders the Receive screen with QR code of expected width for smallest supported mobile view
[23:05:07][CashTab Unit Tests] <Receive /> Renders the Receive screen with QR code of size that is fully viewable in extension dimensions
[23:05:07][Step 1/1] CashTab Unit Tests
[23:05:07][CashTab Unit Tests] queryAliasServer() correctly throws a network error for server downtime or a malformed fetch url
[23:05:07][CashTab Unit Tests] queryAliasServer() correctly returns an array of alias objects for a valid eCash address that has registered aliases
[23:05:07][CashTab Unit Tests] queryAliasServer() correctly returns an array of alias objects for a valid prefix-less eCash address that has registered aliases
[23:05:07][CashTab Unit Tests] queryAliasServer() returns an empty array for a valid eCash address with no aliases
[23:05:07][CashTab Unit Tests] queryAliasServer() throws an error for an invalid eCash address
[23:05:07][CashTab Unit Tests] queryAliasServer() returns an alias object for a registered alias
[23:05:07][CashTab Unit Tests] queryAliasServer() returns an api error for a non-alphanumeric alias
[23:05:07][CashTab Unit Tests] queryAliasServer() returns a valid object for an unregistered alias
[23:05:07][CashTab Unit Tests] queryAliasServer() returns an error for an alias longer than 21 characters
[23:05:07][Step 1/1] CashTab Unit Tests
[23:05:07][CashTab Unit Tests] <CreateTokenForm /> User can input valid token parameters, generate a token, and view a success notification
[23:05:07][CashTab Unit Tests] <CreateTokenForm /> User can create a token with a mint baton
[23:05:07][Step 1/1] CashTab Unit Tests
[23:05:07][CashTab Unit Tests] <SendXec /> rendered with params in URL Legacy params. Address and value keys are set and valid.
[23:05:07][CashTab Unit Tests] <SendXec /> rendered with params in URL Legacy params. Address and value keys are set and valid. Invalid bip21 string is ignored.
[23:05:07][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
[23:05:07][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
[23:05:07][CashTab Unit Tests] <SendXec /> rendered with params in URL Legacy params. Params are ignored if only value param is present
[23:05:07][CashTab Unit Tests] <SendXec /> rendered with params in URL Legacy params. Params are ignored if param is duplicated
[23:05:07][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
[23:05:07][CashTab Unit Tests] <SendXec /> rendered with params in URL bip21 param - valid bip21 param with amount and op_return_raw is parsed as expected
[23:05:07][CashTab Unit Tests] <SendXec /> rendered with params in URL bip21 param - an invalid bip21 param shows validation errors but cannot be changed
[23:05:07][CashTab Unit Tests] <SendXec /> rendered with params in URL No params. Send screen loads normally with no rendered input.
[23:05:07][Step 1/1] CashTab Unit Tests
[23:05:07][CashTab Unit Tests] Correctly executes formatting functions test formatBalance with an input of 0
[23:05:07][CashTab Unit Tests] Correctly executes formatting functions test formatBalance with zero XEC balance input
[23:05:07][CashTab Unit Tests] Correctly executes formatting functions test formatBalance with a small XEC balance input with 2+ decimal figures
[23:05:07][CashTab Unit Tests] Correctly executes formatting functions test formatBalance with 1 Million XEC balance input
[23:05:07][CashTab Unit Tests] Correctly executes formatting functions test formatBalance with 1 Billion XEC balance input
[23:05:07][CashTab Unit Tests] Correctly executes formatting functions test formatBalance with total supply as XEC balance input
[23:05:07][CashTab Unit Tests] Correctly executes formatting functions test formatBalance with > total supply as XEC balance input
[23:05:07][CashTab Unit Tests] Correctly executes formatting functions test formatBalance with no balance
[23:05:07][CashTab Unit Tests] Correctly executes formatting functions test formatBalance with null input
[23:05:07][CashTab Unit Tests] Correctly executes formatting functions test formatBalance with undefined as input
[23:05:07][CashTab Unit Tests] Correctly executes formatting functions test formatBalance with non-numeric input
[23:05:07][CashTab Unit Tests] Correctly executes formatting functions Accepts a valid unix timestamp
[23:05:07][CashTab Unit Tests] Correctly executes formatting functions Accepts an empty string and generates a new timestamp
[23:05:07][CashTab Unit Tests] Correctly executes formatting functions Accepts no parameter and generates a new timestamp
[23:05:07][CashTab Unit Tests] Correctly executes formatting functions Accepts 'undefined' as a parameter and generates a new date
[23:05:07][CashTab Unit Tests] Correctly executes formatting functions Rejects an invalid string containing letters.
[23:05:07][CashTab Unit Tests] Correctly executes formatting functions Rejects an invalid string containing numbers.
[23:05:07][CashTab Unit Tests] Correctly executes formatting functions test formatFiatBalance with zero XEC balance input
[23:05:07][CashTab Unit Tests] Correctly executes formatting functions test formatFiatBalance with a small XEC balance input with 2+ decimal figures
[23:05:07][CashTab Unit Tests] Correctly executes formatting functions test formatFiatBalance with a large XEC balance input with 2+ decimal figures
[23:05:07][CashTab Unit Tests] Correctly executes formatting functions test formatFiatBalance with no balance
[23:05:07][CashTab Unit Tests] Correctly executes formatting functions test formatFiatBalance with null input
[23:05:07][CashTab Unit Tests] Correctly executes formatting functions test formatFiatBalance with undefined input
[23:05:07][CashTab Unit Tests] Correctly executes formatting functions We can format decimalized token strings for userLocale decimalizedTokenQtyToLocaleFormat: 9-decimal token
[23:05:07][CashTab Unit Tests] Correctly executes formatting functions We can format decimalized token strings for userLocale decimalizedTokenQtyToLocaleFormat: Max possible eToken qty
[23:05:07][CashTab Unit Tests] Correctly executes formatting functions We can format decimalized token strings for userLocale decimalizedTokenQtyToLocaleFormat: Max possible eToken qty with decimals
[23:05:07][CashTab Unit Tests] Correctly executes formatting functions We can format decimalized token strings for userLocale decimalizedTokenQtyToLocaleFormat: One less than max possible eToken qty with decimals
[23:05:07][CashTab Unit Tests] Correctly executes formatting functions We can format decimalized token strings for userLocale decimalizedTokenQtyToLocaleFormat: A pretty normal token quantity
[23:05:07][CashTab Unit Tests] Correctly executes formatting functions We can format decimalized token strings for userLocale decimalizedTokenQtyToLocaleFormat: Smallest possible eToken quantity
[23:05:07][CashTab Unit Tests] Correctly executes formatting functions We can format decimalized token strings for userLocale decimalizedTokenQtyToLocaleFormat: Smallest possible eToken quantity, but French
[23:05:07][CashTab Unit Tests] Correctly executes formatting functions We can format decimalized token strings for userLocale decimalizedTokenQtyToLocaleFormat: One less than max possible eToken qty with decimals, but french
[23:05:07][CashTab Unit Tests] Correctly executes formatting functions We can format decimalized token strings for userLocale decimalizedTokenQtyToLocaleFormat: Locale with no thousands separator
[23:05:07][CashTab Unit Tests] Correctly executes formatting functions We can format decimalized token strings for userLocale decimalizedTokenQtyToLocaleFormat: Locale with multibyte thousands separator works as this is still string length 1
[23:05:07][CashTab Unit Tests] Correctly executes formatting functions We can format decimalized token strings for userLocale decimalizedTokenQtyToLocaleFormat: Locale with multibyte thousands separator works as this is still string length 1
[23:05:07][CashTab Unit Tests] Correctly executes formatting functions We can format an XEC balance toFormattedXec: Balance over 1 trillion XEC (10 trillion)
[23:05:07][CashTab Unit Tests] Correctly executes formatting functions We can format an XEC balance toFormattedXec: Balance of exactly 1 trillion XEC
[23:05:07][CashTab Unit Tests] Correctly executes formatting functions We can format an XEC balance toFormattedXec: Balance exceeding 1 billion XEC (10 billion)
[23:05:07][CashTab Unit Tests] Correctly executes formatting functions We can format an XEC balance toFormattedXec: Balance exactly 1 billion XEC
[23:05:07][CashTab Unit Tests] Correctly executes formatting functions We can format an XEC balance toFormattedXec: Balance exceeding 1 million XEC (10 million)
[23:05:07][CashTab Unit Tests] Correctly executes formatting functions We can format an XEC balance toFormattedXec: Balance of exactly 1 million XEC
[23:05:07][CashTab Unit Tests] Correctly executes formatting functions We can format an XEC balance toFormattedXec: Balance exceeding 1 thousand XEC (10 thousand)
[23:05:07][CashTab Unit Tests] Correctly executes formatting functions We can format an XEC balance toFormattedXec: Balance of exactly 1 thousand XEC
[23:05:07][CashTab Unit Tests] Correctly executes formatting functions We can format an XEC balance toFormattedXec: Balance less than 1 thousand XEC
[23:05:07][CashTab Unit Tests] Correctly executes formatting functions We can format an XEC balance toFormattedXec: Balance less than 1 thousand XEC, but french
[23:05:07][CashTab Unit Tests] Correctly executes formatting functions We can format an XEC balance toFormattedXec: Balance less than 1 thousand XEC, but arabic
[23:05:07][Step 1/1] CashTab Unit Tests
[23:05:07][CashTab Unit Tests] <Contacts /> We can add, delete, rename, contacts from the Configure screen, and add a savedWallet as a contact
[23:05:07][CashTab Unit Tests] <Contacts /> We can send a tx to an address in contacts
[23:05:07][Step 1/1] CashTab Unit Tests
[23:05:07][CashTab Unit Tests] Cashtab airdrop methods Gets csv list of airdrop recipients address and amounts for a standard (prorata) airdrop getAirdropTx: We can calculate an airdrop for holders of a given tokenId and no ignored addresses
[23:05:07][CashTab Unit Tests] Cashtab airdrop methods Gets csv list of airdrop recipients address and amounts for a standard (prorata) airdrop getAirdropTx: We can calculate an airdrop for holders of a given tokenId and one ignored address
[23:05:07][CashTab Unit Tests] Cashtab airdrop methods Gets csv list of airdrop recipients address and amounts for a standard (prorata) airdrop getAirdropTx: We can calculate an airdrop for holders of a given tokenId and two ignored addresses
[23:05:07][CashTab Unit Tests] Cashtab airdrop methods Gets csv list of airdrop recipients address and amounts for a standard (prorata) airdrop getAirdropTx: We can calculate an airdrop for holders of a given tokenId with no ignored addresses and a specified minTokenQtyUndecimalized that renders only one address eligible
[23:05:07][CashTab Unit Tests] Cashtab airdrop methods Gets csv list of airdrop recipients address and amounts for a standard (prorata) airdrop getAirdropTx: We can calculate an airdrop for holders of a given tokenId with no ignored addresses and a specified minTokenQtyUndecimalized that renders some addresses eligible
[23:05:07][CashTab Unit Tests] Cashtab airdrop methods Gets csv list of airdrop recipients address and amounts for a standard (prorata) airdrop getAirdropTx: We can calculate an airdrop for holders of a given tokenId with an ignored addresses and a specified minTokenQtyUndecimalized that renders some addresses eligible
[23:05:07][CashTab Unit Tests] Cashtab airdrop methods Gets csv list of airdrop recipients address and amounts for a standard (prorata) airdrop getAirdropTx throws error for: We throw expected error if no tokens are held at p2pkh or p2sh addresses
[23:05:07][CashTab Unit Tests] Cashtab airdrop methods Gets csv list of airdrop recipients address and amounts for a standard (prorata) airdrop getAirdropTx throws error for: We throw expected error if all eligible addresses are excluded
[23:05:07][CashTab Unit Tests] Cashtab airdrop methods Gets csv list of airdrop recipients address and amounts for a standard (prorata) airdrop getAirdropTx throws error for: We throw expected error if all eligible recipients would receive dust
[23:05:07][CashTab Unit Tests] Cashtab airdrop methods Gets csv list of airdrop recipients address and amounts for an equal airdrop getEqualAirdropTx: We can calculate an airdrop for holders of a given tokenId and no ignored addresses
[23:05:07][CashTab Unit Tests] Cashtab airdrop methods Gets csv list of airdrop recipients address and amounts for an equal airdrop getEqualAirdropTx: We can calculate an airdrop for holders of a given tokenId and one ignored address
[23:05:07][CashTab Unit Tests] Cashtab airdrop methods Gets csv list of airdrop recipients address and amounts for an equal airdrop getEqualAirdropTx: We can calculate an airdrop for holders of a given tokenId and two ignored addresses
[23:05:07][CashTab Unit Tests] Cashtab airdrop methods Gets csv list of airdrop recipients address and amounts for an equal airdrop getEqualAirdropTx: We can calculate an airdrop for holders of a given tokenId with no ignored addresses and a specified minTokenQtyUndecimalized that renders only one address eligible
[23:05:07][CashTab Unit Tests] Cashtab airdrop methods Gets csv list of airdrop recipients address and amounts for an equal airdrop getEqualAirdropTx: We can calculate an airdrop for holders of a given tokenId with no ignored addresses and a specified minTokenQtyUndecimalized that renders some addresses eligible
[23:05:07][CashTab Unit Tests] Cashtab airdrop methods Gets csv list of airdrop recipients address and amounts for an equal airdrop getEqualAirdropTx: We can calculate an airdrop for holders of a given tokenId with an ignored addresses and a specified minTokenQtyUndecimalized that renders some addresses eligible
[23:05:07][CashTab Unit Tests] Cashtab airdrop methods Gets csv list of airdrop recipients address and amounts for an equal airdrop getEqualAirdropTx throws error for: We throw expected error if no tokens are held at p2pkh or p2sh addresses
[23:05:07][CashTab Unit Tests] Cashtab airdrop methods Gets csv list of airdrop recipients address and amounts for an equal airdrop getEqualAirdropTx throws error for: We throw expected error if all eligible addresses are excluded
[23:05:07][CashTab Unit Tests] Cashtab airdrop methods Gets csv list of airdrop recipients address and amounts for an equal airdrop getEqualAirdropTx throws error for: We throw expected error if all eligible addresses are excluded
[23:05:07][CashTab Unit Tests] Cashtab airdrop methods Gets csv list of airdrop recipients address and amounts for an equal airdrop getEqualAirdropTx throws error for: We throw expected error if anticipated airdrop amount is less than dust
[23:05:07][Step 1/1] CashTab Unit Tests
[23:05:07][CashTab Unit Tests] <CreateToken /> If wallet has sufficient XEC, renders CreateTokenForm
[23:05:07][CashTab Unit Tests] <CreateToken /> If wallet has insufficient XEC, renders component but does not render CreateTokenForm
[23:05:07][Step 1/1] CashTab Unit Tests
[23:05:07][CashTab Unit Tests] Cashtab helper functions Detect mobile or desktop devices isMobile: Navigator is undefined
[23:05:07][CashTab Unit Tests] Cashtab helper functions Detect mobile or desktop devices isMobile: Navigator.userAgentData is undefined
[23:05:07][CashTab Unit Tests] Cashtab helper functions Detect mobile or desktop devices isMobile: Desktop device on browser with userAgentData support
[23:05:07][CashTab Unit Tests] Cashtab helper functions Detect mobile or desktop devices isMobile: Mobile device on browser with userAgentData support
[23:05:07][CashTab Unit Tests] Cashtab helper functions Get user locale getUserLocale: navigator is undefined
[23:05:07][CashTab Unit Tests] Cashtab helper functions Get user locale getUserLocale: navigator.language is undefined
[23:05:07][CashTab Unit Tests] Cashtab helper functions Get user locale getUserLocale: navigator.language is defined and not the default
[23:05:07][CashTab Unit Tests] Cashtab helper functions Converts cashtabCache to and from JSON for storage and in-app use cashtabCacheToJSON and storedCashtabCacheToMap: Converts cashtabCache with populated token cache to JSON for storage
[23:05:07][CashTab Unit Tests] Cashtab helper functions Converts cashtabCache to and from JSON for storage and in-app use cashtabCacheToJSON and storedCashtabCacheToMap: Converts cashtabCache with empty token cache to JSON for storage
[23:05:07][CashTab Unit Tests] Cashtab helper functions Converts cashtabWallet to and from JSON for storage and in-app use cashtabWalletToJSON and cashtabWalletFromJSON: Newly created Cashtab wallet
[23:05:07][CashTab Unit Tests] Cashtab helper functions Converts cashtabWallet to and from JSON for storage and in-app use cashtabWalletToJSON and cashtabWalletFromJSON: Pre-2.1.0 wallet is unchanged
[23:05:07][CashTab Unit Tests] Cashtab helper functions Converts cashtabWallet to and from JSON for storage and in-app use cashtabWalletToJSON and cashtabWalletFromJSON: Pre-2.9.0 wallet is unchanged
[23:05:07][CashTab Unit Tests] Cashtab helper functions Converts cashtabWallet to and from JSON for storage and in-app use cashtabWalletToJSON and cashtabWalletFromJSON: Cashtab wallet with multiple paths
[23:05:07][CashTab Unit Tests] Cashtab helper functions Converts cashtabWallet to and from JSON for storage and in-app use cashtabWalletToJSON and cashtabWalletFromJSON: Cashtab wallet with multiple paths and tokens in state
[23:05:07][CashTab Unit Tests] Cashtab helper functions Converts cashtabWallets (array) to and from JSON for storage and in-app use cashtabWalletsToJSON and cashtabWalletsFromJSON: Newly created Cashtab wallets
[23:05:07][CashTab Unit Tests] Cashtab helper functions Converts cashtabWallets (array) to and from JSON for storage and in-app use cashtabWalletsToJSON and cashtabWalletsFromJSON: Pre-2.1.0 wallets are unchanged
[23:05:07][CashTab Unit Tests] Cashtab helper functions Converts cashtabWallets (array) to and from JSON for storage and in-app use cashtabWalletsToJSON and cashtabWalletsFromJSON: Pre-2.9.0 wallets are unchanged
[23:05:07][CashTab Unit Tests] Cashtab helper functions Converts cashtabWallets (array) to and from JSON for storage and in-app use cashtabWalletsToJSON and cashtabWalletsFromJSON: Cashtab wallets with multiple paths
[23:05:07][CashTab Unit Tests] Cashtab helper functions Converts cashtabWallets (array) to and from JSON for storage and in-app use cashtabWalletsToJSON and cashtabWalletsFromJSON: Cashtab wallets with multiple paths and tokens in state
[23:05:07][Step 1/1] CashTab Unit Tests
[23:05:07][CashTab Unit Tests] <Home /> Renders the loading component while loading, then the Home screen
[23:05:07][CashTab Unit Tests] <Home /> Renders the Home screen with API error
[23:05:07][CashTab Unit Tests] <Home /> Renders backup warning and QR Code if user loads with a new wallet
[23:05:07][Step 1/1] CashTab Unit Tests
[23:05:07][CashTab Unit Tests] sumOneToManyXec() correctly parses the value for a valid one to many send XEC transaction
[23:05:07][CashTab Unit Tests] sumOneToManyXec() correctly parses the value for a valid one to many send XEC transaction with decimals
[23:05:07][CashTab Unit Tests] sumOneToManyXec() returns NaN for an address and value array that is partially typed or has invalid format
[23:05:07][Step 1/1] CashTab Unit Tests
[23:05:07][CashTab Unit Tests] <CashtabTestWrapper /> With default props, renders App component
[23:05:07][CashTab Unit Tests] <CashtabTestWrapper /> We can render other pages by passing the route
[23:05:07][Step 1/1] CashTab Unit Tests
[23:05:07][CashTab Unit Tests] <QRCode /> QRCode copying ecash address
[23:05:07][CashTab Unit Tests] <QRCode /> QRCode copying eToken address
[23:05:07][CashTab Unit Tests] <QRCode /> QRCode will render without address
[23:05:07][Step 1/1] CashTab Unit Tests
[23:05:07][CashTab Unit Tests] <ScanQRCode /> Renders the modal on load if loadWithCameraOpen is true
[23:05:07][CashTab Unit Tests] <ScanQRCode /> Does not render the modal on load if loadWithCameraOpen is false
[23:05:07][Step 1/1] CashTab Unit Tests
[23:05:07][CashTab Unit Tests] <Airdrop /> We can send a pro-rata airdrop and equal tx to a tokenId not in our cache using custom settings
[23:05:07][CashTab Unit Tests] <Airdrop /> We can ignore addresses with less than a token balance for a token with decimals
[23:05:07][Step 1/1] CashTab Unit Tests
[23:05:07][CashTab Unit Tests] <SendToken /> Renders the SendToken screen with send address input
[23:05:07][CashTab Unit Tests] <SendToken /> Accepts a valid ecash: prefixed address
[23:05:07][CashTab Unit Tests] <SendToken /> Accepts a valid etoken: prefixed address
[23:05:07][CashTab Unit Tests] <SendToken /> Accepts a valid alias
[23:05:07][CashTab Unit Tests] <SendToken /> Displays a validation error for an invalid address
[23:05:07][CashTab Unit Tests] <SendToken /> Displays a validation error for an alias without .xec suffix
[23:05:07][CashTab Unit Tests] <SendToken /> Displays a validation error for valid alias that has not yet been registered
[23:05:07][CashTab Unit Tests] <SendToken /> Displays expected error if alias server gives a bad response
[23:05:07][CashTab Unit Tests] <SendToken /> Displays a validation error if the user includes any query string
[23:05:07][CashTab Unit Tests] <SendToken /> Renders the send token notification upon successful broadcast
[23:05:07][CashTab Unit Tests] <SendToken /> Renders the burn token success notification upon successful burn tx broadcast
[23:05:07][CashTab Unit Tests] <SendToken /> Mint switch is disabled if no mint batons for this token in the wallet
[23:05:07][CashTab Unit Tests] <SendToken /> We can mint an slpv1 token if we have a mint baton
[23:05:07][Step 1/1] CashTab Unit Tests
[23:05:07][CashTab Unit Tests] <SignVerifyMsg /> Notification is rendered upon successfully signing a message
[23:05:07][CashTab Unit Tests] <SignVerifyMsg /> Notification is rendered upon successfully verifying a message
[23:05:07][CashTab Unit Tests] <SignVerifyMsg /> Notification is rendered upon signature verification error
[23:05:07][Step 1/1] CashTab Unit Tests
[23:05:07][CashTab Unit Tests] <Configure /> We do not see the camera auto-open setting in the config screen on a desktop device
[23:05:07][CashTab Unit Tests] <Configure /> We do see the camera auto-open setting in the config screen on a mobile device
[23:05:07][CashTab Unit Tests] <Configure /> Setting "Send Confirmations" settings will show send confirmations
[23:05:07][CashTab Unit Tests] <Configure /> Setting "ABSOLUTE MINIMUM fees" settings will reduce fees to absolute min
[23:05:07][CashTab Unit Tests] <Configure /> We can choose a new fiat currency
[23:05:07][Step 1/1] CashTab Unit Tests
[23:05:07][CashTab Unit Tests] <Wallets /> We can add a savedWallet as a contact
[23:05:07][CashTab Unit Tests] <Wallets /> We can copy the address of a savedWallet to the clipboard
[23:05:07][CashTab Unit Tests] <Wallets /> Confirm mocked bip39.generateMnemonic() returns the expected seed
[23:05:07][CashTab Unit Tests] <Wallets /> 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
[23:05:07][Step 1/1] CashTab Unit Tests
[23:05:07][CashTab Unit Tests] <App /> Renders onboarding screen at home route if user has no wallet
[23:05:07][CashTab Unit Tests] <App /> Renders onboarding screen at Receive route if user has no wallet
[23:05:07][CashTab Unit Tests] <App /> Renders onboarding screen even on a bad route if user has no wallet
[23:05:07][CashTab Unit Tests] <App /> Renders 404 at bad route if user has a wallet
[23:05:07][CashTab Unit Tests] <App /> Navigation menu routes to expected components
[23:05:07][CashTab Unit Tests] <App /> Adding a contact to to a new contactList by clicking on tx history adds it to localforage and wallet context
[23:05:07][CashTab Unit Tests] <App /> Adding a contact to an existing contactList by clicking on tx history adds it to localforage and wallet context
[23:05:07][CashTab Unit Tests] <App /> A user with legacy blank contactList in localstorage is migrated on startup
[23:05:07][CashTab Unit Tests] <App /> Clicking "reply" on a Cashtab Msg correctly populates the SendXec to address and amount fields
[23:05:07][CashTab Unit Tests] <App /> If Cashtab starts up with some settings keys missing, the missing keys are migrated to default values
[23:05:07][CashTab Unit Tests] <App /> Wallet with easter egg token sees easter egg
[23:05:07][CashTab Unit Tests] <App /> If Cashtab starts with 1.5.* cashtabCache, it is wiped and migrated to 2.9.0 cashtabCache
[23:05:07][CashTab Unit Tests] <App /> A new user can import a mnemonic
[23:05:07][CashTab Unit Tests] <App /> Migrating from wallet/savedWallet keys (version < 1.6.0): A user with an invalid Cashtab wallet as the active wallet is migrated on startup
[23:05:07][CashTab Unit Tests] <App /> Migrating from wallet/savedWallet keys (version < 1.6.0): A user with pre-2.1.0 valid wallets in savedWallets has them all migrated to new storage keys and new shape
[23:05:07][CashTab Unit Tests] <App /> Migrating (version >= 1.6.0 and < 2.1.0): A user with an invalid wallet stored at wallets key has that wallet migrated
[23:05:07][CashTab Unit Tests] <App /> Migrating (version >= 1.6.0 and < 2.1.0): A user with multiple invalid wallets stored at wallets key has them migrated
[23:05:07][CashTab Unit Tests] <App /> Cashtab version >= 1.6.0 and < 2.1.0: A user with an invalid Cashtab wallet as the active wallet is migrated on startup
[23:05:07][CashTab Unit Tests] <App /> A user with all valid wallets stored at wallets key does not have any wallets migrated
[23:05:07][CashTab Unit Tests] <App /> Migrating (version < 2.9.0): A user with multiple invalid wallets stored at wallets key has them migrated
[23:05:07][CashTab Unit Tests] <App /> Migrating (version < 2.9.0): A user with an invalid Cashtab wallet as the active wallet is migrated on startup
[23:05:07][CashTab Unit Tests] <App /> If Cashtab starts with < 2.9.0 cashtabCache, it is wiped and migrated to 2.9.0 cashtabCache
[23:05:07][CashTab Unit Tests] <App /> We see a price notification if new price is at a new tens level in USD per 1,000,000 XEC, and a special notification if a zero is killed
[23:05:07][CashTab Unit Tests] <App /> We do not see price notifications if new price is at a new tens level in JPY per 1,000,000 XEC, because user fiat currency does not support zero killed notifications for JPY
[23:05:07][Step 1/1] CashTab Unit Tests
[23:05:07][CashTab Unit Tests] <SendXec /> Renders the SendXec screen with send address input
[23:05:07][CashTab Unit Tests] <SendXec /> Pass valid address to Send To field
[23:05:07][CashTab Unit Tests] <SendXec /> Pass valid alias to Send To field
[23:05:07][CashTab Unit Tests] <SendXec /> Pass an invalid address to Send To field and get a validation error
[23:05:07][CashTab Unit Tests] <SendXec /> Pass a possibly valid alias without .xec suffix to Send To field and get expected error
[23:05:07][CashTab Unit Tests] <SendXec /> Pass a valid alias to Send To field that has not yet been registered and get expected error
[23:05:07][CashTab Unit Tests] <SendXec /> Get expected error msg and send disabled if bad response from alias server
[23:05:07][CashTab Unit Tests] <SendXec /> Pass a valid address and bip21 query string with valid amount param to Send To field
[23:05:07][CashTab Unit Tests] <SendXec /> Pass a valid alias and bip21 query string with valid amount param to Send To field
[23:05:07][CashTab Unit Tests] <SendXec /> Pass a valid address and bip21 query string with invalid amount param (dust) to Send To field
[23:05:07][CashTab Unit Tests] <SendXec /> Valid address with valid bip21 query string with valid amount param rejected if amount exceeds wallet balance
[23:05:07][CashTab Unit Tests] <SendXec /> Pass a valid alias and bip21 query string with invalid amount param (too many decimals) to Send To field
[23:05:07][CashTab Unit Tests] <SendXec /> Pass a valid address and an invalid bip21 query string
[23:05:07][CashTab Unit Tests] <SendXec /> Pass a valid address and bip21 query string with op_return_raw param to Send To field
[23:05:07][CashTab Unit Tests] <SendXec /> Pass a valid address and bip21 query string with valid amount and op_return_raw params to Send To field
[23:05:07][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
[23:05:07][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
[23:05:07][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
[23:05:07][CashTab Unit Tests] <SendXec /> If the user has minFeeSends set to true but no longer has the right token amount, the feature is disabled
[23:05:07][CashTab Unit Tests] <SendXec /> We can send a tx with amount denominated in fiat currency
[23:05:07][CashTab Unit Tests] <SendXec /> We can send an XEC tx to multiple users
[23:05:07][CashTab Unit Tests] <SendXec /> If we type a Cashtab msg, then disable the switch, we send a tx without our typed Cashtab message
[23:05:07][Creating archive artifacts.tar.gz] Archive was created, file size 171.29 KB (175405 bytes)
[23:05:10][Publishing artifacts] Publishing 1 file using [ArtifactsCachePublisher]: results/artifacts => artifacts.tar.gz
[23:05:10][Publishing artifacts] Publishing 1 file using [WebPublisher]: results/artifacts => artifacts.tar.gz
[23:05:07][Step 1/1] ##teamcity[publishArtifacts '+:results/artifacts=>artifacts.tar.gz']
[23:05:10][Step 1/1] Build cashtab-tests failed with exit code 1
[23:05:07][Step 1/1] ##teamcity[buildProblem timestamp='2024-04-18T23:05:07.690' description='Build cashtab-tests failed with exit code 1']
[23:05:07][Step 1/1] cy="26"
[23:05:07][Step 1/1] fill="none"
[23:05:07][Step 1/1] r="25"
[23:05:07][Step 1/1] />
[23:05:07][Step 1/1] <path
[23:05:07][Step 1/1] class="sc-esjQYD cnXDYD"
[23:05:07][Step 1/1] d="M14.1 27.2l7.1 7.2 16.7-16.8"
[23:05:07][Step 1/1] fill="none"
[23:05:07][Step 1/1] />
[23:05:07][Step 1/1] </svg>
[23:05:07][Step 1/1] </div>
[23:05:07][Step 1/1] </div>
[23:05:07][Step 1/1] <div
[23:05:07][Step 1/1] class="sc-htoDjs kcOqHg"
[23:05:07][Step 1/1] >
[23:05:07][Step 1/1] Oct 1, 2022, 23:36:08
[23:05:07][Step 1/1] </div>
[23:05:07][Step 1/1] </div>
[23:05:07][Step 1/1] </div>
[23:05:07][Step 1/1] <div
[23:05:07][Step 1/1] class="sc-dnqmqq cGIJgt"
[23:05:07][Step 1/1] >
[23:05:07][Step 1/1] <div
[23:05:07][Step 1/1] class="sc-iwsKbI bFYjcF"
[23:05:07][Step 1/1] >
[23:05:07][Step 1/1] 5.69
[23:05:07][Step 1/1] XEC
[23:05:07][Step 1/1] </div>
[23:05:07][Step 1/1] <div
[23:05:07][Step 1/1] class="sc-gZMcBi duMjuZ"
[23:05:07][Step 1/1] >
[23:05:07][Step 1/1] $
[23:05:07][Step 1/1] 0.00
[23:05:07][Step 1/1] </div>
[23:05:07][Step 1/1] </div>
[23:05:07][Step 1/1] </div>
[23:05:07][Step 1/1] <div
[23:05:07][Step 1/1] class="sc-kpOJdX kTGcaF"
[23:05:07][Step 1/1] >
[23:05:07][Step 1/1] <div
[23:05:07][Step 1/1] class="sc-ckVGcZ duFkoQ"
[23:05:07][Step 1/1] >
[23:05:07][Step 1/1] <svg
[23:05:07][Step 1/1] title="tx-airdrop"
[23:05:07][Step 1/1] />
[23:05:07][Step 1/1] <div
[23:05:07][Step 1/1] class="sc-dxgOiQ cclswX"
[23:05:07][Step 1/1] >
[23:05:07][Step 1/1] Airdrop to holders of
[23:05:07][Step 1/1]
[23:05:07][Step 1/1] <a
[23:05:07][Step 1/1] class="sc-jWBwVP fDrbnp"
[23:05:07][Step 1/1] rel="noreferrer"
[23:05:07][Step 1/1] target="_blank"
[23:05:07][Step 1/1] >
[23:05:07][Step 1/1] bdb...37c
[23:05:07][Step 1/1] </a>
[23:05:07][Step 1/1] </div>
[23:05:07][Step 1/1] </div>
[23:05:07][Step 1/1] <img
[23:05:07][Step 1/1] alt="icon for bdb3b4215ca0622e0c4c07655522c376eaa891838a82f0217fa453bb0595a37c"
[23:05:07][Step 1/1] height="32"
[23:05:07][Step 1/1] width="32"
[23:05:07][Step 1/1] />
[23:05:07][Step 1/1] <div
[23:05:07][Step 1/1] class="sc-jKJlTe itNDJR"
[23:05:07][Step 1/1] >
[23:05:07][Step 1/1] evc token service holders air drop������❤����������
[23:05:07][Step 1/1] </div>
[23:05:07][Step 1/1] </div>
[23:05:07][Step 1/1] </div>
[23:05:07][Step 1/1] <div
[23:05:07][Step 1/1] class="sc-jTzLTM btsHzU"
[23:05:07][Step 1/1] >
[23:05:07][Step 1/1] <div
[23:05:07][Step 1/1] class="sc-fjdhpX dnUlwb"
[23:05:07][Step 1/1] >
[23:05:07][Step 1/1] <div
[23:05:07][Step 1/1] class="sc-jzJRlG gEyaXg"
[23:05:07][Step 1/1] >
[23:05:07][Step 1/1] Avalanche Finalized
[23:05:07][Step 1/1] </div>
[23:05:07][Step 1/1] <div
[23:05:07][Step 1/1] class="sc-hwwEjo cQMDVj"
[23:05:07][Step 1/1] >
[23:05:07][Step 1/1] <svg
[23:05:07][Step 1/1] class="sc-kPVwWT hxPyUc"
[23:05:07][Step 1/1] title="Finalized by Avalanche"
[23:05:07][Step 1/1] viewBox="0 0 52 52"
[23:05:07][Step 1/1] xmlns="http://www.w3.org/2000/svg"
[23:05:07][Step 1/1] >
[23:05:07][Step 1/1] <circle
[23:05:07][Step 1/1] class="sc-kfGgVZ eVBTzZ"
[23:05:07][Step 1/1] cx="26"
[23:05:07][Step 1/1] cy="26"
[23:05:07][Step 1/1] fill="none"
[23:05:07][Step 1/1] r="25"
[23:05:07][Step 1/1] />
[23:05:07][Step 1/1] <path
[23:05:07][Step 1/1] class="sc-esjQYD cnXDYD"
[23:05:07][Step 1/1] d="M14.1 27.2l7.1 7.2 16.7-16.8"
[23:05:07][Step 1/1] fill="none"
[23:05:07][Step 1/1] />
[23:05:07][Step 1/1] </svg>
[23:05:07][Step 1/1] </div>
[23:05:07][Step 1/1] </div>
[23:05:07][Step 1/1] <div
[23:05:07][Step 1/1] class="sc-cSHVUG gDEcVa"
[23:05:07][Step 1/1] >
[23:05:07][Step 1/1] <div
[23:05:07][Step 1/1] class="sc-fAjcbJ dKNdXN"
[23:05:07][Step 1/1] >
[23:05:07][Step 1/1] <button
[23:05:07][Step 1/1] class="sc-kAzzGY jjfqUh"
[23:05:07][Step 1/1] >
[23:05:07][Step 1/1] <svg
[23:05:07][Step 1/1] title="copy-paste"
[23:05:07][Step 1/1] />
[23:05:07][Step 1/1] </button>
[23:05:07][Step 1/1] </div>
[23:05:07][Step 1/1] <a
[23:05:07][Step 1/1] class="sc-chPdSV fCIcLj"
[23:05:07][Step 1/1] rel="noreferrer"
[23:05:07][Step 1/1] target="_blank"
[23:05:07][Step 1/1] >
[23:05:07][Step 1/1] <svg
[23:05:07][Step 1/1] class="sc-brqgnP czEshA"
[23:05:07][Step 1/1] />
[23:05:07][Step 1/1] </a>
[23:05:07][Step 1/1] <a
[23:05:07][Step 1/1] class="sc-chPdSV fCIcLj"
[23:05:07][Step 1/1] rel="noreferrer"
[23:05:07][Step 1/1] target="_blank"
[23:05:07][Step 1/1] >
[23:05:07][Step 1/1] <svg
[23:05:07][Step 1/1] class="sc-cMljjf hlUukk"
[23:05:07][Step 1/1] />
[23:05:07][Step 1/1] </a>
[23:05:07][Step 1/1] <button
[23:05:07][Step 1/1] class="sc-kAzzGY jjfqUh"
[23:05:07][Step 1/1] >
[23:05:07][Step 1/1] <svg
[23:05:07][Step 1/1] title="add-contact"
[23:05:07][Step 1/1] />
[23:05:07][Step 1/1] </button>
[23:05:07][Step 1/1] </div>
[23:05:07][Step 1/1] </div>
[23:05:07][Step 1/1] </div>
[23:05:07][Step 1/1] ,
[23:05:07][Step 1/1] </div>
[23:05:07][Step 1/1] </body>
[23:05:07][Step 1/1]
[23:05:07][Step 1/1] 867 | ).toBeInTheDocument();
[23:05:07][Step 1/1] 868 | expect(
[23:05:07][Step 1/1] > 869 | screen.getByText(
[23:05:07][Step 1/1] | ^
[23:05:07][Step 1/1] 870 | 'bdb3b4215ca0622e0c4c07655522c376eaa891838a82f0217fa453bb0595a37c',
[23:05:07][Step 1/1] 871 | ),
[23:05:07][Step 1/1] 872 | ).toBeInTheDocument();
[23:05:07][Step 1/1]
[23:05:07][Step 1/1] at Object.getElementError (node_modules/@testing-library/dom/dist/config.js:37:19)
[23:05:07][Step 1/1] at node_modules/@testing-library/dom/dist/query-helpers.js:76:38
[23:05:07][Step 1/1] at node_modules/@testing-library/dom/dist/query-helpers.js:52:17
[23:05:07][Step 1/1] at node_modules/@testing-library/dom/dist/query-helpers.js:95:19
[23:05:07][Step 1/1] at Object.getByText (src/components/Home/Tx/__tests__/index.test.js:869:20)
[23:05:07][Step 1/1]
[23:05:07][Step 1/1]
[23:05:07][Step 1/1] Test Suites: 1 failed, 33 passed, 34 total
[23:05:07][Step 1/1] Tests: 1 failed, 822 passed, 823 total
[23:05:07][Step 1/1] Snapshots: 0 total
[23:05:07][Step 1/1] Time: 36.007 s
[23:05:07][Step 1/1] Ran all test suites.
[23:05:07][Step 1/1] Build cashtab-tests failed with exit code 1
[23:05:49][Step 1/1] Process exited with code 1
[23:05:49][Step 1/1] Process exited with code 1 (Step: Command Line)
[23:05:49][Step 1/1] Waiting for 1 service processes to complete
[23:05:50][Step 1/1] Ant JUnit report watcher
[23:05:50][Ant JUnit report watcher] 1 report found for paths:
[23:05:50][Ant JUnit report watcher] /home/teamcity/buildAgent/work/jailed-build/results/artifacts/junit/*.xml
[23:05:50][Ant JUnit report watcher] Successfully parsed
[23:05:50][Successfully parsed] 1 report
[23:05:50][Successfully parsed] results/artifacts/junit/cashtab.xml
[23:05:50][Step 1/1] Step Command Line failed
[23:05:50]Ant JUnit report watcher
[23:05:50][Ant JUnit report watcher] No reports found for paths:
[23:05:50][Ant JUnit report watcher] +:results/test_bitcoin.xml
[23:05:50][Ant JUnit report watcher] +:results/**/junit_results*.xml
[23:05:50][Ant JUnit report watcher] +:results/**/*junit.xml
[23:05:50]Publishing internal artifacts (4s)
[23:05:55][Publishing internal artifacts] Publishing 1 file using [ArtifactsCachePublisher]
[23:05:55][Publishing internal artifacts] Publishing 1 file using [WebPublisher]
[23:05:50]Publishing artifacts (4s)
[23:05:50][Publishing artifacts] Collecting files to publish: [+:results/**/junit_results*.xml, +:bitcoin-abc/abc-ci-builds/cashtab-tests/gitian-results => cashtab-tests.tar.gz, +:bitcoin-abc/abc-ci-builds/cashtab-tests/*.log => artifacts.tar.gz]
[23:05:50][Publishing artifacts] Artifacts path 'results/**/junit_results*.xml' not found
[23:05:50][Publishing artifacts] Artifacts path 'bitcoin-abc/abc-ci-builds/cashtab-tests/gitian-results' not found
[23:05:50][Publishing artifacts] Artifacts path 'bitcoin-abc/abc-ci-builds/cashtab-tests/*.log' not found
[23:05:55]Build finished
×

×

Pin build

Cancel
×

Add build comment

Cancel
×

Promote Build

×

Add build comment

Cancel
×

Mute test

×

×

Server communication failure

Server is unavailable

Server stopped or communication with the server is not possible due to network failure.

Server shutdown started.

Please relogin to continue your work.

×

Run Custom Build

×

TODO

Loading related builds...
Cancel
×

Responsibility

×

Edit tags

Cancel
×

Loading...

×

Are you sure?

Cancel
×

Cancel