diff --git a/src/pages/cw-multi-test/getting-started/writing-tests.mdx b/src/pages/cw-multi-test/getting-started/writing-tests.mdx index bf205e28..dc5bf046 100644 --- a/src/pages/cw-multi-test/getting-started/writing-tests.mdx +++ b/src/pages/cw-multi-test/getting-started/writing-tests.mdx @@ -2,6 +2,8 @@ tags: ["multitest", "getting started", "writing tests"] --- +import { Cards, Card } from "nextra/components"; + # Writing tests ## Compiling the smart contract @@ -25,7 +27,7 @@ cargo build Ok, the **counter** smart contract has been built successfully. -## Preparing directories for tests +## Preparing tests directory structure ```ansi {8-12} filename="counter" . @@ -82,7 +84,7 @@ tree         └── test_counter.rs ``` -## Running tests and measuring the code coverage +## Running tests and measuring code coverage ```shell copy cargo test @@ -130,3 +132,16 @@ cargo nextest run ``` ![coverage-0](./coverage-0.png) + +## Writing tests + +(some introduction) + + + + Writing tests in CosmWasm + + + Writing tests in Sylvia + + diff --git a/src/pages/cw-multi-test/getting-started/writing-tests/writing-tests-cosmwasm.mdx b/src/pages/cw-multi-test/getting-started/writing-tests/writing-tests-cosmwasm.mdx index 5298a323..f73a9aef 100644 --- a/src/pages/cw-multi-test/getting-started/writing-tests/writing-tests-cosmwasm.mdx +++ b/src/pages/cw-multi-test/getting-started/writing-tests/writing-tests-cosmwasm.mdx @@ -4,11 +4,13 @@ tags: ["multitest", "getting started", "tests", "CosmWasm"] # Writing tests in CosmWasm -```rust copy +```rust copy showLineNumbers{1} filename="test_counter.rs" use cosmwasm_std::Empty; use counter::msg::{CounterActionMsg, CounterInitMsg, CounterQuery, CounterResponse}; use cw_multi_test::{App, Contract, ContractWrapper, Executor, IntoAddr}; +``` +```rust copy showLineNumbers{5} filename="test_counter.rs" fn counter_contract() -> Box> { Box::new(ContractWrapper::new_with_empty( counter::contract::execute, @@ -18,7 +20,7 @@ fn counter_contract() -> Box> { } ``` -```rust copy +```rust copy showLineNumbers{13} filename="test_counter.rs" #[test] fn instantiating_with_zero_should_work() { let mut app = App::default(); @@ -83,7 +85,7 @@ cargo nextest run ![coverage-cosmwasm-01](./coverage-cosmwasm-01.png) -```rust copy +```rust copy showLineNumbers{39} filename="test_counter.rs" #[test] fn instantiating_with_value_should_work() { let mut app = App::default(); @@ -139,7 +141,7 @@ cargo nextest run ![coverage-cosmwasm-02](./coverage-cosmwasm-02.png) -```rust copy +```rust copy showLineNumbers{65} filename="test_counter.rs" #[test] fn incrementing_should_work() { let mut app = App::default(); @@ -200,7 +202,7 @@ cargo nextest run -```rust copy +```rust copy showLineNumbers{94} filename="test_counter.rs" #[test] fn incrementing_should_stop_at_maximum() { let mut app = App::default(); @@ -263,7 +265,7 @@ cargo nextest run 88.89% coverage, 16/18 lines covered, +0.00% change in coverage ``` -```rust copy +```rust copy showLineNumbers{130} filename="test_counter.rs" #[test] fn decrementing_should_work() { let mut app = App::default(); @@ -294,7 +296,7 @@ fn decrementing_should_work() { } ``` -```rust copy +```rust copy showLineNumbers{159} filename="test_counter.rs" #[test] fn decrementing_should_stop_at_minimum() { let mut app = App::default(); @@ -332,7 +334,7 @@ fn decrementing_should_stop_at_minimum() { } ``` -```rust copy +```rust copy showLineNumbers{195} filename="test_counter.rs" #[test] fn setting_value_should_work() { let mut app = App::default(); @@ -368,7 +370,10 @@ fn setting_value_should_work() { } ``` -## All tests together +## All tests put together + +Below is the final content of the `test_counter.rs` file, containing all previously presented test +cases for smart contract written in CosmWasm. ```rust copy showLineNumbers filename="test_counter.rs" use cosmwasm_std::Empty; diff --git a/src/pages/cw-multi-test/getting-started/writing-tests/writing-tests-sylvia.mdx b/src/pages/cw-multi-test/getting-started/writing-tests/writing-tests-sylvia.mdx index ca5f5c53..9f8fa75a 100644 --- a/src/pages/cw-multi-test/getting-started/writing-tests/writing-tests-sylvia.mdx +++ b/src/pages/cw-multi-test/getting-started/writing-tests/writing-tests-sylvia.mdx @@ -3,3 +3,260 @@ tags: ["multitest", "getting started", "tests", "CosmWasm"] --- # Writing tests in Sylvia + +```rust copy showLineNumbers filename="test_counter.rs" +use counter::contract::sv::mt::{CodeId, CounterContractProxy}; +use counter::msg::CounterInitMsg; +use sylvia::cw_multi_test::IntoAddr; +use sylvia::multitest::App; +``` + +```rust copy showLineNumbers{6} filename="test_counter.rs" +#[test] +fn instantiating_with_zero_should_work() { + let app = App::default(); + let code_id = CodeId::store_code(&app); + + let owner = "owner".into_addr(); + let contract = code_id + .instantiate(CounterInitMsg::Zero) + .call(&owner) + .unwrap(); + + assert_eq!(0, contract.count().unwrap().count); +} +``` + +```rust copy showLineNumbers{20} filename="test_counter.rs" +#[test] +fn instantiating_with_value_should_work() { + let app = App::default(); + let code_id = CodeId::store_code(&app); + + let owner = "owner".into_addr(); + let contract = code_id + .instantiate(CounterInitMsg::Set(12)) + .call(&owner) + .unwrap(); + + assert_eq!(12, contract.count().unwrap().count); +} +``` + +```rust copy showLineNumbers{34} filename="test_counter.rs" +#[test] +fn incrementing_should_work() { + let app = App::default(); + let code_id = CodeId::store_code(&app); + + let owner = "owner".into_addr(); + let contract = code_id + .instantiate(CounterInitMsg::Zero) + .call(&owner) + .unwrap(); + + contract.inc().call(&owner).unwrap(); + + assert_eq!(1, contract.count().unwrap().count); +} +``` + +```rust copy showLineNumbers{50} filename="test_counter.rs" +#[test] +fn incrementing_should_stop_at_maximum() { + let app = App::default(); + let code_id = CodeId::store_code(&app); + + let owner = "owner".into_addr(); + let contract = code_id + .instantiate(CounterInitMsg::Set(250)) + .call(&owner) + .unwrap(); + + for _ in 1..=10 { + contract.inc().call(&owner).unwrap(); + } + + assert_eq!(255, contract.count().unwrap().count); +} +``` + +```rust copy showLineNumbers{68} filename="test_counter.rs" +#[test] +fn decrementing_should_work() { + let app = App::default(); + let code_id = CodeId::store_code(&app); + + let owner = "owner".into_addr(); + let contract = code_id + .instantiate(CounterInitMsg::Set(126)) + .call(&owner) + .unwrap(); + + contract.dec().call(&owner).unwrap(); + + assert_eq!(125, contract.count().unwrap().count); +} +``` + +```rust copy showLineNumbers{84} filename="test_counter.rs" +#[test] +fn decrementing_should_stop_at_minimum() { + let app = App::default(); + let code_id = CodeId::store_code(&app); + + let owner = "owner".into_addr(); + let contract = code_id + .instantiate(CounterInitMsg::Set(5)) + .call(&owner) + .unwrap(); + + for _ in 1..=10 { + contract.dec().call(&owner).unwrap(); + } + + assert_eq!(0, contract.count().unwrap().count); +} +``` + +```rust copy showLineNumbers{102} filename="test_counter.rs" +#[test] +fn setting_value_should_work() { + let app = App::default(); + let code_id = CodeId::store_code(&app); + + let owner = "owner".into_addr(); + let contract = code_id + .instantiate(CounterInitMsg::Set(5)) + .call(&owner) + .unwrap(); + + contract.set(125).call(&owner).unwrap(); + + assert_eq!(125, contract.count().unwrap().count); +} +``` + +## All tests put together + +Below is the final content of the `test_counter.rs` file, containing all previously presented test +cases for smart contract written in Sylvia. + +```rust copy showLineNumbers filename="test_counter.rs" +use counter::contract::sv::mt::{CodeId, CounterContractProxy}; +use counter::msg::CounterInitMsg; +use sylvia::cw_multi_test::IntoAddr; +use sylvia::multitest::App; + +#[test] +fn instantiating_with_zero_should_work() { + let app = App::default(); + let code_id = CodeId::store_code(&app); + + let owner = "owner".into_addr(); + let contract = code_id + .instantiate(CounterInitMsg::Zero) + .call(&owner) + .unwrap(); + + assert_eq!(0, contract.count().unwrap().count); +} + +#[test] +fn instantiating_with_value_should_work() { + let app = App::default(); + let code_id = CodeId::store_code(&app); + + let owner = "owner".into_addr(); + let contract = code_id + .instantiate(CounterInitMsg::Set(12)) + .call(&owner) + .unwrap(); + + assert_eq!(12, contract.count().unwrap().count); +} + +#[test] +fn incrementing_should_work() { + let app = App::default(); + let code_id = CodeId::store_code(&app); + + let owner = "owner".into_addr(); + let contract = code_id + .instantiate(CounterInitMsg::Zero) + .call(&owner) + .unwrap(); + + contract.inc().call(&owner).unwrap(); + + assert_eq!(1, contract.count().unwrap().count); +} + +#[test] +fn incrementing_should_stop_at_maximum() { + let app = App::default(); + let code_id = CodeId::store_code(&app); + + let owner = "owner".into_addr(); + let contract = code_id + .instantiate(CounterInitMsg::Set(250)) + .call(&owner) + .unwrap(); + + for _ in 1..=10 { + contract.inc().call(&owner).unwrap(); + } + + assert_eq!(255, contract.count().unwrap().count); +} + +#[test] +fn decrementing_should_work() { + let app = App::default(); + let code_id = CodeId::store_code(&app); + + let owner = "owner".into_addr(); + let contract = code_id + .instantiate(CounterInitMsg::Set(126)) + .call(&owner) + .unwrap(); + + contract.dec().call(&owner).unwrap(); + + assert_eq!(125, contract.count().unwrap().count); +} + +#[test] +fn decrementing_should_stop_at_minimum() { + let app = App::default(); + let code_id = CodeId::store_code(&app); + + let owner = "owner".into_addr(); + let contract = code_id + .instantiate(CounterInitMsg::Set(5)) + .call(&owner) + .unwrap(); + + for _ in 1..=10 { + contract.dec().call(&owner).unwrap(); + } + + assert_eq!(0, contract.count().unwrap().count); +} + +#[test] +fn setting_value_should_work() { + let app = App::default(); + let code_id = CodeId::store_code(&app); + + let owner = "owner".into_addr(); + let contract = code_id + .instantiate(CounterInitMsg::Set(5)) + .call(&owner) + .unwrap(); + + contract.set(125).call(&owner).unwrap(); + + assert_eq!(125, contract.count().unwrap().count); +} +```