@ -1,4 +1,9 @@
const reactTriggerChange = require ( 'react-trigger-change' )
const reactTriggerChange = require ( 'react-trigger-change' )
const {
timeout ,
queryAsync ,
findAsync ,
} = require ( '../../lib/util' )
const PASSWORD = 'password123'
const PASSWORD = 'password123'
@ -18,83 +23,65 @@ global.ethQuery = {
async function runSendFlowTest ( assert , done ) {
async function runSendFlowTest ( assert , done ) {
console . log ( '*** start runSendFlowTest' )
console . log ( '*** start runSendFlowTest' )
const selectState = $ ( 'select' )
const selectState = await queryAsync ( $ , 'select' )
selectState . val ( 'send new ui' )
selectState . val ( 'send new ui' )
reactTriggerChange ( selectState [ 0 ] )
reactTriggerChange ( selectState [ 0 ] )
await timeout ( 2000 )
const sendScreenButton = await queryAsync ( $ , 'button.btn-clear.hero-balance-button' )
const sendScreenButton = $ ( 'button.btn-clear.hero-balance-button' )
assert . ok ( sendScreenButton [ 1 ] , 'send screen button present' )
assert . ok ( sendScreenButton [ 1 ] , 'send screen button present' )
sendScreenButton [ 1 ] . click ( )
sendScreenButton [ 1 ] . click ( )
await timeout ( 1000 )
const sendTitle = await queryAsync ( $ , '.page-container__title' )
const sendTitle = $ ( '.page-container__title' )
assert . equal ( sendTitle [ 0 ] . textContent , 'Send ETH' , 'Send screen title is correct' )
assert . equal ( sendTitle [ 0 ] . textContent , 'Send ETH' , 'Send screen title is correct' )
const sendCopy = $ ( '.page-container__subtitle' )
const sendCopy = await queryAsync ( $ , '.page-container__subtitle' )
assert . equal ( sendCopy [ 0 ] . textContent , 'Only send ETH to an Ethereum address.' , 'Send screen has copy' )
assert . equal ( sendCopy [ 0 ] . textContent , 'Only send ETH to an Ethereum address.' , 'Send screen has copy' )
const sendFromField = $ ( '.send-v2__form-field' )
const sendFromField = await queryAsync ( $ , '.send-v2__form-field' )
assert . ok ( sendFromField [ 0 ] , 'send screen has a from field' )
assert . ok ( sendFromField [ 0 ] , 'send screen has a from field' )
let sendFromFieldItemAddress = $ ( '.account-list-item__account-name' )
let sendFromFieldItemAddress = await queryAsync ( $ , '.account-list-item__account-name' )
assert . equal ( sendFromFieldItemAddress [ 0 ] . textContent , 'Send Account 4' , 'send from field shows correct account name' )
assert . equal ( sendFromFieldItemAddress [ 0 ] . textContent , 'Send Account 4' , 'send from field shows correct account name' )
const sendFromFieldItem = $ ( '.account-list-item' )
const sendFromFieldItem = await queryAsync ( $ , '.account-list-item' )
sendFromFieldItem [ 0 ] . click ( )
sendFromFieldItem [ 0 ] . click ( )
await timeout ( )
// this seems to fail if the firefox window is not in focus...
const sendFromDropdownList = await queryAsync ( $ , '.send-v2__from-dropdown__list' )
const sendFromDropdownList = $ ( '.send-v2__from-dropdown__list' )
assert . equal ( sendFromDropdownList . children ( ) . length , 4 , 'send from dropdown shows all accounts' )
assert . equal ( sendFromDropdownList . children ( ) . length , 4 , 'send from dropdown shows all accounts' )
console . log ( ` !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! sendFromDropdownList.children()[1] ` , sendFromDropdownList . children ( ) [ 1 ] ) ;
sendFromDropdownList . children ( ) [ 1 ] . click ( )
sendFromDropdownList . children ( ) [ 1 ] . click ( )
await timeout ( )
sendFromFieldItemAddress = await queryAsync ( $ , '.account-list-item__account-name' )
sendFromFieldItemAddress = $ ( '.account-list-item__account-name' )
console . log ( ` !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! sendFromFieldItemAddress[0] ` , sendFromFieldItemAddress [ 0 ] ) ;
assert . equal ( sendFromFieldItemAddress [ 0 ] . textContent , 'Send Account 2' , 'send from field dropdown changes account name' )
assert . equal ( sendFromFieldItemAddress [ 0 ] . textContent , 'Send Account 2' , 'send from field dropdown changes account name' )
let sendToFieldInput = $ ( '.send-v2__to-autocomplete__input' )
let sendToFieldInput = await queryAsync ( $ , '.send-v2__to-autocomplete__input' )
sendToFieldInput [ 0 ] . focus ( )
sendToFieldInput [ 0 ] . focus ( )
await timeout ( )
const sendToDropdownList = await queryAsync ( $ , '.send-v2__from-dropdown__list' )
const sendToDropdownList = $ ( '.send-v2__from-dropdown__list' )
assert . equal ( sendToDropdownList . children ( ) . length , 5 , 'send to dropdown shows all accounts and address book accounts' )
assert . equal ( sendToDropdownList . children ( ) . length , 5 , 'send to dropdown shows all accounts and address book accounts' )
sendToDropdownList . children ( ) [ 2 ] . click ( )
sendToDropdownList . children ( ) [ 2 ] . click ( )
await timeout ( )
const sendToAccountAddress = sendToFieldInput . val ( )
const sendToAccountAddress = sendToFieldInput . val ( )
assert . equal ( sendToAccountAddress , '0x2f8d4a878cfa04a6e60d46362f5644deab66572d' , 'send to dropdown selects the correct address' )
assert . equal ( sendToAccountAddress , '0x2f8d4a878cfa04a6e60d46362f5644deab66572d' , 'send to dropdown selects the correct address' )
const sendAmountField = $ ( '.send-v2__form-row:eq(2)' )
const sendAmountField = await queryAsync ( $ , '.send-v2__form-row:eq(2)' )
sendAmountField . find ( '.currency-display' ) [ 0 ] . click ( )
sendAmountField . find ( '.currency-display' ) [ 0 ] . click ( )
await timeout ( )
const sendAmountFieldInput = await findAsync ( sendAmountField , 'input:text' )
const sendAmountFieldInput = sendAmountField . find ( 'input:text' )
sendAmountFieldInput . val ( '5.1' )
sendAmountFieldInput . val ( '5.1' )
reactTriggerChange ( sendAmountField . find ( 'input' ) [ 0 ] )
reactTriggerChange ( sendAmountField . find ( 'input' ) [ 0 ] )
await timeout ( )
let errorMessage = await queryAsync ( $ , '.send-v2__error' )
let errorMessage = $ ( '.send-v2__error' )
assert . equal ( errorMessage [ 0 ] . textContent , 'Insufficient funds.' , 'send should render an insufficient fund error message' )
assert . equal ( errorMessage [ 0 ] . textContent , 'Insufficient funds.' , 'send should render an insufficient fund error message' )
sendAmountFieldInput . val ( '2.0' )
sendAmountFieldInput . val ( '2.0' )
reactTriggerChange ( sendAmountFieldInput [ 0 ] )
reactTriggerChange ( sendAmountFieldInput [ 0 ] )
await timeout ( )
await timeout ( )
errorMessage = $ ( '.send-v2__error' )
errorMessage = $ ( '.send-v2__error' )
assert . equal ( errorMessage . length , 0 , 'send should stop rendering amount error message after amount is corrected' )
assert . equal ( errorMessage . length , 0 , 'send should stop rendering amount error message after amount is corrected' )
const sendGasField = $ ( '.send-v2__gas-fee-display' )
const sendGasField = await queryAsync ( $ , '.send-v2__gas-fee-display' )
assert . equal (
assert . equal (
sendGasField . find ( '.currency-display__input-wrapper > input' ) . val ( ) ,
sendGasField . find ( '.currency-display__input-wrapper > input' ) . val ( ) ,
'0.000198' ,
'0.000198' ,
@ -106,120 +93,86 @@ async function runSendFlowTest(assert, done) {
'send gas field should show estimated gas total converted to USD'
'send gas field should show estimated gas total converted to USD'
)
)
const sendGasOpenCustomizeModalButton = $ ( '.send-v2__sliders-icon-container'
const sendGasOpenCustomizeModalButton = await queryAsync ( $ , '.send-v2__sliders-icon-container' )
)
sendGasOpenCustomizeModalButton [ 0 ] . click ( )
sendGasOpenCustomizeModalButton [ 0 ] . click ( )
await timeout ( 1000 )
const customizeGasModal = await queryAsync ( $ , '.send-v2__customize-gas' )
const customizeGasModal = $ ( '.send-v2__customize-gas' )
assert . ok ( customizeGasModal [ 0 ] , 'should render the customize gas modal' )
assert . ok ( customizeGasModal [ 0 ] , 'should render the customize gas modal' )
const customizeGasPriceInput = $ ( '.send-v2__gas-modal-card' ) . first ( ) . find ( 'input' )
const customizeGasPriceInput = ( await queryAsync ( $ , '.send-v2__gas-modal-card' ) ) . first ( ) . find ( 'input' )
customizeGasPriceInput . val ( 50 )
customizeGasPriceInput . val ( 50 )
reactTriggerChange ( customizeGasPriceInput [ 0 ] )
reactTriggerChange ( customizeGasPriceInput [ 0 ] )
const customizeGasLimitInput = $ ( '.send-v2__gas-modal-card' ) . last ( ) . find ( 'input' )
const customizeGasLimitInput = ( await queryAsync ( $ , '.send-v2__gas-modal-card' ) ) . last ( ) . find ( 'input' )
customizeGasLimitInput . val ( 60000 )
customizeGasLimitInput . val ( 60000 )
reactTriggerChange ( customizeGasLimitInput [ 0 ] )
reactTriggerChange ( customizeGasLimitInput [ 0 ] )
await timeout ( )
const customizeGasSaveButton = await queryAsync ( $ , '.send-v2__customize-gas__save' )
const customizeGasSaveButton = $ ( '.send-v2__customize-gas__save' )
customizeGasSaveButton [ 0 ] . click ( )
customizeGasSaveButton [ 0 ] . click ( )
await timeout ( )
assert . equal (
assert . equal (
sendGasField . find ( '.currency-display__input-wrapper > input' ) . val ( ) ,
( await findAsync ( sendGasField , '.currency-display__input-wrapper > input' ) ) . val ( ) ,
'0.003' ,
'0.003' ,
'send gas field should show customized gas total'
'send gas field should show customized gas total'
)
)
assert . equal (
assert . equal (
sendGasField . find ( '.currency-display__converted-value' ) [ 0 ] . textContent ,
( await findAsync ( sendGasField , '.currency-display__converted-value' ) ) [ 0 ] . textContent ,
'3.60 USD' ,
'3.60 USD' ,
'send gas field should show customized gas total converted to USD'
'send gas field should show customized gas total converted to USD'
)
)
const sendButton = $ ( 'button.btn-clear.page-container__footer-button' )
const sendButton = await queryAsync ( $ , 'button.btn-clear.page-container__footer-button' )
assert . equal ( sendButton [ 0 ] . textContent , 'Next' , 'next button rendered' )
assert . equal ( sendButton [ 0 ] . textContent , 'Next' , 'next button rendered' )
sendButton [ 0 ] . click ( )
sendButton [ 0 ] . click ( )
await timeout ( )
await timeout ( 2000 )
selectState . val ( 'send edit' )
selectState . val ( 'send edit' )
reactTriggerChange ( selectState [ 0 ] )
reactTriggerChange ( selectState [ 0 ] )
await timeout ( 2000 )
const confirmFromName = ( await queryAsync ( $ , '.confirm-screen-account-name' ) ) . first ( )
const confirmFromName = $ ( '.confirm-screen-account-name' ) . first ( )
assert . equal ( confirmFromName [ 0 ] . textContent , 'Send Account 2' , 'confirm screen should show correct from name' )
assert . equal ( confirmFromName [ 0 ] . textContent , 'Send Account 2' , 'confirm screen should show correct from name' )
const confirmToName = $ ( '.confirm-screen-account-name' ) . last ( )
const confirmToName = ( await queryAsync ( $ , '.confirm-screen-account-name' ) ) . last ( )
assert . equal ( confirmToName [ 0 ] . textContent , 'Send Account 3' , 'confirm screen should show correct to name' )
assert . equal ( confirmToName [ 0 ] . textContent , 'Send Account 3' , 'confirm screen should show correct to name' )
const confirmScreenRows = $ ( '.confirm-screen-rows' )
const confirmScreenRows = await queryAsync ( $ , '.confirm-screen-rows' )
const confirmScreenGas = confirmScreenRows . find ( '.confirm-screen-row-info' ) [ 2 ]
const confirmScreenGas = confirmScreenRows . find ( '.confirm-screen-row-info' ) [ 2 ]
assert . equal ( confirmScreenGas . textContent , '3.6 USD' , 'confirm screen should show correct gas' )
assert . equal ( confirmScreenGas . textContent , '3.6 USD' , 'confirm screen should show correct gas' )
const confirmScreenTotal = confirmScreenRows . find ( '.confirm-screen-row-info' ) [ 3 ]
const confirmScreenTotal = confirmScreenRows . find ( '.confirm-screen-row-info' ) [ 3 ]
assert . equal ( confirmScreenTotal . textContent , '2405.36 USD' , 'confirm screen should show correct total' )
assert . equal ( confirmScreenTotal . textContent , '2405.36 USD' , 'confirm screen should show correct total' )
const confirmScreenBackButton = $ ( '.confirm-screen-back-button' )
const confirmScreenBackButton = await queryAsync ( $ , '.confirm-screen-back-button' )
confirmScreenBackButton [ 0 ] . click ( )
confirmScreenBackButton [ 0 ] . click ( )
await timeout ( 1000 )
const sendFromFieldItemInEdit = await queryAsync ( $ , '.account-list-item' )
const sendFromFieldItemInEdit = $ ( '.account-list-item' )
sendFromFieldItemInEdit [ 0 ] . click ( )
sendFromFieldItemInEdit [ 0 ] . click ( )
await timeout ( )
const sendFromDropdownListInEdit = await queryAsync ( $ , '.send-v2__from-dropdown__list' )
const sendFromDropdownListInEdit = $ ( '.send-v2__from-dropdown__list' )
sendFromDropdownListInEdit . children ( ) [ 2 ] . click ( )
sendFromDropdownListInEdit . children ( ) [ 2 ] . click ( )
await timeout ( )
const sendToFieldInputInEdit = await queryAsync ( $ , '.send-v2__to-autocomplete__input' )
const sendToFieldInputInEdit = $ ( '.send-v2__to-autocomplete__input' )
sendToFieldInputInEdit [ 0 ] . focus ( )
sendToFieldInputInEdit [ 0 ] . focus ( )
sendToFieldInputInEdit . val ( '0xd85a4b6a394794842887b8284293d69163007bbb' )
sendToFieldInputInEdit . val ( '0xd85a4b6a394794842887b8284293d69163007bbb' )
await timeout ( )
const sendAmountFieldInEdit = await queryAsync ( $ , '.send-v2__form-row:eq(2)' )
const sendAmountFieldInEdit = $ ( '.send-v2__form-row:eq(2)' )
sendAmountFieldInEdit . find ( '.currency-display' ) [ 0 ] . click ( )
sendAmountFieldInEdit . find ( '.currency-display' ) [ 0 ] . click ( )
await timeout ( )
const sendAmountFieldInputInEdit = sendAmountFieldInEdit . find ( 'input:text' )
const sendAmountFieldInputInEdit = sendAmountFieldInEdit . find ( 'input:text' )
sendAmountFieldInputInEdit . val ( '1.0' )
sendAmountFieldInputInEdit . val ( '1.0' )
reactTriggerChange ( sendAmountFieldInputInEdit [ 0 ] )
reactTriggerChange ( sendAmountFieldInputInEdit [ 0 ] )
await timeout ( )
const sendButtonInEdit = await queryAsync ( $ , '.btn-clear.page-container__footer-button' )
const sendButtonInEdit = $ ( '.btn-clear.page-container__footer-button' )
assert . equal ( sendButtonInEdit [ 0 ] . textContent , 'Next' , 'next button in edit rendered' )
assert . equal ( sendButtonInEdit [ 0 ] . textContent , 'Next' , 'next button in edit rendered' )
sendButtonInEdit [ 0 ] . click ( )
sendButtonInEdit [ 0 ] . click ( )
await timeout ( )
// TODO: Need a way to mock background so that we can test correct transition from editing to confirm
// TODO: Need a way to mock background so that we can test correct transition from editing to confirm
selectState . val ( 'confirm new ui' )
selectState . val ( 'confirm new ui' )
reactTriggerChange ( selectState [ 0 ] )
reactTriggerChange ( selectState [ 0 ] )
const confirmScreenConfirmButton = await queryAsync ( $ , '.confirm-screen-confirm-button' )
await timeout ( 2000 )
const confirmScreenConfirmButton = $ ( '.confirm-screen-confirm-button' )
console . log ( ` +++++++++++++++++++++++++++++++= confirmScreenConfirmButton[0] ` , confirmScreenConfirmButton [ 0 ] ) ;
console . log ( ` +++++++++++++++++++++++++++++++= confirmScreenConfirmButton[0] ` , confirmScreenConfirmButton [ 0 ] ) ;
confirmScreenConfirmButton [ 0 ] . click ( )
confirmScreenConfirmButton [ 0 ] . click ( )
await timeout ( 2000 )
const txView = await queryAsync ( $ , '.tx-view' )
const txView = $ ( '.tx-view' )
console . log ( ` ++++++++++++++++++++++++++++++++ txView[0] ` , txView [ 0 ] ) ;
console . log ( ` ++++++++++++++++++++++++++++++++ txView[0] ` , txView [ 0 ] ) ;
assert . ok ( txView [ 0 ] , 'Should return to the account details screen after confirming' )
assert . ok ( txView [ 0 ] , 'Should return to the account details screen after confirming' )
}
}
function timeout ( time ) {
return new Promise ( ( resolve , reject ) => {
setTimeout ( resolve , time || 1500 )
} )
}