import { strict as assert } from 'assert' import * as txUtils from '../../../../../app/scripts/controllers/transactions/lib/util' describe('txUtils', function () { describe('#validateTxParams', function () { it('does not throw for positive values', function () { const sample = { from: '0x1678a085c290ebd122dc42cba69373b5953b831d', to: '0xc42edfcc21ed14dda456aa0756c153f7985d8813', value: '0x01', } txUtils.validateTxParams(sample) }) it('throws for invalid params value', function () { assert.throws(() => txUtils.validateTxParams(), { message: 'Invalid transaction params: must be an object.', }) assert.throws(() => txUtils.validateTxParams(null), { message: 'Invalid transaction params: must be an object.', }) assert.throws(() => txUtils.validateTxParams(true), { message: 'Invalid transaction params: must be an object.', }) assert.throws(() => txUtils.validateTxParams([]), { message: 'Invalid transaction params: must be an object.', }) }) it('throws for missing "to" and "data"', function () { const sample = { from: '0x1678a085c290ebd122dc42cba69373b5953b831d', value: '0x01', } assert.throws(() => txUtils.validateTxParams(sample), { message: 'Invalid transaction params: must specify "data" for contract deployments, or "to" (and optionally "data") for all other types of transactions.', }) }) it('throws for negative values', function () { const sample = { from: '0x1678a085c290ebd122dc42cba69373b5953b831d', to: '0xc42edfcc21ed14dda456aa0756c153f7985d8813', value: '-0x01', } assert.throws(() => txUtils.validateTxParams(sample), { message: 'Invalid transaction value "-0x01": not a positive number.', }) }) }) describe('#normalizeTxParams', function () { it('should normalize txParams', function () { const txParams = { chainId: '0x1', from: 'a7df1beDBF813f57096dF77FCd515f0B3900e402', to: null, data: '68656c6c6f20776f726c64', random: 'hello world', } let normalizedTxParams = txUtils.normalizeTxParams(txParams) assert.ok(!normalizedTxParams.chainId, 'there should be no chainId') assert.ok(!normalizedTxParams.to, 'there should be no to address if null') assert.equal( normalizedTxParams.from.slice(0, 2), '0x', 'from should be hex-prefixed', ) assert.equal( normalizedTxParams.data.slice(0, 2), '0x', 'data should be hex-prefixed', ) assert.ok( !('random' in normalizedTxParams), 'there should be no random key in normalizedTxParams', ) txParams.to = 'a7df1beDBF813f57096dF77FCd515f0B3900e402' normalizedTxParams = txUtils.normalizeTxParams(txParams) assert.equal( normalizedTxParams.to.slice(0, 2), '0x', 'to should be hex-prefixed', ) }) }) describe('#validateRecipient', function () { it('removes recipient for txParams with 0x when contract data is provided', function () { const zeroRecipientDataTxParams = { from: '0x1678a085c290ebd122dc42cba69373b5953b831d', to: '0x', data: 'bytecode', } const sanitizedTxParams = txUtils.validateRecipient( zeroRecipientDataTxParams, ) assert.deepEqual( sanitizedTxParams, { from: '0x1678a085c290ebd122dc42cba69373b5953b831d', data: 'bytecode', }, 'no recipient with 0x', ) }) it('should error when recipient is 0x', function () { const zeroRecipientTxParams = { from: '0x1678a085c290ebd122dc42cba69373b5953b831d', to: '0x', } assert.throws( () => { txUtils.validateRecipient(zeroRecipientTxParams) }, Error, 'Invalid recipient address', ) }) }) describe('#validateFrom', function () { it('should error when from is not a hex string', function () { // where from is undefined const txParams = {} assert.throws( () => { txUtils.validateFrom(txParams) }, Error, `Invalid from address ${txParams.from} not a string`, ) // where from is array txParams.from = [] assert.throws( () => { txUtils.validateFrom(txParams) }, Error, `Invalid from address ${txParams.from} not a string`, ) // where from is a object txParams.from = {} assert.throws( () => { txUtils.validateFrom(txParams) }, Error, `Invalid from address ${txParams.from} not a string`, ) // where from is a invalid address txParams.from = 'im going to fail' assert.throws( () => { txUtils.validateFrom(txParams) }, Error, `Invalid from address`, ) // should run txParams.from = '0x1678a085c290ebd122dc42cba69373b5953b831d' txUtils.validateFrom(txParams) }) }) })