Skip to content

Commit 81e9edf

Browse files
neilcampbelldaniel-makerx
authored andcommitted
test: populated box refs for created apps
1 parent fc09e26 commit 81e9edf

File tree

8 files changed

+145
-10
lines changed

8 files changed

+145
-10
lines changed

poetry.lock

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ readme = "README.md"
88

99
[tool.poetry.dependencies]
1010
python = "^3.10"
11-
py-algorand-sdk = "^2.4.0"
11+
py-algorand-sdk = "^2.11.0"
1212
httpx = ">=0.23.1,<=0.28.1"
1313
typing-extensions = ">=4.6.0"
1414

tests/artifacts/resource-packer/ExternalApp.arc32.json

Lines changed: 18 additions & 1 deletion
Large diffs are not rendered by default.
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
{
2+
"hints": {
3+
"createEmptyBox()void": {
4+
"call_config": {
5+
"no_op": "CALL"
6+
}
7+
},
8+
"createApplication()void": {
9+
"call_config": {
10+
"no_op": "CREATE"
11+
}
12+
}
13+
},
14+
"bare_call_config": {
15+
"no_op": "NEVER",
16+
"opt_in": "NEVER",
17+
"close_out": "NEVER",
18+
"update_application": "NEVER",
19+
"delete_application": "NEVER"
20+
},
21+
"schema": {
22+
"local": {
23+
"declared": {},
24+
"reserved": {}
25+
},
26+
"global": {
27+
"declared": {},
28+
"reserved": {}
29+
}
30+
},
31+
"state": {
32+
"global": {
33+
"num_byte_slices": 0,
34+
"num_uints": 0
35+
},
36+
"local": {
37+
"num_byte_slices": 0,
38+
"num_uints": 0
39+
}
40+
},
41+
"source": {
42+
"approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCmludGNibG9jayAxCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjEwNi4zCi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbGdvcmFuZGZvdW5kYXRpb24vVEVBTFNjcmlwdAoKLy8gVGhpcyBjb250cmFjdCBpcyBjb21wbGlhbnQgd2l0aCBhbmQvb3IgaW1wbGVtZW50cyB0aGUgZm9sbG93aW5nIEFSQ3M6IFsgQVJDNCBdCgovLyBUaGUgZm9sbG93aW5nIHRlbiBsaW5lcyBvZiBURUFMIGhhbmRsZSBpbml0aWFsIHByb2dyYW0gZmxvdwovLyBUaGlzIHBhdHRlcm4gaXMgdXNlZCB0byBtYWtlIGl0IGVhc3kgZm9yIGFueW9uZSB0byBwYXJzZSB0aGUgc3RhcnQgb2YgdGhlIHByb2dyYW0gYW5kIGRldGVybWluZSBpZiBhIHNwZWNpZmljIGFjdGlvbiBpcyBhbGxvd2VkCi8vIEhlcmUsIGFjdGlvbiByZWZlcnMgdG8gdGhlIE9uQ29tcGxldGUgaW4gY29tYmluYXRpb24gd2l0aCB3aGV0aGVyIHRoZSBhcHAgaXMgYmVpbmcgY3JlYXRlZCBvciBjYWxsZWQKLy8gRXZlcnkgcG9zc2libGUgYWN0aW9uIGZvciB0aGlzIGNvbnRyYWN0IGlzIHJlcHJlc2VudGVkIGluIHRoZSBzd2l0Y2ggc3RhdGVtZW50Ci8vIElmIHRoZSBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoZSBjb250cmFjdCwgaXRzIHJlc3BlY3RpdmUgYnJhbmNoIHdpbGwgYmUgIipOT1RfSU1QTEVNRU5URUQiIHdoaWNoIGp1c3QgY29udGFpbnMgImVyciIKdHhuIEFwcGxpY2F0aW9uSUQKIQpwdXNoaW50IDYKKgp0eG4gT25Db21wbGV0aW9uCisKc3dpdGNoICpjYWxsX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpjcmVhdGVfTm9PcCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQKCipOT1RfSU1QTEVNRU5URUQ6CgkvLyBUaGUgcmVxdWVzdGVkIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBjb250cmFjdC4gQXJlIHlvdSB1c2luZyB0aGUgY29ycmVjdCBPbkNvbXBsZXRlPyBEaWQgeW91IHNldCB5b3VyIGFwcCBJRD8KCWVycgoKLy8gY3JlYXRlRW1wdHlCb3goKXZvaWQKKmFiaV9yb3V0ZV9jcmVhdGVFbXB0eUJveDoKCS8vIGV4ZWN1dGUgY3JlYXRlRW1wdHlCb3goKXZvaWQKCWNhbGxzdWIgY3JlYXRlRW1wdHlCb3gKCWludGMgMCAvLyAxCglyZXR1cm4KCi8vIGNyZWF0ZUVtcHR5Qm94KCk6IHZvaWQKY3JlYXRlRW1wdHlCb3g6Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9leGFtcGxlLWNvbnRyYWN0cy9yZXNvdXJjZS1wYWNrZXIvcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6NjEKCS8vIHRoaXMuZW1wdHlCb3guY3JlYXRlKCkKCXB1c2hieXRlcyAweDY1NmQ3MDc0Nzk0MjZmNzggLy8gImVtcHR5Qm94IgoJcHVzaGludCAwCglib3hfY3JlYXRlCglwb3AKCXJldHN1YgoKKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbjoKCWludGMgMCAvLyAxCglyZXR1cm4KCipjcmVhdGVfTm9PcDoKCXB1c2hieXRlcyAweGI4NDQ3YjM2IC8vIG1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uCgoJLy8gdGhpcyBjb250cmFjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGdpdmVuIEFCSSBtZXRob2QgZm9yIGNyZWF0ZSBOb09wCgllcnIKCipjYWxsX05vT3A6CglwdXNoYnl0ZXMgMHhhNjhiZDI5NyAvLyBtZXRob2QgImNyZWF0ZUVtcHR5Qm94KCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9jcmVhdGVFbXB0eUJveAoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjYWxsIE5vT3AKCWVycg==",
43+
"clear": "I3ByYWdtYSB2ZXJzaW9uIDEw"
44+
},
45+
"contract": {
46+
"name": "InnerBoxApp",
47+
"desc": "",
48+
"methods": [
49+
{
50+
"name": "createEmptyBox",
51+
"args": [],
52+
"returns": {
53+
"type": "void"
54+
}
55+
},
56+
{
57+
"name": "createApplication",
58+
"args": [],
59+
"returns": {
60+
"type": "void"
61+
}
62+
}
63+
]
64+
}
65+
}

