From 82606973ca6e923b96cd98a4ef78efab46e3b238 Mon Sep 17 00:00:00 2001 From: Nikita Strygin Date: Thu, 23 May 2024 15:59:38 +0300 Subject: [PATCH] feat: add ui test for filtering singular queries in smart contracts Signed-off-by: Nikita Strygin --- Cargo.lock | 1 + smart_contract/Cargo.toml | 1 + smart_contract/tests/ui.rs | 9 +++++++ .../ui_fail/cant_filter_singular_query.rs | 12 +++++++++ .../ui_fail/cant_filter_singular_query.stderr | 25 +++++++++++++++++++ 5 files changed, 48 insertions(+) create mode 100644 smart_contract/tests/ui.rs create mode 100644 smart_contract/tests/ui_fail/cant_filter_singular_query.rs create mode 100644 smart_contract/tests/ui_fail/cant_filter_singular_query.stderr diff --git a/Cargo.lock b/Cargo.lock index bf84de82cba..bea791b040e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3341,6 +3341,7 @@ dependencies = [ "iroha_smart_contract_utils", "parity-scale-codec", "test_samples", + "trybuild", "webassembly-test", ] diff --git a/smart_contract/Cargo.toml b/smart_contract/Cargo.toml index ff12cad5b68..a7c3f6f5e86 100644 --- a/smart_contract/Cargo.toml +++ b/smart_contract/Cargo.toml @@ -32,3 +32,4 @@ webassembly-test = "0.1.0" # Not used directly but required for compilation getrandom = { version = "0.2", features = ["custom"] } +trybuild = { workspace = true } \ No newline at end of file diff --git a/smart_contract/tests/ui.rs b/smart_contract/tests/ui.rs new file mode 100644 index 00000000000..72fb6f73ed9 --- /dev/null +++ b/smart_contract/tests/ui.rs @@ -0,0 +1,9 @@ +#![cfg(not(coverage))] +use trybuild::TestCases; + +#[cfg(not(target_arch = "wasm32"))] +#[test] +fn ui() { + let test_cases = TestCases::new(); + test_cases.compile_fail("tests/ui_fail/*.rs"); +} diff --git a/smart_contract/tests/ui_fail/cant_filter_singular_query.rs b/smart_contract/tests/ui_fail/cant_filter_singular_query.rs new file mode 100644 index 00000000000..83d0654e181 --- /dev/null +++ b/smart_contract/tests/ui_fail/cant_filter_singular_query.rs @@ -0,0 +1,12 @@ +use iroha_smart_contract::{ + data_model::query::predicate::{string::StringPredicate, value::QueryOutputPredicate}, + prelude::*, +}; + +fn main() { + FindPermissionSchema + .filter(QueryOutputPredicate::Identifiable( + StringPredicate::starts_with("xor_"), + )) + .execute() +} diff --git a/smart_contract/tests/ui_fail/cant_filter_singular_query.stderr b/smart_contract/tests/ui_fail/cant_filter_singular_query.stderr new file mode 100644 index 00000000000..e207ea2a095 --- /dev/null +++ b/smart_contract/tests/ui_fail/cant_filter_singular_query.stderr @@ -0,0 +1,25 @@ +error[E0599]: the method `filter` exists for struct `FindPermissionSchema`, but its trait bounds were not satisfied + --> tests/ui_fail/cant_filter_singular_query.rs:8:10 + | +7 | / FindPermissionSchema +8 | | .filter(QueryOutputPredicate::Identifiable( + | | -^^^^^^ method cannot be called on `FindPermissionSchema` due to unsatisfied trait bounds + | |_________| + | + | + ::: $WORKSPACE/data_model/src/query/mod.rs + | + | / queries! { + | | /// Finds all registered permission tokens + | | #[derive(Copy, Display)] + | | #[ffi_type] +... | + | | } + | | } + | |_____- doesn't satisfy `_: ExecuteIterableQueryOnHost`, `_: IterableQuery` or `_: Iterator` + | + = note: the following trait bounds were not satisfied: + `iroha_smart_contract::prelude::FindPermissionSchema: IterableQuery` + which is required by `iroha_smart_contract::prelude::FindPermissionSchema: iroha_smart_contract::ExecuteIterableQueryOnHost` + `iroha_smart_contract::prelude::FindPermissionSchema: Iterator` + which is required by `&mut iroha_smart_contract::prelude::FindPermissionSchema: Iterator`