Skip to content

Commit

Permalink
test: Move generic contracts and interfaces to examples
Browse files Browse the repository at this point in the history
  • Loading branch information
jawoznia committed Oct 23, 2023
1 parent dfa4f54 commit 63317a5
Show file tree
Hide file tree
Showing 22 changed files with 657 additions and 406 deletions.
26 changes: 26 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ jobs:
run: cargo clippy --all-targets -- -D warnings
- name: Fmt check project
run: cargo fmt --check

- name: Test examples
working-directory: examples
run: cargo test --locked
Expand All @@ -75,6 +76,7 @@ jobs:
- name: Fmt check examples
working-directory: examples
run: cargo fmt --check

- name: Build cw20-base example
working-directory: examples/contracts/cw20-base
run: cargo build --release --target wasm32-unknown-unknown --locked --lib
Expand All @@ -90,10 +92,18 @@ jobs:
- name: Build custom
working-directory: examples/contracts/custom
run: cargo build --release --target wasm32-unknown-unknown --locked --lib
- name: Build generic_contract
working-directory: examples/contracts/generic_contract
run: cargo build --release --target wasm32-unknown-unknown --locked --lib
- name: Build generic_iface_on_contract
working-directory: examples/contracts/generic_iface_on_contract
run: cargo build --release --target wasm32-unknown-unknown --locked --lib

- name: Install cosmwasm-check
run: cargo install cosmwasm-check --force
- name: Check contracts
run: find examples/target/wasm32-unknown-unknown/release/ -type f -name "*.wasm" -exec cosmwasm-check {} \;

- name: Cw1-whitelist schema
working-directory: examples/contracts/cw1-whitelist/
run: cargo schema
Expand All @@ -109,6 +119,13 @@ jobs:
- name: Custom schema
working-directory: examples/contracts/custom
run: cargo schema
- name: Generic_contract schema
working-directory: examples/contracts/generic_contract
run: cargo schema
- name: generic_iface_on_contract schema
working-directory: examples/contracts/generic_iface_on_contract
run: cargo schema

- name: Cw1-whitelist ts-codegen
working-directory: examples/contracts/cw1-whitelist/
run: cosmwasm-ts-codegen generate --plugin client --schema ./schema --out ./ts --name cw1-whitelist --no-bundle
Expand All @@ -124,6 +141,13 @@ jobs:
- name: Custom ts-codegen
working-directory: examples/contracts/custom/
run: cosmwasm-ts-codegen generate --plugin client --schema ./schema --out ./ts --name custom --no-bundle
- name: Generic_contract ts-codegen
working-directory: examples/contracts/generic_contract/
run: cosmwasm-ts-codegen generate --plugin client --schema ./schema --out ./ts --name custom --no-bundle
- name: Generic_iface_on_contract ts-codegen
working-directory: examples/contracts/generic_iface_on_contract
run: cosmwasm-ts-codegen generate --plugin client --schema ./schema --out ./ts --name custom --no-bundle

- name: Archive schema artifats
uses: actions/upload-artifact@v3
with:
Expand All @@ -134,6 +158,8 @@ jobs:
examples/contracts/cw20-base/schema/cw20-base.json
examples/contracts/entry-points-overriding/schema/entry-points-overriding.json
examples/contracts/custom/schema/custom.json
examples/contracts/generic_contract/schema/generic_contract.json
examples/contracts/generic_iface_on_contract/schema/generic_iface_on_contract.json
coverage:
name: Code coverage
Expand Down
55 changes: 55 additions & 0 deletions examples/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

28 changes: 16 additions & 12 deletions examples/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,18 +1,22 @@
[workspace]
members = [
# Contract intefaces
"interfaces/cw1",
"interfaces/cw4",
"interfaces/cw20-allowances",
"interfaces/cw20-minting",
"interfaces/cw20-marketing",
# Contract intefaces
"interfaces/cw1",
"interfaces/cw4",
"interfaces/cw20-allowances",
"interfaces/cw20-minting",
"interfaces/cw20-marketing",
"interfaces/custom-and-generic",
"interfaces/generic",

# Contracts
"contracts/cw1-whitelist",
"contracts/cw1-subkeys",
"contracts/cw20-base",
"contracts/entry-points-overriding",
"contracts/custom",
# Contracts
"contracts/cw1-whitelist",
"contracts/cw1-subkeys",
"contracts/cw20-base",
"contracts/entry-points-overriding",
"contracts/custom",
"contracts/generic_contract",
"contracts/generic_iface_on_contract",
]
resolver = "2"