tests/artifacts/resource-packer/ResourcePackerv8.arc32.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

tests/artifacts/resource-packer/ResourcePackerv9.arc32.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

tests/artifacts/resource-packer/resource-packer.algo.ts

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ class ExternalApp extends Contract {
1515
dummy(): void {}
1616

1717
error(): void {
18-
throw Error()
18+
throw Error('Some error')
1919
}
2020

2121
boxWithPayment(_payment: PayTxn): void {
@@ -31,6 +31,35 @@ class ExternalApp extends Contract {
3131
senderAssetBalance(): void {
3232
assert(!this.txn.sender.isOptedInToAsset(this.asa.value))
3333
}
34+
35+
createBoxInNewApp(mbrPayment: PayTxn): void {
36+
verifyPayTxn(mbrPayment, {
37+
receiver: this.app.address,
38+
})
39+
40+
sendMethodCall<[], void>({
41+
name: 'createApplication',
42+
approvalProgram: InnerBoxApp.approvalProgram(),
43+
clearStateProgram: InnerBoxApp.clearProgram(),
44+
})
45+
46+
const appId = this.itxn.createdApplicationID
47+
const appAddr = appId.address
48+
49+
sendPayment({ receiver: appAddr, amount: mbrPayment.amount })
50+
51+
sendMethodCall<typeof InnerBoxApp.prototype.createEmptyBox>({
52+
applicationID: appId,
53+
})
54+
}
55+
}
56+
57+
class InnerBoxApp extends Contract {
58+
emptyBox = BoxKey<StaticBytes<0>>()
59+
60+
createEmptyBox(): void {
61+
this.emptyBox.create()
62+
}
3463
}
3564

3665
// eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars

tests/transactions/test_resource_packing.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from algokit_utils.applications.app_factory import AppFactoryCreateMethodCallParams
1212
from algokit_utils.errors.logic_error import LogicError
1313
from algokit_utils.models.amount import AlgoAmount
14+
from algokit_utils.transactions.transaction_composer import PaymentParams
1415

1516

1617
@pytest.fixture
@@ -404,3 +405,26 @@ def test_rekeyed_account(self, algorand: AlgorandClient, funded_account: Signing
404405
result = self.external_client.send.call(AppClientMethodCallParams(method="senderAssetBalance"))
405406

406407
assert len(getattr(result.transaction.application_call, "accounts", None) or []) == 0
408+
409+
def test_create_box_in_new_app(self, algorand: AlgorandClient, funded_account: SigningAccount) -> None:
410+
self.external_client.fund_app_account(FundAppAccountParams(amount=AlgoAmount.from_micro_algo(200_000)))
411+
412+
result = self.external_client.send.call(
413+
AppClientMethodCallParams(
414+
method="createBoxInNewApp",
415+
args=[
416+
algorand.create_transaction.payment(
417+
PaymentParams(
418+
sender=funded_account.address,
419+
receiver=self.external_client.app_address,
420+
amount=AlgoAmount.from_algo(1),
421+
)
422+
)
423+
],
424+
static_fee=AlgoAmount.from_micro_algo(4_000),
425+
),
426+
)
427+
428+
box_ref = result.transaction.application_call.boxes[0] if result.transaction.application_call.boxes else None
429+
assert box_ref is not None
430+
assert box_ref.app_index == 0 # type: ignore

0 commit comments

Comments
 (0)