Loading...
Guest user 

First recorded build

 
All history
 

Last recorded build

[22:31:11][Step 1/1] at StyledComponent.renderInner (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:2021:33)
[22:31:11][Step 1/1] at updateContextConsumer (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21207:19)
[22:31:11][Step 1/1] at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21652:14)
[22:31:11][Step 1/1] at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
[22:31:11][Step 1/1] at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
[22:31:11][Step 1/1] at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
[22:31:11][Step 1/1] at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
[22:31:11][Step 1/1] at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25738:74)
[22:31:11][Step 1/1] at workLoop (/work/cashtab/node_modules/scheduler/cjs/scheduler.development.js:266:34)
[22:31:11][Step 1/1] at flushWork (/work/cashtab/node_modules/scheduler/cjs/scheduler.development.js:239:14)
[22:31:11][Step 1/1] at performWorkUntilDeadline (/work/cashtab/node_modules/scheduler/cjs/scheduler.development.js:533:21)
[22:31:11][Step 1/1] at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
[22:31:11][Step 1/1] at listOnTimeout (node:internal/timers:573:17)
[22:31:11][Step 1/1] at processTimers (node:internal/timers:514:7) {
[22:31:11][Step 1/1] type: 'not implemented'
[22:31:11][Step 1/1] }
[22:31:11][Step 1/1]
[22:31:11][Step 1/1] 69 | try {
[22:31:11][Step 1/1] 70 | const canvas = document.createElement('canvas');
[22:31:11][Step 1/1] > 71 | const context = canvas.getContext('2d');
[22:31:11][Step 1/1] | ^
[22:31:11][Step 1/1] 72 | context.font = font || getComputedStyle(document.body).font;
[22:31:11][Step 1/1] 73 | return context.measureText(text).width;
[22:31:11][Step 1/1] 74 | } catch (err) {
[22:31:11][Step 1/1]
[22:31:11][Step 1/1] at VirtualConsole.<anonymous> (node_modules/jest-environment-jsdom/build/index.js:63:23)
[22:31:11][Step 1/1] at module.exports (node_modules/jsdom/lib/jsdom/browser/not-implemented.js:12:26)
[22:31:11][Step 1/1] at HTMLCanvasElementImpl.getContext (node_modules/jsdom/lib/jsdom/living/nodes/HTMLCanvasElement-impl.js:42:5)
[22:31:11][Step 1/1] at HTMLCanvasElement.getContext (node_modules/jsdom/lib/jsdom/living/generated/HTMLCanvasElement.js:131:58)
[22:31:11][Step 1/1] at getContext (src/helpers/index.js:71:32)
[22:31:11][Step 1/1] at src/components/Common/WalletLabel.js:31:21
[22:31:11][Step 1/1] at flatten (node_modules/styled-components/dist/styled-components.cjs.js:1310:21)
[22:31:11][Step 1/1] at flatten (node_modules/styled-components/dist/styled-components.cjs.js:1290:16)
[22:31:11][Step 1/1] at ComponentStyle.generateAndInjectStyles (node_modules/styled-components/dist/styled-components.cjs.js:1497:19)
[22:31:11][Step 1/1] at StyledComponent.generateAndInjectStyles (node_modules/styled-components/dist/styled-components.cjs.js:2116:36)
[22:31:11][Step 1/1] at StyledComponent.renderInner (node_modules/styled-components/dist/styled-components.cjs.js:2021:33)
[22:31:11][Step 1/1] at updateContextConsumer (node_modules/react-dom/cjs/react-dom.development.js:21207:19)
[22:31:11][Step 1/1] at beginWork (node_modules/react-dom/cjs/react-dom.development.js:21652:14)
[22:31:11][Step 1/1] at beginWork$1 (node_modules/react-dom/cjs/react-dom.development.js:27426:14)
[22:31:11][Step 1/1] at performUnitOfWork (node_modules/react-dom/cjs/react-dom.development.js:26560:12)
[22:31:11][Step 1/1] at workLoopSync (node_modules/react-dom/cjs/react-dom.development.js:26466:5)
[22:31:11][Step 1/1] at renderRootSync (node_modules/react-dom/cjs/react-dom.development.js:26434:7)
[22:31:11][Step 1/1] at performConcurrentWorkOnRoot (node_modules/react-dom/cjs/react-dom.development.js:25738:74)
[22:31:11][Step 1/1] at workLoop (node_modules/scheduler/cjs/scheduler.development.js:266:34)
[22:31:11][Step 1/1] at flushWork (node_modules/scheduler/cjs/scheduler.development.js:239:14)
[22:31:11][Step 1/1] at performWorkUntilDeadline (node_modules/scheduler/cjs/scheduler.development.js:533:21)
[22:31:11][Step 1/1] at Timeout.task [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
[22:31:11][Step 1/1]
[22:31:11][Step 1/1] console.error
[22:31:11][Step 1/1] Error: Not implemented: HTMLCanvasElement.prototype.getContext (without installing the canvas npm package)
[22:31:11][Step 1/1] at module.exports (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/not-implemented.js:9:17)
[22:31:11][Step 1/1] at HTMLCanvasElementImpl.getContext (/work/cashtab/node_modules/jsdom/lib/jsdom/living/nodes/HTMLCanvasElement-impl.js:42:5)
[22:31:11][Step 1/1] at HTMLCanvasElement.getContext (/work/cashtab/node_modules/jsdom/lib/jsdom/living/generated/HTMLCanvasElement.js:131:58)
[22:31:11][Step 1/1] at getContext (/work/cashtab/src/helpers/index.js:71:32)
[22:31:11][Step 1/1] at /work/cashtab/src/components/Common/WalletLabel.js:31:21
[22:31:11][Step 1/1] at flatten (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:1310:21)
[22:31:11][Step 1/1] at flatten (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:1290:16)
[22:31:11][Step 1/1] at ComponentStyle.generateAndInjectStyles (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:1497:19)
[22:31:11][Step 1/1] at StyledComponent.generateAndInjectStyles (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:2116:36)
[22:31:11][Step 1/1] at StyledComponent.renderInner (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:2021:33)
[22:31:11][Step 1/1] at updateContextConsumer (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21207:19)
[22:31:11][Step 1/1] at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21652:14)
[22:31:11][Step 1/1] at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
[22:31:11][Step 1/1] at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
[22:31:11][Step 1/1] at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
[22:31:11][Step 1/1] at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
[22:31:11][Step 1/1] at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25738:74)
[22:31:11][Step 1/1] at workLoop (/work/cashtab/node_modules/scheduler/cjs/scheduler.development.js:266:34)
[22:31:11][Step 1/1] at flushWork (/work/cashtab/node_modules/scheduler/cjs/scheduler.development.js:239:14)
[22:31:11][Step 1/1] at performWorkUntilDeadline (/work/cashtab/node_modules/scheduler/cjs/scheduler.development.js:533:21)
[22:31:11][Step 1/1] at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
[22:31:11][Step 1/1] at listOnTimeout (node:internal/timers:573:17)
[22:31:11][Step 1/1] at processTimers (node:internal/timers:514:7) {
[22:31:11][Step 1/1] type: 'not implemented'
[22:31:11][Step 1/1] }
[22:31:11][Step 1/1]
[22:31:11][Step 1/1] 69 | try {
[22:31:11][Step 1/1] 70 | const canvas = document.createElement('canvas');
[22:31:11][Step 1/1] > 71 | const context = canvas.getContext('2d');
[22:31:11][Step 1/1] | ^
[22:31:11][Step 1/1] 72 | context.font = font || getComputedStyle(document.body).font;
[22:31:11][Step 1/1] 73 | return context.measureText(text).width;
[22:31:11][Step 1/1] 74 | } catch (err) {
[22:31:11][Step 1/1]
[22:31:11][Step 1/1] at VirtualConsole.<anonymous> (node_modules/jest-environment-jsdom/build/index.js:63:23)
[22:31:11][Step 1/1] at module.exports (node_modules/jsdom/lib/jsdom/browser/not-implemented.js:12:26)
[22:31:11][Step 1/1] at HTMLCanvasElementImpl.getContext (node_modules/jsdom/lib/jsdom/living/nodes/HTMLCanvasElement-impl.js:42:5)
[22:31:11][Step 1/1] at HTMLCanvasElement.getContext (node_modules/jsdom/lib/jsdom/living/generated/HTMLCanvasElement.js:131:58)
[22:31:11][Step 1/1] at getContext (src/helpers/index.js:71:32)
[22:31:11][Step 1/1] at src/components/Common/WalletLabel.js:31:21
[22:31:11][Step 1/1] at flatten (node_modules/styled-components/dist/styled-components.cjs.js:1310:21)
[22:31:11][Step 1/1] at flatten (node_modules/styled-components/dist/styled-components.cjs.js:1290:16)
[22:31:11][Step 1/1] at ComponentStyle.generateAndInjectStyles (node_modules/styled-components/dist/styled-components.cjs.js:1497:19)
[22:31:11][Step 1/1] at StyledComponent.generateAndInjectStyles (node_modules/styled-components/dist/styled-components.cjs.js:2116:36)
[22:31:11][Step 1/1] at StyledComponent.renderInner (node_modules/styled-components/dist/styled-components.cjs.js:2021:33)
[22:31:11][Step 1/1] at updateContextConsumer (node_modules/react-dom/cjs/react-dom.development.js:21207:19)
[22:31:11][Step 1/1] at beginWork (node_modules/react-dom/cjs/react-dom.development.js:21652:14)
[22:31:11][Step 1/1] at beginWork$1 (node_modules/react-dom/cjs/react-dom.development.js:27426:14)
[22:31:11][Step 1/1] at performUnitOfWork (node_modules/react-dom/cjs/react-dom.development.js:26560:12)
[22:31:11][Step 1/1] at workLoopSync (node_modules/react-dom/cjs/react-dom.development.js:26466:5)
[22:31:11][Step 1/1] at renderRootSync (node_modules/react-dom/cjs/react-dom.development.js:26434:7)
[22:31:11][Step 1/1] at performConcurrentWorkOnRoot (node_modules/react-dom/cjs/react-dom.development.js:25738:74)
[22:31:11][Step 1/1] at workLoop (node_modules/scheduler/cjs/scheduler.development.js:266:34)
[22:31:11][Step 1/1] at flushWork (node_modules/scheduler/cjs/scheduler.development.js:239:14)
[22:31:11][Step 1/1] at performWorkUntilDeadline (node_modules/scheduler/cjs/scheduler.development.js:533:21)
[22:31:11][Step 1/1] at Timeout.task [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
[22:31:11][Step 1/1]
[22:31:11][Step 1/1] console.warn
[22:31:11][Step 1/1] [react-ga] ReactGA.initialize must be called first or GoogleAnalytics should be loaded manually
[22:31:11][Step 1/1]
[22:31:11][Step 1/1] 38 | ? // If you are not building the extension, export GA event tracking function
[22:31:11][Step 1/1] 39 | (category, action, label) => {
[22:31:11][Step 1/1] > 40 | ReactGA.event({
[22:31:11][Step 1/1] | ^
[22:31:11][Step 1/1] 41 | category: category,
[22:31:11][Step 1/1] 42 | action: action,
[22:31:11][Step 1/1] 43 | label: label,
[22:31:11][Step 1/1]
[22:31:11][Step 1/1] at warn (node_modules/react-ga/dist/react-ga.js:110:11)
[22:31:11][Step 1/1] at internalGa (node_modules/react-ga/dist/react-ga.js:211:47)
[22:31:11][Step 1/1] at _gaCommand (node_modules/react-ga/dist/react-ga.js:232:81)
[22:31:11][Step 1/1] at send (node_modules/react-ga/dist/react-ga.js:367:3)
[22:31:11][Step 1/1] at Object.event (node_modules/react-ga/dist/react-ga.js:577:5)
[22:31:11][Step 1/1] at event (src/components/Common/GoogleAnalytics.js:40:23)
[22:31:11][Step 1/1] at importNewWallet (src/components/Configure/Configure.js:667:14)
[22:31:11][Step 1/1]
[22:31:11][Step 1/1] console.error
[22:31:11][Step 1/1] Error: Not implemented: HTMLCanvasElement.prototype.getContext (without installing the canvas npm package)
[22:31:11][Step 1/1] at module.exports (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/not-implemented.js:9:17)
[22:31:11][Step 1/1] at HTMLCanvasElementImpl.getContext (/work/cashtab/node_modules/jsdom/lib/jsdom/living/nodes/HTMLCanvasElement-impl.js:42:5)
[22:31:11][Step 1/1] at HTMLCanvasElement.getContext (/work/cashtab/node_modules/jsdom/lib/jsdom/living/generated/HTMLCanvasElement.js:131:58)
[22:31:11][Step 1/1] at getContext (/work/cashtab/src/helpers/index.js:71:32)
[22:31:11][Step 1/1] at /work/cashtab/src/components/Common/WalletLabel.js:31:21
[22:31:11][Step 1/1] at flatten (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:1310:21)
[22:31:11][Step 1/1] at flatten (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:1290:16)
[22:31:11][Step 1/1] at ComponentStyle.generateAndInjectStyles (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:1497:19)
[22:31:11][Step 1/1] at StyledComponent.generateAndInjectStyles (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:2116:36)
[22:31:11][Step 1/1] at StyledComponent.renderInner (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:2021:33)
[22:31:11][Step 1/1] at updateContextConsumer (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21207:19)
[22:31:11][Step 1/1] at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21652:14)
[22:31:11][Step 1/1] at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
[22:31:11][Step 1/1] at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
[22:31:11][Step 1/1] at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
[22:31:11][Step 1/1] at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
[22:31:11][Step 1/1] at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25738:74)
[22:31:11][Step 1/1] at workLoop (/work/cashtab/node_modules/scheduler/cjs/scheduler.development.js:266:34)
[22:31:11][Step 1/1] at flushWork (/work/cashtab/node_modules/scheduler/cjs/scheduler.development.js:239:14)
[22:31:11][Step 1/1] at performWorkUntilDeadline (/work/cashtab/node_modules/scheduler/cjs/scheduler.development.js:533:21)
[22:31:11][Step 1/1] at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
[22:31:11][Step 1/1] at listOnTimeout (node:internal/timers:573:17)
[22:31:11][Step 1/1] at processTimers (node:internal/timers:514:7) {
[22:31:11][Step 1/1] type: 'not implemented'
[22:31:11][Step 1/1] }
[22:31:11][Step 1/1]
[22:31:11][Step 1/1] 69 | try {
[22:31:11][Step 1/1] 70 | const canvas = document.createElement('canvas');
[22:31:11][Step 1/1] > 71 | const context = canvas.getContext('2d');
[22:31:11][Step 1/1] | ^
[22:31:11][Step 1/1] 72 | context.font = font || getComputedStyle(document.body).font;
[22:31:11][Step 1/1] 73 | return context.measureText(text).width;
[22:31:11][Step 1/1] 74 | } catch (err) {
[22:31:11][Step 1/1]
[22:31:11][Step 1/1] at VirtualConsole.<anonymous> (node_modules/jest-environment-jsdom/build/index.js:63:23)
[22:31:11][Step 1/1] at module.exports (node_modules/jsdom/lib/jsdom/browser/not-implemented.js:12:26)
[22:31:11][Step 1/1] at HTMLCanvasElementImpl.getContext (node_modules/jsdom/lib/jsdom/living/nodes/HTMLCanvasElement-impl.js:42:5)
[22:31:11][Step 1/1] at HTMLCanvasElement.getContext (node_modules/jsdom/lib/jsdom/living/generated/HTMLCanvasElement.js:131:58)
[22:31:11][Step 1/1] at getContext (src/helpers/index.js:71:32)
[22:31:11][Step 1/1] at src/components/Common/WalletLabel.js:31:21
[22:31:11][Step 1/1] at flatten (node_modules/styled-components/dist/styled-components.cjs.js:1310:21)
[22:31:11][Step 1/1] at flatten (node_modules/styled-components/dist/styled-components.cjs.js:1290:16)
[22:31:11][Step 1/1] at ComponentStyle.generateAndInjectStyles (node_modules/styled-components/dist/styled-components.cjs.js:1497:19)
[22:31:11][Step 1/1] at StyledComponent.generateAndInjectStyles (node_modules/styled-components/dist/styled-components.cjs.js:2116:36)
[22:31:11][Step 1/1] at StyledComponent.renderInner (node_modules/styled-components/dist/styled-components.cjs.js:2021:33)
[22:31:11][Step 1/1] at updateContextConsumer (node_modules/react-dom/cjs/react-dom.development.js:21207:19)
[22:31:11][Step 1/1] at beginWork (node_modules/react-dom/cjs/react-dom.development.js:21652:14)
[22:31:11][Step 1/1] at beginWork$1 (node_modules/react-dom/cjs/react-dom.development.js:27426:14)
[22:31:11][Step 1/1] at performUnitOfWork (node_modules/react-dom/cjs/react-dom.development.js:26560:12)
[22:31:11][Step 1/1] at workLoopSync (node_modules/react-dom/cjs/react-dom.development.js:26466:5)
[22:31:11][Step 1/1] at renderRootSync (node_modules/react-dom/cjs/react-dom.development.js:26434:7)
[22:31:11][Step 1/1] at performConcurrentWorkOnRoot (node_modules/react-dom/cjs/react-dom.development.js:25738:74)
[22:31:11][Step 1/1] at workLoop (node_modules/scheduler/cjs/scheduler.development.js:266:34)
[22:31:11][Step 1/1] at flushWork (node_modules/scheduler/cjs/scheduler.development.js:239:14)
[22:31:11][Step 1/1] at performWorkUntilDeadline (node_modules/scheduler/cjs/scheduler.development.js:533:21)
[22:31:11][Step 1/1] at Timeout.task [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
[22:31:11][Step 1/1]
[22:31:11][Step 1/1] console.error
[22:31:11][Step 1/1] Error: Not implemented: HTMLCanvasElement.prototype.getContext (without installing the canvas npm package)
[22:31:11][Step 1/1] at module.exports (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/not-implemented.js:9:17)
[22:31:11][Step 1/1] at HTMLCanvasElementImpl.getContext (/work/cashtab/node_modules/jsdom/lib/jsdom/living/nodes/HTMLCanvasElement-impl.js:42:5)
[22:31:11][Step 1/1] at HTMLCanvasElement.getContext (/work/cashtab/node_modules/jsdom/lib/jsdom/living/generated/HTMLCanvasElement.js:131:58)
[22:31:11][Step 1/1] at getContext (/work/cashtab/src/helpers/index.js:71:32)
[22:31:11][Step 1/1] at /work/cashtab/src/components/Common/WalletLabel.js:31:21
[22:31:11][Step 1/1] at flatten (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:1310:21)
[22:31:11][Step 1/1] at flatten (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:1290:16)
[22:31:11][Step 1/1] at ComponentStyle.generateAndInjectStyles (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:1497:19)
[22:31:11][Step 1/1] at StyledComponent.generateAndInjectStyles (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:2116:36)
[22:31:11][Step 1/1] at StyledComponent.renderInner (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:2021:33)
[22:31:11][Step 1/1] at updateContextConsumer (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21207:19)
[22:31:11][Step 1/1] at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21652:14)
[22:31:11][Step 1/1] at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
[22:31:11][Step 1/1] at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
[22:31:11][Step 1/1] at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
[22:31:11][Step 1/1] at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
[22:31:11][Step 1/1] at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25738:74)
[22:31:11][Step 1/1] at workLoop (/work/cashtab/node_modules/scheduler/cjs/scheduler.development.js:266:34)
[22:31:11][Step 1/1] at flushWork (/work/cashtab/node_modules/scheduler/cjs/scheduler.development.js:239:14)
[22:31:11][Step 1/1] at performWorkUntilDeadline (/work/cashtab/node_modules/scheduler/cjs/scheduler.development.js:533:21)
[22:31:11][Step 1/1] at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
[22:31:11][Step 1/1] at listOnTimeout (node:internal/timers:573:17)
[22:31:11][Step 1/1] at processTimers (node:internal/timers:514:7) {
[22:31:11][Step 1/1] type: 'not implemented'
[22:31:11][Step 1/1] }
[22:31:11][Step 1/1]
[22:31:11][Step 1/1] 69 | try {
[22:31:11][Step 1/1] 70 | const canvas = document.createElement('canvas');
[22:31:11][Step 1/1] > 71 | const context = canvas.getContext('2d');
[22:31:11][Step 1/1] | ^
[22:31:11][Step 1/1] 72 | context.font = font || getComputedStyle(document.body).font;
[22:31:11][Step 1/1] 73 | return context.measureText(text).width;
[22:31:11][Step 1/1] 74 | } catch (err) {
[22:31:11][Step 1/1]
[22:31:11][Step 1/1] at VirtualConsole.<anonymous> (node_modules/jest-environment-jsdom/build/index.js:63:23)
[22:31:11][Step 1/1] at module.exports (node_modules/jsdom/lib/jsdom/browser/not-implemented.js:12:26)
[22:31:11][Step 1/1] at HTMLCanvasElementImpl.getContext (node_modules/jsdom/lib/jsdom/living/nodes/HTMLCanvasElement-impl.js:42:5)
[22:31:11][Step 1/1] at HTMLCanvasElement.getContext (node_modules/jsdom/lib/jsdom/living/generated/HTMLCanvasElement.js:131:58)
[22:31:11][Step 1/1] at getContext (src/helpers/index.js:71:32)
[22:31:11][Step 1/1] at src/components/Common/WalletLabel.js:31:21
[22:31:11][Step 1/1] at flatten (node_modules/styled-components/dist/styled-components.cjs.js:1310:21)
[22:31:11][Step 1/1] at flatten (node_modules/styled-components/dist/styled-components.cjs.js:1290:16)
[22:31:11][Step 1/1] at ComponentStyle.generateAndInjectStyles (node_modules/styled-components/dist/styled-components.cjs.js:1497:19)
[22:31:11][Step 1/1] at StyledComponent.generateAndInjectStyles (node_modules/styled-components/dist/styled-components.cjs.js:2116:36)
[22:31:11][Step 1/1] at StyledComponent.renderInner (node_modules/styled-components/dist/styled-components.cjs.js:2021:33)
[22:31:11][Step 1/1] at updateContextConsumer (node_modules/react-dom/cjs/react-dom.development.js:21207:19)
[22:31:11][Step 1/1] at beginWork (node_modules/react-dom/cjs/react-dom.development.js:21652:14)
[22:31:11][Step 1/1] at beginWork$1 (node_modules/react-dom/cjs/react-dom.development.js:27426:14)
[22:31:11][Step 1/1] at performUnitOfWork (node_modules/react-dom/cjs/react-dom.development.js:26560:12)
[22:31:11][Step 1/1] at workLoopSync (node_modules/react-dom/cjs/react-dom.development.js:26466:5)
[22:31:11][Step 1/1] at renderRootSync (node_modules/react-dom/cjs/react-dom.development.js:26434:7)
[22:31:11][Step 1/1] at performConcurrentWorkOnRoot (node_modules/react-dom/cjs/react-dom.development.js:25738:74)
[22:31:11][Step 1/1] at workLoop (node_modules/scheduler/cjs/scheduler.development.js:266:34)
[22:31:11][Step 1/1] at flushWork (node_modules/scheduler/cjs/scheduler.development.js:239:14)
[22:31:11][Step 1/1] at performWorkUntilDeadline (node_modules/scheduler/cjs/scheduler.development.js:533:21)
[22:31:11][Step 1/1] at Timeout.task [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
[22:31:11][Step 1/1]
[22:31:11][Step 1/1] console.error
[22:31:11][Step 1/1] Warning: An update to Spin inside a test was not wrapped in act(...).
[22:31:11][Step 1/1]
[22:31:11][Step 1/1] When testing, code that causes React state updates should be wrapped into act(...):
[22:31:11][Step 1/1]
[22:31:11][Step 1/1] act(() => {
[22:31:11][Step 1/1] /* fire events that update state */
[22:31:11][Step 1/1] });
[22:31:11][Step 1/1] /* assert on the output */
[22:31:11][Step 1/1]
[22:31:11][Step 1/1] This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act
[22:31:11][Step 1/1] at Spin (/work/cashtab/node_modules/antd/lib/spin/index.js:70:18)
[22:31:11][Step 1/1] at ThemeProvider (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:1703:5)
[22:31:11][Step 1/1] at useContext (/work/cashtab/src/components/App.js:451:32)
[22:31:11][Step 1/1] at ThemeProvider (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:1703:5)
[22:31:11][Step 1/1] at basenameProp (/work/cashtab/node_modules/react-router/lib/components.tsx:413:13)
[22:31:11][Step 1/1] at basename (/work/cashtab/node_modules/react-router/lib/components.tsx:219:3)
[22:31:11][Step 1/1] at chronik (/work/cashtab/src/wallet/context.js:11:34)
[22:31:11][Step 1/1] at chronik (/work/cashtab/src/components/fixtures/CashtabTestWrapper.js:13:31)
[22:31:11][Step 1/1]
[22:31:11][Step 1/1] at printWarning (node_modules/react-dom/cjs/react-dom.development.js:86:30)
[22:31:11][Step 1/1] at error (node_modules/react-dom/cjs/react-dom.development.js:60:7)
[22:31:11][Step 1/1] at warnIfUpdatesNotWrappedWithActDEV (node_modules/react-dom/cjs/react-dom.development.js:27589:9)
[22:31:11][Step 1/1] at scheduleUpdateOnFiber (node_modules/react-dom/cjs/react-dom.development.js:25508:5)
[22:31:11][Step 1/1] at dispatchSetState (node_modules/react-dom/cjs/react-dom.development.js:17527:7)
[22:31:11][Step 1/1] at node_modules/antd/lib/spin/index.js:100:5
[22:31:11][Step 1/1] at commitHookEffectListMount (node_modules/react-dom/cjs/react-dom.development.js:23150:26)
[22:31:11][Step 1/1] at commitPassiveMountOnFiber (node_modules/react-dom/cjs/react-dom.development.js:24931:11)
[22:31:11][Step 1/1] at commitPassiveMountEffects_complete (node_modules/react-dom/cjs/react-dom.development.js:24891:9)
[22:31:11][Step 1/1] at commitPassiveMountEffects_begin (node_modules/react-dom/cjs/react-dom.development.js:24878:7)
[22:31:11][Step 1/1] at commitPassiveMountEffects (node_modules/react-dom/cjs/react-dom.development.js:24866:3)
[22:31:11][Step 1/1] at flushPassiveEffectsImpl (node_modules/react-dom/cjs/react-dom.development.js:27039:3)
[22:31:11][Step 1/1] at flushPassiveEffects (node_modules/react-dom/cjs/react-dom.development.js:26984:14)
[22:31:11][Step 1/1] at node_modules/react-dom/cjs/react-dom.development.js:26769:9
[22:31:11][Step 1/1] at workLoop (node_modules/scheduler/cjs/scheduler.development.js:266:34)
[22:31:11][Step 1/1] at flushWork (node_modules/scheduler/cjs/scheduler.development.js:239:14)
[22:31:11][Step 1/1] at performWorkUntilDeadline (node_modules/scheduler/cjs/scheduler.development.js:533:21)
[22:31:11][Step 1/1] at Timeout.task [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
[22:31:11][Step 1/1]
[22:31:11][Step 1/1] console.log
[22:31:11][Step 1/1] Cannot import: wallet already exists (name: "qzxep")
[22:31:11][Step 1/1]
[22:31:11][Step 1/1] at log (src/components/Configure/Configure.js:636:21)
[22:31:11][Step 1/1]
[22:31:11][Step 1/1] console.warn
[22:31:11][Step 1/1] [react-ga] ReactGA.initialize must be called first or GoogleAnalytics should be loaded manually
[22:31:11][Step 1/1]
[22:31:11][Step 1/1] 38 | ? // If you are not building the extension, export GA event tracking function
[22:31:11][Step 1/1] 39 | (category, action, label) => {
[22:31:11][Step 1/1] > 40 | ReactGA.event({
[22:31:11][Step 1/1] | ^
[22:31:11][Step 1/1] 41 | category: category,
[22:31:11][Step 1/1] 42 | action: action,
[22:31:11][Step 1/1] 43 | label: label,
[22:31:11][Step 1/1]
[22:31:11][Step 1/1] at warn (node_modules/react-ga/dist/react-ga.js:110:11)
[22:31:11][Step 1/1] at internalGa (node_modules/react-ga/dist/react-ga.js:211:47)
[22:31:11][Step 1/1] at _gaCommand (node_modules/react-ga/dist/react-ga.js:232:81)
[22:31:11][Step 1/1] at send (node_modules/react-ga/dist/react-ga.js:367:3)
[22:31:11][Step 1/1] at Object.event (node_modules/react-ga/dist/react-ga.js:577:5)
[22:31:11][Step 1/1] at event (src/components/Common/GoogleAnalytics.js:40:23)
[22:31:11][Step 1/1] at activateWallet (src/components/Configure/Configure.js:618:14)
[22:31:11][Step 1/1] at activateWallet (src/components/Configure/Configure.js:1458:61)
[22:31:11][Step 1/1] at HTMLUnknownElement.callCallback (node_modules/react-dom/cjs/react-dom.development.js:4164:14)
[22:31:11][Step 1/1] at HTMLUnknownElement.callTheUserObjectsOperation (node_modules/jsdom/lib/jsdom/living/generated/EventListener.js:26:30)
[22:31:11][Step 1/1] at innerInvokeEventListeners (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:350:25)
[22:31:11][Step 1/1] at invokeEventListeners (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:286:3)
[22:31:11][Step 1/1] at HTMLUnknownElementImpl._dispatch (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:233:9)
[22:31:11][Step 1/1] at HTMLUnknownElementImpl.dispatchEvent (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:104:17)
[22:31:11][Step 1/1] at HTMLUnknownElement.dispatchEvent (node_modules/jsdom/lib/jsdom/living/generated/EventTarget.js:241:34)
[22:31:11][Step 1/1] at Object.invokeGuardedCallbackDev (node_modules/react-dom/cjs/react-dom.development.js:4213:16)
[22:31:11][Step 1/1] at invokeGuardedCallback (node_modules/react-dom/cjs/react-dom.development.js:4277:31)
[22:31:11][Step 1/1] at invokeGuardedCallbackAndCatchFirstError (node_modules/react-dom/cjs/react-dom.development.js:4291:25)
[22:31:11][Step 1/1] at executeDispatch (node_modules/react-dom/cjs/react-dom.development.js:9041:3)
[22:31:11][Step 1/1] at processDispatchQueueItemsInOrder (node_modules/react-dom/cjs/react-dom.development.js:9073:7)
[22:31:11][Step 1/1] at processDispatchQueue (node_modules/react-dom/cjs/react-dom.development.js:9086:5)
[22:31:11][Step 1/1] at dispatchEventsForPlugins (node_modules/react-dom/cjs/react-dom.development.js:9097:3)
[22:31:11][Step 1/1] at node_modules/react-dom/cjs/react-dom.development.js:9288:12
[22:31:11][Step 1/1] at batchedUpdates$1 (node_modules/react-dom/cjs/react-dom.development.js:26140:12)
[22:31:11][Step 1/1] at batchedUpdates (node_modules/react-dom/cjs/react-dom.development.js:3991:12)
[22:31:11][Step 1/1] at dispatchEventForPluginEventSystem (node_modules/react-dom/cjs/react-dom.development.js:9287:3)
[22:31:11][Step 1/1] at dispatchEventWithEnableCapturePhaseSelectiveHydrationWithoutDiscreteEventReplay (node_modules/react-dom/cjs/react-dom.development.js:6465:5)
[22:31:11][Step 1/1] at dispatchEvent (node_modules/react-dom/cjs/react-dom.development.js:6457:5)
[22:31:11][Step 1/1] at dispatchDiscreteEvent (node_modules/react-dom/cjs/react-dom.development.js:6430:5)
[22:31:11][Step 1/1] at HTMLDivElement.callTheUserObjectsOperation (node_modules/jsdom/lib/jsdom/living/generated/EventListener.js:26:30)
[22:31:11][Step 1/1] at innerInvokeEventListeners (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:350:25)
[22:31:11][Step 1/1] at invokeEventListeners (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:286:3)
[22:31:11][Step 1/1] at HTMLButtonElementImpl._dispatch (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:233:9)
[22:31:11][Step 1/1] at HTMLButtonElementImpl.dispatchEvent (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:104:17)
[22:31:11][Step 1/1] at HTMLButtonElement.dispatchEvent (node_modules/jsdom/lib/jsdom/living/generated/EventTarget.js:241:34)
[22:31:11][Step 1/1] at node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:45:43
[22:31:11][Step 1/1] at node_modules/@testing-library/react/dist/pure.js:108:16
[22:31:11][Step 1/1] at node_modules/@testing-library/react/dist/act-compat.js:47:24
[22:31:11][Step 1/1] at act (node_modules/react/cjs/react.development.js:2512:16)
[22:31:11][Step 1/1] at node_modules/@testing-library/react/dist/act-compat.js:46:25
[22:31:11][Step 1/1] at Object.eventWrapper (node_modules/@testing-library/react/dist/pure.js:107:28)
[22:31:11][Step 1/1] at Object.wrapEvent (node_modules/@testing-library/user-event/dist/cjs/event/wrapEvent.js:6:28)
[22:31:11][Step 1/1] at Object.dispatchEvent (node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:45:22)
[22:31:11][Step 1/1] at Object.dispatchUIEvent (node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:22:26)
[22:31:11][Step 1/1] at Mouse.up (node_modules/@testing-library/user-event/dist/cjs/system/pointer/mouse.js:100:30)
[22:31:11][Step 1/1] at PointerHost.release (node_modules/@testing-library/user-event/dist/cjs/system/pointer/index.js:84:28)
[22:31:11][Step 1/1] at pointerAction (node_modules/@testing-library/user-event/dist/cjs/pointer/index.js:59:47)
[22:31:11][Step 1/1] at Object.pointer (node_modules/@testing-library/user-event/dist/cjs/pointer/index.js:32:9)
[22:31:11][Step 1/1] at Object.asyncWrapper (node_modules/@testing-library/react/dist/pure.js:88:22)
[22:31:11][Step 1/1] at Object.<anonymous> (src/components/Configure/__tests__/Configure.test.js:607:9)
[22:31:11][Step 1/1]
[22:31:11][Step 1/1] console.error
[22:31:11][Step 1/1] Error: Not implemented: HTMLCanvasElement.prototype.getContext (without installing the canvas npm package)
[22:31:11][Step 1/1] at module.exports (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/not-implemented.js:9:17)
[22:31:11][Step 1/1] at HTMLCanvasElementImpl.getContext (/work/cashtab/node_modules/jsdom/lib/jsdom/living/nodes/HTMLCanvasElement-impl.js:42:5)
[22:31:11][Step 1/1] at HTMLCanvasElement.getContext (/work/cashtab/node_modules/jsdom/lib/jsdom/living/generated/HTMLCanvasElement.js:131:58)
[22:31:11][Step 1/1] at getContext (/work/cashtab/src/helpers/index.js:71:32)
[22:31:11][Step 1/1] at /work/cashtab/src/components/Common/WalletLabel.js:31:21
[22:31:11][Step 1/1] at flatten (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:1310:21)
[22:31:11][Step 1/1] at flatten (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:1290:16)
[22:31:11][Step 1/1] at ComponentStyle.generateAndInjectStyles (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:1497:19)
[22:31:11][Step 1/1] at StyledComponent.generateAndInjectStyles (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:2116:36)
[22:31:11][Step 1/1] at StyledComponent.renderInner (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:2021:33)
[22:31:11][Step 1/1] at updateContextConsumer (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21207:19)
[22:31:11][Step 1/1] at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21652:14)
[22:31:11][Step 1/1] at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
[22:31:11][Step 1/1] at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
[22:31:11][Step 1/1] at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
[22:31:11][Step 1/1] at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
[22:31:11][Step 1/1] at performSyncWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26085:20)
[22:31:11][Step 1/1] at flushSyncCallbacks (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:12042:22)
[22:31:11][Step 1/1] at flushActQueue (/work/cashtab/node_modules/react/cjs/react.development.js:2667:24)
[22:31:11][Step 1/1] at act (/work/cashtab/node_modules/react/cjs/react.development.js:2582:11)
[22:31:11][Step 1/1] at /work/cashtab/node_modules/@testing-library/react/dist/act-compat.js:46:25
[22:31:11][Step 1/1] at Object.eventWrapper (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:107:28)
[22:31:11][Step 1/1] at Object.wrapEvent (/work/cashtab/node_modules/@testing-library/user-event/dist/cjs/event/wrapEvent.js:6:28)
[22:31:11][Step 1/1] at Object.dispatchEvent (/work/cashtab/node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:45:22)
[22:31:11][Step 1/1] at Object.dispatchUIEvent (/work/cashtab/node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:22:26)
[22:31:11][Step 1/1] at Mouse.up (/work/cashtab/node_modules/@testing-library/user-event/dist/cjs/system/pointer/mouse.js:100:30)
[22:31:11][Step 1/1] at PointerHost.release (/work/cashtab/node_modules/@testing-library/user-event/dist/cjs/system/pointer/index.js:84:28)
[22:31:11][Step 1/1] at pointerAction (/work/cashtab/node_modules/@testing-library/user-event/dist/cjs/pointer/index.js:59:47)
[22:31:11][Step 1/1] at Object.pointer (/work/cashtab/node_modules/@testing-library/user-event/dist/cjs/pointer/index.js:32:9)
[22:31:11][Step 1/1] at Object.asyncWrapper (/work/cashtab/node_modules/@testing-library/react/dist/pure.js:88:22)
[22:31:11][Step 1/1] at Object.<anonymous> (/work/cashtab/src/components/Configure/__tests__/Configure.test.js:607:9) {
[22:31:11][Step 1/1] type: 'not implemented'
[22:31:11][Step 1/1] }
[22:31:11][Step 1/1]
[22:31:11][Step 1/1] 69 | try {
[22:31:11][Step 1/1] 70 | const canvas = document.createElement('canvas');
[22:31:11][Step 1/1] > 71 | const context = canvas.getContext('2d');
[22:31:11][Step 1/1] | ^
[22:31:11][Step 1/1] 72 | context.font = font || getComputedStyle(document.body).font;
[22:31:11][Step 1/1] 73 | return context.measureText(text).width;
[22:31:11][Step 1/1] 74 | } catch (err) {
[22:31:11][Step 1/1]
[22:31:11][Step 1/1] at VirtualConsole.<anonymous> (node_modules/jest-environment-jsdom/build/index.js:63:23)
[22:31:11][Step 1/1] at module.exports (node_modules/jsdom/lib/jsdom/browser/not-implemented.js:12:26)
[22:31:11][Step 1/1] at HTMLCanvasElementImpl.getContext (node_modules/jsdom/lib/jsdom/living/nodes/HTMLCanvasElement-impl.js:42:5)
[22:31:11][Step 1/1] at HTMLCanvasElement.getContext (node_modules/jsdom/lib/jsdom/living/generated/HTMLCanvasElement.js:131:58)
[22:31:11][Step 1/1] at getContext (src/helpers/index.js:71:32)
[22:31:11][Step 1/1] at src/components/Common/WalletLabel.js:31:21
[22:31:11][Step 1/1] at flatten (node_modules/styled-components/dist/styled-components.cjs.js:1310:21)
[22:31:11][Step 1/1] at flatten (node_modules/styled-components/dist/styled-components.cjs.js:1290:16)
[22:31:11][Step 1/1] at ComponentStyle.generateAndInjectStyles (node_modules/styled-components/dist/styled-components.cjs.js:1497:19)
[22:31:11][Step 1/1] at StyledComponent.generateAndInjectStyles (node_modules/styled-components/dist/styled-components.cjs.js:2116:36)
[22:31:11][Step 1/1] at StyledComponent.renderInner (node_modules/styled-components/dist/styled-components.cjs.js:2021:33)
[22:31:11][Step 1/1] at updateContextConsumer (node_modules/react-dom/cjs/react-dom.development.js:21207:19)
[22:31:11][Step 1/1] at beginWork (node_modules/react-dom/cjs/react-dom.development.js:21652:14)
[22:31:11][Step 1/1] at beginWork$1 (node_modules/react-dom/cjs/react-dom.development.js:27426:14)
[22:31:11][Step 1/1] at performUnitOfWork (node_modules/react-dom/cjs/react-dom.development.js:26560:12)
[22:31:11][Step 1/1] at workLoopSync (node_modules/react-dom/cjs/react-dom.development.js:26466:5)
[22:31:11][Step 1/1] at renderRootSync (node_modules/react-dom/cjs/react-dom.development.js:26434:7)
[22:31:11][Step 1/1] at performSyncWorkOnRoot (node_modules/react-dom/cjs/react-dom.development.js:26085:20)
[22:31:11][Step 1/1] at flushSyncCallbacks (node_modules/react-dom/cjs/react-dom.development.js:12042:22)
[22:31:11][Step 1/1] at flushActQueue (node_modules/react/cjs/react.development.js:2667:24)
[22:31:11][Step 1/1] at act (node_modules/react/cjs/react.development.js:2582:11)
[22:31:11][Step 1/1] at node_modules/@testing-library/react/dist/act-compat.js:46:25
[22:31:11][Step 1/1] at Object.eventWrapper (node_modules/@testing-library/react/dist/pure.js:107:28)
[22:31:11][Step 1/1] at Object.wrapEvent (node_modules/@testing-library/user-event/dist/cjs/event/wrapEvent.js:6:28)
[22:31:11][Step 1/1] at Object.dispatchEvent (node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:45:22)
[22:31:11][Step 1/1] at Object.dispatchUIEvent (node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:22:26)
[22:31:11][Step 1/1] at Mouse.up (node_modules/@testing-library/user-event/dist/cjs/system/pointer/mouse.js:100:30)
[22:31:11][Step 1/1] at PointerHost.release (node_modules/@testing-library/user-event/dist/cjs/system/pointer/index.js:84:28)
[22:31:11][Step 1/1] at pointerAction (node_modules/@testing-library/user-event/dist/cjs/pointer/index.js:59:47)
[22:31:11][Step 1/1] at Object.pointer (node_modules/@testing-library/user-event/dist/cjs/pointer/index.js:32:9)
[22:31:11][Step 1/1] at Object.asyncWrapper (node_modules/@testing-library/react/dist/pure.js:88:22)
[22:31:11][Step 1/1] at Object.<anonymous> (src/components/Configure/__tests__/Configure.test.js:607:9)
[22:31:11][Step 1/1]
[22:31:11][Step 1/1] console.error
[22:31:11][Step 1/1] Error: Not implemented: HTMLCanvasElement.prototype.getContext (without installing the canvas npm package)
[22:31:11][Step 1/1] at module.exports (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/not-implemented.js:9:17)
[22:31:11][Step 1/1] at HTMLCanvasElementImpl.getContext (/work/cashtab/node_modules/jsdom/lib/jsdom/living/nodes/HTMLCanvasElement-impl.js:42:5)
[22:31:11][Step 1/1] at HTMLCanvasElement.getContext (/work/cashtab/node_modules/jsdom/lib/jsdom/living/generated/HTMLCanvasElement.js:131:58)
[22:31:11][Step 1/1] at getContext (/work/cashtab/src/helpers/index.js:71:32)
[22:31:11][Step 1/1] at /work/cashtab/src/components/Common/WalletLabel.js:31:21
[22:31:11][Step 1/1] at flatten (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:1310:21)
[22:31:11][Step 1/1] at flatten (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:1290:16)
[22:31:11][Step 1/1] at ComponentStyle.generateAndInjectStyles (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:1497:19)
[22:31:11][Step 1/1] at StyledComponent.generateAndInjectStyles (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:2116:36)
[22:31:11][Step 1/1] at StyledComponent.renderInner (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:2021:33)
[22:31:11][Step 1/1] at updateContextConsumer (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21207:19)
[22:31:11][Step 1/1] at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21652:14)
[22:31:11][Step 1/1] at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
[22:31:11][Step 1/1] at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
[22:31:11][Step 1/1] at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
[22:31:11][Step 1/1] at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
[22:31:11][Step 1/1] at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25738:74)
[22:31:11][Step 1/1] at workLoop (/work/cashtab/node_modules/scheduler/cjs/scheduler.development.js:266:34)
[22:31:11][Step 1/1] at flushWork (/work/cashtab/node_modules/scheduler/cjs/scheduler.development.js:239:14)
[22:31:11][Step 1/1] at performWorkUntilDeadline (/work/cashtab/node_modules/scheduler/cjs/scheduler.development.js:533:21)
[22:31:11][Step 1/1] at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
[22:31:11][Step 1/1] at listOnTimeout (node:internal/timers:573:17)
[22:31:11][Step 1/1] at processTimers (node:internal/timers:514:7) {
[22:31:11][Step 1/1] type: 'not implemented'
[22:31:11][Step 1/1] }
[22:31:11][Step 1/1]
[22:31:11][Step 1/1] 69 | try {
[22:31:11][Step 1/1] 70 | const canvas = document.createElement('canvas');
[22:31:11][Step 1/1] > 71 | const context = canvas.getContext('2d');
[22:31:11][Step 1/1] | ^
[22:31:11][Step 1/1] 72 | context.font = font || getComputedStyle(document.body).font;
[22:31:11][Step 1/1] 73 | return context.measureText(text).width;
[22:31:11][Step 1/1] 74 | } catch (err) {
[22:31:11][Step 1/1]
[22:31:11][Step 1/1] at VirtualConsole.<anonymous> (node_modules/jest-environment-jsdom/build/index.js:63:23)
[22:31:11][Step 1/1] at module.exports (node_modules/jsdom/lib/jsdom/browser/not-implemented.js:12:26)
[22:31:11][Step 1/1] at HTMLCanvasElementImpl.getContext (node_modules/jsdom/lib/jsdom/living/nodes/HTMLCanvasElement-impl.js:42:5)
[22:31:11][Step 1/1] at HTMLCanvasElement.getContext (node_modules/jsdom/lib/jsdom/living/generated/HTMLCanvasElement.js:131:58)
[22:31:11][Step 1/1] at getContext (src/helpers/index.js:71:32)
[22:31:11][Step 1/1] at src/components/Common/WalletLabel.js:31:21
[22:31:11][Step 1/1] at flatten (node_modules/styled-components/dist/styled-components.cjs.js:1310:21)
[22:31:11][Step 1/1] at flatten (node_modules/styled-components/dist/styled-components.cjs.js:1290:16)
[22:31:11][Step 1/1] at ComponentStyle.generateAndInjectStyles (node_modules/styled-components/dist/styled-components.cjs.js:1497:19)
[22:31:11][Step 1/1] at StyledComponent.generateAndInjectStyles (node_modules/styled-components/dist/styled-components.cjs.js:2116:36)
[22:31:11][Step 1/1] at StyledComponent.renderInner (node_modules/styled-components/dist/styled-components.cjs.js:2021:33)
[22:31:11][Step 1/1] at updateContextConsumer (node_modules/react-dom/cjs/react-dom.development.js:21207:19)
[22:31:11][Step 1/1] at beginWork (node_modules/react-dom/cjs/react-dom.development.js:21652:14)
[22:31:11][Step 1/1] at beginWork$1 (node_modules/react-dom/cjs/react-dom.development.js:27426:14)
[22:31:11][Step 1/1] at performUnitOfWork (node_modules/react-dom/cjs/react-dom.development.js:26560:12)
[22:31:11][Step 1/1] at workLoopSync (node_modules/react-dom/cjs/react-dom.development.js:26466:5)
[22:31:11][Step 1/1] at renderRootSync (node_modules/react-dom/cjs/react-dom.development.js:26434:7)
[22:31:11][Step 1/1] at performConcurrentWorkOnRoot (node_modules/react-dom/cjs/react-dom.development.js:25738:74)
[22:31:11][Step 1/1] at workLoop (node_modules/scheduler/cjs/scheduler.development.js:266:34)
[22:31:11][Step 1/1] at flushWork (node_modules/scheduler/cjs/scheduler.development.js:239:14)
[22:31:11][Step 1/1] at performWorkUntilDeadline (node_modules/scheduler/cjs/scheduler.development.js:533:21)
[22:31:11][Step 1/1] at Timeout.task [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
[22:31:11][Step 1/1]
[22:31:11][Step 1/1] console.error
[22:31:11][Step 1/1] Error: Not implemented: HTMLCanvasElement.prototype.getContext (without installing the canvas npm package)
[22:31:11][Step 1/1] at module.exports (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/not-implemented.js:9:17)
[22:31:11][Step 1/1] at HTMLCanvasElementImpl.getContext (/work/cashtab/node_modules/jsdom/lib/jsdom/living/nodes/HTMLCanvasElement-impl.js:42:5)
[22:31:11][Step 1/1] at HTMLCanvasElement.getContext (/work/cashtab/node_modules/jsdom/lib/jsdom/living/generated/HTMLCanvasElement.js:131:58)
[22:31:11][Step 1/1] at getContext (/work/cashtab/src/helpers/index.js:71:32)
[22:31:11][Step 1/1] at /work/cashtab/src/components/Common/WalletLabel.js:31:21
[22:31:11][Step 1/1] at flatten (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:1310:21)
[22:31:11][Step 1/1] at flatten (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:1290:16)
[22:31:11][Step 1/1] at ComponentStyle.generateAndInjectStyles (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:1497:19)
[22:31:11][Step 1/1] at StyledComponent.generateAndInjectStyles (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:2116:36)
[22:31:11][Step 1/1] at StyledComponent.renderInner (/work/cashtab/node_modules/styled-components/dist/styled-components.cjs.js:2021:33)
[22:31:11][Step 1/1] at updateContextConsumer (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21207:19)
[22:31:11][Step 1/1] at beginWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:21652:14)
[22:31:11][Step 1/1] at beginWork$1 (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:27426:14)
[22:31:11][Step 1/1] at performUnitOfWork (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26560:12)
[22:31:11][Step 1/1] at workLoopSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26466:5)
[22:31:11][Step 1/1] at renderRootSync (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:26434:7)
[22:31:11][Step 1/1] at performConcurrentWorkOnRoot (/work/cashtab/node_modules/react-dom/cjs/react-dom.development.js:25738:74)
[22:31:11][Step 1/1] at workLoop (/work/cashtab/node_modules/scheduler/cjs/scheduler.development.js:266:34)
[22:31:11][Step 1/1] at flushWork (/work/cashtab/node_modules/scheduler/cjs/scheduler.development.js:239:14)
[22:31:11][Step 1/1] at performWorkUntilDeadline (/work/cashtab/node_modules/scheduler/cjs/scheduler.development.js:533:21)
[22:31:11][Step 1/1] at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
[22:31:11][Step 1/1] at listOnTimeout (node:internal/timers:573:17)
[22:31:11][Step 1/1] at processTimers (node:internal/timers:514:7) {
[22:31:11][Step 1/1] type: 'not implemented'
[22:31:11][Step 1/1] }
[22:31:11][Step 1/1]
[22:31:11][Step 1/1] 69 | try {
[22:31:11][Step 1/1] 70 | const canvas = document.createElement('canvas');
[22:31:11][Step 1/1] > 71 | const context = canvas.getContext('2d');
[22:31:11][Step 1/1] | ^
[22:31:11][Step 1/1] 72 | context.font = font || getComputedStyle(document.body).font;
[22:31:11][Step 1/1] 73 | return context.measureText(text).width;
[22:31:11][Step 1/1] 74 | } catch (err) {
[22:31:11][Step 1/1]
[22:31:11][Step 1/1] at VirtualConsole.<anonymous> (node_modules/jest-environment-jsdom/build/index.js:63:23)
[22:31:11][Step 1/1] at module.exports (node_modules/jsdom/lib/jsdom/browser/not-implemented.js:12:26)
[22:31:11][Step 1/1] at HTMLCanvasElementImpl.getContext (node_modules/jsdom/lib/jsdom/living/nodes/HTMLCanvasElement-impl.js:42:5)
[22:31:11][Step 1/1] at HTMLCanvasElement.getContext (node_modules/jsdom/lib/jsdom/living/generated/HTMLCanvasElement.js:131:58)
[22:31:11][Step 1/1] at getContext (src/helpers/index.js:71:32)
[22:31:11][Step 1/1] at src/components/Common/WalletLabel.js:31:21
[22:31:11][Step 1/1] at flatten (node_modules/styled-components/dist/styled-components.cjs.js:1310:21)
[22:31:11][Step 1/1] at flatten (node_modules/styled-components/dist/styled-components.cjs.js:1290:16)
[22:31:11][Step 1/1] at ComponentStyle.generateAndInjectStyles (node_modules/styled-components/dist/styled-components.cjs.js:1497:19)
[22:31:11][Step 1/1] at StyledComponent.generateAndInjectStyles (node_modules/styled-components/dist/styled-components.cjs.js:2116:36)
[22:31:11][Step 1/1] at StyledComponent.renderInner (node_modules/styled-components/dist/styled-components.cjs.js:2021:33)
[22:31:11][Step 1/1] at updateContextConsumer (node_modules/react-dom/cjs/react-dom.development.js:21207:19)
[22:31:11][Step 1/1] at beginWork (node_modules/react-dom/cjs/react-dom.development.js:21652:14)
[22:31:11][Step 1/1] at beginWork$1 (node_modules/react-dom/cjs/react-dom.development.js:27426:14)
[22:31:11][Step 1/1] at performUnitOfWork (node_modules/react-dom/cjs/react-dom.development.js:26560:12)
[22:31:11][Step 1/1] at workLoopSync (node_modules/react-dom/cjs/react-dom.development.js:26466:5)
[22:31:11][Step 1/1] at renderRootSync (node_modules/react-dom/cjs/react-dom.development.js:26434:7)
[22:31:11][Step 1/1] at performConcurrentWorkOnRoot (node_modules/react-dom/cjs/react-dom.development.js:25738:74)
[22:31:11][Step 1/1] at workLoop (node_modules/scheduler/cjs/scheduler.development.js:266:34)
[22:31:11][Step 1/1] at flushWork (node_modules/scheduler/cjs/scheduler.development.js:239:14)
[22:31:11][Step 1/1] at performWorkUntilDeadline (node_modules/scheduler/cjs/scheduler.development.js:533:21)
[22:31:12][Step 1/1] at Timeout.task [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
[22:31:12][Step 1/1]
[22:31:12][Step 1/1] -----------------------------------|---------|----------|---------|---------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[22:31:12][Step 1/1] File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
[22:31:12][Step 1/1] -----------------------------------|---------|----------|---------|---------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[22:31:12][Step 1/1] All files | 76.38 | 72.96 | 69.69 | 76.69 |
[22:31:12][Step 1/1] src | 2.98 | 5.35 | 4.76 | 2.98 |
[22:31:12][Step 1/1] index.js | 0 | 0 | 100 | 0 | 13-27
[22:31:12][Step 1/1] service-worker.js | 0 | 0 | 0 | 0 | 18-88
[22:31:12][Step 1/1] serviceWorkerRegistration.js | 5.12 | 9.37 | 6.25 | 5.12 | 30-143
[22:31:12][Step 1/1] src/airdrop | 97.87 | 95.74 | 100 | 97.87 |
[22:31:12][Step 1/1] index.js | 97.87 | 95.74 | 100 | 97.87 | 117,181
[22:31:12][Step 1/1] src/airdrop/fixtures | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] mocks.js | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] vectors.js | 0 | 0 | 0 | 0 |
[22:31:12][Step 1/1] src/alias | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] index.js | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] src/alias/fixtures | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] mocks.js | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] src/assets/styles | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] theme.js | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] src/chronik | 88.17 | 87.5 | 76.47 | 87.95 |
[22:31:12][Step 1/1] index.js | 88.17 | 87.5 | 76.47 | 87.95 | 16-23,36-45,52-61,74-77,189,227-228,244,355,441,538-543,605,621,766-775,842,864-865,875-880,887,922-923
[22:31:12][Step 1/1] src/chronik/fixtures | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] chronikMintTxs.js | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] chronikUtxos.js | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] mockChronikTokenStats.js | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] mocks.js | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] vectors.js | 0 | 0 | 0 | 0 |
[22:31:12][Step 1/1] src/components | 98.09 | 95.58 | 97.18 | 98.07 |
[22:31:12][Step 1/1] App.js | 98.05 | 95.58 | 97.14 | 98.03 | 706,788
[22:31:12][Step 1/1] NotFound.js | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] src/components/Airdrop | 82.08 | 88.88 | 82.14 | 82.03 |
[22:31:12][Step 1/1] Airdrop.js | 82.08 | 88.88 | 82.14 | 82.03 | 63-67,158-162,167-168,177-183,209-219,246-247,259,273,384,513
[22:31:12][Step 1/1] src/components/Alias | 48.12 | 45.54 | 42.42 | 48.71 |
[22:31:12][Step 1/1] Alias.js | 48.12 | 45.54 | 42.42 | 48.71 | 48,53,57,145-166,178,192-197,201-259,263-264,268,272-345,349-360,390,423,430-433,525,539-616,738
[22:31:12][Step 1/1] src/components/Alias/fixtures | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] mocks.js | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] src/components/AppModes | 13.13 | 8.82 | 17.39 | 13.26 |
[22:31:12][Step 1/1] Extension.js | 3.5 | 0 | 0 | 3.5 | 13-141
[22:31:12][Step 1/1] WebApp.js | 26.19 | 13.04 | 40 | 26.82 | 20-43,52-88,101-103,108-110
[22:31:12][Step 1/1] src/components/Common | 82.85 | 57.69 | 76.17 | 83.12 |
[22:31:12][Step 1/1] ApiError.js | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] Atoms.js | 90 | 100 | 77.77 | 90 | 9,75
[22:31:12][Step 1/1] BalanceHeader.js | 100 | 81.81 | 100 | 100 | 50-52,56
[22:31:12][Step 1/1] BalanceHeaderToken.js | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] CopyToClipboard.js | 77.77 | 62.5 | 100 | 77.77 | 27-30
[22:31:12][Step 1/1] CropControlModal.js | 85.71 | 0 | 50 | 85.71 | 37
[22:31:12][Step 1/1] CustomIcons.js | 91.66 | 100 | 82.5 | 94.66 | 55,63,78,236
[22:31:12][Step 1/1] EnhancedInputs.js | 79.48 | 0 | 73.91 | 79.22 | 134,142-152,176-221,267-274,311
[22:31:12][Step 1/1] ExtensionHeader.js | 63.63 | 100 | 0 | 63.63 | 49-56
[22:31:12][Step 1/1] GoogleAnalytics.js | 42.85 | 40 | 14.28 | 42.85 | 14-16,23-33
[22:31:12][Step 1/1] HideBalanceSwitch.js | 80 | 100 | 50 | 80 | 14
[22:31:12][Step 1/1] Inputs.js | 98.11 | 48.14 | 96.55 | 98.11 | 239
[22:31:12][Step 1/1] Modal.js | 100 | 92.85 | 100 | 100 | 93
[22:31:12][Step 1/1] PrimaryButton.js | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] ScanQRCode.js | 63.63 | 45 | 75 | 63.63 | 38,56-102,117
[22:31:12][Step 1/1] ServiceWorkerWrapper.js | 57.14 | 50 | 40 | 57.14 | 15-16,24-26,33
[22:31:12][Step 1/1] StyledCollapse.js | 94.44 | 33.33 | 90 | 94.44 | 48
[22:31:12][Step 1/1] Switch.js | 100 | 96.55 | 100 | 100 | 34
[22:31:12][Step 1/1] UpgradeModal.js | 39.13 | 0 | 0 | 39.13 | 26,43-45,49-52,55-60,69-73,78
[22:31:12][Step 1/1] WalletLabel.js | 64 | 0 | 72.72 | 64 | 57-79,87
[22:31:12][Step 1/1] src/components/Configure | 81.02 | 81.45 | 82.45 | 80.97 |
[22:31:12][Step 1/1] Configure.js | 81.02 | 81.45 | 82.45 | 80.97 | 498-499,502-504,550,568,655-662,700-703,733-739,760,767-770,784-785,809,838,845-848,855-857,866,888,907,913,921,930,938,953-956,964-965,970,992-1015,1025,1045-1047,1052,1065,1095-1097,1106,1134,1145,1175,1195,1219,1241-1295,1391,1583,1630
[22:31:12][Step 1/1] src/components/Configure/fixtures | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] mocks.js | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] src/components/Etokens | 50.2 | 43.33 | 38.88 | 50.6 |
[22:31:12][Step 1/1] CreateToken.js | 100 | 75 | 100 | 100 | 30-37
[22:31:12][Step 1/1] CreateTokenForm.js | 42.05 | 37.83 | 25 | 42.45 | 54,78,122,126-155,160,164-247,252-267,272-278,300,305,333,338,364,422-472,479-537,545-691,721-758
[22:31:12][Step 1/1] Etokens.js | 100 | 62.5 | 100 | 100 | 34-54
[22:31:12][Step 1/1] TokenIcon.js | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] TokenList.js | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] TokenListItem.js | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] src/components/Etokens/icons | 2.52 | 0 | 0 | 2.72 |
[22:31:12][Step 1/1] cropImage.js | 2.27 | 0 | 0 | 2.43 | 6-82
[22:31:12][Step 1/1] resizeImage.js | 2.77 | 0 | 0 | 3.03 | 6-55
[22:31:12][Step 1/1] roundImage.js | 2.56 | 0 | 0 | 2.77 | 6-61
[22:31:12][Step 1/1] src/components/Home | 74 | 60.13 | 52.7 | 74 |
[22:31:12][Step 1/1] Home.js | 53.12 | 61.11 | 11.76 | 53.12 | 28-48,59-75,85-102
[22:31:12][Step 1/1] Tx.js | 78.94 | 60 | 63.63 | 78.94 | 61,71,76-78,86,93-95,105,224-236,241,247,314,429,462,860-906
[22:31:12][Step 1/1] TxHistory.js | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] src/components/Home/fixtures | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] mocks.js | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] src/components/OnBoarding | 83.87 | 83.33 | 83.33 | 83.33 |
[22:31:12][Step 1/1] OnBoarding.js | 83.87 | 83.33 | 83.33 | 83.33 | 55,67-69,97
[22:31:12][Step 1/1] src/components/Receive | 98.3 | 96 | 95 | 98.27 |
[22:31:12][Step 1/1] QRCode.js | 97.5 | 100 | 93.75 | 97.43 | 126
[22:31:12][Step 1/1] Receive.js | 100 | 91.66 | 100 | 100 | 29
[22:31:12][Step 1/1] src/components/Send | 84.9 | 75.48 | 79.68 | 84.84 |
[22:31:12][Step 1/1] SendToken.js | 81.16 | 72.91 | 76.92 | 80.66 | 121,132,157,169,221-222,240,242,244,246-247,323-334,342,350-351,355,366,379,389,442-444,496
[22:31:12][Step 1/1] SendXec.js | 87.55 | 76.63 | 81.57 | 87.79 | 245,261-266,282-295,403-415,431,453-457,463,515-518,604-617,664,702,823-907,1002
[22:31:12][Step 1/1] src/components/Send/fixtures | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] mocks.js | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] src/components/SignVerifyMsg | 88.88 | 80.55 | 90 | 88.88 |
[22:31:12][Step 1/1] SignVerifyMsg.js | 88.88 | 80.55 | 90 | 88.88 | 110-111,123,137,148-149,160,193,196,276
[22:31:12][Step 1/1] src/components/Swap | 66.66 | 50 | 33.33 | 66.66 |
[22:31:12][Step 1/1] Swap.js | 66.66 | 50 | 33.33 | 66.66 | 16,33
[22:31:12][Step 1/1] src/components/fixtures | 100 | 91.48 | 100 | 100 |
[22:31:12][Step 1/1] CashtabTestWrapper.js | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] helpers.js | 100 | 93.18 | 100 | 100 | 103,179,261
[22:31:12][Step 1/1] mocks.js | 100 | 50 | 100 | 100 | 2135
[22:31:12][Step 1/1] vectors.js | 0 | 0 | 0 | 0 |
[22:31:12][Step 1/1] src/config | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] CashtabCache.js | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] CashtabState.js | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] alias.js | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] app.js | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] cashtabSettings.js | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] chronik.js | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] explorer.js | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] opreturn.js | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] token.js | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] tokenBlacklist.js | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] src/helpers | 94.11 | 83.33 | 100 | 94.11 |
[22:31:12][Step 1/1] index.js | 94.11 | 83.33 | 100 | 94.11 | 73
[22:31:12][Step 1/1] src/helpers/fixtures | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] mocks.js | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] vectors.js | 0 | 0 | 0 | 0 |
[22:31:12][Step 1/1] src/hooks | 61.72 | 73.91 | 43.75 | 62.77 |
[22:31:12][Step 1/1] useImage.js | 0 | 0 | 0 | 0 | 5-203
[22:31:12][Step 1/1] useInnerScroll.js | 0 | 100 | 0 | 0 | 7-10
[22:31:12][Step 1/1] useWallet.js | 88.4 | 83.33 | 75 | 89.02 | 59,148,413-416,455,513,553,569-619,658,690,721,727-730,809-813
[22:31:12][Step 1/1] useWindowDimensions.js | 88.88 | 100 | 80 | 87.5 | 25
[22:31:12][Step 1/1] src/hooks/fixtures | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] mocks.js | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] src/opreturn | 98.57 | 93.1 | 100 | 98.57 |
[22:31:12][Step 1/1] index.js | 98.57 | 93.1 | 100 | 98.57 | 169
[22:31:12][Step 1/1] src/opreturn/fixtures | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] vectors.js | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] src/slpv1 | 93.9 | 86.04 | 100 | 93.9 |
[22:31:12][Step 1/1] index.js | 93.9 | 86.04 | 100 | 93.9 | 246,257,309,313,318
[22:31:12][Step 1/1] src/slpv1/fixtures | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] mocks.js | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] vectors.js | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] src/transactions | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] index.js | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] src/transactions/fixtures | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] mocks.js | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] vectors.js | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] src/utils | 83.67 | 87.5 | 100 | 83.67 |
[22:31:12][Step 1/1] cashMethods.js | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] formatting.js | 78.37 | 85 | 100 | 78.37 | 19,29,52-54,93-95
[22:31:12][Step 1/1] src/validation | 95.59 | 98.06 | 100 | 95.98 |
[22:31:12][Step 1/1] index.js | 95.59 | 98.06 | 100 | 95.98 | 55-57,119-120,272,304,324,588-589
[22:31:12][Step 1/1] src/validation/fixtures | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] mocks.js | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] vectors.js | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] src/wallet | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] context.js | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] index.js | 100 | 100 | 100 | 100 |
[22:31:12][Step 1/1] src/wallet/fixtures | 0 | 0 | 0 | 0 |
[22:31:12][Step 1/1] vectors.js | 0 | 0 | 0 | 0 |
[22:31:12][Step 1/1] -----------------------------------|---------|----------|---------|---------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[22:31:12][Step 1/1]
[22:31:12][Step 1/1] Code Coverage Summary
[22:31:12][Step 1/1] Summary of all failing tests
[22:31:12][Step 1/1] FAIL src/components/Etokens/__tests__/CreateTokenForm.test.js (6.639 s)
[22:31:12][Step 1/1] ● <CreateTokenForm /> › User can input valid token parameters, generate a token, and view a success notification
[22:31:12][Step 1/1]
[22:31:12][Step 1/1] TestingLibraryElementError: Unable to find an element with the text: OK. 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.
[22:31:12][Step 1/1]
[22:31:12][Step 1/1] Ignored nodes: comments, script, style
[22:31:12][Step 1/1] <body>
[22:31:12][Step 1/1] <div>
[22:31:12][Step 1/1] <div
[22:31:12][Step 1/1] class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] <div
[22:31:12][Step 1/1] class="ant-spin-container"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] <div
[22:31:12][Step 1/1] class="sc-fyjhYU dwntyv"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] <div
[22:31:12][Step 1/1] class="Toastify"
[22:31:12][Step 1/1] />
[22:31:12][Step 1/1] <div
[22:31:12][Step 1/1] class="sc-keVrkP hhzpnt"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] <div
[22:31:12][Step 1/1] class="sc-gVLVqr fzyYXz"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] <div
[22:31:12][Step 1/1] class="sc-eIHaNI bNRpUo"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] <div
[22:31:12][Step 1/1] class="sc-cBdUnI kSFuPj"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] <img
[22:31:12][Step 1/1] alt="cashtab"
[22:31:12][Step 1/1] class="sc-exkUMo jxgjXp"
[22:31:12][Step 1/1] src="test-file-stub"
[22:31:12][Step 1/1] />
[22:31:12][Step 1/1] </div>
[22:31:12][Step 1/1] <div
[22:31:12][Step 1/1] class="sc-bbmXgH fLVOGg"
[22:31:12][Step 1/1] data-testid="wallet-info-ctn"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] <div
[22:31:12][Step 1/1] class="sc-jrIrqw jvojHN"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] <select
[22:31:12][Step 1/1] class="sc-hjRWVT dUYreC"
[22:31:12][Step 1/1] id="wallets"
[22:31:12][Step 1/1] name="wallets"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] <option
[22:31:12][Step 1/1] class="sc-iybRtq jkwgJt"
[22:31:12][Step 1/1] value="Transaction Fixtures"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] Transaction Fixtures
[22:31:12][Step 1/1] </option>
[22:31:12][Step 1/1] </select>
[22:31:12][Step 1/1] <div
[22:31:12][Step 1/1] class="sc-hMqMXs cAbGIb"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] <svg
[22:31:12][Step 1/1] class="sc-htoDjs dHRdfz"
[22:31:12][Step 1/1] style="margin-top: 8px;"
[22:31:12][Step 1/1] />
[22:31:12][Step 1/1] </div>
[22:31:12][Step 1/1] <div
[22:31:12][Step 1/1] class="sc-dUjcNx dlXFJu"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] <input
[22:31:12][Step 1/1] checked=""
[22:31:12][Step 1/1] class="sc-emmjRN jsLypx"
[22:31:12][Step 1/1] data-testid="show-hide-balance"
[22:31:12][Step 1/1] id="show-hide-balance"
[22:31:12][Step 1/1] name="show-hide-balance"
[22:31:12][Step 1/1] type="checkbox"
[22:31:12][Step 1/1] />
[22:31:12][Step 1/1] <label
[22:31:12][Step 1/1] class="sc-gHboQg dROkmL"
[22:31:12][Step 1/1] for="show-hide-balance"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] <span
[22:31:12][Step 1/1] class="sc-eilVRo fUDPGJ"
[22:31:12][Step 1/1] data-off=""
[22:31:12][Step 1/1] data-on=""
[22:31:12][Step 1/1] />
[22:31:12][Step 1/1] <span
[22:31:12][Step 1/1] class="sc-eerKOB NLONq"
[22:31:12][Step 1/1] />
[22:31:12][Step 1/1] </label>
[22:31:12][Step 1/1] </div>
[22:31:12][Step 1/1] </div>
[22:31:12][Step 1/1] <div
[22:31:12][Step 1/1] class="sc-iQtOjA cUcGEQ"
[22:31:12][Step 1/1] data-testid="balance-xec"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] 9,513.12
[22:31:12][Step 1/1]
[22:31:12][Step 1/1] XEC
[22:31:12][Step 1/1]
[22:31:12][Step 1/1] </div>
[22:31:12][Step 1/1] <div
[22:31:12][Step 1/1] class="sc-fHxwqH ckNvLc"
[22:31:12][Step 1/1] data-testid="balance-fiat"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] $
[22:31:12][Step 1/1] 0.29
[22:31:12][Step 1/1]  
[22:31:12][Step 1/1] USD
[22:31:12][Step 1/1] </div>
[22:31:12][Step 1/1] <p
[22:31:12][Step 1/1] class="sc-cEvuZC fNPrOh"
[22:31:12][Step 1/1] data-testid="ecash-price"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] 1
[22:31:12][Step 1/1] XEC
[22:31:12][Step 1/1] =
[22:31:12][Step 1/1] 0.00003000
[22:31:12][Step 1/1]
[22:31:12][Step 1/1] USD
[22:31:12][Step 1/1] </p>
[22:31:12][Step 1/1] </div>
[22:31:12][Step 1/1] </div>
[22:31:12][Step 1/1] <div
[22:31:12][Step 1/1] class="sc-jqCOkK dpFugr"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] <div
[22:31:12][Step 1/1] class="sc-gojNiO bWClNj"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] <h3>
[22:31:12][Step 1/1] Create a Token
[22:31:12][Step 1/1] </h3>
[22:31:12][Step 1/1] <div
[22:31:12][Step 1/1] class="sc-exAgwC bSGahT"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] <div
[22:31:12][Step 1/1] class="sc-cMhqgX hShMJA"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] <div
[22:31:12][Step 1/1] class="sc-iuJeZd kzeXth"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] <input
[22:31:12][Step 1/1] class="sc-esOvli hTocdE"
[22:31:12][Step 1/1] name="name"
[22:31:12][Step 1/1] placeholder="Enter a name for your token"
[22:31:12][Step 1/1] value="test token"
[22:31:12][Step 1/1] />
[22:31:12][Step 1/1] </div>
[22:31:12][Step 1/1] <div
[22:31:12][Step 1/1] class="sc-iujRgT cELAJT"
[22:31:12][Step 1/1] />
[22:31:12][Step 1/1] </div>
[22:31:12][Step 1/1] <div
[22:31:12][Step 1/1] class="sc-cMhqgX hShMJA"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] <div
[22:31:12][Step 1/1] class="sc-iuJeZd kzeXth"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] <input
[22:31:12][Step 1/1] class="sc-esOvli hTocdE"
[22:31:12][Step 1/1] name="ticker"
[22:31:12][Step 1/1] placeholder="Enter a ticker for your token"
[22:31:12][Step 1/1] value="TKE"
[22:31:12][Step 1/1] />
[22:31:12][Step 1/1] </div>
[22:31:12][Step 1/1] <div
[22:31:12][Step 1/1] class="sc-iujRgT cELAJT"
[22:31:12][Step 1/1] />
[22:31:12][Step 1/1] </div>
[22:31:12][Step 1/1] <div
[22:31:12][Step 1/1] class="sc-cMhqgX hShMJA"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] <div
[22:31:12][Step 1/1] class="sc-iuJeZd jgJRvx"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] <input
[22:31:12][Step 1/1] class="sc-esOvli hTocdE"
[22:31:12][Step 1/1] name="decimals"
[22:31:12][Step 1/1] placeholder="Enter number of decimal places"
[22:31:12][Step 1/1] value="02"
[22:31:12][Step 1/1] />
[22:31:12][Step 1/1] </div>
[22:31:12][Step 1/1] <div
[22:31:12][Step 1/1] class="sc-iujRgT cELAJT"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] Token decimals must be an integer between 0 and 9
[22:31:12][Step 1/1] </div>
[22:31:12][Step 1/1] </div>
[22:31:12][Step 1/1] <div
[22:31:12][Step 1/1] class="sc-cMhqgX hShMJA"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] <div
[22:31:12][Step 1/1] class="sc-iuJeZd kzeXth"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] <input
[22:31:12][Step 1/1] class="sc-esOvli hTocdE"
[22:31:12][Step 1/1] name="initialQty"
[22:31:12][Step 1/1] placeholder="Enter the fixed supply of your token"
[22:31:12][Step 1/1] value="600000"
[22:31:12][Step 1/1] />
[22:31:12][Step 1/1] </div>
[22:31:12][Step 1/1] <div
[22:31:12][Step 1/1] class="sc-iujRgT cELAJT"
[22:31:12][Step 1/1] />
[22:31:12][Step 1/1] </div>
[22:31:12][Step 1/1] <div
[22:31:12][Step 1/1] class="sc-cMhqgX hShMJA"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] <div
[22:31:12][Step 1/1] class="sc-iuJeZd kzeXth"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] <input
[22:31:12][Step 1/1] class="sc-esOvli hTocdE"
[22:31:12][Step 1/1] name="url"
[22:31:12][Step 1/1] placeholder="Enter a website for your token"
[22:31:12][Step 1/1] value="https://www.cashtab.com"
[22:31:12][Step 1/1] />
[22:31:12][Step 1/1] </div>
[22:31:12][Step 1/1] <div
[22:31:12][Step 1/1] class="sc-iujRgT cELAJT"
[22:31:12][Step 1/1] />
[22:31:12][Step 1/1] </div>
[22:31:12][Step 1/1] <label
[22:31:12][Step 1/1] class="sc-uJMKN eXLLEE"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] Add Image
[22:31:12][Step 1/1] </label>
[22:31:12][Step 1/1] <span
[22:31:12][Step 1/1] class="ant-upload-wrapper css-dev-only-do-not-override-1rqnfsa"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] <div
[22:31:12][Step 1/1] class="css-dev-only-do-not-override-1rqnfsa ant-upload ant-upload-drag"
[22:31:12][Step 1/1] style="background-color: rgb(244, 244, 244);"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] <span
[22:31:12][Step 1/1] class="ant-upload ant-upload-btn"
[22:31:12][Step 1/1] role="button"
[22:31:12][Step 1/1] tabindex="0"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] <input
[22:31:12][Step 1/1] accept=""
[22:31:12][Step 1/1] style="display: none;"
[22:31:12][Step 1/1] type="file"
[22:31:12][Step 1/1] />
[22:31:12][Step 1/1] <div
[22:31:12][Step 1/1] class="ant-upload-drag-container"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1]
[22:31:12][Step 1/1] <span
[22:31:12][Step 1/1] aria-label="upload"
[22:31:12][Step 1/1] class="anticon anticon-upload"
[22:31:12][Step 1/1] role="img"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] <svg
[22:31:12][Step 1/1] aria-hidden="true"
[22:31:12][Step 1/1] data-icon="upload"
[22:31:12][Step 1/1] fill="currentColor"
[22:31:12][Step 1/1] focusable="false"
[22:31:12][Step 1/1] height="1em"
[22:31:12][Step 1/1] viewBox="64 64 896 896"
[22:31:12][Step 1/1] width="1em"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] <path
[22:31:12][Step 1/1] d="M400 317.7h73.9V656c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V317.7H624c6.7 0 10.4-7.7 6.3-12.9L518.3 163a8 8 0 00-12.6 0l-112 141.7c-4.1 5.3-.4 13 6.3 13zM878 626h-60c-4.4 0-8 3.6-8 8v154H214V634c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v198c0 17.7 14.3 32 32 32h684c17.7 0 32-14.3 32-32V634c0-4.4-3.6-8-8-8z"
[22:31:12][Step 1/1] />
[22:31:12][Step 1/1] </svg>
[22:31:12][Step 1/1] </span>
[22:31:12][Step 1/1] <p>
[22:31:12][Step 1/1] Click, or drag file to this area to upload
[22:31:12][Step 1/1] </p>
[22:31:12][Step 1/1] <p
[22:31:12][Step 1/1] style="font-size: 12px;"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] Only jpg or png accepted
[22:31:12][Step 1/1] </p>
[22:31:12][Step 1/1] </div>
[22:31:12][Step 1/1] </span>
[22:31:12][Step 1/1] </div>
[22:31:12][Step 1/1] <div
[22:31:12][Step 1/1] class="ant-upload-list ant-upload-list-text"
[22:31:12][Step 1/1] />
[22:31:12][Step 1/1] </span>
[22:31:12][Step 1/1] <button
[22:31:12][Step 1/1] class="sc-hwwEjo sc-kfGgVZ fhzclG"
[22:31:12][Step 1/1] disabled=""
[22:31:12][Step 1/1] style="margin-top: 30px;"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] <span
[22:31:12][Step 1/1] aria-label="plus-square"
[22:31:12][Step 1/1] class="anticon anticon-plus-square"
[22:31:12][Step 1/1] role="img"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] <svg
[22:31:12][Step 1/1] aria-hidden="true"
[22:31:12][Step 1/1] data-icon="plus-square"
[22:31:12][Step 1/1] fill="currentColor"
[22:31:12][Step 1/1] focusable="false"
[22:31:12][Step 1/1] height="1em"
[22:31:12][Step 1/1] viewBox="64 64 896 896"
[22:31:12][Step 1/1] width="1em"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] <path
[22:31:12][Step 1/1] d="M328 544h152v152c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V544h152c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8H544V328c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v152H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8z"
[22:31:12][Step 1/1] />
[22:31:12][Step 1/1] <path
[22:31:12][Step 1/1] d="M880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-40 728H184V184h656v656z"
[22:31:12][Step 1/1] />
[22:31:12][Step 1/1] </svg>
[22:31:12][Step 1/1] </span>
[22:31:12][Step 1/1]  Create eToken
[22:31:12][Step 1/1] </button>
[22:31:12][Step 1/1] </div>
[22:31:12][Step 1/1] </div>
[22:31:12][Step 1/1] </div>
[22:31:12][Step 1/1] </div>
[22:31:12][Step 1/1] <div
[22:31:12][Step 1/1] class="sc-ugnQR bPafYx"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] <button
[22:31:12][Step 1/1] class="sc-iFMziU gzZcUO"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] <svg />
[22:31:12][Step 1/1] </button>
[22:31:12][Step 1/1] <button
[22:31:12][Step 1/1] class="sc-iFMziU gzZcUO"
[22:31:12][Step 1/1] data-testid="nav-btn-send"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] <svg
[22:31:12][Step 1/1] class="sc-jKJlTe fTQyTm"
[22:31:12][Step 1/1] style="margin-top: -9px;"
[22:31:12][Step 1/1] />
[22:31:12][Step 1/1] </button>
[22:31:12][Step 1/1] <button
[22:31:12][Step 1/1] class="sc-iFMziU gzZcUO"
[22:31:12][Step 1/1] data-testid="nav-btn-etokens"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] <span
[22:31:12][Step 1/1] aria-label="appstore-add"
[22:31:12][Step 1/1] class="anticon anticon-appstore-add"
[22:31:12][Step 1/1] role="img"
[22:31:12][Step 1/1] ##teamcity[importData timestamp='2024-03-28T22:31:12.440' path='results/artifacts/junit/*.xml' type='junit']
[22:31:12][Step 1/1] Importing data from 'results/artifacts/junit/*.xml' (not existing file) with 'junit' processor
[22:31:12][Step 1/1] Publishing artifacts (17s)
[22:31:12][Publishing artifacts] Collecting files to publish: [+:results/artifacts=>artifacts.tar.gz]
[22:31:12][Step 1/1] Ant JUnit report watcher
[22:31:12][Ant JUnit report watcher] Watching paths:
[22:31:12][Ant JUnit report watcher] /home/teamcity/buildAgent/work/jailed-build/results/artifacts/junit/*.xml
[22:31:12][Publishing artifacts] Creating archive artifacts.tar.gz
[22:31:12][Creating archive artifacts.tar.gz] Creating /home/teamcity/buildAgent/temp/buildTmp/TarPreprocessor12796210784181524817/artifacts.tar.gz
[22:31:12][Step 1/1] CashTab Unit Tests
[22:31:12][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
[22:31:12][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
[22:31:12][CashTab Unit Tests] Correctly prepares Cashtab mocked chronik client and localforage environment for unit tests initializeCashtabStateForTests mocks a new Cashtab user or incognito visitor
[22:31:12][CashTab Unit Tests] Correctly prepares Cashtab mocked chronik client and localforage environment for unit tests initializeCashtabStateForTests: Wallet with xec and tokens
[22:31:12][CashTab Unit Tests] Correctly prepares Cashtab mocked chronik client and localforage environment for unit tests initializeCashtabStateForTests: Multiple wallets
[22:31:12][Step 1/1] CashTab Unit Tests
[22:31:12][CashTab Unit Tests] Generating etoken genesis tx target outputs getSlpGenesisTargetOutput: Fixed supply eToken mint for token with decimals
[22:31:12][CashTab Unit Tests] Generating etoken genesis tx target outputs getSlpGenesisTargetOutput: Fixed supply eToken mint for tokenId 50d8292c6255cda7afc6c8566fed3cf42a2794e9619740fe8f4c95431271410e
[22:31:12][CashTab Unit Tests] Generating etoken genesis tx target outputs getSlpGenesisTargetOutput throws error for: Invalid document hash
[22:31:12][CashTab Unit Tests] Generating etoken genesis tx target outputs getSlpGenesisTargetOutput throws error for: Missing decimals
[22:31:12][CashTab Unit Tests] Generating etoken genesis tx target outputs getSlpGenesisTargetOutput throws error for: Non-string name
[22:31:12][CashTab Unit Tests] 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
[22:31:12][CashTab Unit Tests] 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
[22:31:12][CashTab Unit Tests] 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
[22:31:12][CashTab Unit Tests] 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
[22:31:12][CashTab Unit Tests] Get slpv1 send token inputs and outputs from in-node chronik-client getSendTokenInputs: Token send with change output
[22:31:12][CashTab Unit Tests] Get slpv1 send token inputs and outputs from in-node chronik-client getSlpSendTargetOutputs with in-node inputs: Token send with change output
[22:31:12][CashTab Unit Tests] Get slpv1 send token inputs and outputs from in-node chronik-client getSendTokenInputs: Token send with no change output
[22:31:12][CashTab Unit Tests] Get slpv1 send token inputs and outputs from in-node chronik-client getSlpSendTargetOutputs with in-node inputs: Token send with no change output
[22:31:12][CashTab Unit Tests] Get slpv1 send token inputs and outputs from in-node chronik-client getSendTokenInputs: Token send with decimals and change output
[22:31:12][CashTab Unit Tests] Get slpv1 send token inputs and outputs from in-node chronik-client getSlpSendTargetOutputs with in-node inputs: Token send with decimals and change output
[22:31:12][CashTab Unit Tests] 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
[22:31:12][CashTab Unit Tests] Get slpv1 send token inputs and outputs from in-node chronik-client getSlpBurnTargetOutput throws error for: Sending more than utxos with no decimals
[22:31:12][CashTab Unit Tests] Get slpv1 send token inputs and outputs from in-node chronik-client getSlpBurnTargetOutput throws error for: Invalid decimals
[22:31:12][CashTab Unit Tests] Get slpv1 send token inputs and outputs from in-node chronik-client getSlpBurnTargetOutput throws error for: No token utxos
[22:31:12][CashTab Unit Tests] Get slpv1 send token inputs and outputs from in-node chronik-client getSlpBurnTargetOutput throws error for: Send qty is empty string
[22:31:12][CashTab Unit Tests] Get slpv1 send input utxos from in-node chronik-client getSendTokenInputs with in-node chronik utxos: Token send with change output
[22:31:12][CashTab Unit Tests] Get slpv1 send input utxos from in-node chronik-client getSlpSendTargetOutputs with in-node inputs: Token send with change output
[22:31:12][CashTab Unit Tests] Get slpv1 send input utxos from in-node chronik-client getSendTokenInputs with in-node chronik utxos: Token send with no change output
[22:31:12][CashTab Unit Tests] Get slpv1 send input utxos from in-node chronik-client getSlpSendTargetOutputs with in-node inputs: Token send with no change output
[22:31:12][CashTab Unit Tests] Get slpv1 send input utxos from in-node chronik-client getSendTokenInputs with in-node chronik utxos: Token send with decimals and change output
[22:31:12][CashTab Unit Tests] Get slpv1 send input utxos from in-node chronik-client getSlpSendTargetOutputs with in-node inputs: Token send with decimals and change output
[22:31:12][CashTab Unit Tests] 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
[22:31:12][CashTab Unit Tests] 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
[22:31:12][CashTab Unit Tests] Get slpv1 send input utxos from in-node chronik-client getSendTokenInputs with in-node chronik utxos throws error for: Invalid decimals
[22:31:12][CashTab Unit Tests] Get slpv1 send input utxos from in-node chronik-client getSendTokenInputs with in-node chronik utxos throws error for: No token utxos
[22:31:12][CashTab Unit Tests] Get slpv1 send input utxos from in-node chronik-client getSendTokenInputs with in-node chronik utxos throws error for: Send qty is empty string
[22:31:12][CashTab Unit Tests] Generating etoken burn tx target outputs getSlpBurnTargetOutputs: Burn a fraction of balance
[22:31:12][CashTab Unit Tests] Generating etoken burn tx target outputs getSlpBurnTargetOutputs: Burn all balance
[22:31:12][CashTab Unit Tests] Generating explicit etoken burn tx target output from in-node utxos getExplicitBurnTargetOutputs: Burn a single token utxo
[22:31:12][CashTab Unit Tests] Generating explicit etoken burn tx target output from in-node utxos getExplicitBurnTargetOutputs: Burns multiple token utxos
[22:31:12][CashTab Unit Tests] Generating explicit etoken burn tx target output from in-node utxos getExplicitBurnTargetOutputs: Burns max slp quantity for 9 decimals
[22:31:12][CashTab Unit Tests] Generating explicit etoken burn tx target output from in-node utxos getExplicitBurnTargetOutputs throws error if called with in-node utxos and no specified decimals
[22:31:12][Step 1/1] CashTab Unit Tests
[22:31:12][CashTab Unit Tests] Cashtab validation functions isValidSideshiftObj() returns true for a valid sideshift library object
[22:31:12][CashTab Unit Tests] Cashtab validation functions isValidSideshiftObj() returns false if the sideshift library object failed to instantiate
[22:31:12][CashTab Unit Tests] Cashtab validation functions isValidSideshiftObj() returns false for an invalid sideshift library object
[22:31:12][CashTab Unit Tests] Cashtab validation functions isValidRecipient() returns true for a valid and registered alias input
[22:31:12][CashTab Unit Tests] Cashtab validation functions isValidRecipient() returns false for a valid but unregistered alias input
[22:31:12][CashTab Unit Tests] Cashtab validation functions isValidRecipient() returns false for an invalid eCash address / alias input
[22:31:12][CashTab Unit Tests] Cashtab validation functions isValidRecipient() returns true for a valid eCash address
[22:31:12][CashTab Unit Tests] Cashtab validation functions isValidRecipient() returns true for a valid prefix-less eCash address
[22:31:12][CashTab Unit Tests] Cashtab validation functions validateMnemonic() returns true for a valid mnemonic
[22:31:12][CashTab Unit Tests] Cashtab validation functions validateMnemonic() returns false for an invalid mnemonic
[22:31:12][CashTab Unit Tests] Cashtab validation functions validateMnemonic() returns false for an empty string mnemonic
[22:31:12][CashTab Unit Tests] Cashtab validation functions Accepts a valid eToken token name
[22:31:12][CashTab Unit Tests] Cashtab validation functions Accepts a valid eToken token name that is a stringified number
[22:31:12][CashTab Unit Tests] Cashtab validation functions Rejects eToken token name if longer than 68 characters
[22:31:12][CashTab Unit Tests] Cashtab validation functions Rejects eToken token name if empty string
[22:31:12][CashTab Unit Tests] Cashtab validation functions Accepts a 4-char eToken token ticker
[22:31:12][CashTab Unit Tests] Cashtab validation functions Accepts a 12-char eToken token ticker
[22:31:12][CashTab Unit Tests] Cashtab validation functions Rejects eToken token ticker if empty string
[22:31:12][CashTab Unit Tests] Cashtab validation functions Rejects eToken token ticker if > 12 chars
[22:31:12][CashTab Unit Tests] Cashtab validation functions Accepts tokenDecimals if zero
[22:31:12][CashTab Unit Tests] Cashtab validation functions Accepts tokenDecimals if between 0 and 9 inclusive
[22:31:12][CashTab Unit Tests] Cashtab validation functions Rejects tokenDecimals if empty string
[22:31:12][CashTab Unit Tests] Cashtab validation functions Rejects tokenDecimals if non-integer
[22:31:12][CashTab Unit Tests] Cashtab validation functions Accepts tokenDecimals initial genesis quantity at minimum amount for 3 decimal places
[22:31:12][CashTab Unit Tests] Cashtab validation functions Accepts initial genesis quantity at minimum amount for 9 decimal places
[22:31:12][CashTab Unit Tests] Cashtab validation functions Accepts initial genesis quantity at amount below 100 billion
[22:31:12][CashTab Unit Tests] Cashtab validation functions Accepts highest possible initial genesis quantity at amount below 100 billion
[22:31:12][CashTab Unit Tests] Cashtab validation functions Accepts initial genesis quantity if decimal places equal tokenDecimals
[22:31:12][CashTab Unit Tests] Cashtab validation functions Accepts initial genesis quantity if decimal places are less than tokenDecimals
[22:31:12][CashTab Unit Tests] Cashtab validation functions Rejects initial genesis quantity of zero
[22:31:12][CashTab Unit Tests] Cashtab validation functions Rejects initial genesis quantity if tokenDecimals is not valid
[22:31:12][CashTab Unit Tests] Cashtab validation functions Rejects initial genesis quantity if 100 billion or higher
[22:31:12][CashTab Unit Tests] Cashtab validation functions Rejects initial genesis quantity if it has more decimal places than tokenDecimals
[22:31:12][CashTab Unit Tests] Cashtab validation functions Accepts a valid eToken token document URL
[22:31:12][CashTab Unit Tests] Cashtab validation functions Accepts a valid eToken token document URL including special URL characters
[22:31:12][CashTab Unit Tests] Cashtab validation functions Accepts a blank string as a valid eToken token document URL
[22:31:12][CashTab Unit Tests] Cashtab validation functions Rejects eToken token name if longer than 68 characters
[22:31:12][CashTab Unit Tests] Cashtab validation functions Accepts a domain input with https protocol as eToken token document URL
[22:31:12][CashTab Unit Tests] Cashtab validation functions Accepts a domain input with http protocol as eToken token document URL
[22:31:12][CashTab Unit Tests] Cashtab validation functions Accepts a domain input with a primary and secondary top level domain as eToken token document URL
[22:31:12][CashTab Unit Tests] Cashtab validation functions Accepts a domain input with just a subdomain as eToken token document URL
[22:31:12][CashTab Unit Tests] Cashtab validation functions Rejects a domain input with no top level domain, protocol or subdomain eToken token document URL
[22:31:12][CashTab Unit Tests] Cashtab validation functions Rejects a domain input as numbers eToken token document URL
[22:31:12][CashTab Unit Tests] Cashtab validation functions isValidEtokenBurnAmount rejects null
[22:31:12][CashTab Unit Tests] Cashtab validation functions isValidEtokenBurnAmount rejects undefined
[22:31:12][CashTab Unit Tests] Cashtab validation functions isValidEtokenBurnAmount rejects a burn amount that is 0
[22:31:12][CashTab Unit Tests] Cashtab validation functions isValidEtokenBurnAmount rejects a burn amount that is negative
[22:31:12][CashTab Unit Tests] Cashtab validation functions isValidEtokenBurnAmount rejects a burn amount that is more than the maxAmount param
[22:31:12][CashTab Unit Tests] Cashtab validation functions isValidEtokenBurnAmount accepts a valid burn amount
[22:31:12][CashTab Unit Tests] Cashtab validation functions isValidEtokenBurnAmount accepts a valid burn amount with decimal points
[22:31:12][CashTab Unit Tests] Cashtab validation functions isValidEtokenBurnAmount accepts a valid burn amount that is the same as the maxAmount
[22:31:12][CashTab Unit Tests] Cashtab validation functions isValidTokenId accepts valid token ID that is 64 chars in length
[22:31:12][CashTab Unit Tests] Cashtab validation functions isValidTokenId rejects a token ID that is less than 64 chars in length
[22:31:12][CashTab Unit Tests] Cashtab validation functions isValidTokenId rejects a token ID that is more than 64 chars in length
[22:31:12][CashTab Unit Tests] Cashtab validation functions isValidTokenId rejects a token ID number that is 64 digits in length
[22:31:12][CashTab Unit Tests] Cashtab validation functions isValidTokenId rejects null
[22:31:12][CashTab Unit Tests] Cashtab validation functions isValidTokenId rejects undefined
[22:31:12][CashTab Unit Tests] Cashtab validation functions isValidTokenId rejects empty string
[22:31:12][CashTab Unit Tests] Cashtab validation functions isValidTokenId rejects special character input
[22:31:12][CashTab Unit Tests] Cashtab validation functions isValidTokenId rejects non-alphanumeric input
[22:31:12][CashTab Unit Tests] Cashtab validation functions isValidXecAirdrop accepts valid Total Airdrop Amount
[22:31:12][CashTab Unit Tests] Cashtab validation functions isValidXecAirdrop rejects null
[22:31:12][CashTab Unit Tests] Cashtab validation functions isValidXecAirdrop rejects undefined
[22:31:12][CashTab Unit Tests] Cashtab validation functions isValidXecAirdrop rejects empty string
[22:31:12][CashTab Unit Tests] Cashtab validation functions isValidTokenId rejects an alphanumeric input
[22:31:12][CashTab Unit Tests] Cashtab validation functions isValidTokenId rejects a number !> 0 in string format
[22:31:12][CashTab Unit Tests] Cashtab validation functions isValidAirdropExclusionArray accepts a valid airdrop exclusion list
[22:31:12][CashTab Unit Tests] Cashtab validation functions isValidAirdropExclusionArray rejects an invalid airdrop exclusion list
[22:31:12][CashTab Unit Tests] Cashtab validation functions isValidAirdropExclusionArray rejects a list of addresses if any are not prefixed
[22:31:12][CashTab Unit Tests] Cashtab validation functions isValidAirdropExclusionArray rejects an empty airdrop exclusion list
[22:31:12][CashTab Unit Tests] Cashtab validation functions isValidAirdropExclusionArray rejects a null airdrop exclusion list
[22:31:12][CashTab Unit Tests] Cashtab validation functions accepts a valid wallet name
[22:31:12][CashTab Unit Tests] Cashtab validation functions rejects wallet name that is too long
[22:31:12][CashTab Unit Tests] Cashtab validation functions rejects blank string as new wallet name
[22:31:12][CashTab Unit Tests] Cashtab validation functions rejects wallet name of the wrong type
[22:31:12][CashTab Unit Tests] Cashtab validation functions isProbablyNotAScam recognizes "bitcoin" is probably a scam token name
[22:31:12][CashTab Unit Tests] Cashtab validation functions isProbablyNotAScam recognizes "ebitcoin" is probably a scam token name
[22:31:12][CashTab Unit Tests] Cashtab validation functions isProbablyNotAScam recognizes "Lido Staked Ether", from coingeckoTop500Names, is probably a scam token name
[22:31:12][CashTab Unit Tests] Cashtab validation functions isProbablyNotAScam recognizes 'matic-network', from coingeckoTop500Ids, is probably a scam token name
[22:31:12][CashTab Unit Tests] Cashtab validation functions isProbablyNotAScam recognizes 'Australian Dollar', from Cashtab supported fiat currencies, is probably a scam token name
[22:31:12][CashTab Unit Tests] Cashtab validation functions isProbablyNotAScam recognizes 'ebtc', from bannedTickers, is probably a scam token name
[22:31:12][CashTab Unit Tests] Cashtab validation functions isProbablyNotAScam recognizes 'gbp', from bannedTickers, is probably a scam
[22:31:12][CashTab Unit Tests] Cashtab validation functions isProbablyNotAScam recognizes 'Hong Kong Dollar', from fiatNames, is probably a scam
[22:31:12][CashTab Unit Tests] Cashtab validation functions isProbablyNotAScam recognizes '₪', from fiat symbols, is probably a scam
[22:31:12][CashTab Unit Tests] Cashtab validation functions isProbablyNotAScam recognizes an ordinary token name as acceptable
[22:31:12][CashTab Unit Tests] Cashtab validation functions isProbablyNotAScam accepts a token name with fragments of banned potential scam names
[22:31:12][CashTab Unit Tests] Cashtab validation functions isValidOpreturnParam rejects a string that starts with 6a
[22:31:12][CashTab Unit Tests] Cashtab validation functions isValidOpreturnParam rejects a string that starts with invalid pushdata
[22:31:12][CashTab Unit Tests] Cashtab validation functions isValidOpreturnParam rejects non-string input
[22:31:12][CashTab Unit Tests] Cashtab validation functions isValidOpreturnParam rejects non-hex input
[22:31:12][CashTab Unit Tests] Cashtab validation functions isValidOpreturnParam supports a valid hex string under max length
[22:31:12][CashTab Unit Tests] Cashtab validation functions isValidOpreturnParam supports a valid hex string under max length with mixed capitalization
[22:31:12][CashTab Unit Tests] Cashtab validation functions isValidOpreturnParam supports a valid hex string of max length
[22:31:12][CashTab Unit Tests] Cashtab validation functions isValidOpreturnParam rejects a string with empty spaces
[22:31:12][CashTab Unit Tests] Cashtab validation functions isValidOpreturnParam rejects an empty string
[22:31:12][CashTab Unit Tests] Cashtab validation functions isValidOpreturnParam rejects a valid hex string exceeding max length
[22:31:12][CashTab Unit Tests] Cashtab validation functions isValidOpreturnParam rejects a valid hex string that has uneven length (i.e., half a byte)
[22:31:12][CashTab Unit Tests] Cashtab validation functions Determining whether Send button should be disabled on SendXec screen shouldSendXecBeDisabled: Disabled on startup
[22:31:12][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 value
[22:31:12][CashTab Unit Tests] Cashtab validation functions Determining whether Send button should be disabled on SendXec screen shouldSendXecBeDisabled: Enabled for valid address and value
[22:31:12][CashTab Unit Tests] Cashtab validation functions Determining whether Send button should be disabled on SendXec screen shouldSendXecBeDisabled: Disabled on zero balance
[22:31:12][CashTab Unit Tests] Cashtab validation functions Determining whether Send button should be disabled on SendXec screen shouldSendXecBeDisabled: Disabled for invalid address
[22:31:12][CashTab Unit Tests] Cashtab validation functions Determining whether Send button should be disabled on SendXec screen shouldSendXecBeDisabled: Disabled for invalid value
[22:31:12][CashTab Unit Tests] Cashtab validation functions Determining whether Send button should be disabled on SendXec screen shouldSendXecBeDisabled: Disabled for invalid opreturn msg
[22:31:12][CashTab Unit Tests] Cashtab validation functions Determining whether Send button should be disabled on SendXec screen shouldSendXecBeDisabled: Disabled on priceApi error
[22:31:12][CashTab Unit Tests] Cashtab validation functions Determining whether Send button should be disabled on SendXec screen shouldSendXecBeDisabled: Enabled if isOneToManyXECSend and value is not entered
[22:31:12][CashTab Unit Tests] Cashtab validation functions Parses user input address strings with parseAddressInput parseAddressInput: Blank string
[22:31:12][CashTab Unit Tests] Cashtab validation functions Parses user input address strings with parseAddressInput parseAddressInput: Address only and no querystring
[22:31:12][CashTab Unit Tests] Cashtab validation functions Parses user input address strings with parseAddressInput parseAddressInput: prefixless address input
[22:31:12][CashTab Unit Tests] Cashtab validation functions Parses user input address strings with parseAddressInput parseAddressInput: alias only and no querystring
[22:31:12][CashTab Unit Tests] Cashtab validation functions Parses user input address strings with parseAddressInput parseAddressInput: alias missing .xec suffix
[22:31:12][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
[22:31:12][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
[22:31:12][CashTab Unit Tests] Cashtab validation functions Parses user input address strings with parseAddressInput parseAddressInput: Valid address with valid amount param, with decimals
[22:31:12][CashTab Unit Tests] Cashtab validation functions Parses user input address strings with parseAddressInput parseAddressInput: Invalid address with valid amount param
[22:31:12][CashTab Unit Tests] Cashtab validation functions Parses user input address strings with parseAddressInput parseAddressInput: etoken address with valid amount param
[22:31:12][CashTab Unit Tests] Cashtab validation functions Parses user input address strings with parseAddressInput parseAddressInput: Valid address with invalid amount param (too many decimal places)
[22:31:12][CashTab Unit Tests] Cashtab validation functions Parses user input address strings with parseAddressInput parseAddressInput: Valid alias with valid amount param
[22:31:12][CashTab Unit Tests] Cashtab validation functions Parses user input address strings with parseAddressInput parseAddressInput: Invalid alias with valid amount param
[22:31:12][CashTab Unit Tests] Cashtab validation functions Parses user input address strings with parseAddressInput parseAddressInput: Valid address with valid op_return_raw param
[22:31:12][CashTab Unit Tests] Cashtab validation functions Parses user input address strings with parseAddressInput parseAddressInput: Valid alias with valid op_return_raw param
[22:31:12][CashTab Unit Tests] Cashtab validation functions Parses user input address strings with parseAddressInput parseAddressInput: Valid address with invalid op_return_raw param
[22:31:12][CashTab Unit Tests] Cashtab validation functions Parses user input address strings with parseAddressInput parseAddressInput: Valid amount and op_return_raw params
[22:31:12][CashTab Unit Tests] Cashtab validation functions Parses user input address strings with parseAddressInput parseAddressInput: invalid querystring (unsupported params)
[22:31:12][CashTab Unit Tests] Cashtab validation functions Parses user input address strings with parseAddressInput parseAddressInput: Invalid queryString, repeated param
[22:31:12][CashTab Unit Tests] Cashtab validation functions Parses user input address strings with parseAddressInput parseAddressInput: Repeated op_return_raw param
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][CashTab Unit Tests] Cashtab validation functions Validates user alias input on Send and SendToken screens isValidAliasSendInput: Valid alias send input
[22:31:12][CashTab Unit Tests] Cashtab validation functions Validates user alias input on Send and SendToken screens isValidAliasSendInput: Valid alias missing prefix
[22:31:12][CashTab Unit Tests] Cashtab validation functions Validates user alias input on Send and SendToken screens isValidAliasSendInput: Valid alias with double suffix
[22:31:12][CashTab Unit Tests] Cashtab validation functions Validates user alias input on Send and SendToken screens isValidAliasSendInput: Valid alias with bad suffix
[22:31:12][CashTab Unit Tests] Cashtab validation functions Validates user alias input on Send and SendToken screens isValidAliasSendInput: Invalid alias (too long)
[22:31:12][CashTab Unit Tests] Cashtab validation functions Validates user alias input on Send and SendToken screens isValidAliasSendInput: Invalid alias (nonalphanumeric)
[22:31:12][CashTab Unit Tests] Cashtab validation functions Validating Cashtab Contact Lists isValidContactList: Legacy empty contact list
[22:31:12][CashTab Unit Tests] Cashtab validation functions Validating Cashtab Contact Lists isValidContactList: Empty contact list
[22:31:12][CashTab Unit Tests] Cashtab validation functions Validating Cashtab Contact Lists isValidContactList: Array of more than one empty object is invalid
[22:31:12][CashTab Unit Tests] Cashtab validation functions Validating Cashtab Contact Lists isValidContactList: List with one valid entry
[22:31:12][CashTab Unit Tests] Cashtab validation functions Validating Cashtab Contact Lists isValidContactList: Multiple valid entries
[22:31:12][CashTab Unit Tests] Cashtab validation functions Validating Cashtab Contact Lists isValidContactList: Valid objects but also an empty object is false
[22:31:12][CashTab Unit Tests] Cashtab validation functions Validating Cashtab Contact Lists isValidContactList: Valid alias formats are accepted
[22:31:12][CashTab Unit Tests] Cashtab validation functions Appropriately migrates users with legacy settings migrateLegacyCashtabSettings: Migrates a 1.4.x user to 1.5.0 settings
[22:31:12][CashTab Unit Tests] Cashtab validation functions Appropriately migrates users with legacy settings migrateLegacyCashtabSettings: User with only fiatCurrency in settings
[22:31:12][CashTab Unit Tests] Cashtab validation functions Appropriately migrates users with legacy settings migrateLegacyCashtabSettings: Migrates an empty object to default settings
[22:31:12][CashTab Unit Tests] Cashtab validation functions Appropriately migrates users with legacy settings migrateLegacyCashtabSettings: Returns object unchanged if it has all expected keys
[22:31:12][CashTab Unit Tests] Cashtab validation functions Determines if the user has valid cashtab settings isValidCashtabSettings: A 1.4.x settings object is invalid
[22:31:12][CashTab Unit Tests] Cashtab validation functions Determines if the user has valid cashtab settings isValidCashtabSettings: A 1.5.0 settings object is valid
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][CashTab Unit Tests] Cashtab validation functions Determines if cashtabCache is valid or invalid isValidCashtabCache: Returns false for legacy cashtabCache
[22:31:12][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
[22:31:12][CashTab Unit Tests] Cashtab validation functions Determines if cashtabCache is valid or invalid isValidCashtabCache: Returns true for current version cashtabCache
[22:31:12][CashTab Unit Tests] Cashtab validation functions Determines if cashtabCache is valid or invalid isValidCashtabCache: Returns true for default cashtabCache
[22:31:12][CashTab Unit Tests] Cashtab validation functions Determines if a cashtab wallet is valid or invalid isValidCashtabWallet: Returns true for a valid Cashtab wallet
[22:31:12][CashTab Unit Tests] Cashtab validation functions Determines if a cashtab wallet is valid or invalid isValidCashtabWallet: Returns false if not an object
[22:31:12][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)
[22:31:12][CashTab Unit Tests] Cashtab validation functions Determines if a cashtab wallet is valid or invalid isValidCashtabWallet: Returns false if wallet is missing state
[22:31:12][CashTab Unit Tests] Cashtab validation functions Determines if a cashtab wallet is valid or invalid isValidCashtabWallet: Returns false if wallet is missing mnemonic
[22:31:12][CashTab Unit Tests] Cashtab validation functions Determines if a cashtab wallet is valid or invalid isValidCashtabWallet: Returns false if wallet is missing name
[22:31:12][CashTab Unit Tests] Cashtab validation functions Determines if a cashtab wallet is valid or invalid isValidCashtabWallet: Returns false if wallet is missing paths
[22:31:12][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
[22:31:12][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
[22:31:12][CashTab Unit Tests] Cashtab validation functions Determines if a cashtab wallet is valid or invalid isValidCashtabWallet: Returns false if wallet is missing wif in path1899 path object
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][CashTab Unit Tests] Cashtab validation functions Determines if a cashtab wallet is valid or invalid isValidCashtabWallet: Returns false if no balanceSats in wallet.state
[22:31:12][CashTab Unit Tests] Cashtab validation functions Determines if a cashtab wallet is valid or invalid isValidCashtabWallet: Returns false if balances in wallet.state
[22:31:12][CashTab Unit Tests] Cashtab validation functions Determines if a cashtab wallet is valid or invalid isValidCashtabWallet: Returns false if balanceSats is not a number
[22:31:12][CashTab Unit Tests] Cashtab validation functions Determines if a cashtab wallet is valid or invalid isValidCashtabWallet: Returns false if no slpUtxos in wallet.state
[22:31:12][CashTab Unit Tests] Cashtab validation functions Determines if a cashtab wallet is valid or invalid isValidCashtabWallet: Returns false if no nonSlpUtxos in wallet.state
[22:31:12][CashTab Unit Tests] Cashtab validation functions Determines if a cashtab wallet is valid or invalid isValidCashtabWallet: Returns false if no tokens in wallet.state
[22:31:12][CashTab Unit Tests] Cashtab validation functions Determines if a cashtab wallet is valid or invalid isValidCashtabWallet: Returns false if hydratedUtxoDetails is in wallet.state
[22:31:12][CashTab Unit Tests] Cashtab validation functions Determines if a cashtab wallet is valid or invalid isValidCashtabWallet: Returns false if slpBalancesAndUtxos is in wallet.state
[22:31:12][CashTab Unit Tests] Cashtab validation functions Determines if a user input send amount is valid isValidXecSendAmount: Dust minimum is valid
[22:31:12][CashTab Unit Tests] Cashtab validation functions Determines if a user input send amount is valid isValidXecSendAmount: 1 satoshi below dust min is invalid
[22:31:12][CashTab Unit Tests] Cashtab validation functions Determines if a user input send amount is valid isValidXecSendAmount: 0 is not a valid send amount
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][CashTab Unit Tests] Cashtab validation functions Determines if a user input send amount is valid isValidXecSendAmount: A non-number string is rejected
[22:31:12][CashTab Unit Tests] Cashtab validation functions Determines if a user input send amount is valid isValidXecSendAmount: null is rejected
[22:31:12][CashTab Unit Tests] Cashtab validation functions Determines if a user input send amount is valid isValidXecSendAmount: undefined is rejected
[22:31:12][CashTab Unit Tests] Cashtab validation functions Determines if a user input send amount is valid isValidXecSendAmount: A value including non-numerical characters is rejected
[22:31:12][CashTab Unit Tests] Cashtab validation functions Determines if a user input send amount is valid isValidXecSendAmount: A value exactly matching wallet balance is accepted
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][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)
[22:31:12][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)
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][Step 1/1] CashTab Unit Tests
[22:31:12][CashTab Unit Tests] Cashtab chronik.js functions getTokenStats successfully returns a token stats object
[22:31:12][CashTab Unit Tests] Cashtab chronik.js functions getPreliminaryTokensArray successfully returns an array of all tokenIds and token balances (not yet adjusted for token decimals)
[22:31:12][CashTab Unit Tests] Cashtab chronik.js functions We will automatically cache the unknown tokenId 0000000000000000000000000000000000000000000000000000000000000000 without attempting to get its info from chronik
[22:31:12][CashTab Unit Tests] Cashtab chronik.js functions finalizeTokensArray successfully returns finalTokenArray and cachedTokenInfoById even if no cachedTokenInfoById is provided
[22:31:12][CashTab Unit Tests] Cashtab chronik.js functions finalizeTokensArray successfully returns finalTokenArray and cachedTokenInfoById when called with all token info in cache
[22:31:12][CashTab Unit Tests] Cashtab chronik.js functions updateCachedTokenInfoAndFinalizeTokensArray successfully returns finalTokenArray and cachedTokenInfoById when called with some token info in cache
[22:31:12][CashTab Unit Tests] Cashtab chronik.js functions flattenChronikTxHistory successfully combines the result of getTxHistoryChronik into a single array
[22:31:12][CashTab Unit Tests] Cashtab chronik.js functions getMintAddress successfully parses chronik.tx response to determine mint address for TabCash token
[22:31:12][CashTab Unit Tests] Cashtab chronik.js functions getMintAddress successfully parses chronik.tx response to determine mint address for PoW token
[22:31:12][CashTab Unit Tests] Cashtab chronik.js functions getMintAddress successfully parses chronik.tx response to determine mint address for Alita token
[22:31:12][CashTab Unit Tests] Cashtab chronik.js functions getMintAddress successfully parses chronik.tx response to determine mint address for a BUX self minted token
[22:31:12][CashTab Unit Tests] Cashtab chronik.js functions Parses supported tx types parseChronikTx: Staking rewards coinbase tx
[22:31:12][CashTab Unit Tests] Cashtab chronik.js functions Parses supported tx types parseChronikTx: Incoming XEC tx
[22:31:12][CashTab Unit Tests] Cashtab chronik.js functions Parses supported tx types parseChronikTx: Outgoing XEC tx
[22:31:12][CashTab Unit Tests] Cashtab chronik.js functions Parses supported tx types parseChronikTx: Alias registration
[22:31:12][CashTab Unit Tests] Cashtab chronik.js functions Parses supported tx types parseChronikTx: Incoming eToken
[22:31:12][CashTab Unit Tests] Cashtab chronik.js functions Parses supported tx types parseChronikTx: Outgoing eToken
[22:31:12][CashTab Unit Tests] Cashtab chronik.js functions Parses supported tx types parseChronikTx: Genesis tx
[22:31:12][CashTab Unit Tests] Cashtab chronik.js functions Parses supported tx types parseChronikTx: Incoming eToken tx with 9 decimals
[22:31:12][CashTab Unit Tests] Cashtab chronik.js functions Parses supported tx types parseChronikTx: Legacy airdrop tx
[22:31:12][CashTab Unit Tests] Cashtab chronik.js functions Parses supported tx types parseChronikTx: Outgoing encrypted msg (deprecated)
[22:31:12][CashTab Unit Tests] Cashtab chronik.js functions Parses supported tx types parseChronikTx: Incoming encrypted msg (deprecated)
[22:31:12][CashTab Unit Tests] Cashtab chronik.js functions Parses supported tx types parseChronikTx: Token burn tx
[22:31:12][CashTab Unit Tests] Cashtab chronik.js functions Parses supported tx types parseChronikTx: Token burn tx with decimals
[22:31:12][CashTab Unit Tests] Cashtab chronik.js functions Parses supported tx types parseChronikTx: Incoming eToken tx less than zero with decimals
[22:31:12][CashTab Unit Tests] Cashtab chronik.js functions Parses supported tx types parseChronikTx: SWaP tx
[22:31:12][CashTab Unit Tests] Cashtab chronik.js functions Parses supported tx types parseChronikTx: Pre-spec alias registration (now off spec)
[22:31:12][CashTab Unit Tests] Cashtab chronik.js functions Parses supported tx types parseChronikTx: PayButton tx with no data and payment id
[22:31:12][CashTab Unit Tests] Cashtab chronik.js functions Parses supported tx types parseChronikTx: PayButton tx with data and payment id
[22:31:12][CashTab Unit Tests] Cashtab chronik.js functions Parses supported tx types parseChronikTx: PayButton tx with no data and no payment id
[22:31:12][CashTab Unit Tests] Cashtab chronik.js functions Parses supported tx types parseChronikTx: PayButton tx with data and no payment id
[22:31:12][CashTab Unit Tests] Cashtab chronik.js functions Parses supported tx types parseChronikTx: PayButton tx with unsupported version number
[22:31:12][CashTab Unit Tests] Cashtab chronik.js functions Parses supported tx types parseChronikTx: Paybutton tx that does not have spec number of pushes
[22:31:12][CashTab Unit Tests] Cashtab chronik.js functions Parses supported tx types parseChronikTx: External msg received from Electrum
[22:31:12][CashTab Unit Tests] Cashtab chronik.js functions Parses supported tx types parseChronikTx: Before adding support for tokens other than SLPV1, an ALP tx is parsed as an eCash tx
[22:31:12][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
[22:31:12][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
[22:31:12][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,
[22:31:12][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
[22:31:12][CashTab Unit Tests] Cashtab chronik.js functions Separates SLP and non-SLP utxos organizeUtxosByType: Splits token utxos and non-token utxos
[22:31:12][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
[22:31:12][CashTab Unit Tests] Cashtab chronik.js functions Separates SLP and non-SLP utxos organizeUtxosByType: Returns empty array for preliminarySlpUtxos if no token utxos found
[22:31:12][Step 1/1] CashTab Unit Tests
[22:31:12][CashTab Unit Tests] useWallet hook rendering in different localforage states localforage can set and get a map of tokeninfo by tokenId
[22:31:12][CashTab Unit Tests] useWallet hook rendering in different localforage states XEC price is set in state on successful API fetch
[22:31:12][CashTab Unit Tests] useWallet hook rendering in different localforage states XEC price remains null in state on API error
[22:31:12][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
[22:31:12][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
[22:31:12][CashTab Unit Tests] useWallet hook rendering in different localforage states processChronikWsMsg() refreshes alias prices when aliasPrices is null
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][CashTab Unit Tests] useWallet hook rendering in different localforage states Verify refreshAliases() updates the `aliases` state variable on a successful /address/ endpoint response
[22:31:12][CashTab Unit Tests] useWallet hook rendering in different localforage states Verify refreshAliases() updates the `aliasServerError` state variable upon an /address/ endpoint error
[22:31:12][CashTab Unit Tests] useWallet hook rendering in different localforage states An incoming tx message from the websocket causes the wallet to update
[22:31:12][Step 1/1] CashTab Unit Tests
[22:31:12][CashTab Unit Tests] <BalanceHeader /> Renders the loader if balanceSats is not an integer
[22:31:12][CashTab Unit Tests] <BalanceHeader /> Renders the BalanceHeader component correctly with default locale en-US
[22:31:12][CashTab Unit Tests] <BalanceHeader /> Renders the BalanceHeader component correctly with fr-FR locale
[22:31:12][CashTab Unit Tests] <BalanceHeader /> Balance is hidden if cashtabSettings.balanceVisible is false
[22:31:12][CashTab Unit Tests] <BalanceHeader /> Renders fiat price for a non-USD currency
[22:31:12][CashTab Unit Tests] <BalanceHeader /> Fiat price and forex are not displayed if fiatPrice is unavailable
[22:31:12][Step 1/1] CashTab Unit Tests
[22:31:12][CashTab Unit Tests] Cashtab Msg building functions getCashtabMsgTargetOutput: Alphanumeric string
[22:31:12][CashTab Unit Tests] Cashtab Msg building functions getCashtabMsgTargetOutput: String with emojis
[22:31:12][CashTab Unit Tests] Cashtab Msg building functions getCashtabMsgTargetOutput: String of max length for Cashtab Msg
[22:31:12][CashTab Unit Tests] Cashtab Msg building functions getCashtabMsgTargetOutput throws error for: String exceeding max length for Cashtab Msg by 1 byte
[22:31:12][CashTab Unit Tests] Cashtab Msg building functions getCashtabMsgTargetOutput throws error for: non-string input
[22:31:12][CashTab Unit Tests] Cashtab Msg building functions getCashtabMsgTargetOutput throws error for: Empty string
[22:31:12][CashTab Unit Tests] getAirdropTargetOutput Airdrop with no optional msg
[22:31:12][CashTab Unit Tests] getAirdropTargetOutput Airdrop with many spaces for optional msg treated as no optional msg
[22:31:12][CashTab Unit Tests] getAirdropTargetOutput Airdrop with optional alphanumeric msg
[22:31:12][CashTab Unit Tests] getAirdropTargetOutput Airdrop with optional emoji and special characters msg
[22:31:12][CashTab Unit Tests] getAirdropTargetOutput Airdrop with optional msg of max allowable length
[22:31:12][CashTab Unit Tests] getAirdropTargetOutput getAirdropTargetOutput throws error for: Invalid tokenId provided
[22:31:12][CashTab Unit Tests] getAirdropTargetOutput getAirdropTargetOutput throws error for: Airdrop msg exceeding max length for airdrop msg by 1 byte
[22:31:12][CashTab Unit Tests] getAirdropTargetOutput getAirdropTargetOutput throws error for: non-string input for airdrop msg
[22:31:12][CashTab Unit Tests] Alias registration target output building functions getAliasTargetOutput: Valid alias to p2pkh address
[22:31:12][CashTab Unit Tests] Alias registration target output building functions getAliasTargetOutput: Valid alias to p2sh address
[22:31:12][CashTab Unit Tests] Alias registration target output building functions getAliasTargetOutput throws error for: Invalid alias
[22:31:12][CashTab Unit Tests] Alias registration target output building functions getAliasTargetOutput throws error for: Invalid address
[22:31:12][CashTab Unit Tests] Determines byte count of user input alias registrations getAliasByteCount: Alias with emoji
[22:31:12][CashTab Unit Tests] Determines byte count of user input alias registrations getAliasByteCount: Alias with emoji and text
[22:31:12][CashTab Unit Tests] Determines byte count of user input alias registrations getAliasByteCount: Alias with special characters
[22:31:12][CashTab Unit Tests] Determines byte count of user input alias registrations getAliasByteCount: Alias with Korean text
[22:31:12][CashTab Unit Tests] Determines byte count of user input alias registrations getAliasByteCount: Alias with Arabic text
[22:31:12][CashTab Unit Tests] Determines byte count of user input alias registrations getAliasByteCount: Alias with Chinese text
[22:31:12][CashTab Unit Tests] Determines byte count of user input alias registrations getAliasByteCount: Alias with mixed foreign alphabets and emoji
[22:31:12][CashTab Unit Tests] Determines byte count of user input alias registrations getAliasByteCount: Alphanumeric valid v0 alias
[22:31:12][CashTab Unit Tests] Determines byte count of user input alias registrations getAliasByteCount throws error for: non-text input
[22:31:12][CashTab Unit Tests] Determines bytecount of user input Cashtab Msg getCashtabMsgByteCount: a single emoji
[22:31:12][CashTab Unit Tests] Determines bytecount of user input Cashtab Msg getCashtabMsgByteCount: msg input with characters and emojis
[22:31:12][CashTab Unit Tests] Determines bytecount of user input Cashtab Msg getCashtabMsgByteCount: msg input with special characters
[22:31:12][CashTab Unit Tests] Determines bytecount of user input Cashtab Msg getCashtabMsgByteCount: msg input with a mixture of symbols, multilingual characters and emojis
[22:31:12][CashTab Unit Tests] Determines bytecount of user input Cashtab Msg getCashtabMsgByteCount: Alphanumeric string
[22:31:12][CashTab Unit Tests] Determines bytecount of user input Cashtab Msg getCashtabMsgByteCount: String with emojis
[22:31:12][CashTab Unit Tests] Determines bytecount of user input Cashtab Msg getCashtabMsgByteCount: String of max length for Cashtab Msg
[22:31:12][CashTab Unit Tests] Determines bytecount of user input Cashtab Msg getCashtabMsgByteCount throws error for: non-text input
[22:31:12][CashTab Unit Tests] Build target output for opreturn as bip21 param getOpreturnParamTargetOutput: Valid opreturn param input
[22:31:12][CashTab Unit Tests] Build target output for opreturn as bip21 param getOpreturnParamTargetOutput: Max length for opreturn param
[22:31:12][CashTab Unit Tests] Build target output for opreturn as bip21 param getOpreturnParamTargetOutput throws error for: Invalid opreturn param input
[22:31:12][Step 1/1] CashTab Unit Tests
[22:31:12][CashTab Unit Tests] queryAliasServer() correctly throws a network error for server downtime or a malformed fetch url
[22:31:12][CashTab Unit Tests] queryAliasServer() correctly returns an array of alias objects for a valid eCash address that has registered aliases
[22:31:12][CashTab Unit Tests] queryAliasServer() correctly returns an array of alias objects for a valid prefix-less eCash address that has registered aliases
[22:31:12][CashTab Unit Tests] queryAliasServer() returns an empty array for a valid eCash address with no aliases
[22:31:12][CashTab Unit Tests] queryAliasServer() throws an error for an invalid eCash address
[22:31:12][CashTab Unit Tests] queryAliasServer() returns an alias object for a registered alias
[22:31:12][CashTab Unit Tests] queryAliasServer() returns an api error for a non-alphanumeric alias
[22:31:12][CashTab Unit Tests] queryAliasServer() returns a valid object for an unregistered alias
[22:31:12][CashTab Unit Tests] queryAliasServer() returns an error for an alias longer than 21 characters
[22:31:12][Step 1/1] CashTab Unit Tests
[22:31:12][CashTab Unit Tests] Improved Cashtab transaction broadcasting function sendXec: 1000 satoshis with 1 change output at 1 sat/byte to p2pkh address
[22:31:12][CashTab Unit Tests] Improved Cashtab transaction broadcasting function sendXec: 1000 satoshis with 1 change output at 1 sat/byte to p2pkh address if all utxos are mature coinbase utxos
[22:31:12][CashTab Unit Tests] Improved Cashtab transaction broadcasting function sendXec: 1000 satoshis with 1 change output at 1 sat/byte to p2pkh address with an OP_RETURN output
[22:31:12][CashTab Unit Tests] Improved Cashtab transaction broadcasting function sendXec: 1000 satoshis with 1 change output at 1 sat/byte to p2pkh address with an OP_RETURN output at index 0
[22:31:12][CashTab Unit Tests] Improved Cashtab transaction broadcasting function sendXec: 1000 satoshis with 1 change output at 1 sat/byte to p2sh address
[22:31:12][CashTab Unit Tests] Improved Cashtab transaction broadcasting function sendXec: 1000 satoshis with 1 change output at 10 sat/byte
[22:31:12][CashTab Unit Tests] Improved Cashtab transaction broadcasting function sendXec: 1 satoshi per byte tx with no change outputs
[22:31:12][CashTab Unit Tests] Improved Cashtab transaction broadcasting function sendXec: 1 satoshi per byte tx with no change outputs from a wallet with utxos at many addresses
[22:31:12][CashTab Unit Tests] Improved Cashtab transaction broadcasting function sendXec: 1 satoshi per byte tx broadcast actually broadcast with this function
[22:31:12][CashTab Unit Tests] Improved Cashtab transaction broadcasting function sendXec: No precision error using JS Number on utxo with highest theoretically possible value
[22:31:12][CashTab Unit Tests] Improved Cashtab transaction broadcasting function sendXec: 15000 satoshis with 1 change output at 1 sat/byte to 5 p2pkh addresses
[22:31:12][CashTab Unit Tests] Improved Cashtab transaction broadcasting function sendXec: 15000 satoshis with 1 change output at 1 sat/byte to 5 p2sh outputs
[22:31:12][CashTab Unit Tests] Improved Cashtab transaction broadcasting function sendXec: Sending below dust threshold
[22:31:12][CashTab Unit Tests] Improved Cashtab transaction broadcasting function sendXec: Sending above wallet balance
[22:31:12][CashTab Unit Tests] Improved Cashtab transaction broadcasting function sendXec: Sending within wallet balance but insufficient to cover fee
[22:31:12][CashTab Unit Tests] Improved Cashtab transaction broadcasting function sendXec: Attempting to create a tx with fee rate below 1 sat/byte
[22:31:12][CashTab Unit Tests] Improved Cashtab transaction broadcasting function sendXec: Tx with utxos for which the wallet has no private keys
[22:31:12][CashTab Unit Tests] Improved Cashtab transaction broadcasting function sendXec: throws broadcast error from the node
[22:31:12][CashTab Unit Tests] Improved Cashtab transaction broadcasting function sendXec: Insufficient balance due to immature coinbase utxos
[22:31:12][CashTab Unit Tests] Forming multisend targetOutputs getMultisendTargetOutputs: Airdrop
[22:31:12][CashTab Unit Tests] Forming multisend targetOutputs getMultisendTargetOutputs: Multisend format with extra space around address and value
[22:31:12][CashTab Unit Tests] Forming multisend targetOutputs getMultisendTargetOutputs: One address in multi format
[22:31:12][CashTab Unit Tests] Forming multisend targetOutputs getMultisendTargetOutputs: Multisend including a non-integer JS result
[22:31:12][CashTab Unit Tests] Forming multisend targetOutputs getMultisendTargetOutputs throws error for: Invalid multisend input (dust)
[22:31:12][CashTab Unit Tests] Forming multisend targetOutputs getMultisendTargetOutputs throws error for: Too many decimal places
[22:31:12][CashTab Unit Tests] Forming multisend targetOutputs getMultisendTargetOutputs throws error for: Use of comma as decimal place marker
[22:31:12][CashTab Unit Tests] Forming multisend targetOutputs getMultisendTargetOutputs throws error for: Too many commas on one line
[22:31:12][CashTab Unit Tests] Ignore unspendable coinbase utxos ignoreUnspendableUtxos: Array with no coinbase utxos returned unchanged
[22:31:12][CashTab Unit Tests] Ignore unspendable coinbase utxos ignoreUnspendableUtxos: Array with immature coinbase utxo returned without immature coinbase utxo
[22:31:12][CashTab Unit Tests] Ignore unspendable coinbase utxos ignoreUnspendableUtxos: Array with some immature coinbase utxos and some mature coinbase utxos returned without immature coinbase utxo
[22:31:12][CashTab Unit Tests] Ignore unspendable coinbase utxos ignoreUnspendableUtxos: If blockheight is zero, all coinbase utxos are removed
[22:31:12][CashTab Unit Tests] 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, NNG utxo shape
[22:31:12][CashTab Unit Tests] 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, NNG utxo shape
[22:31:12][CashTab Unit Tests] 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
[22:31:12][Step 1/1] CashTab Unit Tests
[22:31:12][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
[22:31:12][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
[22:31:12][CashTab Unit Tests] Cashtab wallet methods Calculates total balance in satoshis from a valid set of chronik utxos getBalanceSats: Empty array returns 0 balance
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][CashTab Unit Tests] Cashtab wallet methods Converts satoshis to XEC and XEC to satoshis Converts satoshis to xec: Total XEC supply
[22:31:12][CashTab Unit Tests] Cashtab wallet methods Converts satoshis to XEC and XEC to satoshis Converts xec to satoshis: Total XEC supply
[22:31:12][CashTab Unit Tests] Cashtab wallet methods Converts satoshis to XEC and XEC to satoshis Converts satoshis to xec: Total XEC supply less 1 satoshi
[22:31:12][CashTab Unit Tests] Cashtab wallet methods Converts satoshis to XEC and XEC to satoshis Converts xec to satoshis: Total XEC supply less 1 satoshi
[22:31:12][CashTab Unit Tests] Cashtab wallet methods Converts satoshis to XEC and XEC to satoshis Converts satoshis to xec: 0 is 0
[22:31:12][CashTab Unit Tests] Cashtab wallet methods Converts satoshis to XEC and XEC to satoshis Converts xec to satoshis: 0 is 0
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][CashTab Unit Tests] Cashtab wallet methods Creates a wallet from valid bip39 mnemonic createCashtabWallet: Creates a Cashtab wallet from a valid bip39 mnemonic
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][CashTab Unit Tests] Cashtab wallet methods Gets expected array when activating a new wallet getWalletsForNewActiveWallet: Return expected wallets array
[22:31:12][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]
[22:31:12][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
[22:31:12][Step 1/1] CashTab Unit Tests
[22:31:12][CashTab Unit Tests] <Receive /> Renders as expected on desktop, including copy paste functionality of clicking on the QR code
[22:31:12][CashTab Unit Tests] <Receive /> Renders the Receive screen with QR code of expected width for smallest supported mobile view
[22:31:12][CashTab Unit Tests] <Receive /> Renders the Receive screen with QR code of size that is fully viewable in extension dimensions
[22:31:12][Step 1/1] CashTab Unit Tests
[22:31:12][CashTab Unit Tests] <Home /> Renders the loading component while loading, then the Home screen
[22:31:12][CashTab Unit Tests] <Home /> Renders the Home screen with API error
[22:31:12][CashTab Unit Tests] <Home /> Renders backup warning and QR Code if user loads with a new wallet
[22:31:12][Step 1/1] CashTab Unit Tests
[22:31:12][CashTab Unit Tests] Correctly executes formatting functions test formatBalance with an input of 0
[22:31:12][CashTab Unit Tests] Correctly executes formatting functions test formatBalance with zero XEC balance input
[22:31:12][CashTab Unit Tests] Correctly executes formatting functions test formatBalance with a small XEC balance input with 2+ decimal figures
[22:31:12][CashTab Unit Tests] Correctly executes formatting functions test formatBalance with 1 Million XEC balance input
[22:31:12][CashTab Unit Tests] Correctly executes formatting functions test formatBalance with 1 Billion XEC balance input
[22:31:12][CashTab Unit Tests] Correctly executes formatting functions test formatBalance with total supply as XEC balance input
[22:31:12][CashTab Unit Tests] Correctly executes formatting functions test formatBalance with > total supply as XEC balance input
[22:31:12][CashTab Unit Tests] Correctly executes formatting functions test formatBalance with no balance
[22:31:12][CashTab Unit Tests] Correctly executes formatting functions test formatBalance with null input
[22:31:12][CashTab Unit Tests] Correctly executes formatting functions test formatBalance with undefined as input
[22:31:12][CashTab Unit Tests] Correctly executes formatting functions test formatBalance with non-numeric input
[22:31:12][CashTab Unit Tests] Correctly executes formatting functions Accepts a valid unix timestamp
[22:31:12][CashTab Unit Tests] Correctly executes formatting functions Accepts an empty string and generates a new timestamp
[22:31:12][CashTab Unit Tests] Correctly executes formatting functions Accepts no parameter and generates a new timestamp
[22:31:12][CashTab Unit Tests] Correctly executes formatting functions Accepts 'undefined' as a parameter and generates a new date
[22:31:12][CashTab Unit Tests] Correctly executes formatting functions Rejects an invalid string containing letters.
[22:31:12][CashTab Unit Tests] Correctly executes formatting functions Rejects an invalid string containing numbers.
[22:31:12][CashTab Unit Tests] Correctly executes formatting functions test formatFiatBalance with zero XEC balance input
[22:31:12][CashTab Unit Tests] Correctly executes formatting functions test formatFiatBalance with a small XEC balance input with 2+ decimal figures
[22:31:12][CashTab Unit Tests] Correctly executes formatting functions test formatFiatBalance with a large XEC balance input with 2+ decimal figures
[22:31:12][CashTab Unit Tests] Correctly executes formatting functions test formatFiatBalance with no balance
[22:31:12][CashTab Unit Tests] Correctly executes formatting functions test formatFiatBalance with null input
[22:31:12][CashTab Unit Tests] Correctly executes formatting functions test formatFiatBalance with undefined input
[22:31:12][CashTab Unit Tests] Correctly executes formatting functions returns undefined formatTokenBalance with undefined inputs
[22:31:12][CashTab Unit Tests] Correctly executes formatting functions test formatTokenBalance with valid balance & decimal inputs
[22:31:12][CashTab Unit Tests] Correctly executes formatting functions returns undefined when passed invalid decimals parameter
[22:31:12][CashTab Unit Tests] Correctly executes formatting functions returns undefined when passed invalid balance parameter
[22:31:12][CashTab Unit Tests] Correctly executes formatting functions maintains trailing zeros in balance per tokenDecimal parameter
[22:31:12][Step 1/1] CashTab Unit Tests
[22:31:12][CashTab Unit Tests] <CreateTokenForm /> User can input valid token parameters, generate a token, and view a success notification
[22:31:12][<CreateTokenForm /> User can input valid token parameters, generate a token, and view a success notification] TestingLibraryElementError: Unable to find an element with the text: OK. This could be because the text is broken up by multiple elements. In this case, you can provide a function for your text matcher to make your matcher more flexible. Ignored nodes: comments, script, style <body> <div> <div class="ant-spin-nested-loading css-dev-only-do-not-override-1rqnfsa" > <div class="ant-spin-container" > <div class="sc-fyjhYU dwntyv" > <div class="Toastify" /> <div class="sc-keVrkP hhzpnt" > <div class="sc-gVLVqr fzyYXz" > <div class="sc-eIHaNI bNRpUo" > <div class="sc-cBdUnI kSFuPj" > <img alt="cashtab" class="sc-exkUMo jxgjXp" src="test-file-stub" /> </div> <div class="sc-bbmXgH fLVOGg" data-testid="wallet-info-ctn" > <div class="sc-jrIrqw jvojHN" > <select class="sc-hjRWVT dUYreC" id="wallets" name="wallets" > <option class="sc-iybRtq jkwgJt" value="Transaction Fixtures" > Transaction Fixtures </option> </select> <div class="sc-hMqMXs cAbGIb" > <svg class="sc-htoDjs dHRdfz" style="margin-top: 8px;" /> </div> <div class="sc-dUjcNx dlXFJu" > <input checked="" class="sc-emmjRN jsLypx" data-testid="show-hide-balance" id="show-hide-balance" name="show-hide-balance" type="checkbox" /> <label class="sc-gHboQg dROkmL" for="show-hide-balance" > <span class="sc-eilVRo fUDPGJ" data-off="" data-on="" /> <span class="sc-eerKOB NLONq" /> </label> </div> </div> <div class="sc-iQtOjA cUcGEQ" data-testid="balance-xec" > 9,513.12 XEC </div> <div class="sc-fHxwqH ckNvLc" data-testid="balance-fiat" > $ 0.29   USD </div> <p class="sc-cEvuZC fNPrOh" data-testid="ecash-price" > 1 XEC = 0.00003000 USD </p> </div> </div> <div class="sc-jqCOkK dpFugr" > <div class="sc-gojNiO bWClNj" > <h3> Create a Token </h3> <div class="sc-exAgwC bSGahT" > <div class="sc-cMhqgX hShMJA" > <div class="sc-iuJeZd kzeXth" > <input class="sc-esOvli hTocdE" name="name" placeholder="Enter a name for your token" value="test token" /> </div> <div class="sc-iujRgT cELAJT" /> </div> <div class="sc-cMhqgX hShMJA" > <div class="sc-iuJeZd kzeXth" > <input class="sc-esOvli hTocdE" name="ticker" placeholder="Enter a ticker for your token" value="TKE" /> </div> <div class="sc-iujRgT cELAJT" /> </div> <div class="sc-cMhqgX hShMJA" > <div class="sc-iuJeZd jgJRvx" > <input class="sc-esOvli hTocdE" name="decimals" placeholder="Enter number of decimal places" value="02" /> </div> <div class="sc-iujRgT cELAJT" > Token decimals must be an integer between 0 and 9 </div> </div> <div class="sc-cMhqgX hShMJA" > <div class="sc-iuJeZd kzeXth" > <input class="sc-esOvli hTocdE" name="initialQty" placeholder="Enter the fixed supply of your token" value="600000" /> </div> <div class="sc-iujRgT cELAJT" /> </div> <div class="sc-cMhqgX hShMJA" > <div class="sc-iuJeZd kzeXth" > <input class="sc-esOvli hTocdE" name="url" placeholder="Enter a website for your token" value="https://www.cashtab.com" /> </div> <div class="sc-iujRgT cELAJT" /> </div> <label class="sc-uJMKN eXLLEE" > Add Image </label> <span class="ant-upload-wrapper css-dev-only-do-not-override-1rqnfsa" > <div class="css-dev-only-do-not-override-1rqnfsa ant-upload ant-upload-drag" style="background-color: rgb(244, 244, 244);" > <span class="ant-upload ant-upload-btn" role="button" tabindex="0" > <input accept="" style="display: none;" type="file" /> <div class="ant-upload-drag-container" > <span aria-label="upload" class="anticon anticon-upload" role="img" > <svg aria-hidden="true" data-icon="upload" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M400 317.7h73.9V656c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V317.7H624c6.7 0 10.4-7.7 6.3-12.9L518.3 163a8 8 0 00-12.6 0l-112 141.7c-4.1 5.3-.4 13 6.3 13zM878 626h-60c-4.4 0-8 3.6-8 8v154H214V634c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v198c0 17.7 14.3 32 32 32h684c17.7 0 32-14.3 32-32V634c0-4.4-3.6-8-8-8z" /> </svg> </span> <p> Click, or drag file to this area to upload </p> <p style="font-size: 12px;" > Only jpg or png accepted </p> </div> </span> </div> <div class="ant-upload-list ant-upload-list-text" /> </span> <button class="sc-hwwEjo sc-kfGgVZ fhzclG" disabled="" style="margin-top: 30px;" > <span aria-label="plus-square" class="anticon anticon-plus-square" role="img" > <svg aria-hidden="true" data-icon="plus-square" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M328 544h152v152c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V544h152c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8H544V328c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v152H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8z" /> <path d="M880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-40 728H184V184h656v656z" /> </svg> </span>  Create eToken </button> </div> </div> </div> </div> <div class="sc-ugnQR bPafYx" > <button class="sc-iFMziU gzZcUO" > <svg /> </button> <button class="sc-iFMziU gzZcUO" data-testid="nav-btn-send" > <svg class="sc-jKJlTe fTQyTm" style="margin-top: -9px;" /> </button> <button class="sc-iFMziU gzZcUO" data-testid="nav-btn-etokens" > <span aria-label="appstore-add" class="anticon anticon-appstore-add" role="img" style="font-size: 24px;" > <svg aria-hidden="true" data-icon="appstore-add" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <defs /> <path d="M464 144H160c-8.8 0-16 7.2-16 16v304c0 8.8 7.2 16 16 16h304c8.8 0 16-7.2 16-16V160c0-8.8-7.2-16-16-16zm-52 268H212V212h200v200zm452-268H560c-8.8 0-16 7.2-16 16v304c0 8.8 7.2 16 16 16h304c8.8 0 16-7.2 16-16V160c0-8.8-7.2-16-16-16zm-52 268H612V212h200v200zm52 132H560c-8.8 0-16 7.2-16 16v304c0 8.8 7.2 16 16 16h304c8.8 0 16-7.2 16-16V560c0-8.8-7.2-16-16-16zm-52 268H612V612h200v200zM424 712H296V584c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v128H104c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h128v128c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V776h128c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8z" /> </svg> </span> </button> <button class="sc-iFMziU gzZcUO" data-testid="nav-btn-receive" > <svg /> </button> <div class="sc-eTpRJs fvAZEX" data-testid="hamburger" > <span class="sc-dxZgTM iJHOwC" /> <div class="sc-iomxrj eySEgy" data-testid="hamburger-menu" > <button class="sc-dvCyap ICCYV" data-testid="nav-btn-airdrop" > <p> Airdrop </p> <svg height="33px" width="30px" /> </button> <button class="sc-dvCyap ICCYV" data-testid="nav-btn-swap" > <p> Swap </p> <span aria-label="swap" class="anticon anticon-swap" role="img" style="font-size: 24px;" > <svg aria-hidden="true" data-icon="swap" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M847.9 592H152c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h605.2L612.9 851c-4.1 5.2-.4 13 6.3 13h72.5c4.9 0 9.5-2.2 12.6-6.1l168.8-214.1c16.5-21 1.6-51.8-25.2-51.8zM872 356H266.8l144.3-183c4.1-5.2.4-13-6.3-13h-72.5c-4.9 0-9.5 2.2-12.6 6.1L150.9 380.2c-16.5 21-1.6 51.8 25.1 51.8h696c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8z" /> </svg> </span> </button> <button class="sc-dvCyap ICCYV" data-testid="nav-btn-signverifymsg" > <p> Sign & Verify </p> <svg class="sc-jzJRlG kclOxT" /> </button> <button class="sc-dvCyap ICCYV" data-testid="nav-btn-configure" > <p> Settings </p> <svg height="33px" width="30px" /> </button> </div> </div> </div> </div> </div> </div> </div> </div> </body> at Object.getElementError (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:37:19) at /work/cashtab/node_modules/@testing-library/dom/dist/query-helpers.js:76:38 at /work/cashtab/node_modules/@testing-library/dom/dist/query-helpers.js:52:17 at /work/cashtab/node_modules/@testing-library/dom/dist/query-helpers.js:95:19 at Object.getByText (/work/cashtab/src/components/Etokens/__tests__/CreateTokenForm.test.js:134:33)
[22:31:12][Step 1/1] CashTab Unit Tests
[22:31:12][CashTab Unit Tests] <Tx /> Renders the timestamp if timeFirstSeen !== 0
[22:31:12][CashTab Unit Tests] <Tx /> Renders the timestamp as block timestamp timeFirstSeen === 0
[22:31:12][CashTab Unit Tests] <Tx /> Does not render a timestamp for an unconfirmed tx with timeFirstSeen === '0'
[22:31:12][CashTab Unit Tests] <Tx /> Renders from contact name if a tx is from an address in contact list
[22:31:12][CashTab Unit Tests] <Tx /> Does not render from contact name if a tx is not from an address in contact list
[22:31:12][Step 1/1] CashTab Unit Tests
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][Step 1/1] CashTab Unit Tests
[22:31:12][CashTab Unit Tests] <Alias /> Registered and Pending Aliases are correctly rendered
[22:31:12][CashTab Unit Tests] <Alias /> Registered and Pending Aliases are correctly rendered when pending list is empty
[22:31:12][CashTab Unit Tests] <Alias /> Registered and Pending Aliases are correctly rendered when registered list is empty
[22:31:12][CashTab Unit Tests] <Alias /> Registered and Pending lists still renders when aliasValidationError is populated and aliasServerError is false
[22:31:12][CashTab Unit Tests] <Alias /> Registered and Pending lists do not render when aliasValidationError is false and aliasServerError is populated
[22:31:12][Step 1/1] CashTab Unit Tests
[22:31:12][CashTab Unit Tests] <CreateToken /> If wallet has sufficient XEC, renders CreateTokenForm
[22:31:12][CashTab Unit Tests] <CreateToken /> If wallet has insufficient XEC, renders component but does not render CreateTokenForm
[22:31:12][Step 1/1] CashTab Unit Tests
[22:31:12][CashTab Unit Tests] sumOneToManyXec() correctly parses the value for a valid one to many send XEC transaction
[22:31:12][CashTab Unit Tests] sumOneToManyXec() correctly parses the value for a valid one to many send XEC transaction with decimals
[22:31:12][CashTab Unit Tests] sumOneToManyXec() returns NaN for an address and value array that is partially typed or has invalid format
[22:31:12][CashTab Unit Tests] Correctly executes cash utility functions Successfully extracts a hash160 array from valid cashtab wallet
[22:31:12][Step 1/1] CashTab Unit Tests
[22:31:12][CashTab Unit Tests] Cashtab helper functions Detect mobile or desktop devices isMobile: Navigator is undefined
[22:31:12][CashTab Unit Tests] Cashtab helper functions Detect mobile or desktop devices isMobile: Navigator.userAgentData is undefined
[22:31:12][CashTab Unit Tests] Cashtab helper functions Detect mobile or desktop devices isMobile: Desktop device on browser with userAgentData support
[22:31:12][CashTab Unit Tests] Cashtab helper functions Detect mobile or desktop devices isMobile: Mobile device on browser with userAgentData support
[22:31:12][CashTab Unit Tests] Cashtab helper functions Get user locale getUserLocale: navigator is undefined
[22:31:12][CashTab Unit Tests] Cashtab helper functions Get user locale getUserLocale: navigator.language is undefined
[22:31:12][CashTab Unit Tests] Cashtab helper functions Get user locale getUserLocale: navigator.language is defined and not the default
[22:31:12][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
[22:31:12][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
[22:31:12][Step 1/1] CashTab Unit Tests
[22:31:12][CashTab Unit Tests] <QRCode /> QRCode copying ecash address
[22:31:12][CashTab Unit Tests] <QRCode /> QRCode copying eToken address
[22:31:12][CashTab Unit Tests] <QRCode /> QRCode will render without address
[22:31:12][Step 1/1] CashTab Unit Tests
[22:31:12][CashTab Unit Tests] <ScanQRCode /> Renders the modal on load if loadWithCameraOpen is true
[22:31:12][CashTab Unit Tests] <ScanQRCode /> Does not render the modal on load if loadWithCameraOpen is false
[22:31:12][Step 1/1] CashTab Unit Tests
[22:31:12][CashTab Unit Tests] <CashtabTestWrapper /> With default props, renders App component
[22:31:12][CashTab Unit Tests] <CashtabTestWrapper /> We can render other pages by passing the route
[22:31:12][Step 1/1] CashTab Unit Tests
[22:31:12][CashTab Unit Tests] <Airdrop /> We can send a pro-rata airdrop and equal tx to a tokenId not in our cache using custom settings
[22:31:12][CashTab Unit Tests] <Airdrop /> We can ignore addresses with less than a token balance for a token with decimals
[22:31:12][Step 1/1] CashTab Unit Tests
[22:31:12][CashTab Unit Tests] <SendXec /> rendered with params in URL Legacy params. Address and value keys are set and valid.
[22:31:12][CashTab Unit Tests] <SendXec /> rendered with params in URL Legacy params. Address and value keys are set and valid. Invalid bip21 string is ignored.
[22:31:12][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
[22:31:12][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
[22:31:12][CashTab Unit Tests] <SendXec /> rendered with params in URL Legacy params. Params are ignored if only value param is present
[22:31:12][CashTab Unit Tests] <SendXec /> rendered with params in URL Legacy params. Params are ignored if param is duplicated
[22:31:12][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
[22:31:12][CashTab Unit Tests] <SendXec /> rendered with params in URL bip21 param - valid bip21 param with amount and op_return_raw is parsed as expected
[22:31:12][CashTab Unit Tests] <SendXec /> rendered with params in URL bip21 param - an invalid bip21 param shows validation errors but cannot be changed
[22:31:12][CashTab Unit Tests] <SendXec /> rendered with params in URL No params. Send screen loads normally with no rendered input.
[22:31:12][Step 1/1] CashTab Unit Tests
[22:31:12][CashTab Unit Tests] <SendToken /> Renders the SendToken screen with send address input
[22:31:12][CashTab Unit Tests] <SendToken /> Accepts a valid ecash: prefixed address
[22:31:12][CashTab Unit Tests] <SendToken /> Accepts a valid etoken: prefixed address
[22:31:12][CashTab Unit Tests] <SendToken /> Accepts a valid alias
[22:31:12][CashTab Unit Tests] <SendToken /> Displays a validation error for an invalid address
[22:31:12][CashTab Unit Tests] <SendToken /> Displays a validation error for an alias without .xec suffix
[22:31:12][CashTab Unit Tests] <SendToken /> Displays a validation error for valid alias that has not yet been registered
[22:31:12][CashTab Unit Tests] <SendToken /> Displays expected error if alias server gives a bad response
[22:31:12][CashTab Unit Tests] <SendToken /> Displays a validation error if the user includes any query string
[22:31:12][CashTab Unit Tests] <SendToken /> Renders the send token notification upon successful broadcast
[22:31:12][CashTab Unit Tests] <SendToken /> Renders the burn token success notification upon successful burn tx broadcast
[22:31:12][Step 1/1] CashTab Unit Tests
[22:31:12][CashTab Unit Tests] <SignVerifyMsg /> Notification is rendered upon successfully signing a message
[22:31:12][CashTab Unit Tests] <SignVerifyMsg /> Notification is rendered upon successfully verifying a message
[22:31:12][CashTab Unit Tests] <SignVerifyMsg /> Notification is rendered upon signature verification error
[22:31:12][Step 1/1] CashTab Unit Tests
[22:31:12][CashTab Unit Tests] <App /> Renders onboarding screen at home route if user has no wallet
[22:31:12][CashTab Unit Tests] <App /> Renders onboarding screen at Receive route if user has no wallet
[22:31:12][CashTab Unit Tests] <App /> Renders onboarding screen even on a bad route if user has no wallet
[22:31:12][CashTab Unit Tests] <App /> Renders 404 at bad route if user has a wallet
[22:31:12][CashTab Unit Tests] <App /> Navigation menu routes to expected components
[22:31:12][CashTab Unit Tests] <App /> Adding a contact to to a new contactList by clicking on tx history adds it to localforage and wallet context
[22:31:12][CashTab Unit Tests] <App /> Adding a contact to an existing contactList by clicking on tx history adds it to localforage and wallet context
[22:31:12][CashTab Unit Tests] <App /> A user with legacy blank contactList in localstorage is migrated on startup
[22:31:12][CashTab Unit Tests] <App /> Clicking "reply" on a Cashtab Msg correctly populates the SendXec to address and amount fields
[22:31:12][CashTab Unit Tests] <App /> We do not see the camera auto-open setting in the config screen on a desktop device
[22:31:12][CashTab Unit Tests] <App /> We do see the camera auto-open setting in the config screen on a mobile device
[22:31:12][CashTab Unit Tests] <App /> Setting "Send Confirmations" settings will show send confirmations
[22:31:12][CashTab Unit Tests] <App /> If Cashtab starts up with some settings keys missing, the missing keys are migrated to default values
[22:31:12][CashTab Unit Tests] <App /> Setting "ABSOLUTE MINIMUM fees" settings will reduce fees to absolute min
[22:31:12][CashTab Unit Tests] <App /> Wallet with easter egg token sees easter egg
[22:31:12][CashTab Unit Tests] <App /> If Cashtab starts with 1.5.* cashtabCache, it is wiped and migrated to 1.6.* cashtabCache
[22:31:12][CashTab Unit Tests] <App /> A new user can import a mnemonic
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][CashTab Unit Tests] <App /> Migrating (version >= 1.6.0 and < 2.1.0): A user with multiple invalid wallets in savedWallets has them migrated
[22:31:12][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
[22:31:12][CashTab Unit Tests] <App /> A user with all valid wallets in savedWallets does not have any savedWallets migrated
[22:31:12][Step 1/1] CashTab Unit Tests
[22:31:12][CashTab Unit Tests] <SendXec /> Renders the SendXec screen with send address input
[22:31:12][CashTab Unit Tests] <SendXec /> Pass valid address to Send To field
[22:31:12][CashTab Unit Tests] <SendXec /> Pass valid alias to Send To field
[22:31:12][CashTab Unit Tests] <SendXec /> Pass an invalid address to Send To field and get a validation error
[22:31:12][CashTab Unit Tests] <SendXec /> Pass a possibly valid alias without .xec suffix to Send To field and get expected error
[22:31:12][CashTab Unit Tests] <SendXec /> Pass a valid alias to Send To field that has not yet been registered and get expected error
[22:31:12][CashTab Unit Tests] <SendXec /> Get expected error msg and send disabled if bad response from alias server
[22:31:12][CashTab Unit Tests] <SendXec /> Pass a valid address and bip21 query string with valid amount param to Send To field
[22:31:12][CashTab Unit Tests] <SendXec /> Pass a valid alias and bip21 query string with valid amount param to Send To field
[22:31:12][CashTab Unit Tests] <SendXec /> Pass a valid address and bip21 query string with invalid amount param (dust) to Send To field
[22:31:12][CashTab Unit Tests] <SendXec /> Valid address with valid bip21 query string with valid amount param rejected if amount exceeds wallet balance
[22:31:12][CashTab Unit Tests] <SendXec /> Pass a valid alias and bip21 query string with invalid amount param (too many decimals) to Send To field
[22:31:12][CashTab Unit Tests] <SendXec /> Pass a valid address and an invalid bip21 query string
[22:31:12][CashTab Unit Tests] <SendXec /> Pass a valid address and bip21 query string with op_return_raw param to Send To field
[22:31:12][CashTab Unit Tests] <SendXec /> Pass a valid address and bip21 query string with valid amount and op_return_raw params to Send To field
[22:31:12][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
[22:31:12][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
[22:31:12][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
[22:31:12][CashTab Unit Tests] <SendXec /> If the user has minFeeSends set to true but no longer has the right token amount, the feature is disabled
[22:31:12][CashTab Unit Tests] <SendXec /> We can send a tx with amount denominated in fiat currency
[22:31:12][Step 1/1] CashTab Unit Tests
[22:31:12][CashTab Unit Tests] <Configure /> We can add, delete, rename, contacts from the Configure screen, and add a savedWallet as a contact
[22:31:12][CashTab Unit Tests] <Configure /> Confirm mocked bip39.generateMnemonic() returns the expected seed
[22:31:12][CashTab Unit Tests] <Configure /> We can rename the active wallet or a saved wallet, we can add a wallet, we can import a wallet, we can delete a wallet
[22:31:12][Creating archive artifacts.tar.gz] Archive was created, file size 147.94 KB (151496 bytes)
[22:31:29][Publishing artifacts] Publishing 1 file using [WebPublisher]: results/artifacts => artifacts.tar.gz
[22:31:29][Publishing artifacts] Publishing 1 file using [ArtifactsCachePublisher]: results/artifacts => artifacts.tar.gz
[22:31:12][Step 1/1] ##teamcity[publishArtifacts '+:results/artifacts=>artifacts.tar.gz']
[22:31:30][Step 1/1] Build cashtab-tests failed with exit code 1
[22:31:12][Step 1/1] ##teamcity[buildProblem timestamp='2024-03-28T22:31:12.476' description='Build cashtab-tests failed with exit code 1']
[22:31:12][Step 1/1] style="font-size: 24px;"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] <svg
[22:31:12][Step 1/1] aria-hidden="true"
[22:31:12][Step 1/1] data-icon="appstore-add"
[22:31:12][Step 1/1] fill="currentColor"
[22:31:12][Step 1/1] focusable="false"
[22:31:12][Step 1/1] height="1em"
[22:31:12][Step 1/1] viewBox="64 64 896 896"
[22:31:12][Step 1/1] width="1em"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] <defs />
[22:31:12][Step 1/1] <path
[22:31:12][Step 1/1] d="M464 144H160c-8.8 0-16 7.2-16 16v304c0 8.8 7.2 16 16 16h304c8.8 0 16-7.2 16-16V160c0-8.8-7.2-16-16-16zm-52 268H212V212h200v200zm452-268H560c-8.8 0-16 7.2-16 16v304c0 8.8 7.2 16 16 16h304c8.8 0 16-7.2 16-16V160c0-8.8-7.2-16-16-16zm-52 268H612V212h200v200zm52 132H560c-8.8 0-16 7.2-16 16v304c0 8.8 7.2 16 16 16h304c8.8 0 16-7.2 16-16V560c0-8.8-7.2-16-16-16zm-52 268H612V612h200v200zM424 712H296V584c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v128H104c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h128v128c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V776h128c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8z"
[22:31:12][Step 1/1] />
[22:31:12][Step 1/1] </svg>
[22:31:12][Step 1/1] </span>
[22:31:12][Step 1/1] </button>
[22:31:12][Step 1/1] <button
[22:31:12][Step 1/1] class="sc-iFMziU gzZcUO"
[22:31:12][Step 1/1] data-testid="nav-btn-receive"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] <svg />
[22:31:12][Step 1/1] </button>
[22:31:12][Step 1/1] <div
[22:31:12][Step 1/1] class="sc-eTpRJs fvAZEX"
[22:31:12][Step 1/1] data-testid="hamburger"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] <span
[22:31:12][Step 1/1] class="sc-dxZgTM iJHOwC"
[22:31:12][Step 1/1] />
[22:31:12][Step 1/1] <div
[22:31:12][Step 1/1] class="sc-iomxrj eySEgy"
[22:31:12][Step 1/1] data-testid="hamburger-menu"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] <button
[22:31:12][Step 1/1] class="sc-dvCyap ICCYV"
[22:31:12][Step 1/1] data-testid="nav-btn-airdrop"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1]
[22:31:12][Step 1/1] <p>
[22:31:12][Step 1/1] Airdrop
[22:31:12][Step 1/1] </p>
[22:31:12][Step 1/1] <svg
[22:31:12][Step 1/1] height="33px"
[22:31:12][Step 1/1] width="30px"
[22:31:12][Step 1/1] />
[22:31:12][Step 1/1] </button>
[22:31:12][Step 1/1] <button
[22:31:12][Step 1/1] class="sc-dvCyap ICCYV"
[22:31:12][Step 1/1] data-testid="nav-btn-swap"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1]
[22:31:12][Step 1/1] <p>
[22:31:12][Step 1/1] Swap
[22:31:12][Step 1/1] </p>
[22:31:12][Step 1/1] <span
[22:31:12][Step 1/1] aria-label="swap"
[22:31:12][Step 1/1] class="anticon anticon-swap"
[22:31:12][Step 1/1] role="img"
[22:31:12][Step 1/1] style="font-size: 24px;"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] <svg
[22:31:12][Step 1/1] aria-hidden="true"
[22:31:12][Step 1/1] data-icon="swap"
[22:31:12][Step 1/1] fill="currentColor"
[22:31:12][Step 1/1] focusable="false"
[22:31:12][Step 1/1] height="1em"
[22:31:12][Step 1/1] viewBox="64 64 896 896"
[22:31:12][Step 1/1] width="1em"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] <path
[22:31:12][Step 1/1] d="M847.9 592H152c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h605.2L612.9 851c-4.1 5.2-.4 13 6.3 13h72.5c4.9 0 9.5-2.2 12.6-6.1l168.8-214.1c16.5-21 1.6-51.8-25.2-51.8zM872 356H266.8l144.3-183c4.1-5.2.4-13-6.3-13h-72.5c-4.9 0-9.5 2.2-12.6 6.1L150.9 380.2c-16.5 21-1.6 51.8 25.1 51.8h696c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8z"
[22:31:12][Step 1/1] />
[22:31:12][Step 1/1] </svg>
[22:31:12][Step 1/1] </span>
[22:31:12][Step 1/1] </button>
[22:31:12][Step 1/1] <button
[22:31:12][Step 1/1] class="sc-dvCyap ICCYV"
[22:31:12][Step 1/1] data-testid="nav-btn-signverifymsg"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] <p>
[22:31:12][Step 1/1] Sign & Verify
[22:31:12][Step 1/1] </p>
[22:31:12][Step 1/1] <svg
[22:31:12][Step 1/1] class="sc-jzJRlG kclOxT"
[22:31:12][Step 1/1] />
[22:31:12][Step 1/1] </button>
[22:31:12][Step 1/1] <button
[22:31:12][Step 1/1] class="sc-dvCyap ICCYV"
[22:31:12][Step 1/1] data-testid="nav-btn-configure"
[22:31:12][Step 1/1] >
[22:31:12][Step 1/1] <p>
[22:31:12][Step 1/1] Settings
[22:31:12][Step 1/1] </p>
[22:31:12][Step 1/1] <svg
[22:31:12][Step 1/1] height="33px"
[22:31:12][Step 1/1] width="30px"
[22:31:12][Step 1/1] />
[22:31:12][Step 1/1] </button>
[22:31:12][Step 1/1] </div>
[22:31:12][Step 1/1] </div>
[22:31:12][Step 1/1] </div>
[22:31:12][Step 1/1] </div>
[22:31:12][Step 1/1] </div>
[22:31:12][Step 1/1] </div>
[22:31:12][Step 1/1] </div>
[22:31:12][Step 1/1] </div>
[22:31:12][Step 1/1] </body>
[22:31:12][Step 1/1]
[22:31:12][Step 1/1] 132 |
[22:31:12][Step 1/1] 133 | // Click OK on confirmation modal
[22:31:12][Step 1/1] > 134 | await user.click(screen.getByText('OK'));
[22:31:12][Step 1/1] | ^
[22:31:12][Step 1/1] 135 |
[22:31:12][Step 1/1] 136 | // Verify notification triggered
[22:31:12][Step 1/1] 137 | expect(await screen.findByText('Token created!')).toHaveAttribute(
[22:31:12][Step 1/1]
[22:31:12][Step 1/1] at Object.getElementError (node_modules/@testing-library/dom/dist/config.js:37:19)
[22:31:12][Step 1/1] at node_modules/@testing-library/dom/dist/query-helpers.js:76:38
[22:31:12][Step 1/1] at node_modules/@testing-library/dom/dist/query-helpers.js:52:17
[22:31:12][Step 1/1] at node_modules/@testing-library/dom/dist/query-helpers.js:95:19
[22:31:12][Step 1/1] at Object.getByText (src/components/Etokens/__tests__/CreateTokenForm.test.js:134:33)
[22:31:12][Step 1/1]
[22:31:12][Step 1/1]
[22:31:12][Step 1/1] Test Suites: 1 failed, 29 passed, 30 total
[22:31:12][Step 1/1] Tests: 1 failed, 583 passed, 584 total
[22:31:12][Step 1/1] Snapshots: 0 total
[22:31:12][Step 1/1] Time: 40.989 s
[22:31:12][Step 1/1] Ran all test suites.
[22:31:12][Step 1/1] Build cashtab-tests failed with exit code 1
[22:31:42][Step 1/1] Process exited with code 1
[22:31:42][Step 1/1] Process exited with code 1 (Step: Command Line)
[22:31:42][Step 1/1] Waiting for 1 service processes to complete
[22:31:42][Step 1/1] Ant JUnit report watcher
[22:31:42][Ant JUnit report watcher] 1 report found for paths:
[22:31:42][Ant JUnit report watcher] /home/teamcity/buildAgent/work/jailed-build/results/artifacts/junit/*.xml
[22:31:42][Ant JUnit report watcher] Successfully parsed
[22:31:42][Successfully parsed] 1 report
[22:31:42][Successfully parsed] results/artifacts/junit/cashtab.xml
[22:31:42][Step 1/1] Step Command Line failed
[22:31:43]Ant JUnit report watcher
[22:31:43][Ant JUnit report watcher] No reports found for paths:
[22:31:43][Ant JUnit report watcher] +:results/test_bitcoin.xml
[22:31:43][Ant JUnit report watcher] +:results/**/junit_results*.xml
[22:31:43][Ant JUnit report watcher] +:results/**/*junit.xml
[22:31:43]Publishing internal artifacts (3s)
[22:31:45][Publishing internal artifacts] Publishing 1 file using [WebPublisher]
[22:31:45][Publishing internal artifacts] Publishing 1 file using [ArtifactsCachePublisher]
[22:31:43]Publishing artifacts (3s)
[22:31:43][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]
[22:31:43][Publishing artifacts] Artifacts path 'results/**/junit_results*.xml' not found
[22:31:43][Publishing artifacts] Artifacts path 'bitcoin-abc/abc-ci-builds/cashtab-tests/gitian-results' not found
[22:31:43][Publishing artifacts] Artifacts path 'bitcoin-abc/abc-ci-builds/cashtab-tests/*.log' not found
[22:31:47]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