1
0
mirror of https://github.com/bigchaindb/js-bigchaindb-driver.git synced 2024-11-25 03:20:12 +01:00
js-bigchaindb-driver/test/transaction/test_transaction.js

121 lines
3.0 KiB
JavaScript
Raw Normal View History

// Copyright BigchainDB GmbH and BigchainDB contributors
// SPDX-License-Identifier: (Apache-2.0 AND CC-BY-4.0)
// Code is Apache-2.0 and docs are CC-BY-4.0
2017-06-16 14:12:02 +02:00
import test from 'ava'
2017-06-20 14:55:58 +02:00
import sinon from 'sinon'
import { Transaction } from '../../src'
2017-06-19 17:50:09 +02:00
import {
alice,
aliceOutput,
metaData,
createTx,
2017-06-19 17:50:09 +02:00
transferTx
} from '../constants'
2017-06-16 14:12:02 +02:00
test('Create valid output with default amount', t => {
const condition = {
details: {
2017-06-23 10:44:55 +02:00
type: 'ed25519-sha-256',
2017-06-16 14:12:02 +02:00
public_key: 'abc'
}
}
const expected = {
amount: '1',
condition,
public_keys: ['abc']
}
const res = Transaction.makeOutput(condition)
2017-06-20 13:34:14 +02:00
t.deepEqual(res, expected)
2017-06-16 14:12:02 +02:00
})
test('Create valid output with custom amount', t => {
const condition = {
details: {
2017-06-23 10:44:55 +02:00
type: 'ed25519-sha-256',
2017-06-16 14:12:02 +02:00
public_key: 'abc'
}
}
const customAmount = '1337'
const expected = {
amount: customAmount,
condition,
public_keys: ['abc']
}
const res = Transaction.makeOutput(condition, customAmount)
2017-06-20 13:34:14 +02:00
t.deepEqual(res, expected)
2017-06-16 14:12:02 +02:00
})
test('Pass condition not based on public_keys to makeOutput', t => {
const condition = {
details: {
idea: 'just pretend this is e.g. a hashlock'
}
}
const expected = {
amount: '1',
condition,
public_keys: []
}
const res = Transaction.makeOutput(condition)
2017-06-20 13:34:14 +02:00
t.deepEqual(res, expected)
2017-06-16 14:12:02 +02:00
})
test('makeOutput throws TypeError with incorrect amount type', t => {
t.throws(() => Transaction.makeOutput({}, 1337), TypeError)
})
test('Create TRANSFER transaction based on CREATE transaction', t => {
2018-01-17 09:20:04 +01:00
sinon.spy(Transaction, 'makeTransaction')
2017-06-20 14:55:58 +02:00
Transaction.makeTransferTransaction(
[{ tx: createTx, output_index: 0 }],
[aliceOutput],
metaData
)
const expected = [
'TRANSFER',
2017-06-20 11:03:01 +02:00
{ id: createTx.id },
metaData,
[aliceOutput],
[Transaction.makeInputTemplate(
[alice.publicKey],
{ output_index: 0, transaction_id: createTx.id }
)]
]
2017-06-20 14:55:58 +02:00
// NOTE: `src/transaction/makeTransaction` is `export default`, hence we
// can only mock `makeTransaction.default` with a hack:
// See: https://stackoverflow.com/a/33676328/1263876
2018-01-15 18:11:16 +01:00
t.truthy(Transaction.makeTransaction.calledWith(...expected))
2018-01-17 09:20:04 +01:00
Transaction.makeTransaction.restore()
})
test('Create TRANSFER transaction based on TRANSFER transaction', t => {
2018-01-17 09:20:04 +01:00
sinon.spy(Transaction, 'makeTransaction')
2017-06-20 14:55:58 +02:00
Transaction.makeTransferTransaction(
[{ tx: transferTx, output_index: 0 }],
[aliceOutput],
metaData
)
const expected = [
'TRANSFER',
{ id: transferTx.asset.id },
metaData,
[aliceOutput],
[Transaction.makeInputTemplate(
[alice.publicKey],
{ output_index: 0, transaction_id: transferTx.id }
)]
]
2018-01-17 09:20:04 +01:00
t.truthy(Transaction.makeTransaction.calledWith(...expected))
Transaction.makeTransaction.restore()
})