From 1cbc92b1398ce6fb231589e1bf2e9229649d8da6 Mon Sep 17 00:00:00 2001 From: BiancaIalangi Date: Wed, 12 Feb 2025 15:55:35 +0200 Subject: [PATCH] multi transfer - add test with one egld multi transfer --- .../interactor/src/payable_interactor.rs | 27 +++++++++- .../interactor/src/payable_interactor_cli.rs | 2 + .../src/payable_interactor_state.rs | 10 ++-- .../tests/payable_interactor_cs_test.rs | 14 +++++ .../payable_all_transfers_2.scen.json | 53 +++++++++++++++++++ .../tests/payable_scenario_go_test.rs | 5 ++ .../tests/payable_scenario_rs_test.rs | 5 ++ 7 files changed, 110 insertions(+), 6 deletions(-) create mode 100644 contracts/feature-tests/payable-features/interactor/tests/payable_interactor_cs_test.rs create mode 100644 contracts/feature-tests/payable-features/scenarios/payable_all_transfers_2.scen.json diff --git a/contracts/feature-tests/payable-features/interactor/src/payable_interactor.rs b/contracts/feature-tests/payable-features/interactor/src/payable_interactor.rs index 1096d14fbc..b190bfb972 100644 --- a/contracts/feature-tests/payable-features/interactor/src/payable_interactor.rs +++ b/contracts/feature-tests/payable-features/interactor/src/payable_interactor.rs @@ -26,6 +26,11 @@ pub async fn adder_cli() { Some(payable_interactor_cli::InteractCliCommand::AllTransfers) => { basic_interact.check_all_transfers().await; }, + Some(payable_interactor_cli::InteractCliCommand::MultiTransferWithOneEGLD) => { + basic_interact + .check_multi_transfer_single_egld_transfer() + .await; + }, None => {}, } } @@ -73,6 +78,26 @@ impl PayableInteract { self.state.set_adder_address(new_address); } + pub async fn check_multi_transfer_single_egld_transfer(&mut self) { + let mut payment = MultiEgldOrEsdtPayment::new(); + payment.push(EgldOrEsdtTokenPayment::egld_payment(1_0000u64.into())); + + let result = self + .interactor + .tx() + .from(&self.wallet_address) + .to(self.state.current_payable_features_address()) + .gas(6_000_000u64) + .typed(payable_features_proxy::PayableFeaturesProxy) + .payable_all_transfers() + .payment(payment) + .returns(ReturnsResult) + .run() + .await; + + println!("Result: {result:?}"); + } + pub async fn check_all_transfers(&mut self) { let mut payment = MultiEgldOrEsdtPayment::new(); payment.push(EgldOrEsdtTokenPayment::egld_payment(1_0000u64.into())); @@ -82,7 +107,7 @@ impl PayableInteract { .interactor .tx() .from(&self.wallet_address) - .to(self.state.current_adder_address()) + .to(self.state.current_payable_features_address()) .gas(6_000_000u64) .typed(payable_features_proxy::PayableFeaturesProxy) .payable_all_transfers() diff --git a/contracts/feature-tests/payable-features/interactor/src/payable_interactor_cli.rs b/contracts/feature-tests/payable-features/interactor/src/payable_interactor_cli.rs index b1d38ddba5..2c12a4a414 100644 --- a/contracts/feature-tests/payable-features/interactor/src/payable_interactor_cli.rs +++ b/contracts/feature-tests/payable-features/interactor/src/payable_interactor_cli.rs @@ -16,4 +16,6 @@ pub enum InteractCliCommand { Deploy, #[command(name = "at", about = "Check all transfers")] AllTransfers, + #[command(name = "mt", about = "Check multi transfer with one EGLD")] + MultiTransferWithOneEGLD, } diff --git a/contracts/feature-tests/payable-features/interactor/src/payable_interactor_state.rs b/contracts/feature-tests/payable-features/interactor/src/payable_interactor_state.rs index bcab774134..52d3013238 100644 --- a/contracts/feature-tests/payable-features/interactor/src/payable_interactor_state.rs +++ b/contracts/feature-tests/payable-features/interactor/src/payable_interactor_state.rs @@ -8,10 +8,10 @@ use std::{ /// State file const STATE_FILE: &str = "state.toml"; -/// Adder Interact state +/// Payable Features Interact state #[derive(Debug, Default, Serialize, Deserialize)] pub struct State { - adder_address: Option, + payable_features_address: Option, } impl State { @@ -29,12 +29,12 @@ impl State { /// Sets the adder address pub fn set_adder_address(&mut self, address: Bech32Address) { - self.adder_address = Some(address); + self.payable_features_address = Some(address); } /// Returns the adder contract - pub fn current_adder_address(&self) -> &Bech32Address { - self.adder_address + pub fn current_payable_features_address(&self) -> &Bech32Address { + self.payable_features_address .as_ref() .expect("no known adder contract, deploy first") } diff --git a/contracts/feature-tests/payable-features/interactor/tests/payable_interactor_cs_test.rs b/contracts/feature-tests/payable-features/interactor/tests/payable_interactor_cs_test.rs new file mode 100644 index 0000000000..125a4e257f --- /dev/null +++ b/contracts/feature-tests/payable-features/interactor/tests/payable_interactor_cs_test.rs @@ -0,0 +1,14 @@ +// use multiversx_sc_snippets::{imports::Bech32Address, sdk::gateway::SetStateAccount, test_wallets}; +use payable_interactor::{Config, PayableInteract}; +use serial_test::serial; + +#[tokio::test] +#[serial] +#[cfg_attr(not(feature = "chain-simulator-tests"), ignore)] +async fn simulator_upgrade_test() { + let mut payable_interact = PayableInteract::new(Config::chain_simulator_config()).await; + + payable_interact.deploy().await; + + payable_interact.check_all_transfers().await; +} diff --git a/contracts/feature-tests/payable-features/scenarios/payable_all_transfers_2.scen.json b/contracts/feature-tests/payable-features/scenarios/payable_all_transfers_2.scen.json new file mode 100644 index 0000000000..830d2cfa21 --- /dev/null +++ b/contracts/feature-tests/payable-features/scenarios/payable_all_transfers_2.scen.json @@ -0,0 +1,53 @@ +{ + "steps": [ + { + "step": "setState", + "accounts": { + "address:a_user": { + "nonce": "0", + "balance": "10000000000" + }, + "sc:payable": { + "nonce": "0", + "balance": "0", + "esdt": {}, + "code": "mxsc:../output/payable-features.mxsc.json" + } + } + }, + { + "step": "scCall", + "id": "", + "tx": { + "from": "address:a_user", + "to": "sc:payable", + "esdtValue": [ + { + "tokenIdentifier": "str:EGLD-000000", + "value": "10000" + } + ], + "function": "payable_all_transfers", + "arguments": [], + "gasLimit": "6000000" + } + }, + { + "step": "checkState", + "accounts": { + "address:a_user": { + "nonce": "*", + "balance": "9999990000", + "storage": {}, + "code": "" + }, + "sc:payable": { + "nonce": "*", + "balance": "10000", + "storage": {}, + "code": "" + } + } + } + ] +} \ No newline at end of file diff --git a/contracts/feature-tests/payable-features/tests/payable_scenario_go_test.rs b/contracts/feature-tests/payable-features/tests/payable_scenario_go_test.rs index 8b9e2a0a80..6091ba14be 100644 --- a/contracts/feature-tests/payable-features/tests/payable_scenario_go_test.rs +++ b/contracts/feature-tests/payable-features/tests/payable_scenario_go_test.rs @@ -19,6 +19,11 @@ fn payable_all_transfers_go() { world().run("scenarios/payable_all_transfers.scen.json"); } +#[test] +fn payable_all_transfers_2_go() { + world().run("scenarios/payable_all_transfers_2.scen.json"); +} + #[test] fn payable_any_1_go() { world().run("scenarios/payable_any_1.scen.json"); diff --git a/contracts/feature-tests/payable-features/tests/payable_scenario_rs_test.rs b/contracts/feature-tests/payable-features/tests/payable_scenario_rs_test.rs index 7928eb3abf..5b6316670b 100644 --- a/contracts/feature-tests/payable-features/tests/payable_scenario_rs_test.rs +++ b/contracts/feature-tests/payable-features/tests/payable_scenario_rs_test.rs @@ -25,6 +25,11 @@ fn payable_all_transfers_rs() { world().run("scenarios/payable_all_transfers.scen.json"); } +#[test] +fn payable_all_transfers_2_go() { + world().run("scenarios/payable_all_transfers_2.scen.json"); +} + #[test] fn payable_any_1_rs() { world().run("scenarios/payable_any_1.scen.json");