From 50562fed439421492c1a586d89224384cd53b912 Mon Sep 17 00:00:00 2001 From: tim Date: Mon, 1 Aug 2016 13:59:35 +0200 Subject: [PATCH] Add tests for: - Conditions; and - Fulfillments Mostly on the (de)serialization part. --- test_transaction.py | 112 +++++++++++++++++++++++++++++++------------- 1 file changed, 79 insertions(+), 33 deletions(-) diff --git a/test_transaction.py b/test_transaction.py index 8ca134d0..fcd497f5 100644 --- a/test_transaction.py +++ b/test_transaction.py @@ -1,43 +1,89 @@ -# TODO: Make sense of this test -def test_init_transaction(b, user_vk): +from pytest import raises + + +def test_fulfillment_serialization(ffill_uri, user_vk): from bigchaindb.transaction import ( Fulfillment, - Condition, - Transaction, - TransactionType, ) - from bigchaindb.util import validate_fulfillments - ffill = Fulfillment([user_vk]) - cond = Condition([user_vk]) - tx = Transaction([ffill], [cond], TransactionType.CREATE) - tx = tx.to_dict() - - assert tx['transaction']['fulfillments'][0]['owners_before'][0] == b.me - # NOTE: Why are we accessing `['']`? - assert tx['transaction']['conditions'][0][''][0] == user_vk - assert validate_fulfillments(tx) + ffill = Fulfillment(ffill_uri, [user_vk]) + ffill_dict = ffill.to_dict() + assert ffill_dict['owners_before'] == [user_vk] + assert ffill_dict['input'] == None + assert ffill_dict['fulfillment'] == ffill_uri + assert ffill_dict['fid'] == 0 -def test_create_tx_with_empty_inputs(): +def test_fulfillment_deserialization(ffill_uri, user_vk): from bigchaindb.transaction import ( Fulfillment, - Condition, - Transaction, - TransactionType, ) - ffill = Fulfillment(None) - cond = Condition(None) - tx = Transaction([ffill], [cond], TransactionType.CREATE).to_dict() - assert 'id' in tx - assert 'transaction' in tx - assert 'version' in tx - assert 'fulfillments' in tx['transaction'] - assert 'conditions' in tx['transaction'] - assert 'operation' in tx['transaction'] - assert 'timestamp' in tx['transaction'] - assert 'data' in tx['transaction'] - assert len(tx['transaction']['fulfillments']) == 1 - assert tx['transaction']['fulfillments'][0] == { - 'owners_before': [], 'input': None, 'fulfillment': None, 'fid': 0} + ffill_dict = { + 'owners_before': [user_vk], + 'fulfillment': ffill_uri, + 'fid': 0, + 'input': None, + } + + assert Fulfillment.from_dict(ffill_dict).to_dict() == ffill_dict + + +def test_invalid_fulfillment_initialization(ffill_uri, user_vk): + from bigchaindb.transaction import ( + Fulfillment, + ) + with raises(TypeError): + Fulfillment(ffill_uri, user_vk) + + +def test_condition_serialization(cond_uri, user_vk): + from bigchaindb.transaction import ( + Condition, + ) + + cond = Condition(cond_uri, [user_vk]) + cond_dict = cond.to_dict() + assert cond_dict['owners_after'] == [user_vk] + assert cond_dict['condition']['uri'] == cond_uri + assert cond_dict['cid'] == 0 + + +def test_condition_deserialization(cond_uri, user_vk): + from bigchaindb.transaction import ( + Condition, + ) + from cryptoconditions import ( + Condition as CCCondition, + ) + + cond_dict = { + 'condition': { + 'uri': cond_uri, + 'details': CCCondition.from_uri(cond_uri).to_dict() + }, + 'owners_after': [user_vk], + 'cid': 0, + } + + assert Condition.from_dict(cond_dict).to_dict() == cond_dict + + +def test_invalid_condition_initialization(cond_uri, user_vk): + from bigchaindb.transaction import ( + Condition, + ) + with raises(TypeError): + Condition(cond_uri, user_vk) + + +def test_gen_default_condition(user_vk): + from bigchaindb.transaction import ( + Condition, + ) + from cryptoconditions import Ed25519Fulfillment + cond = Condition.gen_default_condition(user_vk) + assert cond.owners_after == [user_vk] + assert cond.cid == 0 + # TODO: Would be nice if Cryptoconditions would implement a `__eq__` method + assert cond.condition.to_dict() == Ed25519Fulfillment(public_key=user_vk).condition.to_dict()