algorand-python-testing 1.0.0b1__tar.gz → 1.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/CHANGELOG.md +56 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/PKG-INFO +2 -2
- algorand_python_testing-1.1.0/docs/algopy.md +9 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/docs/api.md +3 -3
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/docs/coverage.md +8 -1
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/docs/examples.md +3 -3
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/docs/faq.md +5 -5
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/docs/index.md +2 -2
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/docs/testing-guide/arc4-types.md +5 -5
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/docs/testing-guide/avm-types.md +1 -1
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/docs/testing-guide/concepts.md +18 -11
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/docs/testing-guide/contract-testing.md +4 -4
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/docs/testing-guide/index.md +3 -3
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/docs/testing-guide/opcodes.md +2 -2
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/docs/testing-guide/transactions.md +4 -4
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/examples/marketplace/contract.py +14 -14
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/examples/marketplace/test_contract.py +12 -12
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/examples/proof_of_attendance/contract.py +4 -4
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/pyproject.toml +9 -9
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/scripts/refresh_test_artifacts.py +4 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/scripts/validate_examples.py +3 -1
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/arc4.py +148 -60
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/context_helpers/txn_context.py +2 -1
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/decorators/arc4.py +68 -22
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/itxn.py +20 -12
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/models/account.py +3 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/models/application.py +1 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/models/contract.py +1 -1
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/models/txn_fields.py +187 -17
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/op/pure.py +8 -9
- algorand_python_testing-1.1.0/src/_algopy_testing/primitives/__init__.py +27 -0
- algorand_python_testing-1.1.0/src/_algopy_testing/primitives/array.py +590 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/primitives/bytes.py +3 -2
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/serialize.py +67 -7
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/state/box.py +71 -3
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/utils.py +23 -4
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/value_generators/avm.py +1 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/algopy/__init__.py +19 -2
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/arc4/conftest.py +1 -1
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/arc4/test_address.py +7 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/arc4/test_arc4_method_signature.py +104 -1
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/arc4/test_bool.py +4 -1
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/arc4/test_dynamic_array.py +57 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/arc4/test_dynamic_bytes.py +6 -6
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/arc4/test_emit.py +2 -2
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/arc4/test_static_array.py +67 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/arc4/test_string.py +4 -1
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/arc4/test_struct.py +2 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/arc4/test_tuple.py +2 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/arc4/test_ufixednxm.py +6 -2
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/arc4/test_uintn.py +77 -5
- algorand_python_testing-1.1.0/tests/artifacts/AVM12/contract.py +45 -0
- algorand_python_testing-1.1.0/tests/artifacts/AVM12/data/Contract.approval.teal +161 -0
- algorand_python_testing-1.1.0/tests/artifacts/AVM12/data/Contract.arc56.json +131 -0
- {algorand_python_testing-1.0.0b1/tests/artifacts/Arrays → algorand_python_testing-1.1.0/tests/artifacts/AVM12}/data/Contract.clear.teal +1 -1
- algorand_python_testing-1.1.0/tests/artifacts/AVM12/data/ContractV0.approval.teal +52 -0
- algorand_python_testing-1.1.0/tests/artifacts/AVM12/data/ContractV0.arc56.json +102 -0
- algorand_python_testing-1.0.0b1/tests/artifacts/Arc4InnerTxns/data/Arc4InnerTxnsContract.clear.teal → algorand_python_testing-1.1.0/tests/artifacts/AVM12/data/ContractV0.clear.teal +1 -1
- algorand_python_testing-1.1.0/tests/artifacts/AVM12/data/ContractV1.approval.teal +52 -0
- algorand_python_testing-1.1.0/tests/artifacts/AVM12/data/ContractV1.arc56.json +102 -0
- algorand_python_testing-1.1.0/tests/artifacts/AVM12/data/ContractV1.clear.teal +7 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/Arc4ABIMethod/contract.py +35 -5
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/Arc4ABIMethod/data/SignaturesContract.approval.teal +310 -303
- algorand_python_testing-1.1.0/tests/artifacts/Arc4ABIMethod/data/SignaturesContract.arc32.json +305 -0
- algorand_python_testing-1.1.0/tests/artifacts/Arc4ABIMethod/data/SignaturesContract.arc56.json +498 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/Arc4InnerTxns/data/Arc4InnerTxnsContract.approval.teal +22 -36
- algorand_python_testing-1.1.0/tests/artifacts/Arc4InnerTxns/data/Arc4InnerTxnsContract.arc32.json +55 -0
- algorand_python_testing-1.1.0/tests/artifacts/Arc4InnerTxns/data/Arc4InnerTxnsContract.arc56.json +101 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/Arc4PrimitiveOps/contract.py +21 -1
- algorand_python_testing-1.1.0/tests/artifacts/Arc4PrimitiveOps/data/Arc4PrimitiveOpsContract.approval.teal +1809 -0
- algorand_python_testing-1.1.0/tests/artifacts/Arc4PrimitiveOps/data/Arc4PrimitiveOpsContract.arc32.json +1101 -0
- algorand_python_testing-1.1.0/tests/artifacts/Arc4PrimitiveOps/data/Arc4PrimitiveOpsContract.arc56.json +1587 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/Arc4PrimitiveOps/data/Arc4PrimitiveOpsContract.clear.teal +1 -1
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/Arrays/data/Contract.approval.teal +665 -711
- algorand_python_testing-1.1.0/tests/artifacts/Arrays/data/Contract.arc32.json +198 -0
- algorand_python_testing-1.1.0/tests/artifacts/Arrays/data/Contract.arc56.json +379 -0
- algorand_python_testing-1.1.0/tests/artifacts/Arrays/data/Contract.clear.teal +7 -0
- algorand_python_testing-1.1.0/tests/artifacts/Arrays/data/DynamicArrayInitContract.approval.teal +274 -0
- algorand_python_testing-1.1.0/tests/artifacts/Arrays/data/DynamicArrayInitContract.arc56.json +144 -0
- algorand_python_testing-1.1.0/tests/artifacts/Arrays/data/DynamicArrayInitContract.clear.teal +7 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/Arrays/data/ImmutableArrayContract.approval.teal +1612 -1672
- algorand_python_testing-1.1.0/tests/artifacts/Arrays/data/ImmutableArrayContract.arc32.json +498 -0
- algorand_python_testing-1.1.0/tests/artifacts/Arrays/data/ImmutableArrayContract.arc56.json +840 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/Arrays/data/ImmutableArrayContract.clear.teal +1 -1
- algorand_python_testing-1.1.0/tests/artifacts/Arrays/data/ImmutableArrayInitContract.approval.teal +272 -0
- algorand_python_testing-1.1.0/tests/artifacts/Arrays/data/ImmutableArrayInitContract.arc56.json +144 -0
- algorand_python_testing-1.1.0/tests/artifacts/Arrays/data/StaticSizeContract.approval.teal +1101 -0
- algorand_python_testing-1.1.0/tests/artifacts/Arrays/data/StaticSizeContract.arc32.json +175 -0
- algorand_python_testing-1.1.0/tests/artifacts/Arrays/data/StaticSizeContract.arc56.json +334 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/Arrays/data/StaticSizeContract.clear.teal +1 -1
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/Arrays/immutable.py +195 -10
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/Arrays/static_size.py +61 -14
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/Arrays/uint64.py +62 -18
- algorand_python_testing-1.1.0/tests/artifacts/BoxContract/contract.py +350 -0
- algorand_python_testing-1.1.0/tests/artifacts/BoxContract/data/BoxContract.approval.teal +1797 -0
- algorand_python_testing-1.1.0/tests/artifacts/BoxContract/data/BoxContract.arc32.json +63 -0
- algorand_python_testing-1.1.0/tests/artifacts/BoxContract/data/BoxContract.arc56.json +780 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/BoxContract/data/BoxContract.clear.teal +1 -1
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/Contains/data/MyContract.approval.teal +1 -1
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/Contains/data/MyContract.clear.teal +1 -1
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/CreatedAppAsset/data/AppCall.approval.teal +20 -25
- algorand_python_testing-1.1.0/tests/artifacts/CreatedAppAsset/data/AppCall.arc32.json +50 -0
- algorand_python_testing-1.1.0/tests/artifacts/CreatedAppAsset/data/AppCall.arc56.json +96 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/CreatedAppAsset/data/AppCall.clear.teal +1 -1
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/CreatedAppAsset/data/AppExpectingEffects.approval.teal +53 -97
- algorand_python_testing-1.1.0/tests/artifacts/CreatedAppAsset/data/AppExpectingEffects.arc32.json +77 -0
- algorand_python_testing-1.1.0/tests/artifacts/CreatedAppAsset/data/AppExpectingEffects.arc56.json +181 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/CreatedAppAsset/data/AppExpectingEffects.clear.teal +1 -1
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/CryptoOps/data/CryptoOpsContract.approval.teal +359 -634
- algorand_python_testing-1.1.0/tests/artifacts/CryptoOps/data/CryptoOpsContract.arc32.json +368 -0
- algorand_python_testing-1.1.0/tests/artifacts/CryptoOps/data/CryptoOpsContract.arc56.json +450 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/CryptoOps/data/CryptoOpsContract.clear.teal +1 -1
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/GlobalStateValidator/data/GlobalStateValidator.approval.teal +24 -40
- algorand_python_testing-1.1.0/tests/artifacts/GlobalStateValidator/data/GlobalStateValidator.arc32.json +59 -0
- algorand_python_testing-1.1.0/tests/artifacts/GlobalStateValidator/data/GlobalStateValidator.arc56.json +111 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/GlobalStateValidator/data/GlobalStateValidator.clear.teal +1 -1
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/MiscellaneousOps/contract.py +4 -4
- algorand_python_testing-1.1.0/tests/artifacts/MiscellaneousOps/data/MiscellaneousOpsContract.approval.teal +940 -0
- algorand_python_testing-1.1.0/tests/artifacts/MiscellaneousOps/data/MiscellaneousOpsContract.arc32.json +858 -0
- algorand_python_testing-1.1.0/tests/artifacts/MiscellaneousOps/data/MiscellaneousOpsContract.arc56.json +1012 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/MiscellaneousOps/data/MiscellaneousOpsContract.clear.teal +1 -1
- algorand_python_testing-1.1.0/tests/artifacts/PrimitiveOps/data/PrimitiveOpsContract.approval.teal +1669 -0
- algorand_python_testing-1.1.0/tests/artifacts/PrimitiveOps/data/PrimitiveOpsContract.arc32.json +1393 -0
- algorand_python_testing-1.1.0/tests/artifacts/PrimitiveOps/data/PrimitiveOpsContract.arc56.json +1616 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/PrimitiveOps/data/PrimitiveOpsContract.clear.teal +1 -1
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/StateMutations/data/StateMutations.approval.teal +190 -157
- algorand_python_testing-1.1.0/tests/artifacts/StateMutations/data/StateMutations.arc32.json +95 -0
- algorand_python_testing-1.1.0/tests/artifacts/StateMutations/data/StateMutations.arc56.json +276 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/StateMutations/data/StateMutations.clear.teal +1 -1
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/StateOps/contract.py +15 -15
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/StateOps/data/GlobalStateContract.approval.teal +354 -774
- algorand_python_testing-1.1.0/tests/artifacts/StateOps/data/GlobalStateContract.arc32.json +563 -0
- algorand_python_testing-1.1.0/tests/artifacts/StateOps/data/GlobalStateContract.arc56.json +801 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/StateOps/data/GlobalStateContract.clear.teal +1 -1
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/StateOps/data/ITxnOpsContract.approval.teal +14 -21
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/StateOps/data/ITxnOpsContract.arc32.json +1 -1
- algorand_python_testing-1.1.0/tests/artifacts/StateOps/data/ITxnOpsContract.arc56.json +96 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/StateOps/data/ITxnOpsContract.clear.teal +1 -1
- algorand_python_testing-1.1.0/tests/artifacts/StateOps/data/LocalStateContract.approval.teal +489 -0
- algorand_python_testing-1.1.0/tests/artifacts/StateOps/data/LocalStateContract.arc32.json +381 -0
- algorand_python_testing-1.1.0/tests/artifacts/StateOps/data/LocalStateContract.arc56.json +583 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/StateOps/data/LocalStateContract.clear.teal +1 -1
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/StateOps/data/StateAcctParamsGetContract.approval.teal +249 -522
- algorand_python_testing-1.1.0/tests/artifacts/StateOps/data/StateAcctParamsGetContract.arc32.json +307 -0
- algorand_python_testing-1.1.0/tests/artifacts/StateOps/data/StateAcctParamsGetContract.arc56.json +478 -0
- algorand_python_testing-1.1.0/tests/artifacts/StateOps/data/StateAcctParamsGetContract.clear.teal +7 -0
- algorand_python_testing-1.1.0/tests/artifacts/StateOps/data/StateAppGlobalContract.approval.teal +188 -0
- algorand_python_testing-1.1.0/tests/artifacts/StateOps/data/StateAppGlobalContract.arc32.json +188 -0
- algorand_python_testing-1.1.0/tests/artifacts/StateOps/data/StateAppGlobalContract.arc56.json +254 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/StateOps/data/StateAppGlobalContract.clear.teal +1 -1
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/StateOps/data/StateAppGlobalExContract.approval.teal +11 -11
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/StateOps/data/StateAppGlobalExContract.arc32.json +1 -1
- algorand_python_testing-1.1.0/tests/artifacts/StateOps/data/StateAppGlobalExContract.arc56.json +104 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/StateOps/data/StateAppGlobalExContract.clear.teal +1 -1
- algorand_python_testing-1.1.0/tests/artifacts/StateOps/data/StateAppLocalContract.approval.teal +246 -0
- algorand_python_testing-1.1.0/tests/artifacts/StateOps/data/StateAppLocalContract.arc32.json +251 -0
- algorand_python_testing-1.1.0/tests/artifacts/StateOps/data/StateAppLocalContract.arc56.json +329 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/StateOps/data/StateAppLocalContract.clear.teal +1 -1
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/StateOps/data/StateAppLocalExContract.approval.teal +16 -21
- algorand_python_testing-1.1.0/tests/artifacts/StateOps/data/StateAppLocalExContract.arc32.json +63 -0
- algorand_python_testing-1.1.0/tests/artifacts/StateOps/data/StateAppLocalExContract.arc56.json +112 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/StateOps/data/StateAppLocalExContract.clear.teal +1 -1
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/StateOps/data/StateAppParamsContract.approval.teal +134 -306
- algorand_python_testing-1.1.0/tests/artifacts/StateOps/data/StateAppParamsContract.arc32.json +199 -0
- algorand_python_testing-1.1.0/tests/artifacts/StateOps/data/StateAppParamsContract.arc56.json +297 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/StateOps/data/StateAppParamsContract.clear.teal +1 -1
- algorand_python_testing-1.1.0/tests/artifacts/StateOps/data/StateAssetHoldingContract.approval.teal +76 -0
- algorand_python_testing-1.1.0/tests/artifacts/StateOps/data/StateAssetHoldingContract.arc32.json +81 -0
- algorand_python_testing-1.1.0/tests/artifacts/StateOps/data/StateAssetHoldingContract.arc56.json +130 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/StateOps/data/StateAssetHoldingContract.clear.teal +1 -1
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/StateOps/data/StateAssetParamsContract.approval.teal +184 -413
- algorand_python_testing-1.1.0/tests/artifacts/StateOps/data/StateAssetParamsContract.arc32.json +253 -0
- algorand_python_testing-1.1.0/tests/artifacts/StateOps/data/StateAssetParamsContract.arc56.json +366 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/StateOps/data/StateAssetParamsContract.clear.teal +1 -1
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/Tuples/data/TuplesContract.approval.teal +8 -14
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/Tuples/data/TuplesContract.arc32.json +1 -1
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/Tuples/data/TuplesContract.arc56.json +8 -14
- algorand_python_testing-1.1.0/tests/artifacts/Tuples/data/TuplesContract.clear.teal +7 -0
- algorand_python_testing-1.1.0/tests/avm12/conftest.py +14 -0
- algorand_python_testing-1.1.0/tests/avm12/test_avm12.py +66 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/models/test_box.py +223 -4
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/models/test_box_map.py +25 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/models/test_box_ref.py +53 -42
- {algorand_python_testing-1.0.0b1/tests/utilities → algorand_python_testing-1.1.0/tests/primitives}/conftest.py +1 -1
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/state/conftest.py +2 -2
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/state/test_global_state.py +1 -1
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/test_array.py +64 -14
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/test_context.py +1 -1
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/test_miscellaneous_op.py +60 -62
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/test_op.py +9 -9
- algorand_python_testing-1.1.0/tests/utilities/__init__.py +0 -0
- {algorand_python_testing-1.0.0b1/tests/primitives → algorand_python_testing-1.1.0/tests/utilities}/conftest.py +1 -1
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/utilities/test_log.py +2 -2
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/utilities/test_size_of.py +33 -5
- algorand_python_testing-1.1.0/tests/value_generators/__init__.py +0 -0
- algorand_python_testing-1.0.0b1/docs/algopy.md +0 -9
- algorand_python_testing-1.0.0b1/src/_algopy_testing/primitives/__init__.py +0 -7
- algorand_python_testing-1.0.0b1/src/_algopy_testing/primitives/array.py +0 -144
- algorand_python_testing-1.0.0b1/tests/artifacts/Arc4ABIMethod/data/SignaturesContract.arc32.json +0 -253
- algorand_python_testing-1.0.0b1/tests/artifacts/Arc4ABIMethod/data/SignaturesContract.arc56.json +0 -420
- algorand_python_testing-1.0.0b1/tests/artifacts/Arc4InnerTxns/data/Arc4InnerTxnsContract.arc32.json +0 -55
- algorand_python_testing-1.0.0b1/tests/artifacts/Arc4InnerTxns/data/Arc4InnerTxnsContract.arc56.json +0 -107
- algorand_python_testing-1.0.0b1/tests/artifacts/Arc4PrimitiveOps/data/Arc4PrimitiveOpsContract.approval.teal +0 -2349
- algorand_python_testing-1.0.0b1/tests/artifacts/Arc4PrimitiveOps/data/Arc4PrimitiveOpsContract.arc32.json +0 -1029
- algorand_python_testing-1.0.0b1/tests/artifacts/Arc4PrimitiveOps/data/Arc4PrimitiveOpsContract.arc56.json +0 -1586
- algorand_python_testing-1.0.0b1/tests/artifacts/Arrays/data/Contract.arc32.json +0 -172
- algorand_python_testing-1.0.0b1/tests/artifacts/Arrays/data/Contract.arc56.json +0 -347
- algorand_python_testing-1.0.0b1/tests/artifacts/Arrays/data/ImmutableArrayContract.arc32.json +0 -450
- algorand_python_testing-1.0.0b1/tests/artifacts/Arrays/data/ImmutableArrayContract.arc56.json +0 -718
- algorand_python_testing-1.0.0b1/tests/artifacts/Arrays/data/StaticSizeContract.approval.teal +0 -895
- algorand_python_testing-1.0.0b1/tests/artifacts/Arrays/data/StaticSizeContract.arc32.json +0 -162
- algorand_python_testing-1.0.0b1/tests/artifacts/Arrays/data/StaticSizeContract.arc56.json +0 -274
- algorand_python_testing-1.0.0b1/tests/artifacts/BoxContract/contract.py +0 -19
- algorand_python_testing-1.0.0b1/tests/artifacts/BoxContract/data/BoxContract.approval.teal +0 -120
- algorand_python_testing-1.0.0b1/tests/artifacts/BoxContract/data/BoxContract.arc32.json +0 -63
- algorand_python_testing-1.0.0b1/tests/artifacts/BoxContract/data/BoxContract.arc56.json +0 -145
- algorand_python_testing-1.0.0b1/tests/artifacts/CreatedAppAsset/data/AppCall.arc32.json +0 -50
- algorand_python_testing-1.0.0b1/tests/artifacts/CreatedAppAsset/data/AppCall.arc56.json +0 -102
- algorand_python_testing-1.0.0b1/tests/artifacts/CreatedAppAsset/data/AppExpectingEffects.arc32.json +0 -77
- algorand_python_testing-1.0.0b1/tests/artifacts/CreatedAppAsset/data/AppExpectingEffects.arc56.json +0 -189
- algorand_python_testing-1.0.0b1/tests/artifacts/CryptoOps/data/CryptoOpsContract.arc32.json +0 -368
- algorand_python_testing-1.0.0b1/tests/artifacts/CryptoOps/data/CryptoOpsContract.arc56.json +0 -480
- algorand_python_testing-1.0.0b1/tests/artifacts/GlobalStateValidator/data/GlobalStateValidator.arc32.json +0 -59
- algorand_python_testing-1.0.0b1/tests/artifacts/GlobalStateValidator/data/GlobalStateValidator.arc56.json +0 -117
- algorand_python_testing-1.0.0b1/tests/artifacts/MiscellaneousOps/data/MiscellaneousOpsContract.approval.teal +0 -1656
- algorand_python_testing-1.0.0b1/tests/artifacts/MiscellaneousOps/data/MiscellaneousOpsContract.arc32.json +0 -858
- algorand_python_testing-1.0.0b1/tests/artifacts/MiscellaneousOps/data/MiscellaneousOpsContract.arc56.json +0 -1090
- algorand_python_testing-1.0.0b1/tests/artifacts/PrimitiveOps/data/PrimitiveOpsContract.approval.teal +0 -2834
- algorand_python_testing-1.0.0b1/tests/artifacts/PrimitiveOps/data/PrimitiveOpsContract.arc32.json +0 -1393
- algorand_python_testing-1.0.0b1/tests/artifacts/PrimitiveOps/data/PrimitiveOpsContract.arc56.json +0 -1740
- algorand_python_testing-1.0.0b1/tests/artifacts/StateMutations/data/StateMutations.arc32.json +0 -95
- algorand_python_testing-1.0.0b1/tests/artifacts/StateMutations/data/StateMutations.arc56.json +0 -264
- algorand_python_testing-1.0.0b1/tests/artifacts/StateOps/data/GlobalStateContract.arc32.json +0 -563
- algorand_python_testing-1.0.0b1/tests/artifacts/StateOps/data/GlobalStateContract.arc56.json +0 -865
- algorand_python_testing-1.0.0b1/tests/artifacts/StateOps/data/ITxnOpsContract.arc56.json +0 -102
- algorand_python_testing-1.0.0b1/tests/artifacts/StateOps/data/LocalStateContract.approval.teal +0 -780
- algorand_python_testing-1.0.0b1/tests/artifacts/StateOps/data/LocalStateContract.arc32.json +0 -381
- algorand_python_testing-1.0.0b1/tests/artifacts/StateOps/data/LocalStateContract.arc56.json +0 -618
- algorand_python_testing-1.0.0b1/tests/artifacts/StateOps/data/StateAcctParamsGetContract.arc32.json +0 -307
- algorand_python_testing-1.0.0b1/tests/artifacts/StateOps/data/StateAcctParamsGetContract.arc56.json +0 -512
- algorand_python_testing-1.0.0b1/tests/artifacts/StateOps/data/StateAppGlobalContract.approval.teal +0 -311
- algorand_python_testing-1.0.0b1/tests/artifacts/StateOps/data/StateAppGlobalContract.arc32.json +0 -188
- algorand_python_testing-1.0.0b1/tests/artifacts/StateOps/data/StateAppGlobalContract.arc56.json +0 -272
- algorand_python_testing-1.0.0b1/tests/artifacts/StateOps/data/StateAppGlobalExContract.arc56.json +0 -104
- algorand_python_testing-1.0.0b1/tests/artifacts/StateOps/data/StateAppLocalContract.approval.teal +0 -406
- algorand_python_testing-1.0.0b1/tests/artifacts/StateOps/data/StateAppLocalContract.arc32.json +0 -251
- algorand_python_testing-1.0.0b1/tests/artifacts/StateOps/data/StateAppLocalContract.arc56.json +0 -350
- algorand_python_testing-1.0.0b1/tests/artifacts/StateOps/data/StateAppLocalExContract.arc32.json +0 -63
- algorand_python_testing-1.0.0b1/tests/artifacts/StateOps/data/StateAppLocalExContract.arc56.json +0 -118
- algorand_python_testing-1.0.0b1/tests/artifacts/StateOps/data/StateAppParamsContract.arc32.json +0 -199
- algorand_python_testing-1.0.0b1/tests/artifacts/StateOps/data/StateAppParamsContract.arc56.json +0 -319
- algorand_python_testing-1.0.0b1/tests/artifacts/StateOps/data/StateAssetHoldingContract.approval.teal +0 -122
- algorand_python_testing-1.0.0b1/tests/artifacts/StateOps/data/StateAssetHoldingContract.arc32.json +0 -81
- algorand_python_testing-1.0.0b1/tests/artifacts/StateOps/data/StateAssetHoldingContract.arc56.json +0 -138
- algorand_python_testing-1.0.0b1/tests/artifacts/StateOps/data/StateAssetParamsContract.arc32.json +0 -253
- algorand_python_testing-1.0.0b1/tests/artifacts/StateOps/data/StateAssetParamsContract.arc56.json +0 -394
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/.coveragerc +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/.editorconfig +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/.github/dependabot.yml +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/.github/pull_request_template.md +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/.github/workflows/cd.yaml +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/.github/workflows/ci.yaml +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/.github/workflows/gh-pages.yaml +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/.gitignore +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/.pre-commit-config.yaml +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/.vscode/extensions.json +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/.vscode/launch.json +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/.vscode/settings.json +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/CONTRIBUTING.md +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/LICENSE +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/README.md +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/docs/Makefile +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/docs/__init__.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/docs/_static/custom.css +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/docs/conf.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/docs/make.bat +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/docs/testing-guide/signature-testing.md +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/docs/testing-guide/state-management.md +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/docs/testing-guide/subroutines.md +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/examples/README.md +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/examples/__init__.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/examples/auction/__init__.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/examples/auction/contract.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/examples/auction/test_contract.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/examples/htlc_logicsig/__init__.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/examples/htlc_logicsig/signature.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/examples/htlc_logicsig/test_signature.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/examples/marketplace/__init__.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/examples/proof_of_attendance/__init__.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/examples/proof_of_attendance/test_contract.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/examples/scratch_storage/__init__.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/examples/scratch_storage/contract.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/examples/scratch_storage/test_contract.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/examples/simple_voting/__init__.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/examples/simple_voting/contract.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/examples/simple_voting/test_contract.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/examples/zk_whitelist/__init__.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/examples/zk_whitelist/contract.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/examples/zk_whitelist/test_contract.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/scripts/__init__.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/scripts/check_stubs_cov.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/__init__.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/compiled.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/constants.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/context.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/context_helpers/__init__.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/context_helpers/context_storage.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/context_helpers/ledger_context.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/decorators/__init__.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/decorators/subroutine.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/enums.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/gtxn.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/itxn_loader.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/models/__init__.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/models/asset.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/models/logicsig.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/models/template_variable.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/models/unsigned_builtins.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/mutable.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/op/__init__.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/op/block.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/op/constants.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/op/crypto.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/op/global_values.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/op/itxn.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/op/misc.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/op/txn.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/primitives/biguint.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/primitives/string.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/primitives/uint64.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/protocols.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/py.typed +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/state/__init__.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/state/global_state.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/state/local_state.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/state/utils.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/utilities/__init__.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/utilities/budget.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/utilities/log.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/utilities/size_of.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/value_generators/__init__.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/value_generators/arc4.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/_algopy_testing/value_generators/txn.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/algopy/arc4.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/algopy/gtxn.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/algopy/itxn.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/algopy/op.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/algopy/py.typed +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/algopy_testing/__init__.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/src/algopy_testing/py.typed +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/templates/.macros.j2 +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/templates/.release_notes.md.j2 +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/templates/CHANGELOG.md.j2 +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/__init__.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/arc4/__init__.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/arc4/test_abi_call.py +0 -0
- {algorand_python_testing-1.0.0b1/tests/artifacts/Arc4ABIMethod → algorand_python_testing-1.1.0/tests/artifacts/AVM12}/__init__.py +0 -0
- {algorand_python_testing-1.0.0b1/tests/artifacts/Arc4InnerTxns → algorand_python_testing-1.1.0/tests/artifacts/Arc4ABIMethod}/__init__.py +0 -0
- /algorand_python_testing-1.0.0b1/tests/artifacts/StateOps/data/StateAcctParamsGetContract.clear.teal → /algorand_python_testing-1.1.0/tests/artifacts/Arc4ABIMethod/data/SignaturesContract.clear.teal +0 -0
- {algorand_python_testing-1.0.0b1/tests/artifacts/Arc4PrimitiveOps → algorand_python_testing-1.1.0/tests/artifacts/Arc4InnerTxns}/__init__.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/Arc4InnerTxns/contract.py +0 -0
- /algorand_python_testing-1.0.0b1/tests/artifacts/Tuples/data/TuplesContract.clear.teal → /algorand_python_testing-1.1.0/tests/artifacts/Arc4InnerTxns/data/Arc4InnerTxnsContract.clear.teal +0 -0
- {algorand_python_testing-1.0.0b1/tests/artifacts/Arrays → algorand_python_testing-1.1.0/tests/artifacts/Arc4PrimitiveOps}/__init__.py +0 -0
- {algorand_python_testing-1.0.0b1/tests/artifacts/BoxContract → algorand_python_testing-1.1.0/tests/artifacts/Arrays}/__init__.py +0 -0
- /algorand_python_testing-1.0.0b1/tests/artifacts/Arc4ABIMethod/data/SignaturesContract.clear.teal → /algorand_python_testing-1.1.0/tests/artifacts/Arrays/data/ImmutableArrayInitContract.clear.teal +0 -0
- {algorand_python_testing-1.0.0b1/tests/artifacts/Contains → algorand_python_testing-1.1.0/tests/artifacts/BoxContract}/__init__.py +0 -0
- {algorand_python_testing-1.0.0b1/tests/artifacts/CreatedAppAsset → algorand_python_testing-1.1.0/tests/artifacts/Contains}/__init__.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/Contains/contract.py +0 -0
- {algorand_python_testing-1.0.0b1/tests/artifacts/CryptoOps → algorand_python_testing-1.1.0/tests/artifacts/CreatedAppAsset}/__init__.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/CreatedAppAsset/contract.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/CreatedAppAsset/other.py +0 -0
- {algorand_python_testing-1.0.0b1/tests/artifacts/GlobalStateValidator → algorand_python_testing-1.1.0/tests/artifacts/CryptoOps}/__init__.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/CryptoOps/contract.py +0 -0
- {algorand_python_testing-1.0.0b1/tests/artifacts/MiscellaneousOps → algorand_python_testing-1.1.0/tests/artifacts/GlobalStateValidator}/__init__.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/GlobalStateValidator/contract.py +0 -0
- {algorand_python_testing-1.0.0b1/tests/artifacts/PrimitiveOps → algorand_python_testing-1.1.0/tests/artifacts/MiscellaneousOps}/__init__.py +0 -0
- {algorand_python_testing-1.0.0b1/tests/artifacts/StateMutations → algorand_python_testing-1.1.0/tests/artifacts/PrimitiveOps}/__init__.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/PrimitiveOps/contract.py +0 -0
- {algorand_python_testing-1.0.0b1/tests/artifacts/StateOps → algorand_python_testing-1.1.0/tests/artifacts/StateMutations}/__init__.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/StateMutations/data/Contract.approval.teal +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/StateMutations/data/Contract.arc32.json +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/StateMutations/data/Contract.clear.teal +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/StateMutations/statemutations.py +0 -0
- {algorand_python_testing-1.0.0b1/tests/artifacts/Tuples → algorand_python_testing-1.1.0/tests/artifacts/StateOps}/__init__.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/StateOps/data/StateAcctParamsGet.approval.teal +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/StateOps/data/StateAcctParamsGet.arc32.json +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/StateOps/data/StateAcctParamsGet.clear.teal +0 -0
- {algorand_python_testing-1.0.0b1/tests/artifacts → algorand_python_testing-1.1.0/tests/artifacts/Tuples}/__init__.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/artifacts/Tuples/contract.py +0 -0
- {algorand_python_testing-1.0.0b1/tests/contexts → algorand_python_testing-1.1.0/tests/artifacts}/__init__.py +0 -0
- {algorand_python_testing-1.0.0b1/tests/models → algorand_python_testing-1.1.0/tests/avm12}/__init__.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/common.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/conftest.py +0 -0
- {algorand_python_testing-1.0.0b1/tests/primitives → algorand_python_testing-1.1.0/tests/contexts}/__init__.py +0 -0
- {algorand_python_testing-1.0.0b1/tests/state → algorand_python_testing-1.1.0/tests/models}/__init__.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/models/test_asset.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/models/test_contract.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/models/test_uenumerate.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/models/test_urange.py +0 -0
- {algorand_python_testing-1.0.0b1/tests/utilities → algorand_python_testing-1.1.0/tests/primitives}/__init__.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/primitives/test_biguint.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/primitives/test_bytes.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/primitives/test_string.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/primitives/test_uint64.py +0 -0
- {algorand_python_testing-1.0.0b1/tests/value_generators → algorand_python_testing-1.1.0/tests/state}/__init__.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/state/test_local_state.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/state/test_mutations.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/util.py +0 -0
- {algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/tests/value_generators/test_avm.py +0 -0
|
@@ -1,4 +1,60 @@
|
|
|
1
1
|
# CHANGELOG
|
|
2
|
+
## v1.1.0 (2025-10-20)
|
|
3
|
+
|
|
4
|
+
## v1.1.0-beta.1 (2025-10-20)
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* add mock implementations for validation functionality ([`ccde074`](https://github.com/algorandfoundation/algorand-python-testing/commit/ccde0740889bd68ef0fba418182d71ac0fc9f76a))
|
|
9
|
+
|
|
10
|
+
### Documentation
|
|
11
|
+
|
|
12
|
+
* add note about data validation in the testing library ([`bc47a68`](https://github.com/algorandfoundation/algorand-python-testing/commit/bc47a6838cf00907f2a718ddb8cb45fe97947d77))
|
|
13
|
+
|
|
14
|
+
* add missing native types in coverage table ([`a95116c`](https://github.com/algorandfoundation/algorand-python-testing/commit/a95116c567dc77cfcf4f7ec517df60bb3d9d1eb5))
|
|
15
|
+
|
|
16
|
+
## v1.0.0 (2025-10-06)
|
|
17
|
+
|
|
18
|
+
## v1.0.0-beta.8 (2025-10-06)
|
|
19
|
+
|
|
20
|
+
### Documentation
|
|
21
|
+
|
|
22
|
+
* fix typos and broken links ([`f221910`](https://github.com/algorandfoundation/algorand-python-testing/commit/f221910b54a2cdc76aa99b8883d75d4ddae78ee3))
|
|
23
|
+
|
|
24
|
+
## v1.0.0-beta.7 (2025-09-26)
|
|
25
|
+
|
|
26
|
+
### Bug fixes
|
|
27
|
+
|
|
28
|
+
* bump puyapy dependencies ([`8b2064d`](https://github.com/algorandfoundation/algorand-python-testing/commit/8b2064dc8bd94b0dadf6f283e8d639543241eadc))
|
|
29
|
+
|
|
30
|
+
Update to latest release candidates, so dependencies projects using both puyapy, language server and algorand python testing can resolve to a consistent version
|
|
31
|
+
|
|
32
|
+
## v1.0.0-beta.6 (2025-09-18)
|
|
33
|
+
|
|
34
|
+
### Features
|
|
35
|
+
|
|
36
|
+
* update langspec to 4.3.0 ([`c05bdc0`](https://github.com/algorandfoundation/algorand-python-testing/commit/c05bdc053f4b6aa52206cbeeaddb40609688b052))
|
|
37
|
+
|
|
38
|
+
## v1.0.0-beta.5 (2025-09-16)
|
|
39
|
+
|
|
40
|
+
## v1.0.0-beta.4 (2025-09-12)
|
|
41
|
+
|
|
42
|
+
### Features
|
|
43
|
+
|
|
44
|
+
* make BoxRef methods directly accessible on Box class ([`38e12f6`](https://github.com/algorandfoundation/algorand-python-testing/commit/38e12f6d595c204eb6f7dcd74c393c46f166e3d4))
|
|
45
|
+
|
|
46
|
+
## v1.0.0-beta.3 (2025-09-08)
|
|
47
|
+
|
|
48
|
+
### Features
|
|
49
|
+
|
|
50
|
+
* add .as_uint64 and .as_biguint methods to replace native property ([`0f9c6c0`](https://github.com/algorandfoundation/algorand-python-testing/commit/0f9c6c06b6e1b986c4e512cbbe0098aea32615b7))
|
|
51
|
+
|
|
52
|
+
## v1.0.0-beta.2 (2025-09-03)
|
|
53
|
+
|
|
54
|
+
### Features
|
|
55
|
+
|
|
56
|
+
* add stub implementations of array types ([`b7b831d`](https://github.com/algorandfoundation/algorand-python-testing/commit/b7b831da7570367494e823485910bc7191376e48))
|
|
57
|
+
|
|
2
58
|
## v1.0.0-beta.1 (2025-07-16)
|
|
3
59
|
|
|
4
60
|
### Features
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: algorand-python-testing
|
|
3
|
-
Version: 1.0
|
|
3
|
+
Version: 1.1.0
|
|
4
4
|
Summary: Algorand Python testing library
|
|
5
5
|
Project-URL: Documentation, https://github.com/algorandfoundation/puya/tree/main/algopy_testing#README.md
|
|
6
6
|
Project-URL: Issues, https://github.com/algorandfoundation/puya/issues
|
|
@@ -15,7 +15,7 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
15
15
|
Classifier: Programming Language :: Python :: 3.13
|
|
16
16
|
Classifier: Topic :: Software Development :: Testing
|
|
17
17
|
Requires-Python: >=3.12
|
|
18
|
-
Requires-Dist: algorand-python>=
|
|
18
|
+
Requires-Dist: algorand-python>=3
|
|
19
19
|
Requires-Dist: coincurve>=19.0.1
|
|
20
20
|
Requires-Dist: ecdsa>=0.17.0
|
|
21
21
|
Requires-Dist: pycryptodomex<4,>=3.6.0
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Algorand Python
|
|
2
|
+
|
|
3
|
+
Algorand Python is a partial implementation of the Python programming language that runs on the AVM. It includes a statically typed framework for developing Algorand smart contracts and logic signatures, with Pythonic interfaces to underlying AVM functionality that work with standard Python tooling.
|
|
4
|
+
|
|
5
|
+
Algorand Python is compiled for execution on the AVM by PuyaPy, an optimising compiler that ensures the resulting AVM bytecode has execution semantics that match the given Python code. PuyaPy produces output that is directly compatible with [AlgoKit typed clients](https://github.com/algorandfoundation/algokit-cli/blob/main/docs/features/generate.md#1-typed-clients) to make deployment and calling easy.
|
|
6
|
+
|
|
7
|
+
## Quick start
|
|
8
|
+
|
|
9
|
+
To get started, refer to the [official documentation](https://algorandfoundation.github.io/puya).
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
# API Reference
|
|
2
2
|
|
|
3
|
-
An overview of the `algorand-python-testing`
|
|
3
|
+
An overview of the `algopy_testing` module in `algorand-python-testing` library - covering the main classes and functions.
|
|
4
4
|
|
|
5
5
|
```{hint}
|
|
6
|
-
Spotted a typo in documentation? This project is open source
|
|
6
|
+
Spotted a typo in the documentation? This project is open source; please submit an issue or a PR on [GitHub](https://github.com/algorandfoundation/algorand-python-testing).
|
|
7
7
|
```
|
|
8
8
|
|
|
9
9
|
```{warning}
|
|
10
|
-
Note
|
|
10
|
+
Note: Auto-generated class documentation may reference `_algopy_testing`; these should be interpreted as the `algopy_testing` namespace. The naming discrepancy will be fixed in a future update.
|
|
11
11
|
```
|
|
12
12
|
|
|
13
13
|
## Contexts
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
# Coverage
|
|
2
2
|
|
|
3
|
-
See which `algorand-python` stubs are implemented by the `algorand-python-testing` library. See the [Concepts](testing-guide/concepts.md#types-of-algopy-stub-implementations) section for more details on the implementation categories. Refer to the [`algorand-python` stubs API](api.md) for the full list of
|
|
3
|
+
See which `algorand-python` stubs are implemented by the `algorand-python-testing` library. See the [Concepts](testing-guide/concepts.md#types-of-algopy-stub-implementations) section for more details on the implementation categories. Refer to the [`algorand-python` stubs API](api.md) for the full list of stubs for which the `algorand-python-testing` library provides implementations referenced in the table below.
|
|
4
4
|
|
|
5
5
|
| Name | Implementation type |
|
|
6
6
|
|---------------------------------------------|---------------------|
|
|
7
7
|
| algopy.Account | Emulated |
|
|
8
8
|
| algopy.Application | Emulated |
|
|
9
9
|
| algopy.Asset | Emulated |
|
|
10
|
+
| algopy.Array | Native |
|
|
10
11
|
| algopy.BigUInt | Native |
|
|
11
12
|
| algopy.Box | Emulated |
|
|
12
13
|
| algopy.BoxMap | Emulated |
|
|
@@ -16,14 +17,19 @@ See which `algorand-python` stubs are implemented by the `algorand-python-testin
|
|
|
16
17
|
| algopy.CompiledContract | Mockable |
|
|
17
18
|
| algopy.CompiledLogicSig | Mockable |
|
|
18
19
|
| algopy.Contract | Emulated |
|
|
20
|
+
| algopy.FixedArray | Native |
|
|
19
21
|
| algopy.Global | Emulated |
|
|
20
22
|
| algopy.GlobalState | Emulated |
|
|
23
|
+
| algopy.ImmutableArray | Native |
|
|
24
|
+
| algopy.ImmutableFixedArray | Native |
|
|
21
25
|
| algopy.LocalState | Emulated |
|
|
22
26
|
| algopy.LogicSig | Emulated |
|
|
23
27
|
| algopy.OnCompleteAction | Native |
|
|
24
28
|
| algopy.OpUpFeeSource | Native |
|
|
29
|
+
| algopy.ReferenceArray | Native |
|
|
25
30
|
| algopy.StateTotals | Emulated |
|
|
26
31
|
| algopy.String | Native |
|
|
32
|
+
| algopy.Struct | Native |
|
|
27
33
|
| algopy.TemplateVar | Emulated |
|
|
28
34
|
| algopy.TransactionType | Native |
|
|
29
35
|
| algopy.Txn | Emulated |
|
|
@@ -158,3 +164,4 @@ See which `algorand-python` stubs are implemented by the `algorand-python-testin
|
|
|
158
164
|
| algopy.op.EllipticCurve | Mockable |
|
|
159
165
|
| algopy.op.VrfVerify | Mockable |
|
|
160
166
|
| algopy.op.vrf_verify | Mockable |
|
|
167
|
+
| algopy.op.falcon_verify | Mockable |
|
|
@@ -5,9 +5,9 @@ Below is a showcase of various examples of unit testing real and sample Algorand
|
|
|
5
5
|
| Contract Name | Test File | Key Features Demonstrated | Test versions of Algopy Abstractions used |
|
|
6
6
|
| ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- |
|
|
7
7
|
| Auction | [test_contract.py](https://github.com/algorandfoundation/algorand-python-testing/blob/main/examples/auction/test_contract.py) | - Use of algopy_testing_context<br>- Mocking of global state and transaction fields<br>- Testing of ARC4 contract methods<br>- Emulation of asset creation and transfers<br>- Verification of inner transactions | - **ARC4Contract**<br>- **Global**<br>- **Txn**<br>- **Asset**<br>- **Account**<br>- **LocalState** |
|
|
8
|
-
| Proof of Attendance | [test_contract.py](https://github.com/algorandfoundation/algorand-python-testing/blob/main/examples/proof_of_attendance/test_contract.py) | - Creation and management of dummy assets<br>- Testing of box storage operations<br>- Verification of inner transactions for asset transfers<br>- Use of any
|
|
8
|
+
| Proof of Attendance | [test_contract.py](https://github.com/algorandfoundation/algorand-python-testing/blob/main/examples/proof_of_attendance/test_contract.py) | - Creation and management of dummy assets<br>- Testing of box storage operations<br>- Verification of inner transactions for asset transfers<br>- Use of `any.*` methods for generating test data | - **ARC4Contract**<br>- **Box**<br>- **BoxMap**<br>- **Asset**<br>- **Account**<br>- **op** |
|
|
9
9
|
| Simple Voting | [test_contract.py](https://github.com/algorandfoundation/algorand-python-testing/blob/main/examples/simple_voting/test_contract.py) | - Testing of global and local state operations<br>- Verification of transaction group operations<br>- Mocking of payment transactions | - **Contract**<br>- **GlobalState**<br>- **LocalState**<br>- **Txn**<br>- **op.GTxn** |
|
|
10
|
-
| ZK Whitelist | [test_contract.py](https://github.com/algorandfoundation/algorand-python-testing/blob/main/examples/zk_whitelist/test_contract.py) | - Testing of zero-knowledge proof verification<br>- Mocking of external application calls<br>- Use of ARC4 types and methods | - **ARC4Contract**<br>- **
|
|
10
|
+
| ZK Whitelist | [test_contract.py](https://github.com/algorandfoundation/algorand-python-testing/blob/main/examples/zk_whitelist/test_contract.py) | - Testing of zero-knowledge proof verification<br>- Mocking of external application calls<br>- Use of ARC4 types and methods | - **ARC4Contract**<br>- **ARC4 types**<br>- **LocalState**<br>- **Global**<br>- **Txn** |
|
|
11
11
|
| HTLC LogicSig | [test_signature.py](https://github.com/algorandfoundation/algorand-python-testing/blob/main/examples/htlc_logicsig/test_signature.py) | - Testing of LogicSig contracts<br>- Verification of time-based conditions<br>- Mocking of transaction parameters | - **logicsig**<br>- **Account**<br>- **Txn**<br>- **Global**<br>- **op** |
|
|
12
|
-
| Marketplace | [test_contract.py](https://github.com/algorandfoundation/algorand-python-testing/blob/main/examples/marketplace/test_contract.py) | - Testing of complex marketplace operations<br>- Use of BoxMap for listings<br>- Testing of asset transfers and payments | - **ARC4Contract**<br>- **BoxMap**<br>- **Asset**<br>- **
|
|
12
|
+
| Marketplace | [test_contract.py](https://github.com/algorandfoundation/algorand-python-testing/blob/main/examples/marketplace/test_contract.py) | - Testing of complex marketplace operations<br>- Use of BoxMap for listings<br>- Testing of asset transfers and payments | - **ARC4Contract**<br>- **BoxMap**<br>- **Asset**<br>- **ARC4 types**<br>- **Global**<br>- **Txn** |
|
|
13
13
|
| Scratch Storage | [test_contract.py](https://github.com/algorandfoundation/algorand-python-testing/blob/main/examples/scratch_storage/test_contract.py) | - Testing of scratch space usage<br>- Verification of scratch slot values | - **ARC4Contract**<br>- **Contract**<br>- **op** |
|
|
@@ -14,7 +14,7 @@ Operational Codes, or opcodes, are AVM instructions that are executed directly b
|
|
|
14
14
|
|
|
15
15
|
## What are Value Generators?
|
|
16
16
|
|
|
17
|
-
Value Generators are helper methods that
|
|
17
|
+
Value Generators are helper methods that produce randomized values for testing when the exact value of a type isn't important. In Algorand Python testing these generators are exposed as properties on the test context manager and accessed via `any.*` (for example, `any.arc4.*` and `any.txn.*` for ARC4 types). To learn more, see the [Value Generators section](testing-guide/concepts.md#value-generators).
|
|
18
18
|
|
|
19
19
|
## What are the limitations of the Algorand Python Testing framework?
|
|
20
20
|
|
|
@@ -26,7 +26,7 @@ The Algorand Python Testing framework emulates the Algorand Virtual Machine (AVM
|
|
|
26
26
|
4. Certain cryptographic operations are mocked or simplified
|
|
27
27
|
5. No state proof generation or verification
|
|
28
28
|
|
|
29
|
-
For scenarios where these limitations are crucial, it's recommended to pair this framework with integration testing. If you have a solid reason to justify introducing new emulated behaviour, please open an issue or contribute to the project on [
|
|
29
|
+
For scenarios where these limitations are crucial, it's recommended to pair this framework with integration testing. If you have a solid reason to justify introducing new emulated behaviour, please open an issue or contribute to the project on [GitHub](https://github.com/algorandfoundation/algorand-python-testing).
|
|
30
30
|
|
|
31
31
|
## How does balance tracking work in the testing framework?
|
|
32
32
|
|
|
@@ -46,16 +46,16 @@ Some cryptographic operations are mocked or simplified in the framework. For a d
|
|
|
46
46
|
|
|
47
47
|
## Can I use this framework for security-critical validations?
|
|
48
48
|
|
|
49
|
-
While this framework is useful for unit testing and local development, it should not be the only tool used for security-critical validations or performance benchmarking. It's designed to approximate AVM
|
|
49
|
+
While this framework is useful for unit testing and local development, it should not be the only tool used for security-critical validations or performance benchmarking. It's designed to approximate AVM behaviour for common scenarios. Always complement your testing with additional integration testing options available in `algokit`, where you can test against real localnet or testnet environments.
|
|
50
50
|
|
|
51
51
|
## Is there an example of how to use this framework alongside integration tests?
|
|
52
52
|
|
|
53
53
|
Yes, the `algokit-python-template`, accessible via `algokit init`, provides a working example of how to structure `algorand-python-testing` along with regular integration tests against localnet.
|
|
54
54
|
|
|
55
55
|
```{hint}
|
|
56
|
-
|
|
56
|
+
The `algokit-python-template`, accessible via `algokit init -t python`, provides a comprehensive and customizable working example of how to structure `algorand-python-testing` along with regular integration tests against localnet.
|
|
57
57
|
```
|
|
58
58
|
|
|
59
59
|
## Is it compatible with `pytest`?
|
|
60
60
|
|
|
61
|
-
Yes, it is compatible with `pytest` and _any_ other
|
|
61
|
+
Yes, it is compatible with `pytest` and _any_ other Python testing framework as it is agnostic of the testing framework as long as it's Python. If you spot incompatibility with a certain tool, please open an issue or contribute to the project on [GitHub](https://github.com/algorandfoundation/algorand-python-testing).
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
[](https://github.com/algorandfoundation/algorand-python-testing)
|
|
6
6
|
[](https://developer.algorand.org/algokit/)
|
|
7
7
|
|
|
8
|
-
`algorand-python-testing` is a companion package to [Algorand Python](https://github.com/algorandfoundation/puya) that enables efficient unit testing of Algorand Python smart contracts in an offline environment. This package emulates key AVM
|
|
8
|
+
`algorand-python-testing` is a companion package to [Algorand Python](https://github.com/algorandfoundation/puya) that enables efficient unit testing of Algorand Python smart contracts in an offline environment. This package emulates key AVM behaviours without requiring a network connection, offering fast and reliable testing capabilities with a familiar Pythonic interface.
|
|
9
9
|
|
|
10
10
|
The `algorand-python-testing` package provides:
|
|
11
11
|
|
|
@@ -160,7 +160,7 @@ This example demonstrates key aspects of testing with `algorand-python-testing`
|
|
|
160
160
|
- Checking global and local state changes after method execution.
|
|
161
161
|
- Verifying return values from ABI methods using ARC4-specific types.
|
|
162
162
|
|
|
163
|
-
> **NOTE**: Thorough testing is crucial in smart contract development due to their immutable nature post-deployment. Comprehensive unit and integration tests ensure contract validity and reliability.
|
|
163
|
+
> **NOTE**: Thorough testing is crucial in smart contract development due to their immutable nature post-deployment. Comprehensive unit and integration tests ensure contract validity and reliability. Optimising for efficiency can significantly improve user experience by reducing transaction fees and simplifying interactions. Investing in robust testing and optimisation practices is crucial and offers many benefits in the long run.
|
|
164
164
|
|
|
165
165
|
### Next steps
|
|
166
166
|
|
{algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/docs/testing-guide/arc4-types.md
RENAMED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# ARC4 Types
|
|
2
2
|
|
|
3
|
-
These types are available under the `algopy.arc4` namespace. Refer to the [ARC4 specification](https://
|
|
3
|
+
These types are available under the `algopy.arc4` namespace. Refer to the [ARC4 specification](https://dev.algorand.co/arc-standards/arc-0004/) for more details on the spec.
|
|
4
4
|
|
|
5
5
|
```{hint}
|
|
6
|
-
|
|
6
|
+
The test context manager provides _value generators_ for ARC4 types. To access the _value generators_, use `{context_instance}.any.arc4` property. See more examples below.
|
|
7
7
|
```
|
|
8
8
|
|
|
9
9
|
```{note}
|
|
@@ -63,7 +63,7 @@ address_value = arc4.Address("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
|
63
63
|
# Generate a random address
|
|
64
64
|
random_address = context.any.arc4.address()
|
|
65
65
|
|
|
66
|
-
# Access native
|
|
66
|
+
# Access native underlying type
|
|
67
67
|
native = random_address.native
|
|
68
68
|
```
|
|
69
69
|
|
|
@@ -76,7 +76,7 @@ from algopy import arc4
|
|
|
76
76
|
bytes_value = arc4.DynamicBytes(b"Hello, Algorand!")
|
|
77
77
|
|
|
78
78
|
# Generate random dynamic bytes
|
|
79
|
-
random_dynamic_bytes = context.any.arc4.dynamic_bytes(n=123) # n is the number of bits in the
|
|
79
|
+
random_dynamic_bytes = context.any.arc4.dynamic_bytes(n=123) # n is the number of bits in the ARC4 dynamic bytes
|
|
80
80
|
```
|
|
81
81
|
|
|
82
82
|
## String
|
|
@@ -88,7 +88,7 @@ from algopy import arc4
|
|
|
88
88
|
string_value = arc4.String("Hello, Algorand!")
|
|
89
89
|
|
|
90
90
|
# Generate random string
|
|
91
|
-
random_string = context.any.arc4.string(n=12) # n is the number of bits in the
|
|
91
|
+
random_string = context.any.arc4.string(n=12) # n is the number of bits in the ARC4 string
|
|
92
92
|
```
|
|
93
93
|
|
|
94
94
|
```{testcleanup}
|
{algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/docs/testing-guide/avm-types.md
RENAMED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
These types are available directly under the `algopy` namespace. They represent the basic AVM primitive types and can be instantiated directly or via _value generators_:
|
|
4
4
|
|
|
5
5
|
```{note}
|
|
6
|
-
For
|
|
6
|
+
For primitive `algopy` types such as `Account`, `Application`, `Asset`, `UInt64`, `BigUint`, `Bytes`, and `String`, instantiation can be performed directly, with or without a corresponding _value generator_. If you have a suggestion for a new _value generator_ implementation, please open an issue in the [`algorand-python-testing`](https://github.com/algorandfoundation/algorand-python-testing) repository or contribute by following the [contribution guide](https://github.com/algorandfoundation/algorand-python-testing/blob/main/CONTRIBUTING.md).
|
|
7
7
|
```
|
|
8
8
|
|
|
9
9
|
```{testsetup}
|
{algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/docs/testing-guide/concepts.md
RENAMED
|
@@ -4,7 +4,7 @@ The following sections provide an overview of key concepts and features in the A
|
|
|
4
4
|
|
|
5
5
|
## Test Context
|
|
6
6
|
|
|
7
|
-
The main abstraction for interacting with the testing framework is the [`AlgopyTestContext`](
|
|
7
|
+
The main abstraction for interacting with the testing framework is the [`AlgopyTestContext`](#_algopy_testing.context.AlgopyTestContext). It creates an emulated Algorand environment that closely mimics AVM behaviour relevant to unit testing contracts and provides a Pythonic interface for interacting with the emulated environment.
|
|
8
8
|
|
|
9
9
|
```python
|
|
10
10
|
from algopy_testing import algopy_testing_context
|
|
@@ -24,15 +24,18 @@ The context manager interface exposes three main properties:
|
|
|
24
24
|
3. `any`: An instance of `AlgopyValueGenerator` for generating randomized test data.
|
|
25
25
|
|
|
26
26
|
For detailed method signatures, parameters, and return types, refer to the following API sections:
|
|
27
|
-
|
|
28
|
-
-
|
|
29
|
-
-
|
|
27
|
+
|
|
28
|
+
- [`algopy_testing.LedgerContext`](#_algopy_testing.context_helpers.ledger_context.LedgerContext)
|
|
29
|
+
- [`algopy_testing.TransactionContext`](#_algopy_testing.context_helpers.txn_context.TransactionContext)
|
|
30
|
+
- [`algopy_testing.AVMValueGenerator`](#_algopy_testing.value_generators.avm.AVMValueGenerator)
|
|
31
|
+
- [`algopy_testing.TxnValueGenerator`](#_algopy_testing.value_generators.txn.TxnValueGenerator)
|
|
32
|
+
- [`algopy_testing.ARC4ValueGenerator`](#_algopy_testing.value_generators.arc4.ARC4ValueGenerator)
|
|
30
33
|
|
|
31
34
|
The `any` property provides access to different value generators:
|
|
32
35
|
|
|
33
|
-
-
|
|
34
|
-
-
|
|
35
|
-
-
|
|
36
|
+
- `AVMValueGenerator`: Base abstractions for AVM types. All methods are available directly on the instance returned from `any`.
|
|
37
|
+
- `TxnValueGenerator`: Accessible via `any.txn`, for transaction-related data.
|
|
38
|
+
- `ARC4ValueGenerator`: Accessible via `any.arc4`, for ARC4 type data.
|
|
36
39
|
|
|
37
40
|
These generators allow creation of constrained random values for various AVM entities (accounts, assets, applications, etc.) when specific values are not required.
|
|
38
41
|
|
|
@@ -50,9 +53,13 @@ As explained in the [introduction](index.md), `algorand-python-testing` _injects
|
|
|
50
53
|
|
|
51
54
|
1. **Native**: Fully matches AVM computation in Python. For example, `algopy.op.sha256` and other cryptographic operations behave identically in AVM and unit tests. This implies that the majority of opcodes that are 'pure' functions in AVM also have a native Python implementation provided by this package. These abstractions and opcodes can be used within and outside of the testing context.
|
|
52
55
|
|
|
53
|
-
2. **Emulated**: Uses `AlgopyTestContext` to mimic AVM
|
|
56
|
+
2. **Emulated**: Uses `AlgopyTestContext` to mimic AVM behaviour. For example, `Box.put` on an `algopy.Box` within a test context stores data in the test manager, not the real Algorand network, but provides the same interface.
|
|
54
57
|
|
|
55
|
-
3. **Mockable**: Not implemented, but can be mocked or patched. For example, `algopy.abi_call` can be mocked to return specific values or
|
|
58
|
+
3. **Mockable**: Not implemented, but can be mocked or patched. For example, `algopy.abi_call` can be mocked to return specific values or behaviours; otherwise, it raises a `NotImplementedError`. This category covers cases where native or emulated implementation in a unit test context is impractical or overly complex.
|
|
56
59
|
|
|
57
|
-
For a full list of all public `algopy` types and their corresponding implementation category, refer to the [Coverage](coverage.md) section.
|
|
58
|
-
|
|
60
|
+
For a full list of all public `algopy` types and their corresponding implementation category, refer to the [Coverage](../coverage.md) section.
|
|
61
|
+
|
|
62
|
+
## Data Validation
|
|
63
|
+
|
|
64
|
+
Algorand Python and the puya compiler have functionality to perform validation of transaction inputs via the `--validate-abi-args`, `--validate-abi-return` CLI arguments, `arc4.abimethod(validate_encoding=...)` decorator and `.validate()` methods.
|
|
65
|
+
The Algorand Python Testing library does *NOT* implement this validation behaviour, as you should test invalid inputs using an integrated test against a real Algorand network.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Smart Contract Testing
|
|
2
2
|
|
|
3
|
-
This guide provides an overview of how to test smart contracts using the Algorand Python SDK (`algopy`).
|
|
3
|
+
This guide provides an overview of how to test smart contracts using the Algorand Python SDK (`algopy`). It covers the basics of testing `ARC4Contract` and `Contract` classes, focusing on the `abimethod` and `baremethod` decorators.
|
|
4
4
|
|
|
5
5
|

|
|
6
6
|
|
|
@@ -24,7 +24,7 @@ context = ctx_manager.__enter__()
|
|
|
24
24
|
|
|
25
25
|
Subclasses of `algopy.ARC4Contract` are **required** to be instantiated with an active test context. As part of instantiation, the test context will automatically create a matching `algopy.Application` object instance.
|
|
26
26
|
|
|
27
|
-
Within the class implementation, methods decorated with `algopy.arc4.abimethod` and `algopy.arc4.baremethod` will automatically assemble an `algopy.gtxn.ApplicationCallTransaction`
|
|
27
|
+
Within the class implementation, methods decorated with `algopy.arc4.abimethod` and `algopy.arc4.baremethod` will automatically assemble an `algopy.gtxn.ApplicationCallTransaction` to emulate the AVM application call. This behaviour can be overridden by setting the transaction group manually as part of test setup; this is done via implicit invocation of the `algopy_testing.context.any_application()` _value generator_ (refer to the [API](../api.md) for more details).
|
|
28
28
|
|
|
29
29
|
```{testcode}
|
|
30
30
|
class SimpleVotingContract(algopy.ARC4Contract):
|
|
@@ -104,9 +104,9 @@ assert votes == algopy.UInt64(0)
|
|
|
104
104
|
|
|
105
105
|
For more examples of tests using `algopy.ARC4Contract`, see the [examples](../examples.md) section.
|
|
106
106
|
|
|
107
|
-
## `algopy.Contract
|
|
107
|
+
## `algopy.Contract`
|
|
108
108
|
|
|
109
|
-
Subclasses of `algopy.Contract` are **required** to be instantiated with an active test context. As part of instantiation, the test context will automatically create a matching `algopy.Application` object instance. This
|
|
109
|
+
Subclasses of `algopy.Contract` are **required** to be instantiated with an active test context. As part of instantiation, the test context will automatically create a matching `algopy.Application` object instance. This behaviour is identical to `algopy.ARC4Contract` class instances.
|
|
110
110
|
|
|
111
111
|
Unlike `algopy.ARC4Contract`, `algopy.Contract` requires manual setup of the transaction context and explicit method calls. Alternatively, you can use `active_txn_overrides` to specify application arguments and foreign arrays without needing to create a full transaction group if your aim is to patch a specific active transaction related metadata.
|
|
112
112
|
|
{algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/docs/testing-guide/index.md
RENAMED
|
@@ -33,7 +33,7 @@ The Algorand Python Testing framework streamlines unit testing of your Algorand
|
|
|
33
33
|
4. Verify logic signatures and subroutines
|
|
34
34
|
5. Manage global state, local state, scratch slots, and boxes in test contexts
|
|
35
35
|
6. Simulate transactions and transaction groups, including inner transactions
|
|
36
|
-
7. Verify opcode
|
|
36
|
+
7. Verify opcode behaviour
|
|
37
37
|
|
|
38
38
|
By using this framework, you can ensure your Algorand Python smart contracts function correctly before deploying them to a live network.
|
|
39
39
|
|
|
@@ -44,9 +44,9 @@ Key features of the framework include:
|
|
|
44
44
|
- ARC4 Support: Tools for testing ARC4 contracts and methods, including struct definitions and ABI encoding/decoding
|
|
45
45
|
- Transaction Simulation: Ability to create and execute various transaction types
|
|
46
46
|
- State Management: Tools for managing and verifying global and local state changes
|
|
47
|
-
- Opcode Simulation: Implementations of AVM opcodes for accurate smart contract
|
|
47
|
+
- Opcode Simulation: Implementations of AVM opcodes for accurate smart contract behaviour testing
|
|
48
48
|
|
|
49
|
-
The framework is designed to work seamlessly with Algorand Python smart contracts, allowing developers to write comprehensive unit tests that closely mimic the
|
|
49
|
+
The framework is designed to work seamlessly with Algorand Python smart contracts, allowing developers to write comprehensive unit tests that closely mimic the behaviour of contracts on the Algorand blockchain.
|
|
50
50
|
|
|
51
51
|
## Table of Contents
|
|
52
52
|
|
{algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/docs/testing-guide/opcodes.md
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# AVM Opcodes
|
|
2
2
|
|
|
3
|
-
The [coverage](coverage.md) file provides a comprehensive list of all opcodes and their respective types, categorized as _Mockable_, _Emulated_, or _Native_ within the `algorand-python-testing` package. This section highlights a **subset** of opcodes and types that typically require interaction with the test context manager.
|
|
3
|
+
The [coverage](../coverage.md) file provides a comprehensive list of all opcodes and their respective types, categorized as _Mockable_, _Emulated_, or _Native_ within the `algorand-python-testing` package. This section highlights a **subset** of opcodes and types that typically require interaction with the test context manager.
|
|
4
4
|
|
|
5
5
|
`Native` opcodes are assumed to function as they do in the Algorand Virtual Machine, given their stateless nature. If you encounter issues with any `Native` opcodes, please raise an issue in the [`algorand-python-testing` repo](https://github.com/algorandfoundation/algorand-python-testing/issues/new/choose) or contribute a PR following the [Contributing](https://github.com/algorandfoundation/algorand-python-testing/blob/main/CONTRIBUTING.md) guide.
|
|
6
6
|
|
|
@@ -375,7 +375,7 @@ These examples demonstrate how to mock key mockable opcodes in `algorand-python-
|
|
|
375
375
|
|
|
376
376
|
Mocking these opcodes allows you to:
|
|
377
377
|
|
|
378
|
-
1. Control complex operations'
|
|
378
|
+
1. Control complex operations' behaviour not covered by _implemented_ and _emulated_ types.
|
|
379
379
|
2. Test edge cases and error conditions.
|
|
380
380
|
3. Isolate contract logic from external dependencies.
|
|
381
381
|
|
{algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/docs/testing-guide/transactions.md
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Transactions
|
|
2
2
|
|
|
3
|
-
The testing framework follows the Transaction definitions described in [`algorand-python` docs](https://
|
|
3
|
+
The testing framework follows the Transaction definitions described in [`algorand-python` docs](https://algorandfoundation.github.io/puya/lg-transactions.html). This section focuses on _value generators_ and interactions with inner transactions, it also explains how the framework identifies _active_ transaction group during contract method/subroutine/logicsig invocation.
|
|
4
4
|
|
|
5
5
|
```{testsetup}
|
|
6
6
|
import algopy
|
|
@@ -16,7 +16,7 @@ context = ctx_manager.__enter__()
|
|
|
16
16
|
|
|
17
17
|
## Group Transactions
|
|
18
18
|
|
|
19
|
-
Refers to test implementation of transaction stubs available under `algopy.gtxn.*` namespace. Available under [`algopy.TxnValueGenerator`](
|
|
19
|
+
Refers to test implementation of transaction stubs available under `algopy.gtxn.*` namespace. Available under [`algopy.TxnValueGenerator`](#_algopy_testing.value_generators.txn.TxnValueGenerator) instance accessible via `context.any.txn` property:
|
|
20
20
|
|
|
21
21
|
```{mermaid}
|
|
22
22
|
graph TD
|
|
@@ -107,7 +107,7 @@ generic_txn = context.any.txn.transaction(
|
|
|
107
107
|
|
|
108
108
|
When a smart contract instance (application) is interacted with on the Algorand network, it must be performed in relation to a specific transaction or transaction group where one or many transactions are application calls to target smart contract instances.
|
|
109
109
|
|
|
110
|
-
To emulate this behaviour, the `create_group` context manager is available on [`algopy.TransactionContext`](
|
|
110
|
+
To emulate this behaviour, the `create_group` context manager is available on [`algopy.TransactionContext`](#_algopy_testing.context_helpers.txn_context.TransactionContext) instance that allows setting temporary transaction fields within a specific scope, passing in emulated transaction objects and identifying the active transaction index within the transaction group
|
|
111
111
|
|
|
112
112
|
```{testcode}
|
|
113
113
|
import algopy
|
|
@@ -139,7 +139,7 @@ assert len(context.txn.last_group.txns) == 1
|
|
|
139
139
|
|
|
140
140
|
Inner transactions are AVM transactions that are signed and executed by AVM applications (instances of deployed smart contracts or signatures).
|
|
141
141
|
|
|
142
|
-
When testing smart contracts, to stay consistent with AVM, the framework
|
|
142
|
+
When testing smart contracts, to stay consistent with AVM, the framework _does not allow you to submit inner transactions outside of contract/subroutine invocation_, but you can interact with and manage inner transactions using the test context manager as follows:
|
|
143
143
|
|
|
144
144
|
```{testcode}
|
|
145
145
|
class MyContract(algopy.ARC4Contract):
|
{algorand_python_testing-1.0.0b1 → algorand_python_testing-1.1.0}/examples/marketplace/contract.py
RENAMED
|
@@ -130,7 +130,7 @@ class DigitalMarketplace(ARC4Contract):
|
|
|
130
130
|
assert xfer.asset_amount > 0
|
|
131
131
|
|
|
132
132
|
self.listings[key].deposited = arc4.UInt64(
|
|
133
|
-
self.listings[key].deposited.
|
|
133
|
+
self.listings[key].deposited.as_uint64() + xfer.asset_amount
|
|
134
134
|
)
|
|
135
135
|
|
|
136
136
|
@abimethod
|
|
@@ -161,14 +161,14 @@ class DigitalMarketplace(ARC4Contract):
|
|
|
161
161
|
listing = self.listings[key].copy()
|
|
162
162
|
|
|
163
163
|
amount_to_be_paid = self.quantity_price(
|
|
164
|
-
quantity, listing.unitary_price.
|
|
164
|
+
quantity, listing.unitary_price.as_uint64(), asset.decimals
|
|
165
165
|
)
|
|
166
166
|
|
|
167
167
|
assert buy_pay.sender == Txn.sender
|
|
168
168
|
assert buy_pay.receiver.bytes == owner.bytes
|
|
169
169
|
assert buy_pay.amount == amount_to_be_paid
|
|
170
170
|
|
|
171
|
-
self.listings[key].deposited = arc4.UInt64(listing.deposited.
|
|
171
|
+
self.listings[key].deposited = arc4.UInt64(listing.deposited.as_uint64() - quantity)
|
|
172
172
|
|
|
173
173
|
itxn.AssetTransfer(
|
|
174
174
|
xfer_asset=asset,
|
|
@@ -187,8 +187,8 @@ class DigitalMarketplace(ARC4Contract):
|
|
|
187
187
|
listing = self.listings[key].copy()
|
|
188
188
|
if listing.bidder != arc4.Address():
|
|
189
189
|
current_bid_deposit = self.quantity_price(
|
|
190
|
-
listing.bid.
|
|
191
|
-
listing.bid_unitary_price.
|
|
190
|
+
listing.bid.as_uint64(),
|
|
191
|
+
listing.bid_unitary_price.as_uint64(),
|
|
192
192
|
asset.decimals,
|
|
193
193
|
)
|
|
194
194
|
itxn.Payment(receiver=listing.bidder.native, amount=current_bid_deposit).submit()
|
|
@@ -200,7 +200,7 @@ class DigitalMarketplace(ARC4Contract):
|
|
|
200
200
|
itxn.AssetTransfer(
|
|
201
201
|
xfer_asset=asset,
|
|
202
202
|
asset_receiver=Txn.sender,
|
|
203
|
-
asset_amount=listing.deposited.
|
|
203
|
+
asset_amount=listing.deposited.as_uint64(),
|
|
204
204
|
).submit()
|
|
205
205
|
|
|
206
206
|
@abimethod
|
|
@@ -220,13 +220,13 @@ class DigitalMarketplace(ARC4Contract):
|
|
|
220
220
|
assert unitary_price > listing.bid_unitary_price
|
|
221
221
|
|
|
222
222
|
current_bid_amount = self.quantity_price(
|
|
223
|
-
listing.bid.
|
|
223
|
+
listing.bid.as_uint64(), listing.bid_unitary_price.as_uint64(), asset.decimals
|
|
224
224
|
)
|
|
225
225
|
|
|
226
226
|
itxn.Payment(receiver=listing.bidder.native, amount=current_bid_amount).submit()
|
|
227
227
|
|
|
228
228
|
amount_to_be_bid = self.quantity_price(
|
|
229
|
-
quantity.
|
|
229
|
+
quantity.as_uint64(), unitary_price.as_uint64(), asset.decimals
|
|
230
230
|
)
|
|
231
231
|
|
|
232
232
|
assert bid_pay.sender == Txn.sender
|
|
@@ -245,12 +245,12 @@ class DigitalMarketplace(ARC4Contract):
|
|
|
245
245
|
assert listing.bidder != arc4.Address()
|
|
246
246
|
|
|
247
247
|
min_quantity = (
|
|
248
|
-
listing.deposited.
|
|
249
|
-
if listing.deposited.
|
|
250
|
-
else listing.bid.
|
|
248
|
+
listing.deposited.as_uint64()
|
|
249
|
+
if listing.deposited.as_uint64() < listing.bid.as_uint64()
|
|
250
|
+
else listing.bid.as_uint64()
|
|
251
251
|
)
|
|
252
252
|
best_bid_amount = self.quantity_price(
|
|
253
|
-
min_quantity, listing.bid_unitary_price.
|
|
253
|
+
min_quantity, listing.bid_unitary_price.as_uint64(), asset.decimals
|
|
254
254
|
)
|
|
255
255
|
|
|
256
256
|
itxn.Payment(receiver=Txn.sender, amount=best_bid_amount).submit()
|
|
@@ -262,6 +262,6 @@ class DigitalMarketplace(ARC4Contract):
|
|
|
262
262
|
).submit()
|
|
263
263
|
|
|
264
264
|
self.listings[key].deposited = arc4.UInt64(
|
|
265
|
-
self.listings[key].deposited.
|
|
265
|
+
self.listings[key].deposited.as_uint64() - min_quantity
|
|
266
266
|
)
|
|
267
|
-
self.listings[key].bid = arc4.UInt64(self.listings[key].bid.
|
|
267
|
+
self.listings[key].bid = arc4.UInt64(self.listings[key].bid.as_uint64() - min_quantity)
|
|
@@ -162,19 +162,19 @@ def test_buy(
|
|
|
162
162
|
buy_pay=context.any.txn.payment(
|
|
163
163
|
receiver=context.default_sender,
|
|
164
164
|
amount=contract.quantity_price(
|
|
165
|
-
quantity=test_buy_quantity.
|
|
166
|
-
price=test_unitary_price.
|
|
165
|
+
quantity=test_buy_quantity.as_uint64(),
|
|
166
|
+
price=test_unitary_price.as_uint64(),
|
|
167
167
|
asset_decimals=test_asset.decimals,
|
|
168
168
|
),
|
|
169
169
|
),
|
|
170
|
-
quantity=test_buy_quantity.
|
|
170
|
+
quantity=test_buy_quantity.as_uint64(),
|
|
171
171
|
)
|
|
172
172
|
|
|
173
173
|
# Assert
|
|
174
174
|
updated_listing = ListingValue.from_bytes(
|
|
175
175
|
context.ledger.get_box(contract, b"listings" + listing_key.bytes)
|
|
176
176
|
)
|
|
177
|
-
assert updated_listing.deposited == initial_deposit.
|
|
177
|
+
assert updated_listing.deposited == initial_deposit.as_uint64() - test_buy_quantity.as_uint64()
|
|
178
178
|
assert (
|
|
179
179
|
context.txn.last_group.get_itxn_group(0).asset_transfer(0).asset_receiver
|
|
180
180
|
== context.default_sender
|
|
@@ -215,7 +215,7 @@ def test_withdraw(
|
|
|
215
215
|
asset_transfer_txn = context.txn.last_group.get_itxn_group(1).asset_transfer(0)
|
|
216
216
|
assert asset_transfer_txn.xfer_asset == test_asset
|
|
217
217
|
assert asset_transfer_txn.asset_receiver == test_owner.native
|
|
218
|
-
assert asset_transfer_txn.asset_amount == initial_deposit.
|
|
218
|
+
assert asset_transfer_txn.asset_amount == initial_deposit.as_uint64()
|
|
219
219
|
|
|
220
220
|
|
|
221
221
|
def test_bid(
|
|
@@ -240,12 +240,12 @@ def test_bid(
|
|
|
240
240
|
)
|
|
241
241
|
|
|
242
242
|
bidder = context.any.account()
|
|
243
|
-
bid_quantity = context.any.arc4.uint64(max_value=int(initial_deposit.
|
|
243
|
+
bid_quantity = context.any.arc4.uint64(max_value=int(initial_deposit.as_uint64()))
|
|
244
244
|
bid_price = context.any.arc4.uint64(
|
|
245
|
-
min_value=int(initial_price.
|
|
245
|
+
min_value=int(initial_price.as_uint64()) + 1, max_value=int(10e6)
|
|
246
246
|
)
|
|
247
247
|
bid_amount = contract.quantity_price(
|
|
248
|
-
bid_quantity.
|
|
248
|
+
bid_quantity.as_uint64(), bid_price.as_uint64(), test_asset.decimals
|
|
249
249
|
)
|
|
250
250
|
|
|
251
251
|
# Act
|
|
@@ -277,7 +277,7 @@ def test_accept_bid(
|
|
|
277
277
|
# Arrange
|
|
278
278
|
owner = context.default_sender
|
|
279
279
|
initial_deposit = context.any.arc4.uint64(min_value=1, max_value=int(1e6))
|
|
280
|
-
bid_quantity = context.any.arc4.uint64(max_value=int(initial_deposit.
|
|
280
|
+
bid_quantity = context.any.arc4.uint64(max_value=int(initial_deposit.as_uint64()))
|
|
281
281
|
bid_price = context.any.arc4.uint64(max_value=int(10e6))
|
|
282
282
|
bidder = context.any.account()
|
|
283
283
|
|
|
@@ -294,10 +294,10 @@ def test_accept_bid(
|
|
|
294
294
|
bid_unitary_price=bid_price,
|
|
295
295
|
)
|
|
296
296
|
|
|
297
|
-
min_quantity = min(initial_deposit.
|
|
297
|
+
min_quantity = min(initial_deposit.as_uint64(), bid_quantity.as_uint64())
|
|
298
298
|
expected_payment = contract.quantity_price(
|
|
299
299
|
min_quantity,
|
|
300
|
-
bid_price.
|
|
300
|
+
bid_price.as_uint64(),
|
|
301
301
|
asset_decimals=test_asset.decimals,
|
|
302
302
|
)
|
|
303
303
|
|
|
@@ -306,7 +306,7 @@ def test_accept_bid(
|
|
|
306
306
|
|
|
307
307
|
# Assert
|
|
308
308
|
updated_listing = contract.listings[listing_key]
|
|
309
|
-
assert updated_listing.deposited == initial_deposit.
|
|
309
|
+
assert updated_listing.deposited == initial_deposit.as_uint64() - min_quantity
|
|
310
310
|
|
|
311
311
|
assert len(context.txn.last_group.itxn_groups) == 2
|
|
312
312
|
|