Skip to content

Commit 2940081

Browse files
authored
test: cover arg encoding through the invoke glue (#54)
1 parent c048f84 commit 2940081

2 files changed

Lines changed: 137 additions & 0 deletions

File tree

src/tx/common.rs

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,3 +262,49 @@ pub async fn sign_tx(
262262

263263
Ok(cbor)
264264
}
265+
266+
#[cfg(test)]
267+
mod tests {
268+
use super::*;
269+
270+
// The invoke glue cshell owns: `prepare_invocation` (load the .tii + select
271+
// the tx) → `load_args` (parse `--args-json` → `set_args`) →
272+
// `into_resolve_request`. A complex record arg must serialize to the tagged
273+
// wire form while scalars stay bare — the `05-invoke` arg surface.
274+
#[test]
275+
fn invoke_encodes_diverse_args_into_resolve_request() {
276+
let tii = format!("{}/tests/fixtures/invoke.tii", env!("CARGO_MANIFEST_DIR"));
277+
let mut invocation =
278+
prepare_invocation(Path::new(&tii), Some("transfer"), None).unwrap();
279+
280+
let args_json = r#"{
281+
"quantity": 2000000,
282+
"urgent": true,
283+
"memo": "deadbeef",
284+
"meta": { "tags": [1, 2, 3], "level": 7 }
285+
}"#;
286+
load_args(&mut invocation, Some(args_json), None).unwrap();
287+
288+
let request = invocation.into_resolve_request().unwrap();
289+
290+
// Record `meta` → tagged struct; fields positional in declared order
291+
// (tags, level), not alphabetical.
292+
assert_eq!(
293+
request.args["meta"],
294+
json!({
295+
"struct": {
296+
"constructor": 0,
297+
"fields": [
298+
{ "list": [{ "int": 1 }, { "int": 2 }, { "int": 3 }] },
299+
{ "int": 7 }
300+
]
301+
}
302+
})
303+
);
304+
305+
// Scalars stay bare for the resolver to coerce via the flat type.
306+
assert_eq!(request.args["quantity"], json!(2000000));
307+
assert_eq!(request.args["urgent"], json!(true));
308+
assert_eq!(request.args["memo"], json!("deadbeef"));
309+
}
310+
}

tests/fixtures/invoke.tii

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
{
2+
"components": {
3+
"schemas": {
4+
"Meta": {
5+
"properties": {
6+
"level": {
7+
"type": "integer"
8+
},
9+
"tags": {
10+
"items": {
11+
"type": "integer"
12+
},
13+
"type": "array"
14+
}
15+
},
16+
"required": [
17+
"tags",
18+
"level"
19+
],
20+
"type": "object"
21+
}
22+
}
23+
},
24+
"environment": {
25+
"properties": {},
26+
"required": [],
27+
"type": "object"
28+
},
29+
"parties": {
30+
"receiver": {},
31+
"sender": {}
32+
},
33+
"profiles": {
34+
"local": {
35+
"environment": {},
36+
"parties": {}
37+
},
38+
"mainnet": {
39+
"environment": {},
40+
"parties": {}
41+
},
42+
"preprod": {
43+
"environment": {},
44+
"parties": {}
45+
},
46+
"preview": {
47+
"environment": {},
48+
"parties": {}
49+
}
50+
},
51+
"protocol": {
52+
"name": "cshell-fix",
53+
"scope": "unknown",
54+
"version": "0.0.0"
55+
},
56+
"tii": {
57+
"version": "v1beta0"
58+
},
59+
"transactions": {
60+
"transfer": {
61+
"params": {
62+
"properties": {
63+
"memo": {
64+
"$ref": "https://tx3.land/specs/v1beta0/tii#/$defs/Bytes"
65+
},
66+
"meta": {
67+
"$ref": "#/components/schemas/Meta"
68+
},
69+
"quantity": {
70+
"type": "integer"
71+
},
72+
"urgent": {
73+
"type": "boolean"
74+
}
75+
},
76+
"required": [
77+
"quantity",
78+
"urgent",
79+
"memo",
80+
"meta"
81+
],
82+
"type": "object"
83+
},
84+
"tir": {
85+
"content": "ab6466656573a1694576616c506172616d6a457870656374466565736a7265666572656e6365738066696e7075747381a3646e616d6566736f75726365657574786f73a1694576616c506172616da16b457870656374496e7075748266736f75726365a56761646472657373a1694576616c506172616da16b45787065637456616c7565826673656e64657267416464726573736a6d696e5f616d6f756e74a16b4576616c4275696c74496ea16341646482a16641737365747381a366706f6c696379644e6f6e656a61737365745f6e616d65644e6f6e6566616d6f756e74a1694576616c506172616da16b45787065637456616c756582687175616e7469747963496e74a1694576616c506172616d6a4578706563744665657363726566644e6f6e65646d616e79f46a636f6c6c61746572616cf46872656465656d6572644e6f6e65676f75747075747382a46761646472657373a1694576616c506172616da16b45787065637456616c756582687265636569766572674164647265737365646174756da166537472756374a26b636f6e7374727563746f7200666669656c647383a1694576616c506172616da16b45787065637456616c756582646d656d6f654279746573a1694576616c506172616da16b45787065637456616c75658266757267656e7464426f6f6ca1694576616c506172616da16b45787065637456616c756582646d657461a166437573746f6d644d65746166616d6f756e74a16641737365747381a366706f6c696379644e6f6e656a61737365745f6e616d65644e6f6e6566616d6f756e74a1694576616c506172616da16b45787065637456616c756582687175616e7469747963496e74686f7074696f6e616cf4a46761646472657373a1694576616c506172616da16b45787065637456616c7565826673656e646572674164647265737365646174756d644e6f6e6566616d6f756e74a16b4576616c4275696c74496ea16353756282a16b4576616c4275696c74496ea16353756282a16a4576616c436f65726365a16a496e746f417373657473a1694576616c506172616da16b457870656374496e7075748266736f75726365a56761646472657373a1694576616c506172616da16b45787065637456616c7565826673656e64657267416464726573736a6d696e5f616d6f756e74a16b4576616c4275696c74496ea16341646482a16641737365747381a366706f6c696379644e6f6e656a61737365745f6e616d65644e6f6e6566616d6f756e74a1694576616c506172616da16b45787065637456616c756582687175616e7469747963496e74a1694576616c506172616d6a4578706563744665657363726566644e6f6e65646d616e79f46a636f6c6c61746572616cf4a16641737365747381a366706f6c696379644e6f6e656a61737365745f6e616d65644e6f6e6566616d6f756e74a1694576616c506172616da16b45787065637456616c756582687175616e7469747963496e74a1694576616c506172616d6a45787065637446656573686f7074696f6e616cf46876616c6964697479f6656d696e747380656275726e7380656164686f63806a636f6c6c61746572616c80677369676e657273f6686d6574616461746180",
86+
"encoding": "hex",
87+
"version": "v1beta0"
88+
}
89+
}
90+
}
91+
}

0 commit comments

Comments
 (0)