Expand Down
6 changes: 6 additions & 0 deletions examples/contracts/generic_contract/.cargo/config
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
[alias]
wasm = "build --release --target wasm32-unknown-unknown --lib"
wasm-debug = "build --target wasm32-unknown-unknown --lib"
unit-test = "test --lib"
integration-test = "test --test integration"
schema = "run --bin schema"
31 changes: 31 additions & 0 deletions examples/contracts/generic_contract/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
[package]
name = "generic_contract"
version = { workspace = true }
authors = ["Jan Woźniak <[email protected]>"]
edition = { workspace = true }
description = "Example of generic contract"
license = "Apache-2.0"
repository = "https://github.com/CosmWasm/sylvia"
homepage = "https://cosmwasm.com"

[lib]
crate-type = ["cdylib", "rlib"]

[features]
library = []
tests = ["library", "cw-multi-test", "anyhow"]

[dependencies]
anyhow = { version = "1.0", optional = true }
cosmwasm-schema = "1.2"
cosmwasm-std = { version = "1.3", features = ["staking"] }
cw-multi-test = { version = "0.16", optional = true }
cw-storage-plus = "1.0"
cw-utils = "1.0"
serde = { version = "1.0", default-features = false, features = ["derive"] }
sylvia = { path = "../../../sylvia" }

[dev-dependencies]
anyhow = "1.0"
cw-multi-test = "0.16"
sylvia = { path = "../../../sylvia", features = ["mt"] }
14 changes: 14 additions & 0 deletions examples/contracts/generic_contract/src/bin/schema.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
use cosmwasm_schema::write_api;

#[cfg(not(tarpaulin_include))]
fn main() {
use generic_contract::contract::{
ContractExecMsg, ContractQueryMsg, ExternalMsg, InstantiateMsg,
};

write_api! {
instantiate: InstantiateMsg<ExternalMsg>,
execute: ContractExecMsg<ExternalMsg>,
query: ContractQueryMsg<ExternalMsg>,
}
}
99 changes: 99 additions & 0 deletions examples/contracts/generic_contract/src/contract.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
use cosmwasm_schema::cw_serde;
use cosmwasm_std::{Reply, Response, StdResult};
use serde::de::DeserializeOwned;
use serde::Deserialize;
use sylvia::types::{CustomMsg, ExecCtx, InstantiateCtx, MigrateCtx, QueryCtx, ReplyCtx};
use sylvia::{contract, schemars};

#[cw_serde]
pub struct ExternalMsg;
impl cosmwasm_std::CustomMsg for ExternalMsg {}

pub struct GenericContract<InstantiateParam, ExecParam, QueryParam, MigrateParam, RetType>(
std::marker::PhantomData<(
InstantiateParam,
ExecParam,
QueryParam,
MigrateParam,
RetType,
)>,
);

