algorand-python-testing 0.3.0b9__tar.gz → 0.4.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.
Files changed (276) hide show
  1. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/.github/workflows/ci.yaml +3 -0
  2. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/.github/workflows/gh-pages.yaml +3 -0
  3. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/CHANGELOG.md +38 -0
  4. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/PKG-INFO +12 -11
  5. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/README.md +11 -10
  6. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/docs/api.md +10 -0
  7. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/docs/conf.py +10 -0
  8. algorand_python_testing-0.4.0/docs/faq.md +61 -0
  9. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/docs/index.md +1 -17
  10. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/docs/testing-guide/avm-types.md +5 -6
  11. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/pyproject.toml +5 -3
  12. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/__init__.py +0 -3
  13. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/arc4.py +35 -68
  14. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/context_helpers/context_storage.py +3 -0
  15. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/context_helpers/ledger_context.py +73 -32
  16. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/context_helpers/txn_context.py +7 -5
  17. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/models/account.py +28 -26
  18. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/models/application.py +16 -4
  19. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/models/asset.py +18 -15
  20. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/models/contract.py +5 -7
  21. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/op/global_values.py +31 -3
  22. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/op/misc.py +6 -20
  23. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/primitives/biguint.py +5 -1
  24. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/primitives/bytes.py +5 -1
  25. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/primitives/string.py +5 -1
  26. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/utils.py +13 -1
  27. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/value_generators/avm.py +33 -21
  28. algorand_python_testing-0.4.0/tests/artifacts/Contains/contract.py +189 -0
  29. algorand_python_testing-0.4.0/tests/artifacts/Contains/data/MyContract.approval.teal +1479 -0
  30. algorand_python_testing-0.4.0/tests/artifacts/Contains/data/MyContract.clear.teal +7 -0
  31. algorand_python_testing-0.4.0/tests/artifacts/CreatedAppAsset/contract.py +31 -0
  32. algorand_python_testing-0.4.0/tests/artifacts/CreatedAppAsset/data/AppExpectingEffects.approval.teal +198 -0
  33. algorand_python_testing-0.4.0/tests/artifacts/CreatedAppAsset/data/AppExpectingEffects.arc32.json +77 -0
  34. algorand_python_testing-0.4.0/tests/artifacts/CreatedAppAsset/data/AppExpectingEffects.clear.teal +7 -0
  35. algorand_python_testing-0.4.0/tests/artifacts/CreatedAppAsset/other.py +7 -0
  36. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/StateOps/contract.py +10 -0
  37. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/StateOps/data/GlobalStateContract.approval.teal +173 -173
  38. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/StateOps/data/GlobalStateContract.arc32.json +2 -2
  39. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/StateOps/data/GlobalStateContract.clear.teal +1 -1
  40. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/StateOps/data/ITxnOpsContract.approval.teal +21 -21
  41. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/StateOps/data/ITxnOpsContract.arc32.json +2 -2
  42. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/StateOps/data/ITxnOpsContract.clear.teal +1 -1
  43. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/StateOps/data/LocalStateContract.approval.teal +145 -145
  44. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/StateOps/data/LocalStateContract.arc32.json +2 -2
  45. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/StateOps/data/LocalStateContract.clear.teal +1 -1
  46. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/StateOps/data/StateAcctParamsGetContract.approval.teal +143 -91
  47. algorand_python_testing-0.4.0/tests/artifacts/StateOps/data/StateAcctParamsGetContract.arc32.json +253 -0
  48. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/StateOps/data/StateAppGlobalContract.approval.teal +39 -39
  49. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/StateOps/data/StateAppGlobalContract.arc32.json +2 -2
  50. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/StateOps/data/StateAppGlobalContract.clear.teal +1 -1
  51. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/StateOps/data/StateAppGlobalExContract.approval.teal +13 -13
  52. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/StateOps/data/StateAppGlobalExContract.arc32.json +2 -2
  53. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/StateOps/data/StateAppGlobalExContract.clear.teal +1 -1
  54. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/StateOps/data/StateAppLocalContract.approval.teal +55 -55
  55. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/StateOps/data/StateAppLocalContract.arc32.json +2 -2
  56. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/StateOps/data/StateAppLocalContract.clear.teal +1 -1
  57. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/StateOps/data/StateAppLocalExContract.approval.teal +13 -13
  58. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/StateOps/data/StateAppLocalExContract.arc32.json +2 -2
  59. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/StateOps/data/StateAppLocalExContract.clear.teal +1 -1
  60. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/StateOps/data/StateAppParamsContract.approval.teal +83 -83
  61. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/StateOps/data/StateAppParamsContract.arc32.json +2 -2
  62. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/StateOps/data/StateAppParamsContract.clear.teal +1 -1
  63. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/StateOps/data/StateAssetHoldingContract.approval.teal +14 -14
  64. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/StateOps/data/StateAssetHoldingContract.arc32.json +2 -2
  65. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/StateOps/data/StateAssetHoldingContract.clear.teal +1 -1
  66. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/StateOps/data/StateAssetParamsContract.approval.teal +110 -110
  67. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/StateOps/data/StateAssetParamsContract.arc32.json +2 -2
  68. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/StateOps/data/StateAssetParamsContract.clear.teal +1 -1
  69. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/models/test_asset.py +12 -11
  70. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/models/test_contract.py +19 -1
  71. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/test_context.py +38 -1
  72. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/test_op.py +76 -3
  73. algorand_python_testing-0.4.0/tests/utilities/__init__.py +0 -0
  74. algorand_python_testing-0.4.0/tests/value_generators/__init__.py +0 -0
  75. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/value_generators/test_avm.py +6 -3
  76. algorand_python_testing-0.3.0b9/docs/glossary.md +0 -8
  77. algorand_python_testing-0.3.0b9/tests/artifacts/StateOps/data/StateAcctParamsGetContract.arc32.json +0 -253
  78. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/.coveragerc +0 -0
  79. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/.editorconfig +0 -0
  80. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  81. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  82. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/.github/pull_request_template.md +0 -0
  83. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/.github/workflows/cd.yaml +0 -0
  84. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/.gitignore +0 -0
  85. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/.pre-commit-config.yaml +0 -0
  86. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/.vscode/extensions.json +0 -0
  87. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/.vscode/launch.json +0 -0
  88. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/.vscode/settings.json +0 -0
  89. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/CONTRIBUTING.md +0 -0
  90. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/LICENSE +0 -0
  91. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/docs/Makefile +0 -0
  92. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/docs/__init__.py +0 -0
  93. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/docs/_static/custom.css +0 -0
  94. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/docs/algopy.md +0 -0
  95. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/docs/coverage.md +0 -0
  96. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/docs/examples.md +0 -0
  97. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/docs/make.bat +0 -0
  98. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/docs/testing-guide/arc4-types.md +0 -0
  99. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/docs/testing-guide/concepts.md +0 -0
  100. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/docs/testing-guide/contract-testing.md +0 -0
  101. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/docs/testing-guide/index.md +0 -0
  102. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/docs/testing-guide/opcodes.md +0 -0
  103. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/docs/testing-guide/signature-testing.md +0 -0
  104. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/docs/testing-guide/state-management.md +0 -0
  105. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/docs/testing-guide/subroutines.md +0 -0
  106. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/docs/testing-guide/transactions.md +0 -0
  107. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/examples/README.md +0 -0
  108. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/examples/__init__.py +0 -0
  109. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/examples/auction/__init__.py +0 -0
  110. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/examples/auction/contract.py +0 -0
  111. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/examples/auction/test_contract.py +0 -0
  112. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/examples/htlc_logicsig/__init__.py +0 -0
  113. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/examples/htlc_logicsig/signature.py +0 -0
  114. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/examples/htlc_logicsig/test_signature.py +0 -0
  115. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/examples/marketplace/__init__.py +0 -0
  116. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/examples/marketplace/contract.py +0 -0
  117. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/examples/marketplace/test_contract.py +0 -0
  118. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/examples/proof_of_attendance/__init__.py +0 -0
  119. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/examples/proof_of_attendance/contract.py +0 -0
  120. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/examples/proof_of_attendance/test_contract.py +0 -0
  121. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/examples/scratch_storage/__init__.py +0 -0
  122. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/examples/scratch_storage/contract.py +0 -0
  123. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/examples/scratch_storage/test_contract.py +0 -0
  124. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/examples/simple_voting/__init__.py +0 -0
  125. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/examples/simple_voting/contract.py +0 -0
  126. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/examples/simple_voting/test_contract.py +0 -0
  127. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/examples/zk_whitelist/__init__.py +0 -0
  128. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/examples/zk_whitelist/contract.py +0 -0
  129. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/examples/zk_whitelist/test_contract.py +0 -0
  130. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/scripts/__init__.py +0 -0
  131. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/scripts/check_stubs_cov.py +0 -0
  132. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/scripts/refresh_test_artifacts.py +0 -0
  133. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/scripts/validate_examples.py +0 -0
  134. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/compiled.py +0 -0
  135. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/constants.py +0 -0
  136. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/context.py +0 -0
  137. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/context_helpers/__init__.py +0 -0
  138. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/decorators/__init__.py +0 -0
  139. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/decorators/arc4.py +0 -0
  140. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/decorators/subroutine.py +0 -0
  141. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/enums.py +0 -0
  142. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/gtxn.py +0 -0
  143. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/itxn.py +0 -0
  144. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/itxn_loader.py +0 -0
  145. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/models/__init__.py +0 -0
  146. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/models/logicsig.py +0 -0
  147. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/models/template_variable.py +0 -0
  148. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/models/txn_fields.py +0 -0
  149. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/models/unsigned_builtins.py +0 -0
  150. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/mutable.py +0 -0
  151. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/op/__init__.py +0 -0
  152. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/op/block.py +0 -0
  153. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/op/constants.py +0 -0
  154. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/op/crypto.py +0 -0
  155. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/op/itxn.py +0 -0
  156. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/op/pure.py +0 -0
  157. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/op/txn.py +0 -0
  158. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/primitives/__init__.py +0 -0
  159. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/primitives/uint64.py +0 -0
  160. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/protocols.py +0 -0
  161. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/py.typed +0 -0
  162. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/state/__init__.py +0 -0
  163. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/state/box.py +0 -0
  164. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/state/global_state.py +0 -0
  165. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/state/local_state.py +0 -0
  166. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/state/utils.py +0 -0
  167. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/utilities/__init__.py +0 -0
  168. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/utilities/budget.py +0 -0
  169. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/utilities/log.py +0 -0
  170. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/value_generators/__init__.py +0 -0
  171. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/value_generators/arc4.py +0 -0
  172. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/_algopy_testing/value_generators/txn.py +0 -0
  173. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/algopy/__init__.py +0 -0
  174. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/algopy/arc4.py +0 -0
  175. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/algopy/gtxn.py +0 -0
  176. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/algopy/itxn.py +0 -0
  177. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/algopy/op.py +0 -0
  178. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/algopy/py.typed +0 -0
  179. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/algopy_testing/__init__.py +0 -0
  180. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/src/algopy_testing/py.typed +0 -0
  181. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/templates/.macros.j2 +0 -0
  182. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/templates/.release_notes.md.j2 +0 -0
  183. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/templates/CHANGELOG.md.j2 +0 -0
  184. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/__init__.py +0 -0
  185. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/arc4/__init__.py +0 -0
  186. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/arc4/conftest.py +0 -0
  187. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/arc4/test_abi_call.py +0 -0
  188. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/arc4/test_address.py +0 -0
  189. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/arc4/test_arc4_method_signature.py +0 -0
  190. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/arc4/test_bool.py +0 -0
  191. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/arc4/test_dynamic_array.py +0 -0
  192. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/arc4/test_dynamic_bytes.py +0 -0
  193. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/arc4/test_emit.py +0 -0
  194. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/arc4/test_static_array.py +0 -0
  195. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/arc4/test_string.py +0 -0
  196. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/arc4/test_struct.py +0 -0
  197. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/arc4/test_tuple.py +0 -0
  198. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/arc4/test_ufixednxm.py +0 -0
  199. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/arc4/test_uintn.py +0 -0
  200. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/Arc4ABIMethod/__init__.py +0 -0
  201. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/Arc4ABIMethod/contract.py +0 -0
  202. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/Arc4ABIMethod/data/SignaturesContract.approval.teal +0 -0
  203. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/Arc4ABIMethod/data/SignaturesContract.arc32.json +0 -0
  204. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/Arc4ABIMethod/data/SignaturesContract.clear.teal +0 -0
  205. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/Arc4InnerTxns/__init__.py +0 -0
  206. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/Arc4InnerTxns/contract.py +0 -0
  207. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/Arc4InnerTxns/data/Arc4InnerTxnsContract.approval.teal +0 -0
  208. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/Arc4InnerTxns/data/Arc4InnerTxnsContract.arc32.json +0 -0
  209. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/Arc4InnerTxns/data/Arc4InnerTxnsContract.clear.teal +0 -0
  210. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/Arc4PrimitiveOps/__init__.py +0 -0
  211. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/Arc4PrimitiveOps/contract.py +0 -0
  212. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/Arc4PrimitiveOps/data/Arc4PrimitiveOpsContract.approval.teal +0 -0
  213. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/Arc4PrimitiveOps/data/Arc4PrimitiveOpsContract.arc32.json +0 -0
  214. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/Arc4PrimitiveOps/data/Arc4PrimitiveOpsContract.clear.teal +0 -0
  215. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/BoxContract/__init__.py +0 -0
  216. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/BoxContract/contract.py +0 -0
  217. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/BoxContract/data/BoxContract.approval.teal +0 -0
  218. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/BoxContract/data/BoxContract.arc32.json +0 -0
  219. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/BoxContract/data/BoxContract.clear.teal +0 -0
  220. {algorand_python_testing-0.3.0b9/tests/artifacts/CryptoOps → algorand_python_testing-0.4.0/tests/artifacts/Contains}/__init__.py +0 -0
  221. {algorand_python_testing-0.3.0b9/tests/artifacts/GlobalStateValidator → algorand_python_testing-0.4.0/tests/artifacts/CreatedAppAsset}/__init__.py +0 -0
  222. {algorand_python_testing-0.3.0b9/tests/artifacts/MiscellaneousOps → algorand_python_testing-0.4.0/tests/artifacts/CryptoOps}/__init__.py +0 -0
  223. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/CryptoOps/contract.py +0 -0
  224. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/CryptoOps/data/CryptoOpsContract.approval.teal +0 -0
  225. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/CryptoOps/data/CryptoOpsContract.arc32.json +0 -0
  226. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/CryptoOps/data/CryptoOpsContract.clear.teal +0 -0
  227. {algorand_python_testing-0.3.0b9/tests/artifacts/PrimitiveOps → algorand_python_testing-0.4.0/tests/artifacts/GlobalStateValidator}/__init__.py +0 -0
  228. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/GlobalStateValidator/contract.py +0 -0
  229. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/GlobalStateValidator/data/GlobalStateValidator.approval.teal +0 -0
  230. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/GlobalStateValidator/data/GlobalStateValidator.arc32.json +0 -0
  231. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/GlobalStateValidator/data/GlobalStateValidator.clear.teal +0 -0
  232. {algorand_python_testing-0.3.0b9/tests/artifacts/StateMutations → algorand_python_testing-0.4.0/tests/artifacts/MiscellaneousOps}/__init__.py +0 -0
  233. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/MiscellaneousOps/contract.py +0 -0
  234. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/MiscellaneousOps/data/MiscellaneousOpsContract.approval.teal +0 -0
  235. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/MiscellaneousOps/data/MiscellaneousOpsContract.arc32.json +0 -0
  236. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/MiscellaneousOps/data/MiscellaneousOpsContract.clear.teal +0 -0
  237. {algorand_python_testing-0.3.0b9/tests/artifacts/StateOps → algorand_python_testing-0.4.0/tests/artifacts/PrimitiveOps}/__init__.py +0 -0
  238. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/PrimitiveOps/contract.py +0 -0
  239. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/PrimitiveOps/data/PrimitiveOpsContract.approval.teal +0 -0
  240. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/PrimitiveOps/data/PrimitiveOpsContract.arc32.json +0 -0
  241. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/PrimitiveOps/data/PrimitiveOpsContract.clear.teal +0 -0
  242. {algorand_python_testing-0.3.0b9/tests/artifacts → algorand_python_testing-0.4.0/tests/artifacts/StateMutations}/__init__.py +0 -0
  243. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/StateMutations/data/Contract.approval.teal +0 -0
  244. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/StateMutations/data/Contract.arc32.json +0 -0
  245. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/StateMutations/data/Contract.clear.teal +0 -0
  246. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/StateMutations/statemutations.py +0 -0
  247. {algorand_python_testing-0.3.0b9/tests/contexts → algorand_python_testing-0.4.0/tests/artifacts/StateOps}/__init__.py +0 -0
  248. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/StateOps/data/StateAcctParamsGet.approval.teal +0 -0
  249. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/StateOps/data/StateAcctParamsGet.arc32.json +0 -0
  250. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/StateOps/data/StateAcctParamsGet.clear.teal +0 -0
  251. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/artifacts/StateOps/data/StateAcctParamsGetContract.clear.teal +0 -0
  252. {algorand_python_testing-0.3.0b9/tests/models → algorand_python_testing-0.4.0/tests/artifacts}/__init__.py +0 -0
  253. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/common.py +0 -0
  254. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/conftest.py +0 -0
  255. {algorand_python_testing-0.3.0b9/tests/primitives → algorand_python_testing-0.4.0/tests/contexts}/__init__.py +0 -0
  256. {algorand_python_testing-0.3.0b9/tests/state → algorand_python_testing-0.4.0/tests/models}/__init__.py +0 -0
  257. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/models/test_box.py +0 -0
  258. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/models/test_box_map.py +0 -0
  259. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/models/test_box_ref.py +0 -0
  260. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/models/test_uenumerate.py +0 -0
  261. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/models/test_urange.py +0 -0
  262. {algorand_python_testing-0.3.0b9/tests/utilities → algorand_python_testing-0.4.0/tests/primitives}/__init__.py +0 -0
  263. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/primitives/conftest.py +0 -0
  264. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/primitives/test_biguint.py +0 -0
  265. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/primitives/test_bytes.py +0 -0
  266. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/primitives/test_string.py +0 -0
  267. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/primitives/test_uint64.py +0 -0
  268. {algorand_python_testing-0.3.0b9/tests/value_generators → algorand_python_testing-0.4.0/tests/state}/__init__.py +0 -0
  269. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/state/conftest.py +0 -0
  270. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/state/test_global_state.py +0 -0
  271. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/state/test_local_state.py +0 -0
  272. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/state/test_mutations.py +0 -0
  273. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/test_miscellaneous_op.py +0 -0
  274. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/util.py +0 -0
  275. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/utilities/conftest.py +0 -0
  276. {algorand_python_testing-0.3.0b9 → algorand_python_testing-0.4.0}/tests/utilities/test_log.py +0 -0
