Skip to content

Commit

Permalink
Add tests for query_tag. Fix some expect messages as well.
Browse files Browse the repository at this point in the history
  • Loading branch information
Taztingo committed Feb 9, 2024
1 parent 46414d2 commit 1ccaa49
Show file tree
Hide file tree
Showing 4 changed files with 126 additions and 7 deletions.
2 changes: 1 addition & 1 deletion contracts/nav/src/query/query_address.rs
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ mod tests {

storage::asset::set_tag(deps.as_mut().storage, &asset_addr, tag)
.expect("should not throw error");
let bin = handle(deps.as_ref(), asset_addr).expect("should return an error");
let bin = handle(deps.as_ref(), asset_addr).expect("should not return an error");

let response: QueryAddressResponse =
from_json(&bin).expect("should return correct response");
Expand Down
123 changes: 121 additions & 2 deletions contracts/nav/src/query/query_tag.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,127 @@ use crate::{
/// let res = handle(deps, tag)?;
/// ```
pub fn handle(deps: Deps, tag: String) -> ProvQueryResponse {
let assets = storage::asset::with_tag(deps.storage, &tag)?;
pub fn handle(deps: Deps, tag: &str) -> ProvQueryResponse {
let assets = storage::asset::with_tag(deps.storage, tag)?;
let res = QueryTagResponse { assets };
Ok(to_json_binary(&res)?)
}

#[cfg(test)]
mod tests {
use cosmwasm_std::{from_json, Addr};
use provwasm_mocks::mock_provenance_dependencies;

use crate::{
core::msg::QueryTagResponse,
query::query_tag::handle,
storage,
testing::{
constants::{TAG1, TAG2},
setup,
},
};

#[test]
fn test_invalid_tag() {
let mut deps = mock_provenance_dependencies();
setup::mock_contract(deps.as_mut());
let expected: Vec<Addr> = vec![];

let bin = handle(deps.as_ref(), "tag3").expect("should not return an error");

let response: QueryTagResponse = from_json(&bin).expect("should return correct response");
assert_eq!(expected, response.assets);
}

#[test]
fn test_single_tag_single_asset() {
let mut deps = mock_provenance_dependencies();
setup::mock_contract(deps.as_mut());
let asset_addr = Addr::unchecked("test");
let expected: Vec<Addr> = vec![asset_addr.clone()];

storage::asset::set_tag(deps.as_mut().storage, &asset_addr, TAG1)
.expect("should not return an error");

let bin = handle(deps.as_ref(), "tag1").expect("should not return an error");

let response: QueryTagResponse = from_json(&bin).expect("should return correct response");
assert_eq!(expected, response.assets);
}

#[test]
fn test_multi_tag_single_asset() {
let mut deps = mock_provenance_dependencies();
setup::mock_contract(deps.as_mut());
let asset_addr = Addr::unchecked("test");
let asset_addr2 = Addr::unchecked("test2");
let expected: Vec<Addr> = vec![asset_addr.clone()];
let expected2: Vec<Addr> = vec![asset_addr2.clone()];

storage::asset::set_tag(deps.as_mut().storage, &asset_addr, TAG1)
.expect("should not return an error");
storage::asset::set_tag(deps.as_mut().storage, &asset_addr2, TAG2)
.expect("should not return an error");

let bin = handle(deps.as_ref(), "tag1").expect("should not return an error");
let response: QueryTagResponse =
from_json(&bin).expect("should return correct response for first tag");
assert_eq!(expected, response.assets);

let bin = handle(deps.as_ref(), "tag2").expect("should not return an error");
let response: QueryTagResponse =
from_json(&bin).expect("should return correct response for second tag");
assert_eq!(expected2, response.assets);
}

#[test]
fn test_single_tag_multi_asset() {
let mut deps = mock_provenance_dependencies();
setup::mock_contract(deps.as_mut());
let asset_addr = Addr::unchecked("test");
let asset_addr2 = Addr::unchecked("test2");
let expected: Vec<Addr> = vec![asset_addr.clone(), asset_addr2.clone()];

storage::asset::set_tag(deps.as_mut().storage, &asset_addr, TAG1)
.expect("should not return an error");
storage::asset::set_tag(deps.as_mut().storage, &asset_addr2, TAG1)
.expect("should not return an error");

let bin = handle(deps.as_ref(), "tag1").expect("should not return an error");
let response: QueryTagResponse =
from_json(&bin).expect("should return correct response for first tag");
assert_eq!(expected, response.assets);
}

#[test]
fn test_multi_tag_multi_asset() {
let mut deps = mock_provenance_dependencies();
setup::mock_contract(deps.as_mut());
let asset_addr = Addr::unchecked("test");
let asset_addr2 = Addr::unchecked("test2");
let asset_addr3 = Addr::unchecked("test3");
let asset_addr4 = Addr::unchecked("test4");
let expected: Vec<Addr> = vec![asset_addr.clone(), asset_addr3.clone()];
let expected2: Vec<Addr> = vec![asset_addr2.clone(), asset_addr4.clone()];

storage::asset::set_tag(deps.as_mut().storage, &asset_addr, TAG1)
.expect("should not return an error");
storage::asset::set_tag(deps.as_mut().storage, &asset_addr2, TAG2)
.expect("should not return an error");
storage::asset::set_tag(deps.as_mut().storage, &asset_addr3, TAG1)
.expect("should not return an error");
storage::asset::set_tag(deps.as_mut().storage, &asset_addr4, TAG2)
.expect("should not return an error");

let bin = handle(deps.as_ref(), "tag1").expect("should not return an error");
let response: QueryTagResponse =
from_json(&bin).expect("should return correct response for first tag");
assert_eq!(expected, response.assets);

let bin = handle(deps.as_ref(), "tag2").expect("should not return an error");
let response: QueryTagResponse =
from_json(&bin).expect("should return correct response for second tag");
assert_eq!(expected2, response.assets);
}
}
6 changes: 3 additions & 3 deletions contracts/nav/src/query/query_tag_types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ mod tests {
setup::mock_contract(deps.as_mut());
let expected = vec![TAG1.to_string(), TAG2.to_string()];

let bin = handle(deps.as_ref()).expect("should return an error");
let bin = handle(deps.as_ref()).expect("should not return an error");

let response: QueryTagTypesResponse =
from_json(&bin).expect("should return correct response");
Expand All @@ -58,7 +58,7 @@ mod tests {

storage::tag::remove_type(deps.as_mut().storage, TAG1);

let bin = handle(deps.as_ref()).expect("should return an error");
let bin = handle(deps.as_ref()).expect("should not return an error");

let response: QueryTagTypesResponse =
from_json(&bin).expect("should return correct response");
Expand All @@ -74,7 +74,7 @@ mod tests {
storage::tag::remove_type(deps.as_mut().storage, TAG1);
storage::tag::remove_type(deps.as_mut().storage, TAG2);

let bin = handle(deps.as_ref()).expect("should return an error");
let bin = handle(deps.as_ref()).expect("should not return an error");

let response: QueryTagTypesResponse =
from_json(&bin).expect("should return correct response");
Expand Down
2 changes: 1 addition & 1 deletion contracts/nav/src/query/router.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ pub fn route(deps: Deps, _env: Env, msg: QueryMsg) -> ProvQueryResponse {
QueryMsg::QueryOwner {} => query_owner::handle(deps),
QueryMsg::QueryVersion {} => query_version::handle(deps),
QueryMsg::QueryAddress { asset_addr } => query_address::handle(deps, asset_addr),
QueryMsg::QueryTag { tag } => query_tag::handle(deps, tag),
QueryMsg::QueryTag { tag } => query_tag::handle(deps, &tag),
QueryMsg::QueryTagTypes {} => query_tag_types::handle(deps),
}
}
Expand Down

0 comments on commit 1ccaa49

Please sign in to comment.