2016-08-01 13:59:35 +02:00
|
|
|
from pytest import raises
|
|
|
|
|
|
|
|
|
2016-08-03 17:22:57 +02:00
|
|
|
def test_fulfillment_serialization(ffill, user_vk):
|
2016-08-01 13:59:35 +02:00
|
|
|
from bigchaindb.transaction import (
|
|
|
|
Fulfillment,
|
|
|
|
)
|
|
|
|
|
2016-08-03 17:22:57 +02:00
|
|
|
ffill = Fulfillment(ffill, [user_vk])
|
2016-08-01 13:59:35 +02:00
|
|
|
ffill_dict = ffill.to_dict()
|
|
|
|
assert ffill_dict['owners_before'] == [user_vk]
|
|
|
|
assert ffill_dict['input'] == None
|
2016-08-03 17:22:57 +02:00
|
|
|
assert ffill_dict['fulfillment'] == ffill.fulfillment.serialize_uri()
|
2016-08-01 13:59:35 +02:00
|
|
|
assert ffill_dict['fid'] == 0
|
|
|
|
|
|
|
|
|
|
|
|
def test_fulfillment_deserialization(ffill_uri, user_vk):
|
2016-07-27 15:30:21 +02:00
|
|
|
from bigchaindb.transaction import (
|
|
|
|
Fulfillment,
|
|
|
|
)
|
|
|
|
|
2016-08-01 13:59:35 +02:00
|
|
|
ffill_dict = {
|
|
|
|
'owners_before': [user_vk],
|
|
|
|
'fulfillment': ffill_uri,
|
|
|
|
'fid': 0,
|
|
|
|
'input': None,
|
|
|
|
}
|
2016-07-27 15:30:21 +02:00
|
|
|
|
2016-08-01 13:59:35 +02:00
|
|
|
assert Fulfillment.from_dict(ffill_dict).to_dict() == ffill_dict
|
2016-07-27 15:30:21 +02:00
|
|
|
|
|
|
|
|
2016-08-03 17:22:57 +02:00
|
|
|
def test_invalid_fulfillment_initialization(ffill, user_vk):
|
2016-07-27 15:30:21 +02:00
|
|
|
from bigchaindb.transaction import (
|
|
|
|
Fulfillment,
|
2016-08-01 13:59:35 +02:00
|
|
|
)
|
|
|
|
with raises(TypeError):
|
2016-08-03 17:22:57 +02:00
|
|
|
Fulfillment(ffill, user_vk)
|
2016-08-01 13:59:35 +02:00
|
|
|
|
|
|
|
|
2016-08-03 17:22:57 +02:00
|
|
|
def test_condition_serialization(user_vk):
|
2016-08-01 13:59:35 +02:00
|
|
|
from bigchaindb.transaction import (
|
2016-07-27 15:30:21 +02:00
|
|
|
Condition,
|
2016-08-01 13:59:35 +02:00
|
|
|
)
|
|
|
|
|
2016-08-03 17:22:57 +02:00
|
|
|
cond = Condition.gen_default(user_vk)
|
2016-08-01 13:59:35 +02:00
|
|
|
cond_dict = cond.to_dict()
|
|
|
|
assert cond_dict['owners_after'] == [user_vk]
|
2016-08-03 17:22:57 +02:00
|
|
|
assert cond_dict['condition']['uri'] == cond.condition.condition_uri
|
2016-08-01 13:59:35 +02:00
|
|
|
assert cond_dict['cid'] == 0
|
|
|
|
|
|
|
|
|
2016-08-03 17:22:57 +02:00
|
|
|
def test_condition_deserialization(user_vk):
|
2016-08-01 13:59:35 +02:00
|
|
|
from bigchaindb.transaction import (
|
|
|
|
Condition,
|
|
|
|
)
|
|
|
|
|
2016-08-03 17:22:57 +02:00
|
|
|
cond = Condition.gen_default(user_vk)
|
2016-08-01 13:59:35 +02:00
|
|
|
cond_dict = {
|
|
|
|
'condition': {
|
2016-08-03 17:22:57 +02:00
|
|
|
'uri': cond.condition.condition_uri,
|
|
|
|
'details': cond.condition.to_dict()
|
2016-08-01 13:59:35 +02:00
|
|
|
},
|
|
|
|
'owners_after': [user_vk],
|
|
|
|
'cid': 0,
|
|
|
|
}
|
|
|
|
|
|
|
|
assert Condition.from_dict(cond_dict).to_dict() == cond_dict
|
|
|
|
|
|
|
|
|
2016-08-03 17:22:57 +02:00
|
|
|
def test_invalid_condition_initialization(ffill, user_vk):
|
2016-08-01 13:59:35 +02:00
|
|
|
from bigchaindb.transaction import (
|
|
|
|
Condition,
|
|
|
|
)
|
|
|
|
with raises(TypeError):
|
2016-08-03 17:22:57 +02:00
|
|
|
Condition(ffill.condition, user_vk)
|
2016-08-01 13:59:35 +02:00
|
|
|
|
|
|
|
|
|
|
|
def test_gen_default_condition(user_vk):
|
|
|
|
from bigchaindb.transaction import (
|
|
|
|
Condition,
|
|
|
|
)
|
|
|
|
from cryptoconditions import Ed25519Fulfillment
|
2016-08-03 17:22:57 +02:00
|
|
|
cond = Condition.gen_default(user_vk)
|
2016-08-01 13:59:35 +02:00
|
|
|
assert cond.owners_after == [user_vk]
|
|
|
|
assert cond.cid == 0
|
|
|
|
# TODO: Would be nice if Cryptoconditions would implement a `__eq__` method
|
2016-08-03 17:22:57 +02:00
|
|
|
# NOTE: This doesn't make sense yet...
|
|
|
|
assert cond.condition.to_dict() == Ed25519Fulfillment(public_key=user_vk).to_dict()
|
|
|
|
|
|
|
|
|
|
|
|
def test_create_default_transaction(user_vk):
|
|
|
|
from bigchaindb.transaction import (
|
|
|
|
Condition,
|
|
|
|
Transaction,
|
|
|
|
)
|
|
|
|
cond = Condition.gen_default(user_vk)
|
|
|
|
tx = Transaction([cond])
|
|
|
|
assert tx.conditions == [cond]
|
|
|
|
assert tx.fulfillments == []
|
|
|
|
assert tx.inputs is None
|
|
|
|
assert tx.payload is None
|
|
|
|
|
|
|
|
|
|
|
|
def test_sign_default_transaction(user_vk, user_sk):
|
|
|
|
from bigchaindb.transaction import (
|
|
|
|
Fulfillment,
|
|
|
|
Transaction,
|
|
|
|
)
|
|
|
|
|
|
|
|
ffill = Fulfillment.gen_default(user_vk)
|
|
|
|
ffill.to_dict()
|
|
|
|
cond = ffill.gen_condition()
|
|
|
|
tx = Transaction(Transaction.CREATE, [ffill], [cond])
|
|
|
|
tx.sign([user_sk])
|
|
|
|
tx_dict = tx.to_dict()
|
|
|
|
# TODO: We need to make sure to serialize the transaction correctly!!!
|
|
|
|
assert len(tx.fulfillments) > 0
|
|
|
|
assert tx_dict['transaction']['conditions'][0] == cond.to_dict()
|