@@ -42,3 +42,6 @@ jobs:
42
42
 
43
43
  - name: Run tests (examples)
44
44
  run: hatch run examples:tests
45
+
46
+ - name: Check doctests
47
+ run: hatch run docs:test
@@ -24,6 +24,9 @@ jobs:
24
24
  python-version: "3.12"
25
25
  cache: "pip"
26
26
 
27
+ - name: Test doctests
28
+ run: hatch run docs:test
29
+
27
30
  - name: Build doc
28
31
  run: hatch run docs:build
29
32
 
@@ -1,4 +1,42 @@
1
1
  # CHANGELOG
2
+ ## v0.4.0 (2024-08-27)
3
+
4
+ ## v0.4.0-beta.2 (2024-08-27)
5
+
6
+ ## v0.4.0-beta.1 (2024-08-27)
7
+
8
+ ### Feature
9
+
10
+ * add support for frozen on asset holdings, including a new ledger function `update_asset_holdings` for setting asset holding balances and frozen states ([`d777ca0`](https://github.com/algorandfoundation/algorand-python-testing/commit/d777ca0a318a8ade7a20363c9ce77fe8a8bf5d68))
11
+
12
+ * expand accepted types when interacting with accounts, applications and assets ([`f448a97`](https://github.com/algorandfoundation/algorand-python-testing/commit/f448a97cb154c9f90ecf42c599b240f12928af20))
13
+
14
+ wip
15
+
16
+ * replaced `account_exists` with `account_is_funded` as the later is more useful ([`4d08690`](https://github.com/algorandfoundation/algorand-python-testing/commit/4d086903eb93a70ce1d485cdd7b12d8472ef16db))
17
+
18
+ ### Fix
19
+
20
+ * use correct type for Globals.caller_application_id ([`a30d85a`](https://github.com/algorandfoundation/algorand-python-testing/commit/a30d85a4416dfc2c5d901f3ace2265384ef60c01))
21
+
22
+ * do not allow specifying `address` for applications, it is derived from the app_id ([`00fe1bc`](https://github.com/algorandfoundation/algorand-python-testing/commit/00fe1bc8ea247dcc36b01154db36b984b151e396))
23
+
24
+ * do not treat asset and application ids as possible foreign array indexes ([`94a989f`](https://github.com/algorandfoundation/algorand-python-testing/commit/94a989f77169da2ae437c629cd5f4d8a872263f6))
25
+
26
+ * removed incorrect deduction in `algopy.op.balance` ([`76e67c5`](https://github.com/algorandfoundation/algorand-python-testing/commit/76e67c5e3dd1cda388a2a948d452ba89805add6a))
27
+
28
+ * ensure all comparable types return `NotImplemented` when a comparison is not possible ([`b055fa6`](https://github.com/algorandfoundation/algorand-python-testing/commit/b055fa68531e0b7923773ec10c2097a3d64b9dbe))
29
+
30
+ * `arc4_prefix` annotated to also accept `algopy.Bytes` ([`40328ca`](https://github.com/algorandfoundation/algorand-python-testing/commit/40328ca3701b3e255193e206e8a7b1bdb441a346))
31
+
32
+ ### Documentation
33
+
34
+ * include usage of `algopy_testing_context` in README.md quick start ([`4702f60`](https://github.com/algorandfoundation/algorand-python-testing/commit/4702f60cfe7d09956a5ae6dbdcd72da29fdda808))
35
+
36
+ ## v0.3.0 (2024-08-22)
37
+
38
+ ## v0.3.0-beta.10 (2024-08-22)
39
+
2
40
  ## v0.3.0-beta.9 (2024-08-22)
3
41
 
4
42
  ## v0.3.0-beta.8 (2024-08-22)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: algorand-python-testing
3
- Version: 0.3.0b9
3
+ Version: 0.4.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
@@ -55,17 +55,18 @@ Alternatively, if you want to start from scratch:
55
55
  ```python
56
56
  from algopy_testing import algopy_testing_context
57
57
  from your_contract import YourContract
58
-
58
+
59
59
  def test_your_contract():
60
- # Arrange
61
- contract = YourContract()
62
- expected_result = ... # Your expected result here
63
-
64
- # Act
65
- result = contract.your_method() # Your test code here
66
-
67
- # Assert
68
- assert result == expected_result
60
+ with algopy_testing_context() as context:
61
+ # Arrange
62
+ contract = YourContract()
63
+ expected_result = ... # Your expected result here
64
+
65
+ # Act
66
+ result = contract.your_method(context.any.uint64()) # Your test code here
67
+
68
+ # Assert
69
+ assert result == expected_result
69
70
  ```
70
71
 
71
72
  5. Run your tests using your preferred Python testing framework (e.g., pytest, unittest)
@@ -32,17 +32,18 @@ Alternatively, if you want to start from scratch:
32
32
  ```python
33
33
  from algopy_testing import algopy_testing_context
34
34
  from your_contract import YourContract
35
-
35
+
36
36
  def test_your_contract():
37
- # Arrange
38
- contract = YourContract()
39
- expected_result = ... # Your expected result here
40
-
41
- # Act
42
- result = contract.your_method() # Your test code here
43
-
44
- # Assert
45
- assert result == expected_result
37
+ with algopy_testing_context() as context:
38
+ # Arrange
39
+ contract = YourContract()
40
+ expected_result = ... # Your expected result here
41
+
42
+ # Act
43
+ result = contract.your_method(context.any.uint64()) # Your test code here
44
+
45
+ # Assert
46
+ assert result == expected_result
46
47
  ```
47
48
 
48
49
  5. Run your tests using your preferred Python testing framework (e.g., pytest, unittest)
@@ -1,5 +1,15 @@
1
1
  # API Reference
2
2
 
3
+ An overview of the `algorand-python-testing`'s `algopy_testing` module - covering the main classes and functions.
4
+
5
+ ```{hint}
6
+ Spotted a typo in documentation? This project is open source, please submit an issue or a PR on [GitHub](https://github.com/algorand/algorand-python-testing).
7
+ ```
8
+
9
+ ```{warning}
10
+ Note, assume `_algopy_testing` to refer to `algopy_testing` namespace in the auto-generated class documentation above. To be patched in near future.
11
+ ```
12
+
3
13
  ## Contexts
4
14
 
5
15
  ```{autodoc2-summary}
@@ -84,3 +84,13 @@ doctest_test_doctest_blocks = "default"
84
84
  sphinxmermaid_mermaid_init = {
85
85
  "theme": "dark",
86
86
  }
87
+
88
+ # Ignore specific warning types
89
+ # TODO : remove upon refining autodoc2 (or finding alternative to sphinx)
90
+ suppress_warnings = [
91
+ "myst.xref_missing",
92
+ "autodoc2.dup_item",
93
+ "ref.python", # Ignore Python reference warnings
94
+ "ref.class", # Ignore class reference warnings
95
+ "ref.obj", # Ignore object reference warnings
96
+ ]
@@ -0,0 +1,61 @@
1
+ # FAQ
2
+
3
+ ## What is a Test Context?
4
+
5
+ A Test Context is a context manager that provides a simulated Algorand environment for testing Python smart contracts. It allows developers to create and manipulate a virtual Algorand ecosystem for testing purposes. For more details, see the [Test Context section](testing-guide/concepts.md#test-context) in our documentation.
6
+
7
+ ## What is the Algorand Virtual Machine (AVM)?
8
+
9
+ The Algorand Virtual Machine (AVM) is the runtime environment for Algorand smart contracts. It executes the compiled code of smart contracts on the Algorand blockchain. To learn more about the AVM, visit the [official Algorand documentation](https://developer.algorand.org/docs/get-details/dapps/avm/).
10
+
11
+ ## What are Operational Codes in Algorand?
12
+
13
+ Operational Codes, or opcodes, are AVM instructions that are executed directly by the AVM. In the context of Algorand Python testing, these opcodes are provided by `algopy` stubs and are either emulated, implemented, or mocked by `algorand-python-testing`. For a comprehensive list of opcodes, refer to the [Algorand Developer Documentation](https://developer.algorand.org/docs/get-details/dapps/avm/teal/opcodes/?from_query=OPcodes#template-modal-overlay).
14
+
15
+ ## What are Value Generators?
16
+
17
+ Value Generators are helper methods that generate randomized values for testing when the specific value of the tested type is not important. In the context of Algorand Python testing, these are represented by property on the context manager, accessed via `any.*` (or `any.arc4.*`, `any.txn.*`. in the case of ARC 4 types). To understand how to use Value Generators effectively, check out our [Value Generators section](testing-guide/concepts.md#value-generators) in the documentation.
18
+
19
+ ## What are the limitations of the Algorand Python Testing framework?
20
+
21
+ The Algorand Python Testing framework emulates the Algorand Virtual Machine (AVM) for unit testing Algorand Python smart contracts without interacting with the real Algorand Network. However, it has some limitations due to its scope and purpose:
22
+
23
+ 1. Simplified balance tracking and transaction validation
24
+ 2. No consensus mechanism or AVM network operations simulation
25
+ 3. Absence of a strict opcode budget system
26
+ 4. Certain cryptographic operations are mocked or simplified
27
+ 5. No state proof generation or verification
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 [Github](https://github.com/algorandfoundation/algorand-python-testing).
30
+
31
+ ## How does balance tracking work in the testing framework?
32
+
33
+ The framework uses simplified balance tracking and transaction validation. For scenarios where precise balance or fee verification is important, it's recommended to complement unit tests with integration testing.
34
+
35
+ ## Does the framework simulate the entire AVM network?
36
+
37
+ No, the framework does not simulate the entire AVM network or consensus mechanism. It focuses on emulating the parts of the AVM relevant to unit testing smart contracts.
38
+
39
+ ## How does the framework handle opcode budgets?
40
+
41
+ The framework does not implement a strict opcode budget system. For scenarios where validating opcode budget is crucial, it's recommended to use integration testing alongside this framework.
42
+
43
+ ## Are all cryptographic operations fully implemented?
44
+
45
+ Some cryptographic operations are mocked or simplified in the framework. For a detailed list of which operations are mocked, refer to the _mockable_ types under the [coverage](./coverage.md) section.
46
+
47
+ ## Can I use this framework for security-critical validations?
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 behavior 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
+
51
+ ## Is there an example of how to use this framework alongside integration tests?
52
+
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
+
55
+ ```{hint}
56
+ An `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
+ ```
58
+
59
+ ## Is it compatible with `pytest`?
60
+
61
+ Yes, it is compatible with `pytest` and _any_ other python testing framework as its agnostic of the testing framework as long as its 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).
@@ -13,18 +13,6 @@ The `algorand-python-testing` package provides:
13
13
  - An offline testing environment that simulates core AVM functionality
14
14
  - A familiar Pythonic experience, compatible with testing frameworks like [pytest](https://docs.pytest.org/en/latest/), [unittest](https://docs.python.org/3/library/unittest.html), and [hypothesis](https://hypothesis.readthedocs.io/en/latest/)
15
15
 
16
- ```{testsetup}
17
- import algopy
18
- import algopy_testing
19
- from algopy_testing import algopy_testing_context
20
-
21
- # Create the context manager for snippets below
22
- ctx_manager = algopy_testing_context()
23
-
24
- # Enter the context
25
- context = ctx_manager.__enter__()
26
- ```
27
-
28
16
  ## Quick Start
29
17
 
30
18
  `algopy` is a prerequisite for `algorand-python-testing`, providing stubs and type annotations for Algorand Python syntax. It enhances code completion and type checking when writing smart contracts. Note that this code isn't directly executable in standard Python interpreters; it's compiled by `puya` into TEAL for Algorand Network deployment.
@@ -188,11 +176,7 @@ hidden: true
188
176
  testing-guide/index
189
177
  examples
190
178
  coverage
191
- glossary
179
+ faq
192
180
  api
193
181
  algopy
194
182
  ```
195
-
196
- ```{testcleanup}
197
- ctx_manager.__exit__(None, None, None)
198
- ```
@@ -103,7 +103,7 @@ asset = context.ledger.get_asset(asset_id=random_asset.id)
103
103
 
104
104
  # Update an asset
105
105
  context.ledger.update_asset(
106
- asset_id=random_asset.id,
106
+ random_asset,
107
107
  name=..., # Optional: New asset name
108
108
  total=..., # Optional: New total supply
109
109
  decimals=..., # Optional: Number of decimals
@@ -130,7 +130,7 @@ account = algopy.Account(raw_address) # zero address by default
130
130
  # Generate a random account
131
131
  random_account = context.any.account(
132
132
  address=str(raw_address), # Optional: Specify a custom address, defaults to a random address
133
- opted_asset_balances=..., # Optional: Specify opted asset balances as dict of algopy.UInt64 as key and algopy.UInt64 as value
133
+ opted_asset_balances={}, # Optional: Specify opted asset balances as dict of assets to balance
134
134
  opted_apps=[], # Optional: Specify opted apps as sequence of algopy.Application objects
135
135
  balance=..., # Optional: Specify an initial balance
136
136
  min_balance=..., # Optional: Specify a minimum balance
@@ -145,7 +145,7 @@ random_account = context.any.account(
145
145
  # Generate a random account that is opted into a specific asset
146
146
  mock_asset = context.any.asset()
147
147
  mock_account = context.any.account(
148
- opted_asset_balances={mock_asset.id: algopy.UInt64(123)}
148
+ opted_asset_balances={mock_asset: 123}
149
149
  )
150
150
 
151
151
  # Get an account by address
@@ -153,7 +153,7 @@ account = context.ledger.get_account(str(mock_account))
153
153
 
154
154
  # Update an account
155
155
  context.ledger.update_account(
156
- str(mock_account),
156
+ mock_account,
157
157
  balance=..., # Optional: New balance
158
158
  min_balance=..., # Optional: New minimum balance
159
159
  auth_address=context.any.account(), # Optional: New auth address
@@ -181,7 +181,6 @@ application = algopy.Application()
181
181
 
182
182
  # Generate a random application
183
183
  random_app = context.any.application(
184
- address=..., # Optional: Specify a custom address for the application
185
184
  approval_program=algopy.Bytes(b''), # Optional: Specify a custom approval program
186
185
  clear_state_program=algopy.Bytes(b''), # Optional: Specify a custom clear state program
187
186
  global_num_uint=algopy.UInt64(1), # Optional: Number of global uint values
@@ -197,7 +196,7 @@ app = context.ledger.get_app(app_id=random_app.id)
197
196
 
198
197
  # Update an application
199
198
  context.ledger.update_app(
200
- app_id=random_app.id,
199
+ random_app,
201
200
  approval_program=..., # Optional: New approval program
202
201
  clear_state_program=..., # Optional: New clear state program
203
202
  global_num_uint=..., # Optional: New number of global uint values
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "algorand-python-testing"
7
- version = "0.3.0-beta.9"
7
+ version = "0.4.0"
8
8
  description = 'Algorand Python testing library'
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.12"
@@ -150,8 +150,10 @@ post-install-commands = [
150
150
  ]
151
151
 
152
152
  [tool.hatch.envs.docs.scripts]
153
- build = "sphinx-build -b doctest docs docs/_build -W --keep-going -n -E"
154
- dev = "sphinx-build -b doctest docs docs/_build && sphinx-autobuild docs docs/_build"
153
+ test = "sphinx-build -b doctest docs docs/_build -W --keep-going -n -E"
154
+ clear = "rm -rf docs/_build"
155
+ build = "hatch run docs:clear && sphinx-build docs docs/_build -W --keep-going -n -E"
156
+ dev = "hatch run docs:test && sphinx-autobuild docs docs/_build"
155
157
 
156
158
  # Examples environment
157
159
  [tool.hatch.envs.examples]
@@ -25,9 +25,6 @@ from _algopy_testing.value_generators.arc4 import ARC4ValueGenerator
25
25
  from _algopy_testing.value_generators.avm import AVMValueGenerator
26
26
  from _algopy_testing.value_generators.txn import TxnValueGenerator
27
27
 
28
- # TODO: clean up and ensure only algopy_testing namespace specific user facing abstractions
29
- # are exposed Only keep the _value_generators, ledger_context, txn_context,
30
- # context, and arc4_prexif from utils (make utils private)
31
28
  __all__ = [
32
29
  "ARC4Contract",
33
30
  "ARC4ValueGenerator",
@@ -2,6 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  import dataclasses
4
4
  import decimal
5
+ import functools
5
6
  import types
6
7
  import typing
7
8
 
@@ -169,7 +170,8 @@ class _ABIEncoded(BytesBacked):
169
170
  def __eq__(self, other: object) -> bool:
170
171
  if isinstance(other, _ABIEncoded):
171
172
  return self._type_info == other._type_info and self.bytes == other.bytes
172
- return NotImplemented
173
+ else:
174
+ return NotImplemented
173
175
 
174
176
  def __hash__(self) -> int:
175
177
  return hash(self.bytes)
@@ -234,7 +236,11 @@ class String(_ABIEncoded):
234
236
  return String(as_string(other) + self.native)
235
237
 
236
238
  def __eq__(self, other: String | str) -> bool: # type: ignore[override]
237
- return self.native == as_string(other)
239
+ try:
240
+ other_string = as_string(other)
241
+ except TypeError:
242
+ return NotImplemented
243
+ return self.native == other_string
238
244
 
239
245
  def __bool__(self) -> bool:
240
246
  """Returns `True` if length is not zero."""
@@ -294,47 +300,12 @@ class _UIntN(_ABIEncoded, typing.Generic[_TBitSize], metaclass=_UIntNMeta):
294
300
  bytes_value = int_to_bytes(value, self._type_info.max_bytes_len)
295
301
  self._value = as_bytes(bytes_value)
296
302
 
297
- def __eq__( # type: ignore[override]
298
- self,
299
- other: UIntN[_TBitSize] | BigUIntN[_TBitSize] | algopy.UInt64 | algopy.BigUInt | int,
300
- ) -> bool:
301
- raise NotImplementedError
302
-
303
- def __ne__( # type: ignore[override]
304
- self,
305
- other: UIntN[_TBitSize] | BigUIntN[_TBitSize] | algopy.UInt64 | algopy.BigUInt | int,
306
- ) -> bool:
307
- raise NotImplementedError
308
-
309
- def __le__(
310
- self,
311
- other: UIntN[_TBitSize] | BigUIntN[_TBitSize] | algopy.UInt64 | algopy.BigUInt | int,
312
- ) -> bool:
313
- raise NotImplementedError
314
-
315
- def __lt__(
316
- self,
317
- other: UIntN[_TBitSize] | BigUIntN[_TBitSize] | algopy.UInt64 | algopy.BigUInt | int,
318
- ) -> bool:
319
- raise NotImplementedError
320
-
321
- def __ge__(
322
- self,
323
- other: UIntN[_TBitSize] | BigUIntN[_TBitSize] | algopy.UInt64 | algopy.BigUInt | int,
324
- ) -> bool:
325
- raise NotImplementedError
326
-
327
- def __gt__(
328
- self,
329
- other: UIntN[_TBitSize] | BigUIntN[_TBitSize] | algopy.UInt64 | algopy.BigUInt | int,
330
- ) -> bool:
331
- raise NotImplementedError
332
-
333
303
  def __bool__(self) -> bool:
334
304
  """Returns `True` if not equal to zero."""
335
305
  raise NotImplementedError
336
306
 
337
307
 
308
+ @functools.total_ordering
338
309
  class UIntN(_UIntN, typing.Generic[_TBitSize]): # type: ignore[type-arg]
339
310
  """An ARC4 UInt consisting of the number of bits specified.
340
311
 
@@ -349,22 +320,18 @@ class UIntN(_UIntN, typing.Generic[_TBitSize]): # type: ignore[type-arg]
349
320
  return algopy.UInt64(int.from_bytes(self._value))
350
321
 
351
322
  def __eq__(self, other: object) -> bool:
352
- return as_int64(self.native) == as_int(other, max=None)
353
-
354
- def __ne__(self, other: object) -> bool:
355
- return as_int64(self.native) != as_int(other, max=None)
356
-
357
- def __le__(self, other: object) -> bool:
358
- return as_int64(self.native) <= as_int(other, max=None)
323
+ try:
324
+ other_int = as_int64(other)
325
+ except (TypeError, ValueError):
326
+ return NotImplemented
327
+ return as_int64(self.native) == other_int
359
328
 
360
329
  def __lt__(self, other: object) -> bool:
361
- return as_int64(self.native) < as_int(other, max=None)
362
-
363
- def __ge__(self, other: object) -> bool:
364
- return as_int64(self.native) >= as_int(other, max=None)
365
-
366
- def __gt__(self, other: object) -> bool:
367
- return as_int64(self.native) > as_int(other, max=None)
330
+ try:
331
+ other_int = as_int64(other)
332
+ except (TypeError, ValueError):
333
+ return NotImplemented
334
+ return as_int64(self.native) < other_int
368
335
 
369
336
  def __bool__(self) -> bool:
370
337
  return bool(self.native)
@@ -376,6 +343,7 @@ class UIntN(_UIntN, typing.Generic[_TBitSize]): # type: ignore[type-arg]
376
343
  return _arc4_repr(self)
377
344
 
378
345
 
346
+ @functools.total_ordering
379
347
  class BigUIntN(_UIntN, typing.Generic[_TBitSize]): # type: ignore[type-arg]
380
348
  """An ARC4 UInt consisting of the number of bits specified.
381
349
 
@@ -390,22 +358,18 @@ class BigUIntN(_UIntN, typing.Generic[_TBitSize]): # type: ignore[type-arg]
390
358
  return algopy.BigUInt.from_bytes(self._value)
391
359
 
392
360
  def __eq__(self, other: object) -> bool:
393
- return as_int512(self.native) == as_int(other, max=None)
394
-
395
- def __ne__(self, other: object) -> bool:
396
- return as_int512(self.native) != as_int(other, max=None)
397
-
398
- def __le__(self, other: object) -> bool:
399
- return as_int512(self.native) <= as_int(other, max=None)
361
+ try:
362
+ other_int = as_int512(other)
363
+ except (TypeError, ValueError):
364
+ return NotImplemented
365
+ return as_int512(self.native) == other_int
400
366
 
401
367
  def __lt__(self, other: object) -> bool:
402
- return as_int512(self.native) < as_int(other, max=None)
403
-
404
- def __ge__(self, other: object) -> bool:
405
- return as_int512(self.native) >= as_int(other, max=None)
406
-
407
- def __gt__(self, other: object) -> bool:
408
- return as_int512(self.native) > as_int(other, max=None)
368
+ try:
369
+ other_int = as_int512(other)
370
+ except (TypeError, ValueError):
371
+ return NotImplemented
372
+ return as_int512(self.native) < other_int
409
373
 
410
374
  def __bool__(self) -> bool:
411
375
  return bool(self.native)
@@ -749,8 +713,11 @@ class Address(StaticArray[Byte, typing.Literal[32]]):
749
713
  `Account` or `str`"""
750
714
  if isinstance(other, Address | Account):
751
715
  return self.bytes == other.bytes
752
- other_bytes: bytes = algosdk.encoding.decode_address(other)
753
- return self.bytes == other_bytes
716
+ elif isinstance(other, str):
717
+ other_bytes: bytes = algosdk.encoding.decode_address(other)
718
+ return self.bytes == other_bytes
719
+ else:
720
+ return NotImplemented
754
721
 
755
722
  def __str__(self) -> str:
756
723
  return str(self.native)
@@ -104,6 +104,9 @@ def algopy_testing_context(
104
104
  """
105
105
  from _algopy_testing.context import AlgopyTestContext
106
106
 
107
+ if _var.get(None) is not None:
108
+ raise RuntimeError("Nested `algopy_testing_context`s are not allowed.")
109
+
107
110
  token = _var.set(
108
111
  AlgopyTestContext(
109
112
  default_sender=default_sender,