From dbf24a6065503c1c2c722a48d882fb8f9034b59b Mon Sep 17 00:00:00 2001 From: Scott Sadler Date: Tue, 7 Mar 2017 17:12:12 +0100 Subject: [PATCH] schema validates that create txes only have 1 input and that it has no fulfills --- .../common/schema/transaction_create.yaml | 17 ++++++++++++++--- .../common/schema/test_transaction_schema.py | 19 +++++++++++++++++-- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/bigchaindb/common/schema/transaction_create.yaml b/bigchaindb/common/schema/transaction_create.yaml index 090d4680..2383a102 100644 --- a/bigchaindb/common/schema/transaction_create.yaml +++ b/bigchaindb/common/schema/transaction_create.yaml @@ -1,17 +1,28 @@ --- "$schema": "http://json-schema.org/draft-04/schema#" type: object -title: Transaction Schema - CREATE/GENESIS specific properties +title: Transaction Schema - CREATE/GENESIS specific constraints required: - asset +- inputs properties: asset: additionalProperties: false properties: data: - description: | - User provided metadata associated with the asset. May also be ``null``. anyOf: - type: object additionalProperties: true - type: 'null' + inputs: + type: array + title: "Transaction inputs" + maxItems: 1 + minItems: 1 + items: + type: "object" + required: + - fulfills + properties: + fulfills: + type: "null" diff --git a/tests/common/schema/test_transaction_schema.py b/tests/common/schema/test_transaction_schema.py index b6cf294a..dca10e70 100644 --- a/tests/common/schema/test_transaction_schema.py +++ b/tests/common/schema/test_transaction_schema.py @@ -32,8 +32,6 @@ def test_validate_fails_metadata_empty_dict(create_tx): def test_transfer_asset_schema(signed_transfer_tx): - from bigchaindb.common.schema import (SchemaValidationError, - validate_transaction_schema) tx = signed_transfer_tx.to_dict() validate_transaction_schema(tx) tx['asset']['data'] = {} @@ -43,3 +41,20 @@ def test_transfer_asset_schema(signed_transfer_tx): tx['asset']['id'] = 'b' * 63 with raises(SchemaValidationError): validate_transaction_schema(tx) + + +def test_create_single_input(create_tx): + tx = create_tx.to_dict() + tx['inputs'] += tx['inputs'] + with raises(SchemaValidationError): + validate_transaction_schema(tx) + tx['inputs'] = [] + with raises(SchemaValidationError): + validate_transaction_schema(tx) + + +def test_create_tx_no_fulfills(create_tx): + tx = create_tx.to_dict() + tx['inputs'][0]['fulfills'] = {'tx': 'a' * 64, 'output': 0} + with raises(SchemaValidationError): + validate_transaction_schema(tx)