diff --git a/CHANGELOG.md b/CHANGELOG.md index 900bdf3..38b118f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,9 @@ For reference, the possible headings are: * **Known Issues** * **Notes** +## [2.1.0] - 2023-26-01 +* **Added** validation for compose and decompose transaction types + ## [2.0.0] - 2023-12-01 * **Changed** changed tarantool db schema * **Removed** removed text_search routes diff --git a/tests/assets/test_digital_assets.py b/tests/assets/test_digital_assets.py index f91e0de..5c1af3d 100644 --- a/tests/assets/test_digital_assets.py +++ b/tests/assets/test_digital_assets.py @@ -82,6 +82,19 @@ def test_compose_valid_transactions(b, user_pk, user_sk, alice, signed_create_tx assert b.validate_transaction(compose_transaction) +def test_decompose_valid_transactions(b, user_pk, user_sk, alice, signed_create_tx, _bdb): + from transactions.types.assets.decompose import Decompose + + validated = b.validate_transaction(signed_create_tx) + b.store_bulk_transactions([validated]) + + inputs = signed_create_tx.to_inputs() + assets = [signed_create_tx.id] + decompose_transaction = Decompose.generate(inputs=inputs, recipients=[([user_pk], 1)], assets=assets) + decompose_transaction.sign([user_sk]) + assert b.validate_transaction(decompose_transaction) + + def test_create_valid_divisible_asset(b, user_pk, user_sk, _bdb): tx = Create.generate([user_pk], [([user_pk], 2)]) tx_signed = tx.sign([user_sk]) diff --git a/tests/web/test_transactions.py b/tests/web/test_transactions.py index 40c9b8d..345d049 100644 --- a/tests/web/test_transactions.py +++ b/tests/web/test_transactions.py @@ -16,6 +16,7 @@ from transactions.common import crypto from transactions.common.transaction import Transaction from transactions.types.assets.create import Create from transactions.types.assets.compose import Compose +from transactions.types.assets.decompose import Decompose from transactions.types.assets.transfer import Transfer from transactions.common.transaction_mode_types import ( BROADCAST_TX_COMMIT, @@ -523,3 +524,30 @@ def test_post_transaction_compose_valid(client, b): mode_endpoint = TX_ENDPOINT + "?mode=commit" response = client.post(mode_endpoint, data=json.dumps(signed_tx.to_dict())) assert "202 ACCEPTED" in response.status + + +@pytest.mark.abci +def test_post_transaction_decompose_valid(client, b): + mode = ("?mode=commit", BROADCAST_TX_COMMIT) + alice = generate_key_pair() + tx = Create.generate( + [alice.public_key], + [([alice.public_key], 1)], + assets=[{"data": "QmW5GVMW98D3mktSDfWHS8nX2UiCd8gP1uCiujnFX4yK97"}], + ).sign([alice.private_key]) + mode_endpoint = TX_ENDPOINT + mode[0] + response = client.post(mode_endpoint, data=json.dumps(tx.to_dict())) + assert "202 ACCEPTED" in response.status + tx_obj = tx + tx = tx.to_dict() + inputs_ = tx_obj.to_inputs() + + assets_ = [tx["id"]] + decompose_transaction = Decompose.generate(inputs=inputs_, recipients=[([alice.public_key], 1)], assets=assets_) + signed_tx = decompose_transaction.sign([alice.private_key]) + validated_decompose = b.validate_transaction(signed_tx) + mode_endpoint = TX_ENDPOINT + "?mode=commit" + response = client.post(mode_endpoint, data=json.dumps(signed_tx.to_dict())) + assert "202 ACCEPTED" in response.status + + \ No newline at end of file