Skip to content

Commit

Permalink
migrate forwarder tests to new syntax
Browse files Browse the repository at this point in the history
  • Loading branch information
ovstinga committed Aug 21, 2023
1 parent 96f2af6 commit 022b609
Show file tree
Hide file tree
Showing 2 changed files with 110 additions and 85 deletions.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
use forwarder::nft::{Color, ForwarderNftModule};
use multiversx_sc::{contract_base::ContractBase, types::Address};
use multiversx_sc_scenario::{
managed_address, managed_biguint, managed_token_id, rust_biguint,
scenario_model::{Account, AddressValue, ScCallStep, SetStateStep},
ScenarioWorld, WhiteboxContract,
};

const USER_ADDRESS_EXPR: &str = "address:user";
const FORWARDER_ADDRESS_EXPR: &str = "sc:forwarder";
const FORWARDER_PATH_EXPR: &str = "file:output/forwarder.wasm";

const NFT_TOKEN_ID_EXPR: &str = "str:COOL-123456";
const NFT_TOKEN_ID: &[u8] = b"COOL-123456";

fn world() -> ScenarioWorld {
let mut blockchain = ScenarioWorld::new();
blockchain.set_current_dir_from_workspace("contracts/composability/forwarder");

blockchain.register_contract(FORWARDER_PATH_EXPR, forwarder::ContractBuilder);
blockchain
}

#[test]
fn test_nft_update_attributes_and_send() {
let mut world = world();

let forwarder_code = world.code_expression(FORWARDER_PATH_EXPR);
let mut roles = Vec::new();
roles.push(String::from("ESDTRoleNFTCreate"));
roles.push(String::from("ESDTRoleNFTUpdateAttributes"));

world.set_state_step(
SetStateStep::new()
.put_account(USER_ADDRESS_EXPR, Account::new().nonce(1))
.put_account(
FORWARDER_ADDRESS_EXPR,
Account::new()
.nonce(1)
.code(forwarder_code.clone())
.esdt_roles(NFT_TOKEN_ID_EXPR, roles),
),
);

let forwarder_whitebox = WhiteboxContract::new(FORWARDER_ADDRESS_EXPR, forwarder::contract_obj);

let original_attributes = Color { r: 0, g: 0, b: 0 };

world.whitebox_call(
&forwarder_whitebox,
ScCallStep::new().from(USER_ADDRESS_EXPR),
|sc| {
sc.nft_create_compact(
managed_token_id!(NFT_TOKEN_ID),
managed_biguint!(1),
original_attributes,
);

sc.send().direct_esdt(
&managed_address!(&address_expr_to_address(USER_ADDRESS_EXPR)),
&managed_token_id!(NFT_TOKEN_ID),
1,
&managed_biguint!(1),
);
},
);

// TODO: implement esdt_nft_balance check
// world.check_state_step(
// CheckStateStep::new().put_account(
// USER_ADDRESS_EXPR,
// CheckAccount::new().esdt_nft_balance(token_id_expr, nonce_expr, balance_expr, opt_attributes_expr)
// ),
// );

let new_attributes = Color {
r: 255,
g: 255,
b: 255,
};

world.whitebox_call(
&forwarder_whitebox,
ScCallStep::new()
.from(USER_ADDRESS_EXPR)
.esdt_transfer(NFT_TOKEN_ID, 1, rust_biguint!(1)),
|sc| {
sc.nft_update_attributes(managed_token_id!(NFT_TOKEN_ID), 1, new_attributes);

sc.send().direct_esdt(
&managed_address!(&address_expr_to_address(USER_ADDRESS_EXPR)),
&managed_token_id!(NFT_TOKEN_ID),
1,
&managed_biguint!(1),
);
},
);

// TODO: implement esdt_nft_balance check
// world.check_state_step(
// CheckStateStep::new().put_account(
// USER_ADDRESS_EXPR,
// CheckAccount::new().esdt_nft_balance(token_id_expr, nonce_expr, balance_expr, opt_attributes_expr)
// ),
// );
}

fn address_expr_to_address(address_expr: &str) -> Address {
AddressValue::from(address_expr).to_address()
}

0 comments on commit 022b609

Please sign in to comment.