Skip to content

Commit

Permalink
test approval expires
Browse files Browse the repository at this point in the history
  • Loading branch information
yihuang committed Mar 24, 2021
1 parent 22d5dc2 commit 2f48da0
Showing 1 changed file with 83 additions and 26 deletions.
109 changes: 83 additions & 26 deletions contracts/cw1155-base/src/contract.rs
Original file line number Diff line number Diff line change
Expand Up @@ -123,17 +123,17 @@ fn execute_transfer_inner<'a>(
fn check_can_approve(
deps: Deps,
env: &Env,
sender: &HumanAddr,
owner: &HumanAddr,
operator: &HumanAddr,
) -> StdResult<bool> {
// owner can approve
let owner_raw = deps.api.canonical_address(owner)?;
let sender_raw = deps.api.canonical_address(sender)?;
if owner_raw == sender_raw {
let operator_raw = deps.api.canonical_address(operator)?;
if owner_raw == operator_raw {
return Ok(true);
}
// operator can approve
let op = APPROVES.may_load(deps.storage, (&owner_raw, &sender_raw))?;
let op = APPROVES.may_load(deps.storage, (&owner_raw, &operator_raw))?;
Ok(match op {
Some(ex) => !ex.is_expired(&env.block),
None => false,
Expand Down Expand Up @@ -1091,32 +1091,89 @@ mod tests {
}

// FIXME test failed, query result out of order
// assert_eq!(
// query(
// deps.as_ref(),
// mock_env(),
// Cw1155QueryMsg::ApprovedForAll {
// owner: users[0].clone(),
// include_expired: None,
// start_after: None,
// limit: None,
// },
// ),
// to_binary(&ApprovedForAllResponse {
// operators: users[1..]
// .iter()
// .map(|user| cw1155::Approval {
// spender: user.clone(),
// expires: Expiration::Never {}
// })
// .collect::<Vec<_>>()
// })
// );
assert_eq!(
query(
deps.as_ref(),
mock_env(),
Cw1155QueryMsg::ApprovedForAll {
owner: users[0].clone(),
include_expired: None,
start_after: Some("user2".into()),
limit: Some(1),
},
),
to_binary(&ApprovedForAllResponse {
operators: vec![cw1155::Approval {
spender: users[3].clone().into(),
expires: Expiration::Never {}
}],
})
);
}

#[test]
fn approval_expires() {
// TODO
let mut deps = mock_dependencies(&[]);
let token1 = "token1".to_owned();
let minter: HumanAddr = "minter".into();
let user1: HumanAddr = "user1".into();
let user2: HumanAddr = "user2".into();

let env = {
let mut env = mock_env();
env.block.height = 1;
env
};

let msg = InitMsg {
minter: minter.clone(),
};
let res = instantiate(deps.as_mut(), env.clone(), mock_info("operator", &[]), msg).unwrap();
assert_eq!(0, res.messages.len());

execute(
deps.as_mut(),
env.clone(),
mock_info(minter.clone(), &[]),
Cw1155HandleMsg::Mint {
to: user1.clone(),
token_id: token1.clone(),
value: 1u64.into(),
msg: None,
},
)
.unwrap();

execute(
deps.as_mut(),
env.clone(),
mock_info(user1.clone(), &[]),
Cw1155HandleMsg::ApproveAll {
operator: user2.clone(),
expires: Some(Expiration::AtHeight(100)),
},
)
.unwrap();

let query_msg = Cw1155QueryMsg::IsApprovedForAll {
owner: user1.clone(),
operator: user2.clone(),
};
assert_eq!(
query(deps.as_ref(), env, query_msg.clone()),
to_binary(&IsApprovedForAllResponse { approved: true })
);

let env = {
let mut env = mock_env();
env.block.height = 100;
env
};

assert_eq!(
query(deps.as_ref(), env, query_msg,),
to_binary(&IsApprovedForAllResponse { approved: false })
);
}

#[test]
Expand Down

0 comments on commit 2f48da0

Please sign in to comment.