aboutsummaryrefslogtreecommitdiffstats
path: root/ui/app/components/gas-customization/gas-modal-page-container
diff options
context:
space:
mode:
Diffstat (limited to 'ui/app/components/gas-customization/gas-modal-page-container')
-rw-r--r--ui/app/components/gas-customization/gas-modal-page-container/advanced-tab-content/advanced-tab-content.component.js219
-rw-r--r--ui/app/components/gas-customization/gas-modal-page-container/advanced-tab-content/index.js1
-rw-r--r--ui/app/components/gas-customization/gas-modal-page-container/advanced-tab-content/index.scss203
-rw-r--r--ui/app/components/gas-customization/gas-modal-page-container/advanced-tab-content/tests/advanced-tab-content-component.test.js364
-rw-r--r--ui/app/components/gas-customization/gas-modal-page-container/advanced-tab-content/time-remaining/index.js1
-rw-r--r--ui/app/components/gas-customization/gas-modal-page-container/advanced-tab-content/time-remaining/index.scss17
-rw-r--r--ui/app/components/gas-customization/gas-modal-page-container/advanced-tab-content/time-remaining/tests/time-remaining-component.test.js30
-rw-r--r--ui/app/components/gas-customization/gas-modal-page-container/advanced-tab-content/time-remaining/time-remaining.component.js33
-rw-r--r--ui/app/components/gas-customization/gas-modal-page-container/advanced-tab-content/time-remaining/time-remaining.utils.js11
-rw-r--r--ui/app/components/gas-customization/gas-modal-page-container/basic-tab-content/basic-tab-content.component.js35
-rw-r--r--ui/app/components/gas-customization/gas-modal-page-container/basic-tab-content/index.js1
-rw-r--r--ui/app/components/gas-customization/gas-modal-page-container/basic-tab-content/index.scss28
-rw-r--r--ui/app/components/gas-customization/gas-modal-page-container/basic-tab-content/tests/basic-tab-content-component.test.js82
-rw-r--r--ui/app/components/gas-customization/gas-modal-page-container/gas-modal-page-container.component.js186
-rw-r--r--ui/app/components/gas-customization/gas-modal-page-container/gas-modal-page-container.container.js291
-rw-r--r--ui/app/components/gas-customization/gas-modal-page-container/index.js1
-rw-r--r--ui/app/components/gas-customization/gas-modal-page-container/index.scss146
-rw-r--r--ui/app/components/gas-customization/gas-modal-page-container/tests/gas-modal-page-container-component.test.js274
-rw-r--r--ui/app/components/gas-customization/gas-modal-page-container/tests/gas-modal-page-container-container.test.js425
19 files changed, 0 insertions, 2348 deletions
diff --git a/ui/app/components/gas-customization/gas-modal-page-container/advanced-tab-content/advanced-tab-content.component.js b/ui/app/components/gas-customization/gas-modal-page-container/advanced-tab-content/advanced-tab-content.component.js
deleted file mode 100644
index a3a3f96d8..000000000
--- a/ui/app/components/gas-customization/gas-modal-page-container/advanced-tab-content/advanced-tab-content.component.js
+++ /dev/null
@@ -1,219 +0,0 @@
-import React, { Component } from 'react'
-import PropTypes from 'prop-types'
-import classnames from 'classnames'
-import Loading from '../../../loading-screen'
-import GasPriceChart from '../../gas-price-chart'
-import debounce from 'lodash.debounce'
-
-export default class AdvancedTabContent extends Component {
- static contextTypes = {
- t: PropTypes.func,
- }
-
- static propTypes = {
- updateCustomGasPrice: PropTypes.func,
- updateCustomGasLimit: PropTypes.func,
- customGasPrice: PropTypes.number,
- customGasLimit: PropTypes.number,
- gasEstimatesLoading: PropTypes.bool,
- millisecondsRemaining: PropTypes.number,
- transactionFee: PropTypes.string,
- timeRemaining: PropTypes.string,
- gasChartProps: PropTypes.object,
- insufficientBalance: PropTypes.bool,
- customPriceIsSafe: PropTypes.bool,
- isSpeedUp: PropTypes.bool,
- }
-
- constructor (props) {
- super(props)
-
- this.debouncedGasLimitReset = debounce((dVal) => {
- if (dVal < 21000) {
- props.updateCustomGasLimit(21000)
- }
- }, 1000, { trailing: true })
- this.onChangeGasLimit = (val) => {
- props.updateCustomGasLimit(val)
- this.debouncedGasLimitReset(val)
- }
- }
-
- gasInputError ({ labelKey, insufficientBalance, customPriceIsSafe, isSpeedUp, value }) {
- const { t } = this.context
- let errorText
- let errorType
- let isInError = true
-
-
- if (insufficientBalance) {
- errorText = t('insufficientBalance')
- errorType = 'error'
- } else if (labelKey === 'gasPrice' && isSpeedUp && value === 0) {
- errorText = t('zeroGasPriceOnSpeedUpError')
- errorType = 'error'
- } else if (labelKey === 'gasPrice' && !customPriceIsSafe) {
- errorText = t('gasPriceExtremelyLow')
- errorType = 'warning'
- } else {
- isInError = false
- }
-
- return {
- isInError,
- errorText,
- errorType,
- }
- }
-
- gasInput ({ labelKey, value, onChange, insufficientBalance, showGWEI, customPriceIsSafe, isSpeedUp }) {
- const {
- isInError,
- errorText,
- errorType,
- } = this.gasInputError({ labelKey, insufficientBalance, customPriceIsSafe, isSpeedUp, value })
-
- return (
- <div className="advanced-tab__gas-edit-row__input-wrapper">
- <input
- className={classnames('advanced-tab__gas-edit-row__input', {
- 'advanced-tab__gas-edit-row__input--error': isInError && errorType === 'error',
- 'advanced-tab__gas-edit-row__input--warning': isInError && errorType === 'warning',
- })}
- type="number"
- value={value}
- onChange={event => onChange(Number(event.target.value))}
- />
- <div className={classnames('advanced-tab__gas-edit-row__input-arrows', {
- 'advanced-tab__gas-edit-row__input--error': isInError && errorType === 'error',
- 'advanced-tab__gas-edit-row__input--warning': isInError && errorType === 'warning',
- })}>
- <div
- className="advanced-tab__gas-edit-row__input-arrows__i-wrap"
- onClick={() => onChange(value + 1)}
- >
- <i className="fa fa-sm fa-angle-up" />
- </div>
- <div
- className="advanced-tab__gas-edit-row__input-arrows__i-wrap"
- onClick={() => onChange(Math.max(value - 1, 0))}
- >
- <i className="fa fa-sm fa-angle-down" />
- </div>
- </div>
- { isInError
- ? <div className={`advanced-tab__gas-edit-row__${errorType}-text`}>
- { errorText }
- </div>
- : null }
- </div>
- )
- }
-
- infoButton (onClick) {
- return <i className="fa fa-info-circle" onClick={onClick} />
- }
-
- renderDataSummary (transactionFee, timeRemaining) {
- return (
- <div className="advanced-tab__transaction-data-summary">
- <div className="advanced-tab__transaction-data-summary__titles">
- <span>{ this.context.t('newTransactionFee') }</span>
- <span>~{ this.context.t('transactionTime') }</span>
- </div>
- <div className="advanced-tab__transaction-data-summary__container">
- <div className="advanced-tab__transaction-data-summary__fee">
- {transactionFee}
- </div>
- <div className="time-remaining">{timeRemaining}</div>
- </div>
- </div>
- )
- }
-
- renderGasEditRow (gasInputArgs) {
- return (
- <div className="advanced-tab__gas-edit-row">
- <div className="advanced-tab__gas-edit-row__label">
- { this.context.t(gasInputArgs.labelKey) }
- { this.infoButton(() => {}) }
- </div>
- { this.gasInput(gasInputArgs) }
- </div>
- )
- }
-
- renderGasEditRows ({
- customGasPrice,
- updateCustomGasPrice,
- customGasLimit,
- updateCustomGasLimit,
- insufficientBalance,
- customPriceIsSafe,
- isSpeedUp,
- }) {
- return (
- <div className="advanced-tab__gas-edit-rows">
- { this.renderGasEditRow({
- labelKey: 'gasPrice',
- value: customGasPrice,
- onChange: updateCustomGasPrice,
- insufficientBalance,
- customPriceIsSafe,
- showGWEI: true,
- isSpeedUp,
- }) }
- { this.renderGasEditRow({
- labelKey: 'gasLimit',
- value: customGasLimit,
- onChange: this.onChangeGasLimit,
- insufficientBalance,
- customPriceIsSafe,
- }) }
- </div>
- )
- }
-
- render () {
- const { t } = this.context
- const {
- updateCustomGasPrice,
- updateCustomGasLimit,
- timeRemaining,
- customGasPrice,
- customGasLimit,
- insufficientBalance,
- gasChartProps,
- gasEstimatesLoading,
- customPriceIsSafe,
- isSpeedUp,
- transactionFee,
- } = this.props
-
- return (
- <div className="advanced-tab">
- { this.renderDataSummary(transactionFee, timeRemaining) }
- <div className="advanced-tab__fee-chart">
- { this.renderGasEditRows({
- customGasPrice,
- updateCustomGasPrice,
- customGasLimit,
- updateCustomGasLimit,
- insufficientBalance,
- customPriceIsSafe,
- isSpeedUp,
- }) }
- <div className="advanced-tab__fee-chart__title">{ t('liveGasPricePredictions') }</div>
- {!gasEstimatesLoading
- ? <GasPriceChart {...gasChartProps} updateCustomGasPrice={updateCustomGasPrice} />
- : <Loading />
- }
- <div className="advanced-tab__fee-chart__speed-buttons">
- <span>{ t('slower') }</span>
- <span>{ t('faster') }</span>
- </div>
- </div>
- </div>
- )
- }
-}
diff --git a/ui/app/components/gas-customization/gas-modal-page-container/advanced-tab-content/index.js b/ui/app/components/gas-customization/gas-modal-page-container/advanced-tab-content/index.js
deleted file mode 100644
index 492037f25..000000000
--- a/ui/app/components/gas-customization/gas-modal-page-container/advanced-tab-content/index.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default } from './advanced-tab-content.component'
diff --git a/ui/app/components/gas-customization/gas-modal-page-container/advanced-tab-content/index.scss b/ui/app/components/gas-customization/gas-modal-page-container/advanced-tab-content/index.scss
deleted file mode 100644
index 53cb84791..000000000
--- a/ui/app/components/gas-customization/gas-modal-page-container/advanced-tab-content/index.scss
+++ /dev/null
@@ -1,203 +0,0 @@
-@import './time-remaining/index';
-
-.advanced-tab {
- display: flex;
- flex-flow: column;
-
- &__transaction-data-summary,
- &__fee-chart-title {
- padding-left: 24px;
- padding-right: 24px;
- }
-
- &__transaction-data-summary {
- display: flex;
- flex-flow: column;
- color: $mid-gray;
- margin-top: 12px;
- padding-left: 18px;
- padding-right: 18px;
-
- &__titles,
- &__container {
- display: flex;
- flex-flow: row;
- justify-content: space-between;
- font-size: 12px;
- color: #888EA3;
- }
-
- &__container {
- font-size: 16px;
- margin-top: 0px;
- }
-
- &__fee {
- font-size: 16px;
- color: #313A5E;
- }
- }
-
- &__fee-chart {
- margin-top: 8px;
- height: 265px;
- background: #F8F9FB;
- border-bottom: 1px solid #d2d8dd;
- border-top: 1px solid #d2d8dd;
- position: relative;
-
- &__title {
- font-size: 12px;
- color: #313A5E;
- margin-left: 22px;
- }
-
- &__speed-buttons {
- position: absolute;
- bottom: 13px;
- display: flex;
- justify-content: space-between;
- padding-left: 20px;
- padding-right: 19px;
- width: 100%;
- font-size: 10px;
- color: #888EA3;
- }
- }
-
- &__slider-container {
- padding-left: 27px;
- padding-right: 27px;
- }
-
- &__gas-edit-rows {
- height: 73px;
- display: flex;
- flex-flow: row;
- justify-content: space-between;
- margin-left: 20px;
- margin-right: 10px;
- margin-top: 9px;
- }
-
- &__gas-edit-row {
- display: flex;
- flex-flow: column;
-
- &__label {
- color: #313B5E;
- font-size: 14px;
- display: flex;
- justify-content: space-between;
- align-items: center;
-
- .fa-info-circle {
- color: $silver;
- margin-left: 10px;
- cursor: pointer;
- }
-
- .fa-info-circle:hover {
- color: $mid-gray;
- }
- }
-
- &__error-text {
- font-size: 12px;
- color: red;
- }
-
- &__warning-text {
- font-size: 12px;
- color: orange;
- }
-
- &__input-wrapper {
- position: relative;
- }
-
- &__input {
- border: 1px solid $dusty-gray;
- border-radius: 4px;
- color: $mid-gray;
- font-size: 16px;
- height: 24px;
- width: 155px;
- padding-left: 8px;
- padding-top: 2px;
- margin-top: 7px;
- }
-
- &__input--error {
- border: 1px solid $red;
- }
-
- &__input--warning {
- border: 1px solid $orange;
- }
-
- &__input-arrows {
- position: absolute;
- top: 7px;
- right: 0px;
- width: 17px;
- height: 24px;
- border: 1px solid #dadada;
- border-top-right-radius: 4px;
- display: flex;
- flex-direction: column;
- color: #9b9b9b;
- font-size: .8em;
- border-bottom-right-radius: 4px;
- cursor: pointer;
-
- &__i-wrap {
- width: 100%;
- height: 100%;
- display: flex;
- justify-content: center;
- cursor: pointer;
- }
-
- &__i-wrap:hover {
- background: #4EADE7;
- color: $white;
- }
-
- i:hover {
- background: #4EADE7;
- }
-
- i {
- font-size: 10px;
- }
- }
-
- &__input-arrows--error {
- border: 1px solid $red;
- }
-
- &__input-arrows--warning {
- border: 1px solid $orange;
- }
-
- input[type="number"]::-webkit-inner-spin-button {
- -webkit-appearance: none;
- -moz-appearance: none;
- display: none;
- }
-
- input[type="number"]:hover::-webkit-inner-spin-button {
- -webkit-appearance: none;
- -moz-appearance: none;
- display: none;
- }
-
- &__gwei-symbol {
- position: absolute;
- top: 8px;
- right: 10px;
- color: $dusty-gray;
- }
- }
-} \ No newline at end of file
diff --git a/ui/app/components/gas-customization/gas-modal-page-container/advanced-tab-content/tests/advanced-tab-content-component.test.js b/ui/app/components/gas-customization/gas-modal-page-container/advanced-tab-content/tests/advanced-tab-content-component.test.js
deleted file mode 100644
index 2500ee267..000000000
--- a/ui/app/components/gas-customization/gas-modal-page-container/advanced-tab-content/tests/advanced-tab-content-component.test.js
+++ /dev/null
@@ -1,364 +0,0 @@
-import React from 'react'
-import assert from 'assert'
-import shallow from '../../../../../../lib/shallow-with-context'
-import sinon from 'sinon'
-import AdvancedTabContent from '../advanced-tab-content.component.js'
-
-import GasPriceChart from '../../../gas-price-chart'
-import Loading from '../../../../loading-screen'
-
-const propsMethodSpies = {
- updateCustomGasPrice: sinon.spy(),
- updateCustomGasLimit: sinon.spy(),
-}
-
-sinon.spy(AdvancedTabContent.prototype, 'renderGasEditRow')
-sinon.spy(AdvancedTabContent.prototype, 'gasInput')
-sinon.spy(AdvancedTabContent.prototype, 'renderGasEditRows')
-sinon.spy(AdvancedTabContent.prototype, 'renderDataSummary')
-sinon.spy(AdvancedTabContent.prototype, 'gasInputError')
-
-describe('AdvancedTabContent Component', function () {
- let wrapper
-
- beforeEach(() => {
- wrapper = shallow(<AdvancedTabContent
- updateCustomGasPrice={propsMethodSpies.updateCustomGasPrice}
- updateCustomGasLimit={propsMethodSpies.updateCustomGasLimit}
- customGasPrice={11}
- customGasLimit={23456}
- timeRemaining={21500}
- transactionFee={'$0.25'}
- insufficientBalance={false}
- customPriceIsSafe={true}
- isSpeedUp={false}
- />, { context: { t: (str1, str2) => str2 ? str1 + str2 : str1 } })
- })
-
- afterEach(() => {
- propsMethodSpies.updateCustomGasPrice.resetHistory()
- propsMethodSpies.updateCustomGasLimit.resetHistory()
- AdvancedTabContent.prototype.renderGasEditRow.resetHistory()
- AdvancedTabContent.prototype.gasInput.resetHistory()
- AdvancedTabContent.prototype.renderGasEditRows.resetHistory()
- AdvancedTabContent.prototype.renderDataSummary.resetHistory()
- })
-
- describe('render()', () => {
- it('should render the advanced-tab root node', () => {
- assert(wrapper.hasClass('advanced-tab'))
- })
-
- it('should render the expected four children of the advanced-tab div', () => {
- const advancedTabChildren = wrapper.children()
- assert.equal(advancedTabChildren.length, 2)
-
- assert(advancedTabChildren.at(0).hasClass('advanced-tab__transaction-data-summary'))
- assert(advancedTabChildren.at(1).hasClass('advanced-tab__fee-chart'))
-
- const feeChartDiv = advancedTabChildren.at(1)
-
- assert(feeChartDiv.childAt(0).hasClass('advanced-tab__gas-edit-rows'))
- assert(feeChartDiv.childAt(1).hasClass('advanced-tab__fee-chart__title'))
- assert(feeChartDiv.childAt(2).is(GasPriceChart))
- assert(feeChartDiv.childAt(3).hasClass('advanced-tab__fee-chart__speed-buttons'))
- })
-
- it('should render a loading component instead of the chart if gasEstimatesLoading is true', () => {
- wrapper.setProps({ gasEstimatesLoading: true })
- const advancedTabChildren = wrapper.children()
- assert.equal(advancedTabChildren.length, 2)
-
- assert(advancedTabChildren.at(0).hasClass('advanced-tab__transaction-data-summary'))
- assert(advancedTabChildren.at(1).hasClass('advanced-tab__fee-chart'))
-
- const feeChartDiv = advancedTabChildren.at(1)
-
- assert(feeChartDiv.childAt(0).hasClass('advanced-tab__gas-edit-rows'))
- assert(feeChartDiv.childAt(1).hasClass('advanced-tab__fee-chart__title'))
- assert(feeChartDiv.childAt(2).is(Loading))
- assert(feeChartDiv.childAt(3).hasClass('advanced-tab__fee-chart__speed-buttons'))
- })
-
- it('should call renderDataSummary with the expected params', () => {
- assert.equal(AdvancedTabContent.prototype.renderGasEditRows.callCount, 1)
- const renderDataSummaryArgs = AdvancedTabContent.prototype.renderDataSummary.getCall(0).args
- assert.deepEqual(renderDataSummaryArgs, ['$0.25', 21500])
- })
-
- it('should call renderGasEditRows with the expected params', () => {
- assert.equal(AdvancedTabContent.prototype.renderGasEditRows.callCount, 1)
- const renderGasEditRowArgs = AdvancedTabContent.prototype.renderGasEditRows.getCall(0).args
- assert.deepEqual(renderGasEditRowArgs, [{
- customGasPrice: 11,
- customGasLimit: 23456,
- insufficientBalance: false,
- customPriceIsSafe: true,
- updateCustomGasPrice: propsMethodSpies.updateCustomGasPrice,
- updateCustomGasLimit: propsMethodSpies.updateCustomGasLimit,
- isSpeedUp: false,
- }])
- })
- })
-
- describe('renderDataSummary()', () => {
- let dataSummary
-
- beforeEach(() => {
- dataSummary = shallow(wrapper.instance().renderDataSummary('mockTotalFee', 'mockMsRemaining'))
- })
-
- it('should render the transaction-data-summary root node', () => {
- assert(dataSummary.hasClass('advanced-tab__transaction-data-summary'))
- })
-
- it('should render titles of the data', () => {
- const titlesNode = dataSummary.children().at(0)
- assert(titlesNode.hasClass('advanced-tab__transaction-data-summary__titles'))
- assert.equal(titlesNode.children().at(0).text(), 'newTransactionFee')
- assert.equal(titlesNode.children().at(1).text(), '~transactionTime')
- })
-
- it('should render the data', () => {
- const dataNode = dataSummary.children().at(1)
- assert(dataNode.hasClass('advanced-tab__transaction-data-summary__container'))
- assert.equal(dataNode.children().at(0).text(), 'mockTotalFee')
- assert(dataNode.children().at(1).hasClass('time-remaining'))
- assert.equal(dataNode.children().at(1).text(), 'mockMsRemaining')
- })
- })
-
- describe('renderGasEditRow()', () => {
- let gasEditRow
-
- beforeEach(() => {
- AdvancedTabContent.prototype.gasInput.resetHistory()
- gasEditRow = shallow(wrapper.instance().renderGasEditRow({
- labelKey: 'mockLabelKey',
- someArg: 'argA',
- }))
- })
-
- it('should render the gas-edit-row root node', () => {
- assert(gasEditRow.hasClass('advanced-tab__gas-edit-row'))
- })
-
- it('should render a label and an input', () => {
- const gasEditRowChildren = gasEditRow.children()
- assert.equal(gasEditRowChildren.length, 2)
- assert(gasEditRowChildren.at(0).hasClass('advanced-tab__gas-edit-row__label'))
- assert(gasEditRowChildren.at(1).hasClass('advanced-tab__gas-edit-row__input-wrapper'))
- })
-
- it('should render the label key and info button', () => {
- const gasRowLabelChildren = gasEditRow.children().at(0).children()
- assert.equal(gasRowLabelChildren.length, 2)
- assert(gasRowLabelChildren.at(0), 'mockLabelKey')
- assert(gasRowLabelChildren.at(1).hasClass('fa-info-circle'))
- })
-
- it('should call this.gasInput with the correct args', () => {
- const gasInputSpyArgs = AdvancedTabContent.prototype.gasInput.args
- assert.deepEqual(gasInputSpyArgs[0], [ { labelKey: 'mockLabelKey', someArg: 'argA' } ])
- })
- })
-
- describe('renderGasEditRows()', () => {
- let gasEditRows
- let tempOnChangeGasLimit
-
- beforeEach(() => {
- tempOnChangeGasLimit = wrapper.instance().onChangeGasLimit
- wrapper.instance().onChangeGasLimit = () => 'mockOnChangeGasLimit'
- AdvancedTabContent.prototype.renderGasEditRow.resetHistory()
- gasEditRows = shallow(wrapper.instance().renderGasEditRows(
- 'mockGasPrice',
- () => 'mockUpdateCustomGasPriceReturn',
- 'mockGasLimit',
- () => 'mockUpdateCustomGasLimitReturn',
- false
- ))
- })
-
- afterEach(() => {
- wrapper.instance().onChangeGasLimit = tempOnChangeGasLimit
- })
-
- it('should render the gas-edit-rows root node', () => {
- assert(gasEditRows.hasClass('advanced-tab__gas-edit-rows'))
- })
-
- it('should render two rows', () => {
- const gasEditRowsChildren = gasEditRows.children()
- assert.equal(gasEditRowsChildren.length, 2)
- assert(gasEditRowsChildren.at(0).hasClass('advanced-tab__gas-edit-row'))
- assert(gasEditRowsChildren.at(1).hasClass('advanced-tab__gas-edit-row'))
- })
-
- it('should call this.renderGasEditRow twice, with the expected args', () => {
- const renderGasEditRowSpyArgs = AdvancedTabContent.prototype.renderGasEditRow.args
- assert.equal(renderGasEditRowSpyArgs.length, 2)
- assert.deepEqual(renderGasEditRowSpyArgs[0].map(String), [{
- labelKey: 'gasPrice',
- value: 'mockGasLimit',
- onChange: () => 'mockOnChangeGasLimit',
- insufficientBalance: false,
- customPriceIsSafe: true,
- showGWEI: true,
- }].map(String))
- assert.deepEqual(renderGasEditRowSpyArgs[1].map(String), [{
- labelKey: 'gasPrice',
- value: 'mockGasPrice',
- onChange: () => 'mockUpdateCustomGasPriceReturn',
- insufficientBalance: false,
- customPriceIsSafe: true,
- showGWEI: true,
- }].map(String))
- })
- })
-
- describe('infoButton()', () => {
- let infoButton
-
- beforeEach(() => {
- AdvancedTabContent.prototype.renderGasEditRow.resetHistory()
- infoButton = shallow(wrapper.instance().infoButton(() => 'mockOnClickReturn'))
- })
-
- it('should render the i element', () => {
- assert(infoButton.hasClass('fa-info-circle'))
- })
-
- it('should pass the onClick argument to the i tag onClick prop', () => {
- assert(infoButton.props().onClick(), 'mockOnClickReturn')
- })
- })
-
- describe('gasInput()', () => {
- let gasInput
-
- beforeEach(() => {
- AdvancedTabContent.prototype.renderGasEditRow.resetHistory()
- AdvancedTabContent.prototype.gasInputError.resetHistory()
- gasInput = shallow(wrapper.instance().gasInput({
- labelKey: 'gasPrice',
- value: 321,
- onChange: value => value + 7,
- insufficientBalance: false,
- showGWEI: true,
- customPriceIsSafe: true,
- isSpeedUp: false,
- }))
- })
-
- it('should render the input-wrapper root node', () => {
- assert(gasInput.hasClass('advanced-tab__gas-edit-row__input-wrapper'))
- })
-
- it('should render two children, including an input', () => {
- assert.equal(gasInput.children().length, 2)
- assert(gasInput.children().at(0).hasClass('advanced-tab__gas-edit-row__input'))
- })
-
- it('should call the passed onChange method with the value of the input onChange event', () => {
- const inputOnChange = gasInput.find('input').props().onChange
- assert.equal(inputOnChange({ target: { value: 8} }), 15)
- })
-
- it('should have two input arrows', () => {
- const upArrow = gasInput.find('.fa-angle-up')
- assert.equal(upArrow.length, 1)
- const downArrow = gasInput.find('.fa-angle-down')
- assert.equal(downArrow.length, 1)
- })
-
- it('should call onChange with the value incremented decremented when its onchange method is called', () => {
- const upArrow = gasInput.find('.advanced-tab__gas-edit-row__input-arrows__i-wrap').at(0)
- assert.equal(upArrow.props().onClick(), 329)
- const downArrow = gasInput.find('.advanced-tab__gas-edit-row__input-arrows__i-wrap').at(1)
- assert.equal(downArrow.props().onClick(), 327)
- })
-
- it('should call gasInputError with the expected params', () => {
- assert.equal(AdvancedTabContent.prototype.gasInputError.callCount, 1)
- const gasInputErrorArgs = AdvancedTabContent.prototype.gasInputError.getCall(0).args
- assert.deepEqual(gasInputErrorArgs, [{
- labelKey: 'gasPrice',
- insufficientBalance: false,
- customPriceIsSafe: true,
- value: 321,
- isSpeedUp: false,
- }])
- })
- })
-
- describe('gasInputError()', () => {
- let gasInputError
-
- beforeEach(() => {
- AdvancedTabContent.prototype.renderGasEditRow.resetHistory()
- gasInputError = wrapper.instance().gasInputError({
- labelKey: '',
- insufficientBalance: false,
- customPriceIsSafe: true,
- isSpeedUp: false,
- })
- })
-
- it('should return an insufficientBalance error', () => {
- const gasInputError = wrapper.instance().gasInputError({
- labelKey: 'gasPrice',
- insufficientBalance: true,
- customPriceIsSafe: true,
- isSpeedUp: false,
- value: 1,
- })
- assert.deepEqual(gasInputError, {
- isInError: true,
- errorText: 'insufficientBalance',
- errorType: 'error',
- })
- })
-
- it('should return a zero gas on retry error', () => {
- const gasInputError = wrapper.instance().gasInputError({
- labelKey: 'gasPrice',
- insufficientBalance: false,
- customPriceIsSafe: false,
- isSpeedUp: true,
- value: 0,
- })
- assert.deepEqual(gasInputError, {
- isInError: true,
- errorText: 'zeroGasPriceOnSpeedUpError',
- errorType: 'error',
- })
- })
-
- it('should return a low gas warning', () => {
- const gasInputError = wrapper.instance().gasInputError({
- labelKey: 'gasPrice',
- insufficientBalance: false,
- customPriceIsSafe: false,
- isSpeedUp: false,
- value: 1,
- })
- assert.deepEqual(gasInputError, {
- isInError: true,
- errorText: 'gasPriceExtremelyLow',
- errorType: 'warning',
- })
- })
-
- it('should return isInError false if there is no error', () => {
- gasInputError = wrapper.instance().gasInputError({
- labelKey: 'gasPrice',
- insufficientBalance: false,
- customPriceIsSafe: true,
- value: 1,
- })
- assert.equal(gasInputError.isInError, false)
- })
- })
-
-})
diff --git a/ui/app/components/gas-customization/gas-modal-page-container/advanced-tab-content/time-remaining/index.js b/ui/app/components/gas-customization/gas-modal-page-container/advanced-tab-content/time-remaining/index.js
deleted file mode 100644
index 61b681e1a..000000000
--- a/ui/app/components/gas-customization/gas-modal-page-container/advanced-tab-content/time-remaining/index.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default } from './time-remaining.component'
diff --git a/ui/app/components/gas-customization/gas-modal-page-container/advanced-tab-content/time-remaining/index.scss b/ui/app/components/gas-customization/gas-modal-page-container/advanced-tab-content/time-remaining/index.scss
deleted file mode 100644
index e2115af7f..000000000
--- a/ui/app/components/gas-customization/gas-modal-page-container/advanced-tab-content/time-remaining/index.scss
+++ /dev/null
@@ -1,17 +0,0 @@
-.time-remaining {
- color: #313A5E;
- font-size: 16px;
-
- .minutes-num, .seconds-num {
- font-size: 16px;
- }
-
- .seconds-num {
- margin-left: 7px;
- font-size: 16px;
- }
-
- .minutes-label, .seconds-label {
- font-size: 16px;
- }
-} \ No newline at end of file
diff --git a/ui/app/components/gas-customization/gas-modal-page-container/advanced-tab-content/time-remaining/tests/time-remaining-component.test.js b/ui/app/components/gas-customization/gas-modal-page-container/advanced-tab-content/time-remaining/tests/time-remaining-component.test.js
deleted file mode 100644
index d8490272f..000000000
--- a/ui/app/components/gas-customization/gas-modal-page-container/advanced-tab-content/time-remaining/tests/time-remaining-component.test.js
+++ /dev/null
@@ -1,30 +0,0 @@
-import React from 'react'
-import assert from 'assert'
-import shallow from '../../../../../../../lib/shallow-with-context'
-import TimeRemaining from '../time-remaining.component.js'
-
-describe('TimeRemaining Component', function () {
- let wrapper
-
- beforeEach(() => {
- wrapper = shallow(<TimeRemaining
- milliseconds={495000}
- />)
- })
-
- describe('render()', () => {
- it('should render the time-remaining root node', () => {
- assert(wrapper.hasClass('time-remaining'))
- })
-
- it('should render minutes and seconds numbers and labels', () => {
- const timeRemainingChildren = wrapper.children()
- assert.equal(timeRemainingChildren.length, 4)
- assert.equal(timeRemainingChildren.at(0).text(), 8)
- assert.equal(timeRemainingChildren.at(1).text(), 'minutesShorthand')
- assert.equal(timeRemainingChildren.at(2).text(), 15)
- assert.equal(timeRemainingChildren.at(3).text(), 'secondsShorthand')
- })
- })
-
-})
diff --git a/ui/app/components/gas-customization/gas-modal-page-container/advanced-tab-content/time-remaining/time-remaining.component.js b/ui/app/components/gas-customization/gas-modal-page-container/advanced-tab-content/time-remaining/time-remaining.component.js
deleted file mode 100644
index 826d41f9c..000000000
--- a/ui/app/components/gas-customization/gas-modal-page-container/advanced-tab-content/time-remaining/time-remaining.component.js
+++ /dev/null
@@ -1,33 +0,0 @@
-import React, { Component } from 'react'
-import PropTypes from 'prop-types'
-import { getTimeBreakdown } from './time-remaining.utils'
-
-export default class TimeRemaining extends Component {
- static contextTypes = {
- t: PropTypes.func,
- }
-
- static propTypes = {
- milliseconds: PropTypes.number,
- }
-
- render () {
- const {
- milliseconds,
- } = this.props
-
- const {
- minutes,
- seconds,
- } = getTimeBreakdown(milliseconds)
-
- return (
- <div className="time-remaining">
- <span className="minutes-num">{minutes}</span>
- <span className="minutes-label">{this.context.t('minutesShorthand')}</span>
- <span className="seconds-num">{seconds}</span>
- <span className="seconds-label">{this.context.t('secondsShorthand')}</span>
- </div>
- )
- }
-}
diff --git a/ui/app/components/gas-customization/gas-modal-page-container/advanced-tab-content/time-remaining/time-remaining.utils.js b/ui/app/components/gas-customization/gas-modal-page-container/advanced-tab-content/time-remaining/time-remaining.utils.js
deleted file mode 100644
index cf43e0acb..000000000
--- a/ui/app/components/gas-customization/gas-modal-page-container/advanced-tab-content/time-remaining/time-remaining.utils.js
+++ /dev/null
@@ -1,11 +0,0 @@
-function getTimeBreakdown (milliseconds) {
- return {
- hours: Math.floor(milliseconds / 3600000),
- minutes: Math.floor((milliseconds % 3600000) / 60000),
- seconds: Math.floor((milliseconds % 60000) / 1000),
- }
-}
-
-module.exports = {
- getTimeBreakdown,
-}
diff --git a/ui/app/components/gas-customization/gas-modal-page-container/basic-tab-content/basic-tab-content.component.js b/ui/app/components/gas-customization/gas-modal-page-container/basic-tab-content/basic-tab-content.component.js
deleted file mode 100644
index 05b8f700b..000000000
--- a/ui/app/components/gas-customization/gas-modal-page-container/basic-tab-content/basic-tab-content.component.js
+++ /dev/null
@@ -1,35 +0,0 @@
-import React, { Component } from 'react'
-import PropTypes from 'prop-types'
-import Loading from '../../../loading-screen'
-import GasPriceButtonGroup from '../../gas-price-button-group'
-
-export default class BasicTabContent extends Component {
- static contextTypes = {
- t: PropTypes.func,
- }
-
- static propTypes = {
- gasPriceButtonGroupProps: PropTypes.object,
- }
-
- render () {
- const { t } = this.context
- const { gasPriceButtonGroupProps } = this.props
-
- return (
- <div className="basic-tab-content">
- <div className="basic-tab-content__title">{ t('estimatedProcessingTimes') }</div>
- <div className="basic-tab-content__blurb">{ t('selectAHigherGasFee') }</div>
- {!gasPriceButtonGroupProps.loading
- ? <GasPriceButtonGroup
- className="gas-price-button-group--alt"
- showCheck={true}
- {...gasPriceButtonGroupProps}
- />
- : <Loading />
- }
- <div className="basic-tab-content__footer-blurb">{ t('acceleratingATransaction') }</div>
- </div>
- )
- }
-}
diff --git a/ui/app/components/gas-customization/gas-modal-page-container/basic-tab-content/index.js b/ui/app/components/gas-customization/gas-modal-page-container/basic-tab-content/index.js
deleted file mode 100644
index 078d50fce..000000000
--- a/ui/app/components/gas-customization/gas-modal-page-container/basic-tab-content/index.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default } from './basic-tab-content.component'
diff --git a/ui/app/components/gas-customization/gas-modal-page-container/basic-tab-content/index.scss b/ui/app/components/gas-customization/gas-modal-page-container/basic-tab-content/index.scss
deleted file mode 100644
index e34e4e328..000000000
--- a/ui/app/components/gas-customization/gas-modal-page-container/basic-tab-content/index.scss
+++ /dev/null
@@ -1,28 +0,0 @@
-.basic-tab-content {
- display: flex;
- flex-direction: column;
- align-items: flex-start;
- padding-left: 21px;
- height: 324px;
- background: #F5F7F8;
- border-bottom: 1px solid #d2d8dd;
-
- &__title {
- margin-top: 19px;
- font-size: 16px;
- color: $black;
- }
-
- &__blurb {
- font-size: 12px;
- color: $black;
- margin-top: 5px;
- margin-bottom: 15px;
- }
-
- &__footer-blurb {
- font-size: 12px;
- color: #979797;
- margin-top: 15px;
- }
-}
diff --git a/ui/app/components/gas-customization/gas-modal-page-container/basic-tab-content/tests/basic-tab-content-component.test.js b/ui/app/components/gas-customization/gas-modal-page-container/basic-tab-content/tests/basic-tab-content-component.test.js
deleted file mode 100644
index 47864fcab..000000000
--- a/ui/app/components/gas-customization/gas-modal-page-container/basic-tab-content/tests/basic-tab-content-component.test.js
+++ /dev/null
@@ -1,82 +0,0 @@
-import React from 'react'
-import assert from 'assert'
-import shallow from '../../../../../../lib/shallow-with-context'
-import BasicTabContent from '../basic-tab-content.component'
-
-import GasPriceButtonGroup from '../../../gas-price-button-group/'
-import Loading from '../../../../loading-screen'
-
-const mockGasPriceButtonGroupProps = {
- buttonDataLoading: false,
- className: 'gas-price-button-group',
- gasButtonInfo: [
- {
- feeInPrimaryCurrency: '$0.52',
- feeInSecondaryCurrency: '0.0048 ETH',
- timeEstimate: '~ 1 min 0 sec',
- priceInHexWei: '0xa1b2c3f',
- },
- {
- feeInPrimaryCurrency: '$0.39',
- feeInSecondaryCurrency: '0.004 ETH',
- timeEstimate: '~ 1 min 30 sec',
- priceInHexWei: '0xa1b2c39',
- },
- {
- feeInPrimaryCurrency: '$0.30',
- feeInSecondaryCurrency: '0.00354 ETH',
- timeEstimate: '~ 2 min 1 sec',
- priceInHexWei: '0xa1b2c30',
- },
- ],
- handleGasPriceSelection: newPrice => console.log('NewPrice: ', newPrice),
- noButtonActiveByDefault: true,
- showCheck: true,
-}
-
-describe('BasicTabContent Component', function () {
- let wrapper
-
- beforeEach(() => {
- wrapper = shallow(<BasicTabContent
- gasPriceButtonGroupProps={mockGasPriceButtonGroupProps}
- />)
- })
-
- describe('render', () => {
- it('should have a title', () => {
- assert(wrapper.find('.basic-tab-content').childAt(0).hasClass('basic-tab-content__title'))
- })
-
- it('should render a GasPriceButtonGroup compenent', () => {
- assert.equal(wrapper.find(GasPriceButtonGroup).length, 1)
- })
-
- it('should pass correct props to GasPriceButtonGroup', () => {
- const {
- buttonDataLoading,
- className,
- gasButtonInfo,
- handleGasPriceSelection,
- noButtonActiveByDefault,
- showCheck,
- } = wrapper.find(GasPriceButtonGroup).props()
- assert.equal(wrapper.find(GasPriceButtonGroup).length, 1)
- assert.equal(buttonDataLoading, mockGasPriceButtonGroupProps.buttonDataLoading)
- assert.equal(className, mockGasPriceButtonGroupProps.className)
- assert.equal(noButtonActiveByDefault, mockGasPriceButtonGroupProps.noButtonActiveByDefault)
- assert.equal(showCheck, mockGasPriceButtonGroupProps.showCheck)
- assert.deepEqual(gasButtonInfo, mockGasPriceButtonGroupProps.gasButtonInfo)
- assert.equal(JSON.stringify(handleGasPriceSelection), JSON.stringify(mockGasPriceButtonGroupProps.handleGasPriceSelection))
- })
-
- it('should render a loading component instead of the GasPriceButtonGroup if gasPriceButtonGroupProps.loading is true', () => {
- wrapper.setProps({
- gasPriceButtonGroupProps: { ...mockGasPriceButtonGroupProps, loading: true },
- })
-
- assert.equal(wrapper.find(GasPriceButtonGroup).length, 0)
- assert.equal(wrapper.find(Loading).length, 1)
- })
- })
-})
diff --git a/ui/app/components/gas-customization/gas-modal-page-container/gas-modal-page-container.component.js b/ui/app/components/gas-customization/gas-modal-page-container/gas-modal-page-container.component.js
deleted file mode 100644
index 174bd8ea8..000000000
--- a/ui/app/components/gas-customization/gas-modal-page-container/gas-modal-page-container.component.js
+++ /dev/null
@@ -1,186 +0,0 @@
-import React, { Component } from 'react'
-import PropTypes from 'prop-types'
-import PageContainer from '../../page-container'
-import { Tabs, Tab } from '../../tabs'
-import AdvancedTabContent from './advanced-tab-content'
-import BasicTabContent from './basic-tab-content'
-
-export default class GasModalPageContainer extends Component {
- static contextTypes = {
- t: PropTypes.func,
- }
-
- static propTypes = {
- hideModal: PropTypes.func,
- hideBasic: PropTypes.bool,
- updateCustomGasPrice: PropTypes.func,
- updateCustomGasLimit: PropTypes.func,
- customGasPrice: PropTypes.number,
- customGasLimit: PropTypes.number,
- fetchBasicGasAndTimeEstimates: PropTypes.func,
- fetchGasEstimates: PropTypes.func,
- gasPriceButtonGroupProps: PropTypes.object,
- infoRowProps: PropTypes.shape({
- originalTotalFiat: PropTypes.string,
- originalTotalEth: PropTypes.string,
- newTotalFiat: PropTypes.string,
- newTotalEth: PropTypes.string,
- }),
- onSubmit: PropTypes.func,
- customModalGasPriceInHex: PropTypes.string,
- customModalGasLimitInHex: PropTypes.string,
- cancelAndClose: PropTypes.func,
- transactionFee: PropTypes.string,
- blockTime: PropTypes.oneOfType([
- PropTypes.string,
- PropTypes.number,
- ]),
- customPriceIsSafe: PropTypes.bool,
- isSpeedUp: PropTypes.bool,
- disableSave: PropTypes.bool,
- }
-
- state = {}
-
- componentDidMount () {
- const promise = this.props.hideBasic
- ? Promise.resolve(this.props.blockTime)
- : this.props.fetchBasicGasAndTimeEstimates()
- .then(basicEstimates => basicEstimates.blockTime)
-
- promise
- .then(blockTime => {
- this.props.fetchGasEstimates(blockTime)
- })
- }
-
- renderBasicTabContent (gasPriceButtonGroupProps) {
- return (
- <BasicTabContent
- gasPriceButtonGroupProps={gasPriceButtonGroupProps}
- />
- )
- }
-
- renderAdvancedTabContent ({
- convertThenUpdateCustomGasPrice,
- convertThenUpdateCustomGasLimit,
- customGasPrice,
- customGasLimit,
- newTotalFiat,
- gasChartProps,
- currentTimeEstimate,
- insufficientBalance,
- gasEstimatesLoading,
- customPriceIsSafe,
- isSpeedUp,
- transactionFee,
- }) {
- return (
- <AdvancedTabContent
- updateCustomGasPrice={convertThenUpdateCustomGasPrice}
- updateCustomGasLimit={convertThenUpdateCustomGasLimit}
- customGasPrice={customGasPrice}
- customGasLimit={customGasLimit}
- timeRemaining={currentTimeEstimate}
- transactionFee={transactionFee}
- totalFee={newTotalFiat}
- gasChartProps={gasChartProps}
- insufficientBalance={insufficientBalance}
- gasEstimatesLoading={gasEstimatesLoading}
- customPriceIsSafe={customPriceIsSafe}
- isSpeedUp={isSpeedUp}
- />
- )
- }
-
- renderInfoRows (newTotalFiat, newTotalEth, sendAmount, transactionFee) {
- return (
- <div className="gas-modal-content__info-row-wrapper">
- <div className="gas-modal-content__info-row">
- <div className="gas-modal-content__info-row__send-info">
- <span className="gas-modal-content__info-row__send-info__label">{this.context.t('sendAmount')}</span>
- <span className="gas-modal-content__info-row__send-info__value">{sendAmount}</span>
- </div>
- <div className="gas-modal-content__info-row__transaction-info">
- <span className={'gas-modal-content__info-row__transaction-info__label'}>{this.context.t('transactionFee')}</span>
- <span className="gas-modal-content__info-row__transaction-info__value">{transactionFee}</span>
- </div>
- <div className="gas-modal-content__info-row__total-info">
- <span className="gas-modal-content__info-row__total-info__label">{this.context.t('newTotal')}</span>
- <span className="gas-modal-content__info-row__total-info__value">{newTotalEth}</span>
- </div>
- <div className="gas-modal-content__info-row__fiat-total-info">
- <span className="gas-modal-content__info-row__fiat-total-info__value">{newTotalFiat}</span>
- </div>
- </div>
- </div>
- )
- }
-
- renderTabs ({
- originalTotalFiat,
- originalTotalEth,
- newTotalFiat,
- newTotalEth,
- sendAmount,
- transactionFee,
- },
- {
- gasPriceButtonGroupProps,
- hideBasic,
- ...advancedTabProps
- }) {
- let tabsToRender = [
- { name: 'basic', content: this.renderBasicTabContent(gasPriceButtonGroupProps) },
- { name: 'advanced', content: this.renderAdvancedTabContent({ transactionFee, ...advancedTabProps }) },
- ]
-
- if (hideBasic) {
- tabsToRender = tabsToRender.slice(1)
- }
-
- return (
- <Tabs>
- {tabsToRender.map(({ name, content }, i) => <Tab name={this.context.t(name)} key={`gas-modal-tab-${i}`}>
- <div className="gas-modal-content">
- { content }
- { this.renderInfoRows(newTotalFiat, newTotalEth, sendAmount, transactionFee) }
- </div>
- </Tab>
- )}
- </Tabs>
- )
- }
-
- render () {
- const {
- cancelAndClose,
- infoRowProps,
- onSubmit,
- customModalGasPriceInHex,
- customModalGasLimitInHex,
- disableSave,
- ...tabProps
- } = this.props
-
- return (
- <div className="gas-modal-page-container">
- <PageContainer
- title={this.context.t('customGas')}
- subtitle={this.context.t('customGasSubTitle')}
- tabsComponent={this.renderTabs(infoRowProps, tabProps)}
- disabled={disableSave}
- onCancel={() => cancelAndClose()}
- onClose={() => cancelAndClose()}
- onSubmit={() => {
- onSubmit(customModalGasLimitInHex, customModalGasPriceInHex)
- }}
- submitText={this.context.t('save')}
- headerCloseText={'Close'}
- hideCancel={true}
- />
- </div>
- )
- }
-}
diff --git a/ui/app/components/gas-customization/gas-modal-page-container/gas-modal-page-container.container.js b/ui/app/components/gas-customization/gas-modal-page-container/gas-modal-page-container.container.js
deleted file mode 100644
index 6692fb363..000000000
--- a/ui/app/components/gas-customization/gas-modal-page-container/gas-modal-page-container.container.js
+++ /dev/null
@@ -1,291 +0,0 @@
-import { connect } from 'react-redux'
-import { pipe, partialRight } from 'ramda'
-import GasModalPageContainer from './gas-modal-page-container.component'
-import {
- hideModal,
- setGasLimit,
- setGasPrice,
- createSpeedUpTransaction,
- hideSidebar,
-} from '../../../actions'
-import {
- setCustomGasPrice,
- setCustomGasLimit,
- resetCustomData,
- setCustomTimeEstimate,
- fetchGasEstimates,
- fetchBasicGasAndTimeEstimates,
-} from '../../../ducks/gas.duck'
-import {
- hideGasButtonGroup,
-} from '../../../ducks/send.duck'
-import {
- updateGasAndCalculate,
-} from '../../../ducks/confirm-transaction.duck'
-import {
- getCurrentCurrency,
- conversionRateSelector as getConversionRate,
- getSelectedToken,
- getCurrentEthBalance,
-} from '../../../selectors.js'
-import {
- formatTimeEstimate,
- getFastPriceEstimateInHexWEI,
- getBasicGasEstimateLoadingStatus,
- getGasEstimatesLoadingStatus,
- getCustomGasLimit,
- getCustomGasPrice,
- getDefaultActiveButtonIndex,
- getEstimatedGasPrices,
- getEstimatedGasTimes,
- getRenderableBasicEstimateData,
- getBasicGasEstimateBlockTime,
- isCustomPriceSafe,
-} from '../../../selectors/custom-gas'
-import {
- submittedPendingTransactionsSelector,
-} from '../../../selectors/transactions'
-import {
- formatCurrency,
-} from '../../../helpers/confirm-transaction/util'
-import {
- addHexWEIsToDec,
- decEthToConvertedCurrency as ethTotalToConvertedCurrency,
- decGWEIToHexWEI,
- hexWEIToDecGWEI,
-} from '../../../helpers/conversions.util'
-import {
- formatETHFee,
-} from '../../../helpers/formatters'
-import {
- calcGasTotal,
- isBalanceSufficient,
-} from '../../send/send.utils'
-import { addHexPrefix } from 'ethereumjs-util'
-import { getAdjacentGasPrices, extrapolateY } from '../gas-price-chart/gas-price-chart.utils'
-import {getIsMainnet, preferencesSelector} from '../../../selectors'
-
-const mapStateToProps = (state, ownProps) => {
- const { transaction = {} } = ownProps
- const buttonDataLoading = getBasicGasEstimateLoadingStatus(state)
- const gasEstimatesLoading = getGasEstimatesLoadingStatus(state)
-
- const { gasPrice: currentGasPrice, gas: currentGasLimit, value } = getTxParams(state, transaction.id)
- const customModalGasPriceInHex = getCustomGasPrice(state) || currentGasPrice
- const customModalGasLimitInHex = getCustomGasLimit(state) || currentGasLimit
- const gasTotal = calcGasTotal(customModalGasLimitInHex, customModalGasPriceInHex)
-
- const customGasTotal = calcGasTotal(customModalGasLimitInHex, customModalGasPriceInHex)
-
- const gasButtonInfo = getRenderableBasicEstimateData(state, customModalGasLimitInHex)
-
- const currentCurrency = getCurrentCurrency(state)
- const conversionRate = getConversionRate(state)
-
- const newTotalFiat = addHexWEIsToRenderableFiat(value, customGasTotal, currentCurrency, conversionRate)
-
- const hideBasic = state.appState.modal.modalState.props.hideBasic
-
- const customGasPrice = calcCustomGasPrice(customModalGasPriceInHex)
-
- const gasPrices = getEstimatedGasPrices(state)
- const estimatedTimes = getEstimatedGasTimes(state)
- const balance = getCurrentEthBalance(state)
-
- const { showFiatInTestnets } = preferencesSelector(state)
- const isMainnet = getIsMainnet(state)
- const showFiat = Boolean(isMainnet || showFiatInTestnets)
-
- const insufficientBalance = !isBalanceSufficient({
- amount: value,
- gasTotal,
- balance,
- conversionRate,
- })
-
- return {
- hideBasic,
- isConfirm: isConfirm(state),
- customModalGasPriceInHex,
- customModalGasLimitInHex,
- customGasPrice,
- customGasLimit: calcCustomGasLimit(customModalGasLimitInHex),
- newTotalFiat,
- currentTimeEstimate: getRenderableTimeEstimate(customGasPrice, gasPrices, estimatedTimes),
- blockTime: getBasicGasEstimateBlockTime(state),
- customPriceIsSafe: isCustomPriceSafe(state),
- gasPriceButtonGroupProps: {
- buttonDataLoading,
- defaultActiveButtonIndex: getDefaultActiveButtonIndex(gasButtonInfo, customModalGasPriceInHex),
- gasButtonInfo,
- },
- gasChartProps: {
- currentPrice: customGasPrice,
- gasPrices,
- estimatedTimes,
- gasPricesMax: gasPrices[gasPrices.length - 1],
- estimatedTimesMax: estimatedTimes[0],
- },
- infoRowProps: {
- originalTotalFiat: addHexWEIsToRenderableFiat(value, gasTotal, currentCurrency, conversionRate),
- originalTotalEth: addHexWEIsToRenderableEth(value, gasTotal),
- newTotalFiat: showFiat ? newTotalFiat : '',
- newTotalEth: addHexWEIsToRenderableEth(value, customGasTotal),
- transactionFee: addHexWEIsToRenderableEth('0x0', customGasTotal),
- sendAmount: addHexWEIsToRenderableEth(value, '0x0'),
- },
- isSpeedUp: transaction.status === 'submitted',
- txId: transaction.id,
- insufficientBalance,
- gasEstimatesLoading,
- }
-}
-
-const mapDispatchToProps = dispatch => {
- const updateCustomGasPrice = newPrice => dispatch(setCustomGasPrice(addHexPrefix(newPrice)))
-
- return {
- cancelAndClose: () => {
- dispatch(resetCustomData())
- dispatch(hideModal())
- },
- hideModal: () => dispatch(hideModal()),
- updateCustomGasPrice,
- convertThenUpdateCustomGasPrice: newPrice => updateCustomGasPrice(decGWEIToHexWEI(newPrice)),
- convertThenUpdateCustomGasLimit: newLimit => dispatch(setCustomGasLimit(addHexPrefix(newLimit.toString(16)))),
- setGasData: (newLimit, newPrice) => {
- dispatch(setGasLimit(newLimit))
- dispatch(setGasPrice(newPrice))
- },
- updateConfirmTxGasAndCalculate: (gasLimit, gasPrice) => {
- updateCustomGasPrice(gasPrice)
- dispatch(setCustomGasLimit(addHexPrefix(gasLimit.toString(16))))
- return dispatch(updateGasAndCalculate({ gasLimit, gasPrice }))
- },
- createSpeedUpTransaction: (txId, gasPrice) => {
- return dispatch(createSpeedUpTransaction(txId, gasPrice))
- },
- hideGasButtonGroup: () => dispatch(hideGasButtonGroup()),
- setCustomTimeEstimate: (timeEstimateInSeconds) => dispatch(setCustomTimeEstimate(timeEstimateInSeconds)),
- hideSidebar: () => dispatch(hideSidebar()),
- fetchGasEstimates: (blockTime) => dispatch(fetchGasEstimates(blockTime)),
- fetchBasicGasAndTimeEstimates: () => dispatch(fetchBasicGasAndTimeEstimates()),
- }
-}
-
-const mergeProps = (stateProps, dispatchProps, ownProps) => {
- const { gasPriceButtonGroupProps, isConfirm, txId, isSpeedUp, insufficientBalance, customGasPrice } = stateProps
- const {
- updateCustomGasPrice: dispatchUpdateCustomGasPrice,
- hideGasButtonGroup: dispatchHideGasButtonGroup,
- setGasData: dispatchSetGasData,
- updateConfirmTxGasAndCalculate: dispatchUpdateConfirmTxGasAndCalculate,
- createSpeedUpTransaction: dispatchCreateSpeedUpTransaction,
- hideSidebar: dispatchHideSidebar,
- cancelAndClose: dispatchCancelAndClose,
- hideModal: dispatchHideModal,
- ...otherDispatchProps
- } = dispatchProps
-
- return {
- ...stateProps,
- ...otherDispatchProps,
- ...ownProps,
- onSubmit: (gasLimit, gasPrice) => {
- if (isConfirm) {
- dispatchUpdateConfirmTxGasAndCalculate(gasLimit, gasPrice)
- dispatchHideModal()
- } else if (isSpeedUp) {
- dispatchCreateSpeedUpTransaction(txId, gasPrice)
- dispatchHideSidebar()
- dispatchCancelAndClose()
- } else {
- dispatchSetGasData(gasLimit, gasPrice)
- dispatchHideGasButtonGroup()
- dispatchCancelAndClose()
- }
- },
- gasPriceButtonGroupProps: {
- ...gasPriceButtonGroupProps,
- handleGasPriceSelection: dispatchUpdateCustomGasPrice,
- },
- cancelAndClose: () => {
- dispatchCancelAndClose()
- if (isSpeedUp) {
- dispatchHideSidebar()
- }
- },
- disableSave: insufficientBalance || (isSpeedUp && customGasPrice === 0),
- }
-}
-
-export default connect(mapStateToProps, mapDispatchToProps, mergeProps)(GasModalPageContainer)
-
-function isConfirm (state) {
- return Boolean(Object.keys(state.confirmTransaction.txData).length)
-}
-
-function calcCustomGasPrice (customGasPriceInHex) {
- return Number(hexWEIToDecGWEI(customGasPriceInHex))
-}
-
-function calcCustomGasLimit (customGasLimitInHex) {
- return parseInt(customGasLimitInHex, 16)
-}
-
-function getTxParams (state, transactionId) {
- const { confirmTransaction: { txData }, metamask: { send } } = state
- const pendingTransactions = submittedPendingTransactionsSelector(state)
- const pendingTransaction = pendingTransactions.find(({ id }) => id === transactionId)
- const { txParams: pendingTxParams } = pendingTransaction || {}
- return txData.txParams || pendingTxParams || {
- from: send.from,
- gas: send.gasLimit || '0x5208',
- gasPrice: send.gasPrice || getFastPriceEstimateInHexWEI(state, true),
- to: send.to,
- value: getSelectedToken(state) ? '0x0' : send.amount,
- }
-}
-
-function addHexWEIsToRenderableEth (aHexWEI, bHexWEI) {
- return pipe(
- addHexWEIsToDec,
- formatETHFee
- )(aHexWEI, bHexWEI)
-}
-
-function addHexWEIsToRenderableFiat (aHexWEI, bHexWEI, convertedCurrency, conversionRate) {
- return pipe(
- addHexWEIsToDec,
- partialRight(ethTotalToConvertedCurrency, [convertedCurrency, conversionRate]),
- partialRight(formatCurrency, [convertedCurrency]),
- )(aHexWEI, bHexWEI)
-}
-
-function getRenderableTimeEstimate (currentGasPrice, gasPrices, estimatedTimes) {
- const minGasPrice = gasPrices[0]
- const maxGasPrice = gasPrices[gasPrices.length - 1]
- let priceForEstimation = currentGasPrice
- if (currentGasPrice < minGasPrice) {
- priceForEstimation = minGasPrice
- } else if (currentGasPrice > maxGasPrice) {
- priceForEstimation = maxGasPrice
- }
-
- const {
- closestLowerValueIndex,
- closestHigherValueIndex,
- closestHigherValue,
- closestLowerValue,
- } = getAdjacentGasPrices({ gasPrices, priceToPosition: priceForEstimation })
-
- const newTimeEstimate = extrapolateY({
- higherY: estimatedTimes[closestHigherValueIndex],
- lowerY: estimatedTimes[closestLowerValueIndex],
- higherX: closestHigherValue,
- lowerX: closestLowerValue,
- xForExtrapolation: priceForEstimation,
- })
-
- return formatTimeEstimate(newTimeEstimate, currentGasPrice > maxGasPrice, currentGasPrice < minGasPrice)
-}
diff --git a/ui/app/components/gas-customization/gas-modal-page-container/index.js b/ui/app/components/gas-customization/gas-modal-page-container/index.js
deleted file mode 100644
index ec0ebad22..000000000
--- a/ui/app/components/gas-customization/gas-modal-page-container/index.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default } from './gas-modal-page-container.container'
diff --git a/ui/app/components/gas-customization/gas-modal-page-container/index.scss b/ui/app/components/gas-customization/gas-modal-page-container/index.scss
deleted file mode 100644
index b9e0f59c4..000000000
--- a/ui/app/components/gas-customization/gas-modal-page-container/index.scss
+++ /dev/null
@@ -1,146 +0,0 @@
-@import './advanced-tab-content/index';
-@import './basic-tab-content/index';
-
-.gas-modal-page-container {
- .page-container {
- max-width: 391px;
- min-height: 585px;
- overflow-y: initial;
-
- @media screen and (max-width: $break-small) {
- &__content {
- display: flex;
- overflow-y: initial;
- }
- }
-
- &__header {
- padding: 0px;
- padding-top: 16px;
-
- &--no-padding-bottom {
- padding-bottom: 0;
- }
- }
-
- &__footer {
- header {
- padding-top: 12px;
- padding-bottom: 12px;
- }
- }
-
- &__header-close-text {
- font-size: 14px;
- color: #4EADE7;
- position: absolute;
- top: 16px;
- right: 16px;
- cursor: pointer;
- overflow: hidden;
- }
-
- &__title {
- color: $black;
- font-size: 16px;
- font-weight: 500;
- line-height: 16px;
- display: flex;
- justify-content: center;
- align-items: flex-start;
- margin-right: 0;
- }
-
- &__subtitle {
- display: none;
- }
-
- &__tabs {
- margin-top: 0px;
- }
-
- &__tab {
- width: 100%;
- font-size: 14px;
-
- &:last-of-type {
- margin-right: 0;
- }
-
- &--selected {
- color: $curious-blue;
- border-bottom: 2px solid $curious-blue;
- }
- }
- }
-}
-
-.gas-modal-content {
- @media screen and (max-width: $break-small) {
- width: 100%;
- }
-
- &__basic-tab {
- height: 219px;
- }
-
-
- &__info-row, &__info-row--fade {
- width: 100%;
- background: $polar;
- padding: 15px 21px;
- display: flex;
- flex-flow: column;
- color: $scorpion;
- font-size: 12px;
-
- @media screen and (max-width: $break-small) {
- padding: 4px 21px;
- }
-
- &__send-info, &__transaction-info, &__total-info, &__fiat-total-info {
- display: flex;
- flex-flow: row;
- justify-content: space-between;
- }
-
- &__fiat-total-info {
- justify-content: flex-end;
- }
-
- &__total-info {
- &__label {
- font-size: 16px;
-
- @media screen and (max-width: $break-small) {
- font-size: 14px;
- }
- }
-
- &__value {
- font-size: 16px;
- font-weight: bold;
-
- @media screen and (max-width: $break-small) {
- font-size: 14px;
- }
- }
- }
-
- &__transaction-info, &__send-info {
- &__label {
- font-size: 12px;
- }
-
- &__value {
- font-size: 14px;
- }
- }
- }
-
- &__info-row--fade {
- background: white;
- color: $dusty-gray;
- border-top: 1px solid $mischka;
- }
-}
diff --git a/ui/app/components/gas-customization/gas-modal-page-container/tests/gas-modal-page-container-component.test.js b/ui/app/components/gas-customization/gas-modal-page-container/tests/gas-modal-page-container-component.test.js
deleted file mode 100644
index 1761ad2b0..000000000
--- a/ui/app/components/gas-customization/gas-modal-page-container/tests/gas-modal-page-container-component.test.js
+++ /dev/null
@@ -1,274 +0,0 @@
-import React from 'react'
-import assert from 'assert'
-import shallow from '../../../../../lib/shallow-with-context'
-import sinon from 'sinon'
-import GasModalPageContainer from '../gas-modal-page-container.component.js'
-import timeout from '../../../../../lib/test-timeout'
-
-import PageContainer from '../../../page-container'
-
-import { Tab } from '../../../tabs'
-
-const mockBasicGasEstimates = {
- blockTime: 'mockBlockTime',
-}
-
-const propsMethodSpies = {
- cancelAndClose: sinon.spy(),
- onSubmit: sinon.spy(),
- fetchBasicGasAndTimeEstimates: sinon.stub().returns(Promise.resolve(mockBasicGasEstimates)),
- fetchGasEstimates: sinon.spy(),
-}
-
-const mockGasPriceButtonGroupProps = {
- buttonDataLoading: false,
- className: 'gas-price-button-group',
- gasButtonInfo: [
- {
- feeInPrimaryCurrency: '$0.52',
- feeInSecondaryCurrency: '0.0048 ETH',
- timeEstimate: '~ 1 min 0 sec',
- priceInHexWei: '0xa1b2c3f',
- },
- {
- feeInPrimaryCurrency: '$0.39',
- feeInSecondaryCurrency: '0.004 ETH',
- timeEstimate: '~ 1 min 30 sec',
- priceInHexWei: '0xa1b2c39',
- },
- {
- feeInPrimaryCurrency: '$0.30',
- feeInSecondaryCurrency: '0.00354 ETH',
- timeEstimate: '~ 2 min 1 sec',
- priceInHexWei: '0xa1b2c30',
- },
- ],
- handleGasPriceSelection: 'mockSelectionFunction',
- noButtonActiveByDefault: true,
- showCheck: true,
- newTotalFiat: 'mockNewTotalFiat',
- newTotalEth: 'mockNewTotalEth',
-}
-const mockInfoRowProps = {
- originalTotalFiat: 'mockOriginalTotalFiat',
- originalTotalEth: 'mockOriginalTotalEth',
- newTotalFiat: 'mockNewTotalFiat',
- newTotalEth: 'mockNewTotalEth',
- sendAmount: 'mockSendAmount',
- transactionFee: 'mockTransactionFee',
-}
-
-const GP = GasModalPageContainer.prototype
-describe('GasModalPageContainer Component', function () {
- let wrapper
-
- beforeEach(() => {
- wrapper = shallow(<GasModalPageContainer
- cancelAndClose={propsMethodSpies.cancelAndClose}
- onSubmit={propsMethodSpies.onSubmit}
- fetchBasicGasAndTimeEstimates={propsMethodSpies.fetchBasicGasAndTimeEstimates}
- fetchGasEstimates={propsMethodSpies.fetchGasEstimates}
- updateCustomGasPrice={() => 'mockupdateCustomGasPrice'}
- updateCustomGasLimit={() => 'mockupdateCustomGasLimit'}
- customGasPrice={21}
- customGasLimit={54321}
- gasPriceButtonGroupProps={mockGasPriceButtonGroupProps}
- infoRowProps={mockInfoRowProps}
- currentTimeEstimate={'1 min 31 sec'}
- customGasPriceInHex={'mockCustomGasPriceInHex'}
- customGasLimitInHex={'mockCustomGasLimitInHex'}
- insufficientBalance={false}
- disableSave={false}
- />, { context: { t: (str1, str2) => str2 ? str1 + str2 : str1 } })
- })
-
- afterEach(() => {
- propsMethodSpies.cancelAndClose.resetHistory()
- })
-
- describe('componentDidMount', () => {
- it('should call props.fetchBasicGasAndTimeEstimates', () => {
- propsMethodSpies.fetchBasicGasAndTimeEstimates.resetHistory()
- assert.equal(propsMethodSpies.fetchBasicGasAndTimeEstimates.callCount, 0)
- wrapper.instance().componentDidMount()
- assert.equal(propsMethodSpies.fetchBasicGasAndTimeEstimates.callCount, 1)
- })
-
- it('should call props.fetchGasEstimates with the block time returned by fetchBasicGasAndTimeEstimates', async () => {
- propsMethodSpies.fetchGasEstimates.resetHistory()
- assert.equal(propsMethodSpies.fetchGasEstimates.callCount, 0)
- wrapper.instance().componentDidMount()
- await timeout(250)
- assert.equal(propsMethodSpies.fetchGasEstimates.callCount, 1)
- assert.equal(propsMethodSpies.fetchGasEstimates.getCall(0).args[0], 'mockBlockTime')
- })
- })
-
- describe('render', () => {
- it('should render a PageContainer compenent', () => {
- assert.equal(wrapper.find(PageContainer).length, 1)
- })
-
- it('should pass correct props to PageContainer', () => {
- const {
- title,
- subtitle,
- disabled,
- } = wrapper.find(PageContainer).props()
- assert.equal(title, 'customGas')
- assert.equal(subtitle, 'customGasSubTitle')
- assert.equal(disabled, false)
- })
-
- it('should pass the correct onCancel and onClose methods to PageContainer', () => {
- const {
- onCancel,
- onClose,
- } = wrapper.find(PageContainer).props()
- assert.equal(propsMethodSpies.cancelAndClose.callCount, 0)
- onCancel()
- assert.equal(propsMethodSpies.cancelAndClose.callCount, 1)
- onClose()
- assert.equal(propsMethodSpies.cancelAndClose.callCount, 2)
- })
-
- it('should pass the correct renderTabs property to PageContainer', () => {
- sinon.stub(GP, 'renderTabs').returns('mockTabs')
- const renderTabsWrapperTester = shallow(<GasModalPageContainer
- fetchBasicGasAndTimeEstimates={propsMethodSpies.fetchBasicGasAndTimeEstimates}
- fetchGasEstimates={propsMethodSpies.fetchGasEstimates}
- />, { context: { t: (str1, str2) => str2 ? str1 + str2 : str1 } })
- const { tabsComponent } = renderTabsWrapperTester.find(PageContainer).props()
- assert.equal(tabsComponent, 'mockTabs')
- GasModalPageContainer.prototype.renderTabs.restore()
- })
- })
-
- describe('renderTabs', () => {
- beforeEach(() => {
- sinon.spy(GP, 'renderBasicTabContent')
- sinon.spy(GP, 'renderAdvancedTabContent')
- sinon.spy(GP, 'renderInfoRows')
- })
-
- afterEach(() => {
- GP.renderBasicTabContent.restore()
- GP.renderAdvancedTabContent.restore()
- GP.renderInfoRows.restore()
- })
-
- it('should render a Tabs component with "Basic" and "Advanced" tabs', () => {
- const renderTabsResult = wrapper.instance().renderTabs(mockInfoRowProps, {
- gasPriceButtonGroupProps: mockGasPriceButtonGroupProps,
- otherProps: 'mockAdvancedTabProps',
- })
- const renderedTabs = shallow(renderTabsResult)
- assert.equal(renderedTabs.props().className, 'tabs')
-
- const tabs = renderedTabs.find(Tab)
- assert.equal(tabs.length, 2)
-
- assert.equal(tabs.at(0).props().name, 'basic')
- assert.equal(tabs.at(1).props().name, 'advanced')
-
- assert.equal(tabs.at(0).childAt(0).props().className, 'gas-modal-content')
- assert.equal(tabs.at(1).childAt(0).props().className, 'gas-modal-content')
- })
-
- it('should call renderBasicTabContent and renderAdvancedTabContent with the expected props', () => {
- assert.equal(GP.renderBasicTabContent.callCount, 0)
- assert.equal(GP.renderAdvancedTabContent.callCount, 0)
-
- wrapper.instance().renderTabs(mockInfoRowProps, { gasPriceButtonGroupProps: mockGasPriceButtonGroupProps, otherProps: 'mockAdvancedTabProps' })
-
- assert.equal(GP.renderBasicTabContent.callCount, 1)
- assert.equal(GP.renderAdvancedTabContent.callCount, 1)
-
- assert.deepEqual(GP.renderBasicTabContent.getCall(0).args[0], mockGasPriceButtonGroupProps)
- assert.deepEqual(GP.renderAdvancedTabContent.getCall(0).args[0], { transactionFee: 'mockTransactionFee', otherProps: 'mockAdvancedTabProps' })
- })
-
- it('should call renderInfoRows with the expected props', () => {
- assert.equal(GP.renderInfoRows.callCount, 0)
-
- wrapper.instance().renderTabs(mockInfoRowProps, { gasPriceButtonGroupProps: mockGasPriceButtonGroupProps, otherProps: 'mockAdvancedTabProps' })
-
- assert.equal(GP.renderInfoRows.callCount, 2)
-
- assert.deepEqual(GP.renderInfoRows.getCall(0).args, ['mockNewTotalFiat', 'mockNewTotalEth', 'mockSendAmount', 'mockTransactionFee'])
- assert.deepEqual(GP.renderInfoRows.getCall(1).args, ['mockNewTotalFiat', 'mockNewTotalEth', 'mockSendAmount', 'mockTransactionFee'])
- })
-
- it('should not render the basic tab if hideBasic is true', () => {
- const renderTabsResult = wrapper.instance().renderTabs(mockInfoRowProps, {
- gasPriceButtonGroupProps: mockGasPriceButtonGroupProps,
- otherProps: 'mockAdvancedTabProps',
- hideBasic: true,
- })
-
- const renderedTabs = shallow(renderTabsResult)
- const tabs = renderedTabs.find(Tab)
- assert.equal(tabs.length, 1)
- assert.equal(tabs.at(0).props().name, 'advanced')
- })
- })
-
- describe('renderBasicTabContent', () => {
- it('should render', () => {
- const renderBasicTabContentResult = wrapper.instance().renderBasicTabContent(mockGasPriceButtonGroupProps)
-
- assert.deepEqual(
- renderBasicTabContentResult.props.gasPriceButtonGroupProps,
- mockGasPriceButtonGroupProps
- )
- })
- })
-
- describe('renderAdvancedTabContent', () => {
- it('should render with the correct props', () => {
- const renderAdvancedTabContentResult = wrapper.instance().renderAdvancedTabContent({
- convertThenUpdateCustomGasPrice: () => 'mockConvertThenUpdateCustomGasPrice',
- convertThenUpdateCustomGasLimit: () => 'mockConvertThenUpdateCustomGasLimit',
- customGasPrice: 123,
- customGasLimit: 456,
- newTotalFiat: '$0.30',
- currentTimeEstimate: '1 min 31 sec',
- gasEstimatesLoading: 'mockGasEstimatesLoading',
- })
- const advancedTabContentProps = renderAdvancedTabContentResult.props
- assert.equal(advancedTabContentProps.updateCustomGasPrice(), 'mockConvertThenUpdateCustomGasPrice')
- assert.equal(advancedTabContentProps.updateCustomGasLimit(), 'mockConvertThenUpdateCustomGasLimit')
- assert.equal(advancedTabContentProps.customGasPrice, 123)
- assert.equal(advancedTabContentProps.customGasLimit, 456)
- assert.equal(advancedTabContentProps.timeRemaining, '1 min 31 sec')
- assert.equal(advancedTabContentProps.totalFee, '$0.30')
- assert.equal(advancedTabContentProps.gasEstimatesLoading, 'mockGasEstimatesLoading')
- })
- })
-
- describe('renderInfoRows', () => {
- it('should render the info rows with the passed data', () => {
- const baseClassName = 'gas-modal-content__info-row'
- const renderedInfoRowsContainer = shallow(wrapper.instance().renderInfoRows(
- 'mockNewTotalFiat',
- ' mockNewTotalEth',
- ' mockSendAmount',
- ' mockTransactionFee'
- ))
-
- assert(renderedInfoRowsContainer.childAt(0).hasClass(baseClassName))
-
- const renderedInfoRows = renderedInfoRowsContainer.childAt(0).children()
- assert.equal(renderedInfoRows.length, 4)
- assert(renderedInfoRows.at(0).hasClass(`${baseClassName}__send-info`))
- assert(renderedInfoRows.at(1).hasClass(`${baseClassName}__transaction-info`))
- assert(renderedInfoRows.at(2).hasClass(`${baseClassName}__total-info`))
- assert(renderedInfoRows.at(3).hasClass(`${baseClassName}__fiat-total-info`))
-
- assert.equal(renderedInfoRows.at(0).text(), 'sendAmount mockSendAmount')
- assert.equal(renderedInfoRows.at(1).text(), 'transactionFee mockTransactionFee')
- assert.equal(renderedInfoRows.at(2).text(), 'newTotal mockNewTotalEth')
- assert.equal(renderedInfoRows.at(3).text(), 'mockNewTotalFiat')
- })
- })
-})
diff --git a/ui/app/components/gas-customization/gas-modal-page-container/tests/gas-modal-page-container-container.test.js b/ui/app/components/gas-customization/gas-modal-page-container/tests/gas-modal-page-container-container.test.js
deleted file mode 100644
index fb6a01fff..000000000
--- a/ui/app/components/gas-customization/gas-modal-page-container/tests/gas-modal-page-container-container.test.js
+++ /dev/null
@@ -1,425 +0,0 @@
-import assert from 'assert'
-import proxyquire from 'proxyquire'
-import sinon from 'sinon'
-
-let mapStateToProps
-let mapDispatchToProps
-let mergeProps
-
-const actionSpies = {
- hideModal: sinon.spy(),
- setGasLimit: sinon.spy(),
- setGasPrice: sinon.spy(),
-}
-
-const gasActionSpies = {
- setCustomGasPrice: sinon.spy(),
- setCustomGasLimit: sinon.spy(),
- resetCustomData: sinon.spy(),
-}
-
-const confirmTransactionActionSpies = {
- updateGasAndCalculate: sinon.spy(),
-}
-
-const sendActionSpies = {
- hideGasButtonGroup: sinon.spy(),
-}
-
-proxyquire('../gas-modal-page-container.container.js', {
- 'react-redux': {
- connect: (ms, md, mp) => {
- mapStateToProps = ms
- mapDispatchToProps = md
- mergeProps = mp
- return () => ({})
- },
- },
- '../../../selectors/custom-gas': {
- getBasicGasEstimateLoadingStatus: (s) => `mockBasicGasEstimateLoadingStatus:${Object.keys(s).length}`,
- getRenderableBasicEstimateData: (s) => `mockRenderableBasicEstimateData:${Object.keys(s).length}`,
- getDefaultActiveButtonIndex: (a, b) => a + b,
- },
- '../../../actions': actionSpies,
- '../../../ducks/gas.duck': gasActionSpies,
- '../../../ducks/confirm-transaction.duck': confirmTransactionActionSpies,
- '../../../ducks/send.duck': sendActionSpies,
- '../../../selectors.js': {
- getCurrentEthBalance: (state) => state.metamask.balance || '0x0',
- },
-})
-
-describe('gas-modal-page-container container', () => {
-
- describe('mapStateToProps()', () => {
- it('should map the correct properties to props', () => {
- const baseMockState = {
- appState: {
- modal: {
- modalState: {
- props: {
- hideBasic: true,
- },
- },
- },
- },
- metamask: {
- send: {
- gasLimit: '16',
- gasPrice: '32',
- amount: '64',
- },
- currentCurrency: 'abc',
- conversionRate: 50,
- preferences: {
- showFiatInTestnets: false,
- },
- provider: {
- type: 'mainnet',
- },
- },
- gas: {
- basicEstimates: {
- blockTime: 12,
- safeLow: 2,
- },
- customData: {
- limit: 'aaaaaaaa',
- price: 'ffffffff',
- },
- gasEstimatesLoading: false,
- priceAndTimeEstimates: [
- { gasprice: 3, expectedTime: 31 },
- { gasprice: 4, expectedTime: 62 },
- { gasprice: 5, expectedTime: 93 },
- { gasprice: 6, expectedTime: 124 },
- ],
- },
- confirmTransaction: {
- txData: {
- txParams: {
- gas: '0x1600000',
- gasPrice: '0x3200000',
- value: '0x640000000000000',
- },
- },
- },
- }
- const baseExpectedResult = {
- isConfirm: true,
- customGasPrice: 4.294967295,
- customGasLimit: 2863311530,
- currentTimeEstimate: '~1 min 11 sec',
- newTotalFiat: '637.41',
- blockTime: 12,
- customModalGasLimitInHex: 'aaaaaaaa',
- customModalGasPriceInHex: 'ffffffff',
- customPriceIsSafe: true,
- gasChartProps: {
- 'currentPrice': 4.294967295,
- estimatedTimes: [31, 62, 93, 124],
- estimatedTimesMax: '31',
- gasPrices: [3, 4, 5, 6],
- gasPricesMax: 6,
- },
- gasPriceButtonGroupProps: {
- buttonDataLoading: 'mockBasicGasEstimateLoadingStatus:4',
- defaultActiveButtonIndex: 'mockRenderableBasicEstimateData:4ffffffff',
- gasButtonInfo: 'mockRenderableBasicEstimateData:4',
- },
- gasEstimatesLoading: false,
- hideBasic: true,
- infoRowProps: {
- originalTotalFiat: '637.41',
- originalTotalEth: '12.748189 ETH',
- newTotalFiat: '637.41',
- newTotalEth: '12.748189 ETH',
- sendAmount: '0.45036 ETH',
- transactionFee: '12.297829 ETH',
- },
- insufficientBalance: true,
- isSpeedUp: false,
- txId: 34,
- }
- const baseMockOwnProps = { transaction: { id: 34 } }
- const tests = [
- { mockState: baseMockState, expectedResult: baseExpectedResult, mockOwnProps: baseMockOwnProps },
- {
- mockState: Object.assign({}, baseMockState, {
- metamask: { ...baseMockState.metamask, balance: '0xfffffffffffffffffffff' },
- }),
- expectedResult: Object.assign({}, baseExpectedResult, { insufficientBalance: false }),
- mockOwnProps: baseMockOwnProps,
- },
- {
- mockState: baseMockState,
- mockOwnProps: Object.assign({}, baseMockOwnProps, {
- transaction: { id: 34, status: 'submitted' },
- }),
- expectedResult: Object.assign({}, baseExpectedResult, { isSpeedUp: true }),
- },
- {
- mockState: Object.assign({}, baseMockState, {
- metamask: {
- ...baseMockState.metamask,
- preferences: {
- ...baseMockState.metamask.preferences,
- showFiatInTestnets: false,
- },
- provider: {
- ...baseMockState.metamask.provider,
- type: 'rinkeby',
- },
- },
- }),
- mockOwnProps: baseMockOwnProps,
- expectedResult: {
- ...baseExpectedResult,
- infoRowProps: {
- ...baseExpectedResult.infoRowProps,
- newTotalFiat: '',
- },
- },
- },
- {
- mockState: Object.assign({}, baseMockState, {
- metamask: {
- ...baseMockState.metamask,
- preferences: {
- ...baseMockState.metamask.preferences,
- showFiatInTestnets: true,
- },
- provider: {
- ...baseMockState.metamask.provider,
- type: 'rinkeby',
- },
- },
- }),
- mockOwnProps: baseMockOwnProps,
- expectedResult: baseExpectedResult,
- },
- {
- mockState: Object.assign({}, baseMockState, {
- metamask: {
- ...baseMockState.metamask,
- preferences: {
- ...baseMockState.metamask.preferences,
- showFiatInTestnets: true,
- },
- provider: {
- ...baseMockState.metamask.provider,
- type: 'mainnet',
- },
- },
- }),
- mockOwnProps: baseMockOwnProps,
- expectedResult: baseExpectedResult,
- },
- ]
-
- let result
- tests.forEach(({ mockState, mockOwnProps, expectedResult}) => {
- result = mapStateToProps(mockState, mockOwnProps)
- assert.deepEqual(result, expectedResult)
- })
- })
-
- })
-
- describe('mapDispatchToProps()', () => {
- let dispatchSpy
- let mapDispatchToPropsObject
-
- beforeEach(() => {
- dispatchSpy = sinon.spy()
- mapDispatchToPropsObject = mapDispatchToProps(dispatchSpy)
- })
-
- afterEach(() => {
- actionSpies.hideModal.resetHistory()
- gasActionSpies.setCustomGasPrice.resetHistory()
- gasActionSpies.setCustomGasLimit.resetHistory()
- })
-
- describe('hideGasButtonGroup()', () => {
- it('should dispatch a hideGasButtonGroup action', () => {
- mapDispatchToPropsObject.hideGasButtonGroup()
- assert(dispatchSpy.calledOnce)
- assert(sendActionSpies.hideGasButtonGroup.calledOnce)
- })
- })
-
- describe('cancelAndClose()', () => {
- it('should dispatch a hideModal action', () => {
- mapDispatchToPropsObject.cancelAndClose()
- assert(dispatchSpy.calledTwice)
- assert(actionSpies.hideModal.calledOnce)
- assert(gasActionSpies.resetCustomData.calledOnce)
- })
- })
-
- describe('updateCustomGasPrice()', () => {
- it('should dispatch a setCustomGasPrice action with the arg passed to updateCustomGasPrice hex prefixed', () => {
- mapDispatchToPropsObject.updateCustomGasPrice('ffff')
- assert(dispatchSpy.calledOnce)
- assert(gasActionSpies.setCustomGasPrice.calledOnce)
- assert.equal(gasActionSpies.setCustomGasPrice.getCall(0).args[0], '0xffff')
- })
- })
-
- describe('convertThenUpdateCustomGasPrice()', () => {
- it('should dispatch a setCustomGasPrice action with the arg passed to convertThenUpdateCustomGasPrice converted to WEI', () => {
- mapDispatchToPropsObject.convertThenUpdateCustomGasPrice('0xffff')
- assert(dispatchSpy.calledOnce)
- assert(gasActionSpies.setCustomGasPrice.calledOnce)
- assert.equal(gasActionSpies.setCustomGasPrice.getCall(0).args[0], '0x3b9a8e653600')
- })
- })
-
-
- describe('convertThenUpdateCustomGasLimit()', () => {
- it('should dispatch a setCustomGasLimit action with the arg passed to convertThenUpdateCustomGasLimit converted to hex', () => {
- mapDispatchToPropsObject.convertThenUpdateCustomGasLimit(16)
- assert(dispatchSpy.calledOnce)
- assert(gasActionSpies.setCustomGasLimit.calledOnce)
- assert.equal(gasActionSpies.setCustomGasLimit.getCall(0).args[0], '0x10')
- })
- })
-
- describe('setGasData()', () => {
- it('should dispatch a setGasPrice and setGasLimit action with the correct props', () => {
- mapDispatchToPropsObject.setGasData('ffff', 'aaaa')
- assert(dispatchSpy.calledTwice)
- assert(actionSpies.setGasPrice.calledOnce)
- assert(actionSpies.setGasLimit.calledOnce)
- assert.equal(actionSpies.setGasLimit.getCall(0).args[0], 'ffff')
- assert.equal(actionSpies.setGasPrice.getCall(0).args[0], 'aaaa')
- })
- })
-
- describe('updateConfirmTxGasAndCalculate()', () => {
- it('should dispatch a updateGasAndCalculate action with the correct props', () => {
- mapDispatchToPropsObject.updateConfirmTxGasAndCalculate('ffff', 'aaaa')
- assert.equal(dispatchSpy.callCount, 3)
- assert(confirmTransactionActionSpies.updateGasAndCalculate.calledOnce)
- assert.deepEqual(confirmTransactionActionSpies.updateGasAndCalculate.getCall(0).args[0], { gasLimit: 'ffff', gasPrice: 'aaaa' })
- })
- })
-
- })
-
- describe('mergeProps', () => {
- let stateProps
- let dispatchProps
- let ownProps
-
- beforeEach(() => {
- stateProps = {
- gasPriceButtonGroupProps: {
- someGasPriceButtonGroupProp: 'foo',
- anotherGasPriceButtonGroupProp: 'bar',
- },
- isConfirm: true,
- someOtherStateProp: 'baz',
- }
- dispatchProps = {
- updateCustomGasPrice: sinon.spy(),
- hideGasButtonGroup: sinon.spy(),
- setGasData: sinon.spy(),
- updateConfirmTxGasAndCalculate: sinon.spy(),
- someOtherDispatchProp: sinon.spy(),
- createSpeedUpTransaction: sinon.spy(),
- hideSidebar: sinon.spy(),
- hideModal: sinon.spy(),
- cancelAndClose: sinon.spy(),
- }
- ownProps = { someOwnProp: 123 }
- })
-
- afterEach(() => {
- dispatchProps.updateCustomGasPrice.resetHistory()
- dispatchProps.hideGasButtonGroup.resetHistory()
- dispatchProps.setGasData.resetHistory()
- dispatchProps.updateConfirmTxGasAndCalculate.resetHistory()
- dispatchProps.someOtherDispatchProp.resetHistory()
- dispatchProps.createSpeedUpTransaction.resetHistory()
- dispatchProps.hideSidebar.resetHistory()
- dispatchProps.hideModal.resetHistory()
- })
- it('should return the expected props when isConfirm is true', () => {
- const result = mergeProps(stateProps, dispatchProps, ownProps)
-
- assert.equal(result.isConfirm, true)
- assert.equal(result.someOtherStateProp, 'baz')
- assert.equal(result.gasPriceButtonGroupProps.someGasPriceButtonGroupProp, 'foo')
- assert.equal(result.gasPriceButtonGroupProps.anotherGasPriceButtonGroupProp, 'bar')
- assert.equal(result.someOwnProp, 123)
-
- assert.equal(dispatchProps.updateConfirmTxGasAndCalculate.callCount, 0)
- assert.equal(dispatchProps.setGasData.callCount, 0)
- assert.equal(dispatchProps.hideGasButtonGroup.callCount, 0)
- assert.equal(dispatchProps.hideModal.callCount, 0)
-
- result.onSubmit()
-
- assert.equal(dispatchProps.updateConfirmTxGasAndCalculate.callCount, 1)
- assert.equal(dispatchProps.setGasData.callCount, 0)
- assert.equal(dispatchProps.hideGasButtonGroup.callCount, 0)
- assert.equal(dispatchProps.hideModal.callCount, 1)
-
- assert.equal(dispatchProps.updateCustomGasPrice.callCount, 0)
- result.gasPriceButtonGroupProps.handleGasPriceSelection()
- assert.equal(dispatchProps.updateCustomGasPrice.callCount, 1)
-
- assert.equal(dispatchProps.someOtherDispatchProp.callCount, 0)
- result.someOtherDispatchProp()
- assert.equal(dispatchProps.someOtherDispatchProp.callCount, 1)
- })
-
- it('should return the expected props when isConfirm is false', () => {
- const result = mergeProps(Object.assign({}, stateProps, { isConfirm: false }), dispatchProps, ownProps)
-
- assert.equal(result.isConfirm, false)
- assert.equal(result.someOtherStateProp, 'baz')
- assert.equal(result.gasPriceButtonGroupProps.someGasPriceButtonGroupProp, 'foo')
- assert.equal(result.gasPriceButtonGroupProps.anotherGasPriceButtonGroupProp, 'bar')
- assert.equal(result.someOwnProp, 123)
-
- assert.equal(dispatchProps.updateConfirmTxGasAndCalculate.callCount, 0)
- assert.equal(dispatchProps.setGasData.callCount, 0)
- assert.equal(dispatchProps.hideGasButtonGroup.callCount, 0)
- assert.equal(dispatchProps.cancelAndClose.callCount, 0)
-
- result.onSubmit('mockNewLimit', 'mockNewPrice')
-
- assert.equal(dispatchProps.updateConfirmTxGasAndCalculate.callCount, 0)
- assert.equal(dispatchProps.setGasData.callCount, 1)
- assert.deepEqual(dispatchProps.setGasData.getCall(0).args, ['mockNewLimit', 'mockNewPrice'])
- assert.equal(dispatchProps.hideGasButtonGroup.callCount, 1)
- assert.equal(dispatchProps.cancelAndClose.callCount, 1)
-
- assert.equal(dispatchProps.updateCustomGasPrice.callCount, 0)
- result.gasPriceButtonGroupProps.handleGasPriceSelection()
- assert.equal(dispatchProps.updateCustomGasPrice.callCount, 1)
-
- assert.equal(dispatchProps.someOtherDispatchProp.callCount, 0)
- result.someOtherDispatchProp()
- assert.equal(dispatchProps.someOtherDispatchProp.callCount, 1)
- })
-
- it('should dispatch the expected actions from obSubmit when isConfirm is false and isSpeedUp is true', () => {
- const result = mergeProps(Object.assign({}, stateProps, { isSpeedUp: true, isConfirm: false }), dispatchProps, ownProps)
-
- result.onSubmit()
-
- assert.equal(dispatchProps.updateConfirmTxGasAndCalculate.callCount, 0)
- assert.equal(dispatchProps.setGasData.callCount, 0)
- assert.equal(dispatchProps.hideGasButtonGroup.callCount, 0)
- assert.equal(dispatchProps.cancelAndClose.callCount, 1)
-
- assert.equal(dispatchProps.createSpeedUpTransaction.callCount, 1)
- assert.equal(dispatchProps.hideSidebar.callCount, 1)
- })
- })
-
-})