Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refractor: decoded return result #128

Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 27 additions & 25 deletions pop-api/integration-tests/src/local_fungibles.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,27 +8,26 @@ use pop_primitives::error::{
const ASSET_ID: AssetId = 1;
const CONTRACT: &str = "contracts/fungibles/target/ink/fungibles.wasm";

fn decoded<T: Decode>(result: ExecReturnValue) -> T {
match <T>::decode(&mut &result.data[2..]) {
Ok(value) => value,
Err(_) => panic!("\nTest failed by trying to decode `{:?}` into `T`\n", result),
}
// Decode the contract execution value, return error if the value can't be decoded
fn decoded<T: Decode>(result: ExecReturnValue) -> Result<T, String> {
<T>::decode(&mut &result.data[2..])
.map_err(|_| format!("\nTest failed by trying to decode `{:?}` into `T`\n", result))
}

// Call total_supply contract message.
fn total_supply(addr: AccountId32, asset_id: AssetId) -> Balance {
let function = function_selector("total_supply");
let params = [function, asset_id.encode()].concat();
let result = bare_call(addr, params, 0).expect("should work");
decoded::<Balance>(result)
decoded::<Balance>(result).unwrap()
}

// Call balance_of contract message.
fn balance_of(addr: AccountId32, asset_id: AssetId, owner: AccountId32) -> Balance {
let function = function_selector("balance_of");
let params = [function, asset_id.encode(), owner.encode()].concat();
let result = bare_call(addr, params, 0).expect("should work");
decoded::<Balance>(result)
decoded::<Balance>(result).unwrap()
}

// Call allowance contract message.
Expand All @@ -41,31 +40,31 @@ fn allowance(
let function = function_selector("allowance");
let params = [function, asset_id.encode(), owner.encode(), spender.encode()].concat();
let result = bare_call(addr, params, 0).expect("should work");
decoded::<Balance>(result)
decoded::<Balance>(result).unwrap()
}

// Call token_name contract message.
fn token_name(addr: AccountId32, asset_id: AssetId) -> Vec<u8> {
let function = function_selector("token_name");
let params = [function, asset_id.encode()].concat();
let result = bare_call(addr, params, 0).expect("should work");
decoded::<Vec<u8>>(result)
decoded::<Vec<u8>>(result).unwrap()
}

// Call token_symbol contract message.
fn token_symbol(addr: AccountId32, asset_id: AssetId) -> Vec<u8> {
let function = function_selector("token_symbol");
let params = [function, asset_id.encode()].concat();
let result = bare_call(addr, params, 0).expect("should work");
decoded::<Vec<u8>>(result)
decoded::<Vec<u8>>(result).unwrap()
}

// Call token_decimals contract message.
fn token_decimals(addr: AccountId32, asset_id: AssetId) -> u8 {
let function = function_selector("token_decimals");
let params = [function, asset_id.encode()].concat();
let result = bare_call(addr, params, 0).expect("should work");
decoded::<u8>(result)
decoded::<u8>(result).unwrap()
}

fn transfer(
Expand Down Expand Up @@ -327,26 +326,26 @@ fn transfer_works() {
// Asset does not exist.
assert_eq!(
decoded::<Error>(transfer(addr.clone(), 1, BOB, amount,)),
Module { index: 52, error: 3 },
Ok(Module { index: 52, error: 3 }),
);
// Create asset with Alice as owner and mint `amount` to contract address.
let asset = create_asset_and_mint_to(ALICE, 1, addr.clone(), amount);
// Asset is not live, i.e. frozen or being destroyed.
freeze_asset(ALICE, asset);
assert_eq!(
decoded::<Error>(transfer(addr.clone(), asset, BOB, amount,)),
Module { index: 52, error: 16 },
Ok(Module { index: 52, error: 16 }),
);
thaw_asset(ALICE, asset);
// Not enough balance.
assert_eq!(
decoded::<Error>(transfer(addr.clone(), asset, BOB, amount + 1 * UNIT)),
Module { index: 52, error: 0 },
Ok(Module { index: 52, error: 0 }),
);
// Not enough balance due to ED.
assert_eq!(
decoded::<Error>(transfer(addr.clone(), asset, BOB, amount)),
Module { index: 52, error: 0 },
Ok(Module { index: 52, error: 0 }),
);
// Successful transfer.
let balance_before_transfer = Assets::balance(asset, &BOB);
Expand All @@ -357,13 +356,13 @@ fn transfer_works() {
// Transfer asset to account that does not exist.
assert_eq!(
decoded::<Error>(transfer(addr.clone(), asset, FERDIE, amount / 4)),
Token(CannotCreate)
Ok(Token(CannotCreate))
);
// Asset is not live, i.e. frozen or being destroyed.
start_destroy_asset(ALICE, asset);
assert_eq!(
decoded::<Error>(transfer(addr.clone(), asset, BOB, amount / 4)),
Module { index: 52, error: 16 },
Ok(Module { index: 52, error: 16 }),
);
});
}
Expand All @@ -377,10 +376,13 @@ fn approve_works() {
// Asset does not exist.
assert_eq!(
decoded::<Error>(approve(addr.clone(), 0, BOB, amount)),
Module { index: 52, error: 3 },
Ok(Module { index: 52, error: 3 }),
);
let asset = create_asset_and_mint_to(ALICE, 0, addr.clone(), amount);
assert_eq!(decoded::<Error>(approve(addr.clone(), asset, BOB, amount)), ConsumerRemaining);
assert_eq!(
decoded::<Error>(approve(addr.clone(), asset, BOB, amount)),
Ok(ConsumerRemaining)
);

let addr = instantiate(CONTRACT, INIT_VALUE, vec![1]);
// Create asset with Alice as owner and mint `amount` to contract address.
Expand All @@ -389,7 +391,7 @@ fn approve_works() {
freeze_asset(ALICE, asset);
assert_eq!(
decoded::<Error>(approve(addr.clone(), asset, BOB, amount)),
Module { index: 52, error: 16 },
Ok(Module { index: 52, error: 16 }),
);
thaw_asset(ALICE, asset);
// Successful approvals:
Expand All @@ -403,7 +405,7 @@ fn approve_works() {
start_destroy_asset(ALICE, asset);
assert_eq!(
decoded::<Error>(approve(addr.clone(), asset, BOB, amount)),
Module { index: 52, error: 16 },
Ok(Module { index: 52, error: 16 }),
);
});
}
Expand All @@ -417,12 +419,12 @@ fn increase_allowance_works() {
// Asset does not exist.
assert_eq!(
decoded::<Error>(increase_allowance(addr.clone(), 0, BOB, amount)),
Module { index: 52, error: 3 },
Ok(Module { index: 52, error: 3 }),
);
let asset = create_asset_and_mint_to(ALICE, 0, addr.clone(), amount);
assert_eq!(
decoded::<Error>(increase_allowance(addr.clone(), asset, BOB, amount)),
ConsumerRemaining
Ok(ConsumerRemaining)
);

let addr = instantiate(CONTRACT, INIT_VALUE, vec![1]);
Expand All @@ -432,7 +434,7 @@ fn increase_allowance_works() {
freeze_asset(ALICE, asset);
assert_eq!(
decoded::<Error>(increase_allowance(addr.clone(), asset, BOB, amount)),
Module { index: 52, error: 16 },
Ok(Module { index: 52, error: 16 }),
);
thaw_asset(ALICE, asset);
// Successful approvals:
Expand All @@ -452,7 +454,7 @@ fn increase_allowance_works() {
start_destroy_asset(ALICE, asset);
assert_eq!(
decoded::<Error>(increase_allowance(addr.clone(), asset, BOB, amount)),
Module { index: 52, error: 16 },
Ok(Module { index: 52, error: 16 }),
);
});
}
Expand Down
Loading