#[contract]
impl<InstantiateParam, ExecParam, QueryParam, MigrateParam, RetType>
GenericContract<InstantiateParam, ExecParam, QueryParam, MigrateParam, RetType>
where
for<'msg_de> InstantiateParam: CustomMsg + Deserialize<'msg_de> + 'msg_de,
for<'exec> ExecParam: CustomMsg + DeserializeOwned + 'exec,
for<'exec> QueryParam: CustomMsg + DeserializeOwned + 'exec,
for<'exec> MigrateParam: CustomMsg + DeserializeOwned + 'exec,
for<'ret> RetType: CustomMsg + DeserializeOwned + 'ret,
{
pub const fn new() -> Self {
Self(std::marker::PhantomData)
}

#[msg(instantiate)]
pub fn instantiate(&self, _ctx: InstantiateCtx, _msg: InstantiateParam) -> StdResult<Response> {
Ok(Response::new())
}

#[msg(exec)]
pub fn execute(&self, _ctx: ExecCtx, _msg: ExecParam) -> StdResult<Response> {
Ok(Response::new())
}

#[msg(query)]
pub fn query(&self, _ctx: QueryCtx, _msg: QueryParam) -> StdResult<Response> {
Ok(Response::new())
}

#[msg(migrate)]
pub fn migrate(&self, _ctx: MigrateCtx, _msg: MigrateParam) -> StdResult<Response> {
Ok(Response::new())
}

#[allow(dead_code)]
#[msg(reply)]
fn reply(&self, _ctx: ReplyCtx, _reply: Reply) -> StdResult<Response> {
Ok(Response::new())
}
}

#[cfg(test)]
mod tests {
use cosmwasm_std::Empty;
use sylvia::multitest::App;

use crate::contract::ExternalMsg;

#[test]
fn generic_contract() {
use super::multitest_utils::CodeId;
let app = App::default();
let code_id: CodeId<
cw_multi_test::BasicApp<Empty, Empty>,
ExternalMsg,
ExternalMsg,
ExternalMsg,
super::ExternalMsg,
super::ExternalMsg,
> = CodeId::store_code(&app);

let owner = "owner";

let contract = code_id
.instantiate(ExternalMsg {})
.with_label("GenericContract")
.with_admin(owner)
.call(owner)
.unwrap();

contract.execute(ExternalMsg).call(owner).unwrap();
contract.query(ExternalMsg).unwrap();
contract
.migrate(ExternalMsg)
.call(owner, code_id.code_id())
.unwrap();
}
}
1 change: 1 addition & 0 deletions examples/contracts/generic_contract/src/lib.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
pub mod contract;
6 changes: 6 additions & 0 deletions examples/contracts/generic_iface_on_contract/.cargo/config
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
[alias]
wasm = "build --release --target wasm32-unknown-unknown --lib"
wasm-debug = "build --target wasm32-unknown-unknown --lib"
unit-test = "test --lib"
integration-test = "test --test integration"
schema = "run --bin schema"
34 changes: 34 additions & 0 deletions examples/contracts/generic_iface_on_contract/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
[package]
name = "generic_iface_on_contract"
version = { workspace = true }
authors = ["Jan Woźniak <[email protected]>"]
edition = { workspace = true }
description = "Generic interfaces implemented on non generic contract"
license = "Apache-2.0"
repository = "https://github.com/CosmWasm/sylvia"
homepage = "https://cosmwasm.com"

[lib]
crate-type = ["cdylib", "rlib"]

[features]
library = []
tests = ["library", "cw-multi-test", "anyhow"]

[dependencies]
anyhow = { version = "1.0", optional = true }
cosmwasm-schema = "1.2"
cosmwasm-std = { version = "1.3", features = ["staking"] }
cw-multi-test = { version = "0.16", optional = true }
cw-storage-plus = "1.0"
cw-utils = "1.0"
serde = { version = "1.0", default-features = false, features = ["derive"] }
sylvia = { path = "../../../sylvia" }
cw1 = { path = "../../interfaces/cw1" }
generic = { path = "../../interfaces/generic" }
custom-and-generic = { path = "../../interfaces/custom-and-generic" }

[dev-dependencies]
anyhow = "1.0"
cw-multi-test = "0.16"
sylvia = { path = "../../../sylvia", features = ["mt"] }
12 changes: 12 additions & 0 deletions examples/contracts/generic_iface_on_contract/src/bin/schema.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
use cosmwasm_schema::write_api;

#[cfg(not(tarpaulin_include))]
fn main() {
use generic_iface_on_contract::contract::{ContractExecMsg, ContractQueryMsg, InstantiateMsg};

write_api! {
instantiate: InstantiateMsg,
execute: ContractExecMsg,
query: ContractQueryMsg,
}
}
Loading

0 comments on commit 63317a5

Please sign in to comment.