diff --git a/package.json b/package.json index dbbc4da3..6756a3c8 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,6 @@ "ethereumjs-units": "^0.2.0", "ethereumjs-util": "^6.0.0", "express": "^4.16.4", - "friendly-errors-webpack-plugin": "^1.7.0", "git-revision-webpack-plugin": "^3.0.3", "hdkey": "^1.1.0", "history": "^4.7.2", @@ -80,7 +79,7 @@ "trezor-bridge-communicator": "1.0.2", "trezor-connect": "7.0.0-beta.2", "wallet-address-validator": "^0.2.4", - "web3": "1.0.0-beta.43", + "web3": "1.0.0-beta.38", "webpack": "^4.29.3", "webpack-build-notifier": "^0.1.30", "webpack-bundle-analyzer": "^3.0.3", diff --git a/src/components/Header/index.js b/src/components/Header/index.js index 52ad246d..2213a7c2 100644 --- a/src/components/Header/index.js +++ b/src/components/Header/index.js @@ -129,7 +129,7 @@ const A = styled.a` type Props = { sidebarEnabled?: boolean, - sidebarOpened?: boolean, + sidebarOpened?: ?boolean, toggleSidebar?: toggleSidebarType, }; diff --git a/src/components/Notification/index.js b/src/components/Notification/index.js index 721a7463..8ced6cce 100644 --- a/src/components/Notification/index.js +++ b/src/components/Notification/index.js @@ -17,7 +17,7 @@ type Props = { cancelable?: boolean; title: string; className?: string; - message?: ?string; + message?: ?React.Node; actions?: Array; isActionInProgress?: boolean; close?: typeof NotificationActions.close, diff --git a/src/components/Tooltip/index.js b/src/components/Tooltip/index.js index 4703c028..3186f2a7 100644 --- a/src/components/Tooltip/index.js +++ b/src/components/Tooltip/index.js @@ -5,7 +5,7 @@ import colors from 'config/colors'; import Link from 'components/Link'; import styled from 'styled-components'; import PropTypes from 'prop-types'; -import l10nMessages from './index.messages'; +import l10nCommonMessages from 'views/common.messages'; const Wrapper = styled.div``; @@ -45,7 +45,7 @@ const Tooltip = ({ {content} {readMoreLink && ( - + ) } diff --git a/src/components/Tooltip/index.messages.js b/src/components/Tooltip/index.messages.js index cc45ea2b..8105a958 100644 --- a/src/components/Tooltip/index.messages.js +++ b/src/components/Tooltip/index.messages.js @@ -3,10 +3,6 @@ import { defineMessages } from 'react-intl'; import type { Messages } from 'flowtype/npm/react-intl'; const definedMessages: Messages = defineMessages({ - TR_READ_MORE: { - id: 'TR_READ_MORE', - defaultMessage: 'Read more', - }, }); export default definedMessages; \ No newline at end of file diff --git a/src/components/notifications/Context/components/Static/index.js b/src/components/notifications/Context/components/Static/index.js index 912569cf..a6867a0e 100644 --- a/src/components/notifications/Context/components/Static/index.js +++ b/src/components/notifications/Context/components/Static/index.js @@ -3,7 +3,7 @@ import * as React from 'react'; import Notification from 'components/Notification'; import Bignumber from 'bignumber.js'; - +import Link from 'components/Link'; import type { Props } from '../../index'; export default (props: Props) => { @@ -25,7 +25,12 @@ export default (props: Props) => { key="xrp-warning" type="warning" title="Minimum account reserve required" - message={`The Base Reserve is a minimum amount of XRP that is required for every address in the ledger. Currently, this is ${bigReserve.toString()} XRP.`} + message={( + <> + {`Ripple addresses require a minimum balance of ${bigReserve.toString()} XRP to activate and maintain the account. `} + Learn more + + )} />, ); } diff --git a/src/reducers/WalletReducer.js b/src/reducers/WalletReducer.js index 791d065b..a90a2f75 100644 --- a/src/reducers/WalletReducer.js +++ b/src/reducers/WalletReducer.js @@ -17,7 +17,7 @@ type State = { messages: { [string]: string }; dropdownOpened: boolean; showBetaDisclaimer: boolean; - showSidebar: boolean; + showSidebar: ?boolean; initialParams: ?RouterLocationState; initialPathname: ?string; firstLocationChange: boolean; @@ -33,7 +33,7 @@ const initialState: State = { dropdownOpened: false, firstLocationChange: true, showBetaDisclaimer: false, - showSidebar: false, + showSidebar: null, initialParams: null, initialPathname: null, disconnectRequest: null, diff --git a/src/utils/__tests__/__snapshots__/device.test.js.snap b/src/utils/__tests__/__snapshots__/device.test.js.snap deleted file mode 100644 index d7109016..00000000 --- a/src/utils/__tests__/__snapshots__/device.test.js.snap +++ /dev/null @@ -1,67 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`device utils get status 1`] = `"disconnected"`; - -exports[`device utils get status 2`] = `"unavailable"`; - -exports[`device utils get status 3`] = `"unavailable"`; - -exports[`device utils get status 4`] = `"connected"`; - -exports[`device utils get status 5`] = `"unacquired"`; - -exports[`device utils get status 6`] = `"used-in-other-window"`; - -exports[`device utils get status color 1`] = `"#494949"`; - -exports[`device utils get status color 2`] = `"#494949"`; - -exports[`device utils get status color 3`] = `"#494949"`; - -exports[`device utils get status color 4`] = `"#EB8A00"`; - -exports[`device utils get status color 5`] = `"#01B757"`; - -exports[`device utils get status color 6`] = `"#EB8A00"`; - -exports[`device utils get status color 7`] = `"#ED1212"`; - -exports[`device utils get status color 8`] = `"#ED1212"`; - -exports[`device utils get status name 1`] = `"Status unknown"`; - -exports[`device utils get status name 2`] = `"Status unknown"`; - -exports[`device utils get status name 3`] = `"Status unknown"`; - -exports[`device utils get status name 4`] = `"Used in other window"`; - -exports[`device utils get status name 5`] = `"Connected"`; - -exports[`device utils get status name 6`] = `"Used in other window"`; - -exports[`device utils get status name 7`] = `"Disconnected"`; - -exports[`device utils get status name 8`] = `"Unavailable"`; - -exports[`device utils get version 1`] = `"One"`; - -exports[`device utils get version 2`] = `"One"`; - -exports[`device utils get version 3`] = `"One"`; - -exports[`device utils get version 4`] = `"One"`; - -exports[`device utils get version 5`] = `"One"`; - -exports[`device utils get version 6`] = `"T"`; - -exports[`device utils isDisabled 1`] = `false`; - -exports[`device utils isDisabled 2`] = `true`; - -exports[`device utils isWebUSB 1`] = `true`; - -exports[`device utils isWebUSB 2`] = `false`; - -exports[`device utils isWebUSB 3`] = `true`; diff --git a/src/utils/__tests__/__snapshots__/ethUtils.test.js.snap b/src/utils/__tests__/__snapshots__/ethUtils.test.js.snap deleted file mode 100644 index ad90b78c..00000000 --- a/src/utils/__tests__/__snapshots__/ethUtils.test.js.snap +++ /dev/null @@ -1,45 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`eth utils calcGasPrice 1`] = `"89090990901"`; - -exports[`eth utils decimalToHex 1`] = `"0"`; - -exports[`eth utils decimalToHex 2`] = `"1"`; - -exports[`eth utils decimalToHex 3`] = `"2"`; - -exports[`eth utils decimalToHex 4`] = `"64"`; - -exports[`eth utils decimalToHex 5`] = `"2540be3ff"`; - -exports[`eth utils hexToDecimal 1`] = `"9999999999"`; - -exports[`eth utils hexToDecimal 2`] = `"100"`; - -exports[`eth utils hexToDecimal 3`] = `"2"`; - -exports[`eth utils hexToDecimal 4`] = `"1"`; - -exports[`eth utils hexToDecimal 5`] = `"0"`; - -exports[`eth utils hexToDecimal 6`] = `"null"`; - -exports[`eth utils padLeftEven 1`] = `"02540be3ff"`; - -exports[`eth utils sanitizeHex 1`] = `"0x02540be3ff"`; - -exports[`eth utils sanitizeHex 2`] = `"0x01"`; - -exports[`eth utils sanitizeHex 3`] = `"0x02"`; - -exports[`eth utils sanitizeHex 4`] = `"0x0100"`; - -exports[`eth utils sanitizeHex 5`] = `"0x0999"`; - -exports[`eth utils sanitizeHex 6`] = `""`; - -exports[`eth utils strip 1`] = `""`; - -exports[`eth utils strip 2`] = `"02540be3ff"`; - -exports[`eth utils strip 3`] = `"02540be3ff"`; diff --git a/src/utils/__tests__/__snapshots__/formatUtils.test.js.snap b/src/utils/__tests__/__snapshots__/formatUtils.test.js.snap deleted file mode 100644 index 448a338a..00000000 --- a/src/utils/__tests__/__snapshots__/formatUtils.test.js.snap +++ /dev/null @@ -1,45 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`format utils btckb2satoshib 1`] = `0`; - -exports[`format utils btckb2satoshib 2`] = `100000`; - -exports[`format utils btckb2satoshib 3`] = `200000`; - -exports[`format utils btckb2satoshib 4`] = `10000000`; - -exports[`format utils btckb2satoshib 5`] = `99900000`; - -exports[`format utils formatAmount 1`] = `"0 btc"`; - -exports[`format utils formatAmount 2`] = `"10 mBTC"`; - -exports[`format utils formatAmount 3`] = `"0.000005 mBTC"`; - -exports[`format utils formatAmount 4`] = `"1e-8 eth"`; - -exports[`format utils formatAmount 5`] = `"0.00099999 tau"`; - -exports[`format utils formatTime 1`] = `"No time estimate"`; - -exports[`format utils formatTime 2`] = `"1 minutes"`; - -exports[`format utils formatTime 3`] = `"2 minutes"`; - -exports[`format utils formatTime 4`] = `"1 hour 40 minutes"`; - -exports[`format utils formatTime 5`] = `"16 hours 39 minutes"`; - -exports[`format utils formatTime 6`] = `"45 minutes"`; - -exports[`format utils hexToString 1`] = `"test"`; - -exports[`format utils hexToString 2`] = `"0001"`; - -exports[`format utils hexToString 3`] = `"test99999"`; - -exports[`format utils stringToHex 1`] = `"0074006500730074"`; - -exports[`format utils stringToHex 2`] = `"0030003000300031"`; - -exports[`format utils stringToHex 3`] = `"007400650073007400390039003900390039"`; diff --git a/src/utils/__tests__/__snapshots__/notification.test.js.snap b/src/utils/__tests__/__snapshots__/notification.test.js.snap deleted file mode 100644 index 35cabc6c..00000000 --- a/src/utils/__tests__/__snapshots__/notification.test.js.snap +++ /dev/null @@ -1,41 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`device utils get icon 1`] = ` -Array [ - "M693.024 330.944c-99.968-99.936-262.080-99.936-362.048 0s-99.968 262.112 0 362.080c99.968 100 262.144 99.936 362.048 0 99.968-99.904 99.968-262.176 0-362.080zM507.904 300.192c27.008 0 48.992 21.984 48.992 49.088 0 27.296-21.984 49.472-48.992 49.472-27.264 0-49.536-22.176-49.536-49.472 0-27.552 21.728-49.088 49.536-49.088zM586.656 660.8c0 10.304-4.96 15.328-15.264 15.328h-126.464c-10.304 0-15.328-5.024-15.328-15.328v-32.256c0-10.304 5.024-15.264 15.328-15.264h23.36v-136.064h-23.872c-10.304 0-15.264-5.024-15.264-15.328v-32.224c0-10.304 4.96-15.264 15.264-15.264h88.288c10.304 0 15.264 4.96 15.264 15.264v183.648h23.424c10.304 0 15.264 4.96 15.264 15.264v32.224z", -] -`; - -exports[`device utils get icon 2`] = ` -Array [ - "M693.12 330.88c-46.317-46.267-110.276-74.88-180.919-74.88-141.385 0-256 114.615-256 256s114.615 256 256 256c70.642 0 134.602-28.613 180.921-74.882l-0.002 0.002c46.387-46.337 75.081-110.377 75.081-181.12s-28.694-134.783-75.079-181.118l-0.002-0.002zM494.080 344.32h53.12c16 0 18.24 9.28 18.24 14.72v10.24l-10.88 194.56c0 14.4-8 17.28-18.88 17.28h-28.16c-10.56 0-17.28-2.88-18.88-17.92l-10.88-193.92v-10.56c-1.28-4.8 2.24-14.080 16.32-14.080zM521.28 717.76c-0.095 0.001-0.207 0.001-0.319 0.001-27.747 0-50.24-22.493-50.24-50.24s22.493-50.24 50.24-50.24c27.747 0 50.24 22.493 50.24 50.24 0 0.112 0 0.224-0.001 0.336v-0.017c0 0 0 0.001 0 0.001 0 27.634-22.311 50.057-49.903 50.239h-0.017z", -] -`; - -exports[`device utils get icon 3`] = ` -Array [ - "M795.616 735.008l-264.896-465.44c-10.272-18.080-27.168-18.080-37.504 0l-264.864 465.44c-10.272 18.176-1.696 32.992 19.040 32.992h529.184c20.8 0 29.376-14.816 19.040-32.992zM549.76 673.12c0 10.464-8.48 18.976-18.912 18.976h-37.792c-10.336 0-18.912-8.512-18.912-18.976v-37.952c0-10.464 8.576-18.976 18.912-18.976h37.792c10.4 0 18.912 8.544 18.912 18.976v37.952zM549.76 559.264c0 10.464-8.48 18.976-18.912 18.976h-37.792c-10.336 0-18.912-8.512-18.912-18.976v-113.856c0-10.464 8.576-18.976 18.912-18.976h37.792c10.4 0 18.912 8.544 18.912 18.976v113.856z", -] -`; - -exports[`device utils get icon 4`] = ` -Array [ - "M692.8 313.92l-1.92-1.92c-6.246-7.057-15.326-11.484-25.44-11.484s-19.194 4.427-25.409 11.448l-0.031 0.036-196.48 224-3.84 1.6-3.84-1.92-48.64-57.28c-7.010-7.905-17.193-12.862-28.533-12.862-21.031 0-38.080 17.049-38.080 38.080 0 7.495 2.165 14.485 5.905 20.377l-0.092-0.155 100.8 148.16c5.391 8.036 14.386 13.292 24.618 13.44h8.662c17.251-0.146 32.385-9.075 41.163-22.529l0.117-0.191 195.2-296.32c4.473-6.632 7.141-14.803 7.141-23.597 0-11.162-4.297-21.32-11.326-28.911l0.025 0.028z", -] -`; - -exports[`device utils get icon 5`] = `undefined`; - -exports[`device utils get icon 6`] = `undefined`; - -exports[`device utils get status 1`] = `"#1E7FF0"`; - -exports[`device utils get status 2`] = `"#ED1212"`; - -exports[`device utils get status 3`] = `"#EB8A00"`; - -exports[`device utils get status 4`] = `"#01B757"`; - -exports[`device utils get status 5`] = `null`; - -exports[`device utils get status 6`] = `null`; diff --git a/src/utils/__tests__/device.test.js b/src/utils/__tests__/device.test.js index aa38e5f3..52b1aec2 100644 --- a/src/utils/__tests__/device.test.js +++ b/src/utils/__tests__/device.test.js @@ -1,112 +1,87 @@ -import * as dUtils from 'utils/device'; +import * as utils from 'utils/device'; describe('device utils', () => { it('get status', () => { - const deviceMock = [ - { - connected: false, - }, - { - connected: true, - available: false, - }, - { - connected: true, - available: false, - type: null, - }, - { - connected: true, - available: true, - type: 'acquired', - }, - { - connected: true, - available: true, - type: 'unacquired', - }, - { - connected: true, - available: true, - type: 'acquired', - status: 'occupied', - }, - ]; + expect(utils.getStatus({ connected: false })) + .toBe('disconnected'); + + expect(utils.getStatus({ connected: true, available: false })) + .toBe('unavailable'); + + expect(utils.getStatus({ + connected: true, + available: false, + type: null, + })).toBe('unavailable'); - deviceMock.forEach((device) => { - expect(dUtils.getStatus(device)).toMatchSnapshot(); - }); + expect(utils.getStatus({ + connected: true, + available: true, + type: 'acquired', + })).toBe('connected'); + + expect(utils.getStatus({ + connected: true, + available: true, + type: 'unacquired', + })).toBe('unacquired'); + + expect(utils.getStatus({ + connected: true, + available: true, + type: 'acquired', + status: 'occupied', + })).toBe('used-in-other-window'); }); it('isWebUSB', () => { - const data = [ - { transport: { type: 'webusb', version: '1.6.0' } }, - { transport: { type: null, version: 'aaaaaa' } }, - { transport: { type: 'webusb' } }, - ]; - - data.forEach((item) => { - expect(dUtils.isWebUSB(item.transport)).toMatchSnapshot(); - }); + expect(utils.isWebUSB({ type: 'webusb', version: '1.6.0' })).toBe(true); + expect(utils.isWebUSB({ type: 'aaaa', version: 'aaaaaa' })).toBe(false); + expect(utils.isWebUSB({ type: 'webusb' })).toBe(true); }); it('isDisabled', () => { - const data = [ - { selectedDevice: { features: null }, devices: [1, 2, 3], transport: { version: 'webusb' } }, - { selectedDevice: { features: null }, devices: [], transport: { version: 'test' } }, - ]; + expect(utils.isDisabled( + { selectedDevice: { features: null } }, + [1, 2, 3], + { + version: 'webusb', + }, + )).toBe(false); - data.forEach((item) => { - expect(dUtils.isDisabled(item.selectedDevice, item.devices, item.transport)).toMatchSnapshot(); - }); + expect(utils.isDisabled( + { features: null }, [], { version: 'test' }, + )).toBe(true); }); it('get version', () => { - const deviceMock = [ - { }, - { features: {} }, - { features: { major_version: null } }, - { features: { major_version: 0 } }, - { features: { major_version: 1 } }, - { features: { major_version: 2 } }, - ]; - - deviceMock.forEach((device) => { - expect(dUtils.getVersion(device)).toMatchSnapshot(); - }); + expect(utils.getVersion({})).toBe('One'); + expect(utils.getVersion({ features: {} })).toBe('One'); + expect(utils.getVersion({ features: { major_version: null } })).toBe('One'); + expect(utils.getVersion({ features: { major_version: 0 } })).toBe('One'); + expect(utils.getVersion({ features: { major_version: 1 } })).toBe('One'); + expect(utils.getVersion({ features: { major_version: 2 } })).toBe('T'); }); it('get status color', () => { - const entry = [ - 0, - null, - 'sdsdsdsd', - 'used-in-other-window', - 'connected', - 'unacquired', - 'disconnected', - 'unavailable', - ]; - - entry.forEach((status) => { - expect(dUtils.getStatusColor(status)).toMatchSnapshot(); - }); + expect(utils.getStatusColor(0)).toBe('#494949'); + expect(utils.getStatusColor(null)).toBe('#494949'); + expect(utils.getStatusColor('sdsdsdsd')).toBe('#494949'); + expect(utils.getStatusColor('used-in-other-window')).toBe('#EB8A00'); + expect(utils.getStatusColor('connected')).toBe('#01B757'); + expect(utils.getStatusColor('unacquired')).toBe('#EB8A00'); + expect(utils.getStatusColor('disconnected')).toBe('#ED1212'); + expect(utils.getStatusColor('unavailable')).toBe('#ED1212'); }); it('get status name', () => { - const entry = [ - 0, - null, - 'sdsdsdsd', - 'used-in-other-window', - 'connected', - 'unacquired', - 'disconnected', - 'unavailable', - ]; - - entry.forEach((status) => { - expect(dUtils.getStatusName(status)).toMatchSnapshot(); - }); + expect(utils.getStatusName(0)).toBe('Status unknown'); + expect(utils.getStatusName(null)).toBe('Status unknown'); + expect(utils.getStatusName('sdsdsdsd')).toBe('Status unknown'); + expect(utils.getStatusName('used-in-other-window')).toBe('Used in other window'); + expect(utils.getStatusName('connected')).toBe('Connected'); + expect(utils.getStatusName('unacquired')).toBe('Used in other window'); + expect(utils.getStatusName('disconnected')).toBe('Disconnected'); + expect(utils.getStatusName('unavailable')).toBe('Unavailable'); }); -}); +}); \ No newline at end of file diff --git a/src/utils/__tests__/ethUtils.test.js b/src/utils/__tests__/ethUtils.test.js index 119b90e5..e3fb8c1b 100644 --- a/src/utils/__tests__/ethUtils.test.js +++ b/src/utils/__tests__/ethUtils.test.js @@ -1,53 +1,44 @@ import BigNumber from 'bignumber.js'; -import * as ethUtils from '../ethUtils'; +import * as utils from '../ethUtils'; describe('eth utils', () => { it('decimalToHex', () => { - const input = [0, 1, 2, 100, 9999999999]; - - input.forEach((entry) => { - expect(ethUtils.decimalToHex(entry)).toMatchSnapshot(); - }); + expect(utils.decimalToHex(0)).toBe('0'); + expect(utils.decimalToHex(1)).toBe('1'); + expect(utils.decimalToHex(2)).toBe('2'); + expect(utils.decimalToHex(100)).toBe('64'); + expect(utils.decimalToHex(9999999999)).toBe('2540be3ff'); }); + // TODO: decimal as string ????? it('hexToDecimal', () => { - const input = ['2540be3ff', '64', '2', '1', '0', '']; - - input.forEach((entry) => { - expect(ethUtils.hexToDecimal(entry)).toMatchSnapshot(); - }); + expect(utils.hexToDecimal('2540be3ff')).toBe('9999999999'); + expect(utils.hexToDecimal(64)).toBe('100'); + expect(utils.hexToDecimal(2)).toBe('2'); + expect(utils.hexToDecimal(1)).toBe('1'); + expect(utils.hexToDecimal(0)).toBe('0'); }); it('padLeftEven', () => { - const input = ['2540be3ff']; - - input.forEach((entry) => { - expect(ethUtils.padLeftEven(entry)).toMatchSnapshot(); - }); + expect(utils.padLeftEven('2540be3ff')).toBe('02540be3ff'); }); it('sanitizeHex', () => { - const input = ['0x2540be3ff', '1', '2', '100', '999', '']; - - input.forEach((entry) => { - expect(ethUtils.sanitizeHex(entry)).toMatchSnapshot(); - }); + expect(utils.sanitizeHex('0x2540be3ff')).toBe('0x02540be3ff'); + expect(utils.sanitizeHex('1')).toBe('0x01'); + expect(utils.sanitizeHex('2')).toBe('0x02'); + expect(utils.sanitizeHex('100')).toBe('0x0100'); + expect(utils.sanitizeHex('999')).toBe('0x0999'); + expect(utils.sanitizeHex('')).toBe(''); }); - it('strip', () => { - const input = ['0x', '0x2540be3ff', '2540be3ff']; - - input.forEach((entry) => { - expect(ethUtils.strip(entry)).toMatchSnapshot(); - }); + expect(utils.strip('0x')).toBe(''); + expect(utils.strip('0x2540be3ff')).toBe('02540be3ff'); + expect(utils.strip('2540be3ff')).toBe('02540be3ff'); }); - it('calcGasPrice', () => { - const input = [{ price: new BigNumber(9898998989), limit: '9' }]; - - input.forEach((entry) => { - expect(ethUtils.calcGasPrice(entry.price, entry.limit)).toMatchSnapshot(); - }); + it('calculate gas price', () => { + expect(utils.calcGasPrice(new BigNumber(9898998989), 9)).toBe('89090990901'); }); }); diff --git a/src/utils/__tests__/formatUtils.test.js b/src/utils/__tests__/formatUtils.test.js index eb1d026d..f83776e4 100644 --- a/src/utils/__tests__/formatUtils.test.js +++ b/src/utils/__tests__/formatUtils.test.js @@ -1,49 +1,41 @@ -import * as formatUtils from '../formatUtils'; +import * as utils from '../formatUtils'; describe('format utils', () => { + // TODO: check this weird function it('formatAmount', () => { - const input = [ - { amount: 0, coinInfo: { isBitcoin: true, currencyUnits: 'mbtc', shortcut: 'btc' } }, - { amount: 1000000, coinInfo: { isBitcoin: true, currencyUnits: 'mbtc', shortcut: 'btc' } }, - { amount: 0.5, coinInfo: { isBitcoin: true, currencyUnits: 'mbtc', shortcut: 'btc' } }, - { amount: 1, coinInfo: { isBitcoin: false, shortcut: 'eth' } }, - { amount: 99999, coinInfo: { isBitcoin: false, shortcut: 'tau' } }, - ]; - - input.forEach((entry) => { - expect(formatUtils.formatAmount(entry.amount, entry.coinInfo, entry.coinInfo.currencyUnits)).toMatchSnapshot(); - }); + expect(utils.formatAmount(0, { isBitcoin: false, shortcut: 'mbtc' }, 'mbtc')).toBe('0 mbtc'); + expect(utils.formatAmount(1000000, { isBitcoin: true }, 'mbtc')).toBe('10 mBTC'); + expect(utils.formatAmount(0.5, { isBitcoin: true }, 'mbtc')).toBe('0.000005 mBTC'); + expect(utils.formatAmount(1, { isBitcoin: false, shortcut: 'eth' }, null)).toBe('1e-8 eth'); + expect(utils.formatAmount(99999, { isBitcoin: false, shortcut: 'tau' }, null)).toBe('0.00099999 tau'); }); - it('formatTime', () => { - const input = [0, 1, 2, 100, 999, 45]; - - input.forEach((entry) => { - expect(formatUtils.formatTime(entry)).toMatchSnapshot(); - }); + it('format time', () => { + expect(utils.formatTime(0)).toBe('No time estimate'); + expect(utils.formatTime(1)).toBe('1 minutes'); // TODO: should be minute + expect(utils.formatTime(2)).toBe('2 minutes'); + expect(utils.formatTime(45)).toBe('45 minutes'); + expect(utils.formatTime(100)).toBe('1 hour 40 minutes'); + expect(utils.formatTime(999)).toBe('16 hours 39 minutes'); }); it('btckb2satoshib', () => { - const input = [0, 1, 2, 100, 999]; - - input.forEach((entry) => { - expect(formatUtils.btckb2satoshib(entry)).toMatchSnapshot(); - }); + expect(utils.btckb2satoshib(0)).toBe(0); + expect(utils.btckb2satoshib(1)).toBe(100000); + expect(utils.btckb2satoshib(2)).toBe(200000); + expect(utils.btckb2satoshib(100)).toBe(10000000); + expect(utils.btckb2satoshib(999)).toBe(99900000); }); - it('stringToHex', () => { - const input = ['test', '0001', 'test99999']; - - input.forEach((entry) => { - expect(formatUtils.stringToHex(entry)).toMatchSnapshot(); - }); + it('string to hex', () => { + expect(utils.stringToHex('test')).toBe('0074006500730074'); + expect(utils.stringToHex('0001')).toBe('0030003000300031'); + expect(utils.stringToHex('test99999')).toBe('007400650073007400390039003900390039'); }); - it('hexToString', () => { - const input = ['0074006500730074', '0030003000300031', '007400650073007400390039003900390039']; - - input.forEach((entry) => { - expect(formatUtils.hexToString(entry)).toMatchSnapshot(); - }); + it('hex to string', () => { + expect(utils.hexToString('0074006500730074')).toBe('test'); + expect(utils.hexToString('0030003000300031')).toBe('0001'); + expect(utils.hexToString('007400650073007400390039003900390039')).toBe('test99999'); }); }); diff --git a/src/utils/__tests__/notification.test.js b/src/utils/__tests__/notification.test.js index d6626311..f145bee3 100644 --- a/src/utils/__tests__/notification.test.js +++ b/src/utils/__tests__/notification.test.js @@ -1,32 +1,12 @@ -import * as nUtils from 'utils/notification'; +import * as utils from 'utils/notification'; -describe('device utils', () => { - it('get status', () => { - const types = [ - 'info', - 'error', - 'warning', - 'success', - 'kdsjflds', - '', - ]; - - types.forEach((type) => { - expect(nUtils.getPrimaryColor(type)).toMatchSnapshot(); - }); - }); - it('get icon', () => { - const types = [ - 'info', - 'error', - 'warning', - 'success', - 'kdsjflds', - '', - ]; - - types.forEach((type) => { - expect(nUtils.getIcon(type)).toMatchSnapshot(); - }); +describe('notification utils', () => { + it('get colors from status', () => { + expect(utils.getPrimaryColor('info')).toBe('#1E7FF0'); + expect(utils.getPrimaryColor('warning')).toBe('#EB8A00'); + expect(utils.getPrimaryColor('error')).toBe('#ED1212'); + expect(utils.getPrimaryColor('success')).toBe('#01B757'); + expect(utils.getPrimaryColor('kdsjflds')).toBe(null); + expect(utils.getPrimaryColor('')).toBe(null); }); }); diff --git a/src/views/Wallet/components/LeftNavigation/components/Sidebar/index.js b/src/views/Wallet/components/LeftNavigation/components/Sidebar/index.js index a149cf8f..46cca306 100644 --- a/src/views/Wallet/components/LeftNavigation/components/Sidebar/index.js +++ b/src/views/Wallet/components/LeftNavigation/components/Sidebar/index.js @@ -9,7 +9,7 @@ import { SLIDE_RIGHT, SLIDE_LEFT } from 'config/animations'; type Props = { children?: React.Node, - isOpen: boolean, + isOpen: ?boolean, } type State = { @@ -32,6 +32,9 @@ const AbsoluteWrapper = styled.aside` height: calc(100vh - 52px); z-index: 200; top: 52px; + /* Prevents firing SLIDE_LEFT anim on page load. */ + /* isOpen is null until user clicks on menu toggler */ + display: ${props => (props.isOpen === null ? 'none' : 'block')}; animation: ${props => (props.isOpen ? SLIDE_RIGHT : SLIDE_LEFT)} 0.25s cubic-bezier(0.17, 0.04, 0.03, 0.94) forwards; } diff --git a/src/views/Wallet/views/Account/Send/ripple/components/AdvancedForm/index.js b/src/views/Wallet/views/Account/Send/ripple/components/AdvancedForm/index.js index 76834cc1..1b8c491e 100644 --- a/src/views/Wallet/views/Account/Send/ripple/components/AdvancedForm/index.js +++ b/src/views/Wallet/views/Account/Send/ripple/components/AdvancedForm/index.js @@ -164,7 +164,7 @@ const AdvancedForm = (props: Props) => { } maxWidth={200} - readMoreLink="https://developers.ripple.com/rippleapi-reference.html#payment" + readMoreLink="https://wiki.trezor.io/Ripple_(XRP)" placement="top" >