def test_condition_serialization(user_Ed25519, user_pub):
    from bigchaindb_common.transaction import Condition

    expected = {
        'condition': {
            'uri': user_Ed25519.condition_uri,
            'details': user_Ed25519.to_dict(),
        },
        'owners_after': [user_pub],
        'amount': 1,
    }

    cond = Condition(user_Ed25519, [user_pub], 1)

    assert cond.to_dict() == expected
def test_condition_hashlock_serialization():
    from bigchaindb_common.transaction import Condition
    from cryptoconditions import PreimageSha256Fulfillment

    secret = b'wow much secret'
    hashlock = PreimageSha256Fulfillment(preimage=secret).condition_uri

    expected = {
        'condition': {
            'uri': hashlock,
        },
        'owners_after': None,
        'amount': 1,
    }
    cond = Condition(hashlock, amount=1)

    assert cond.to_dict() == expected
def test_create_create_transaction_hashlock(user_pub, data, data_id):
    from cryptoconditions import PreimageSha256Fulfillment
    from bigchaindb_common.transaction import Transaction, Condition, Asset

    secret = b'much secret, wow'
    hashlock = PreimageSha256Fulfillment(preimage=secret).condition_uri
    cond = Condition(hashlock)

    expected = {
        'transaction': {
            'conditions': [cond.to_dict(0)],
            'metadata': {
                'data': data,
            },
            'asset': {
                'id': data_id,
                'divisible': False,
                'updatable': False,
                'refillable': False,
                'data': data,
            },
            'fulfillments': [
                {
                    'owners_before': [
                        user_pub,
                    ],
                    'fid': 0,
                    'fulfillment': None,
                    'input': None
                },
            ],
            'operation': 'CREATE',
        },
        'version': 1
    }

    asset = Asset(data, data_id)
    tx = Transaction.create([user_pub], [], data, asset, secret).to_dict()
    tx.pop('id')
    tx['transaction']['metadata'].pop('id')
    tx['transaction'].pop('timestamp')
    tx['transaction']['fulfillments'][0]['fulfillment'] = None

    assert tx == expected