Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sudo multitest helpers #270

Merged
merged 1 commit into from
Nov 30, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 42 additions & 29 deletions sylvia-derive/src/message.rs
Original file line number Diff line number Diff line change
Expand Up @@ -716,6 +716,16 @@ impl<'a> MsgVariant<'a> {
.map_err(Into::into)
}
},
MsgType::Sudo => quote! {
pub fn #name (&self, #(#params,)* ) -> Result< #sylvia ::cw_multi_test::AppResponse, #error_type> {
let msg = #enum_name :: #name ( #(#arguments),* );

(*self.app)
.app_mut()
.wasm_sudo(self.contract_addr.clone(), &msg)
.map_err(|err| err.downcast().unwrap())
}
},
_ => quote! {},
}
}
Expand Down Expand Up @@ -768,6 +778,16 @@ impl<'a> MsgVariant<'a> {
.map_err(Into::into)
}
},
MsgType::Sudo => quote! {
fn #name (&self, #(#params,)* ) -> Result< #sylvia ::cw_multi_test::AppResponse, #error_type> {
let msg = #interface_enum :: #type_name :: #name ( #(#arguments),* );

(*self.app)
.app_mut()
.wasm_sudo(self.contract_addr.clone(), &msg)
.map_err(|err| err.downcast().unwrap())
}
},
_ => quote! {},
}
}
Expand Down Expand Up @@ -798,6 +818,9 @@ impl<'a> MsgVariant<'a> {
MsgType::Query => quote! {
fn #name (&self, #(#params,)* ) -> Result<#return_type, #error_type>;
},
MsgType::Sudo => quote! {
fn #name (&self, #(#params,)* ) -> Result< #sylvia ::cw_multi_test::AppResponse, #error_type>;
},
_ => quote! {},
}
}
Expand Down Expand Up @@ -1695,20 +1718,25 @@ impl<'a> EntryPoints<'a> {

#[cfg(not(tarpaulin_include))]
{
let entry_points = [instantiate_variants, exec_variants, query_variants]
.into_iter()
.map(
|variants| match override_entry_points.get_entry_point(variants.msg_ty) {
Some(_) => quote! {},
None => variants.emit_default_entry_point(
&custom_msg,
&custom_query,
name,
error,
&attrs.generics,
),
},
);
let entry_points = [
instantiate_variants,
exec_variants,
query_variants,
sudo_variants,
]
.into_iter()
.map(|variants| {
match override_entry_points.get_entry_point(variants.msg_ty) {
Some(_) => quote! {},
None => variants.emit_default_entry_point(
&custom_msg,
&custom_query,
name,
error,
&attrs.generics,
),
}
});

let migrate_not_overridden = override_entry_points
.get_entry_point(MsgType::Migrate)
Expand Down Expand Up @@ -1744,19 +1772,6 @@ impl<'a> EntryPoints<'a> {
_ => quote! {},
});

let sudo = override_entry_points
.get_entry_point(MsgType::Sudo)
.map(|_| quote! {})
.unwrap_or_else(|| {
sudo_variants.emit_default_entry_point(
&custom_msg,
&custom_query,
name,
error,
&attrs.generics,
)
});

quote! {
pub mod entry_points {
use super::*;
Expand All @@ -1766,8 +1781,6 @@ impl<'a> EntryPoints<'a> {
#migrate

#reply_ep

#sudo
}
}
}
Expand Down
37 changes: 26 additions & 11 deletions sylvia-derive/src/multitest.rs
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ pub struct MultitestHelpers<'a, Generics> {
query_variants: MsgVariants<'a, Generics>,
migrate_variants: MsgVariants<'a, Generics>,
reply_variants: MsgVariants<'a, Generics>,
sudo_variants: MsgVariants<'a, Generics>,
}

impl<'a, Generics> MultitestHelpers<'a, Generics>
Expand All @@ -77,6 +78,8 @@ where
MsgVariants::new(source.as_variants(), MsgType::Exec, generics, where_clause);
let query_variants =
MsgVariants::new(source.as_variants(), MsgType::Query, generics, where_clause);
let sudo_variants =
MsgVariants::new(source.as_variants(), MsgType::Sudo, generics, where_clause);
let migrate_variants = MsgVariants::new(
source.as_variants(),
MsgType::Migrate,
Expand Down Expand Up @@ -139,6 +142,7 @@ where
instantiate_variants,
exec_variants,
query_variants,
sudo_variants,
migrate_variants,
reply_variants,
}
Expand All @@ -154,6 +158,7 @@ where
exec_variants,
query_variants,
migrate_variants,
sudo_variants,
generics,
where_clause,
..
Expand Down Expand Up @@ -184,6 +189,8 @@ where
exec_variants.emit_multitest_proxy_methods(&custom_msg, &mt_app, error_type);
let query_methods =
query_variants.emit_multitest_proxy_methods(&custom_msg, &mt_app, error_type);
let sudo_methods =
sudo_variants.emit_multitest_proxy_methods(&custom_msg, &mt_app, error_type);
let migrate_methods =
migrate_variants.emit_multitest_proxy_methods(&custom_msg, &mt_app, error_type);
let where_predicates = where_clause
Expand Down Expand Up @@ -239,6 +246,7 @@ where
#( #exec_methods )*
#( #migrate_methods )*
#( #query_methods )*
#( #sudo_methods )*
#( #proxy_accessors )*
}

Expand Down Expand Up @@ -288,14 +296,14 @@ where
generics,
exec_variants,
query_variants,
sudo_variants,
..
} = self;

let sylvia = crate_module();

let interface_name = interface_name(self.source);
let proxy_name = &self.proxy_name;
let trait_name = Ident::new(&format!("{}", interface_name), interface_name.span());

let module = interfaces
.get_only_interface()
Expand Down Expand Up @@ -340,26 +348,36 @@ where
generics,
&module,
);
let sudo_methods = sudo_variants.emit_interface_multitest_proxy_methods(
&custom_msg,
&mt_app,
error_type,
generics,
&module,
);
let exec_methods_declarations =
exec_variants.emit_proxy_methods_declarations(&custom_msg, error_type, &interface_enum);
let query_methods_declarations = query_variants.emit_proxy_methods_declarations(
&custom_msg,
error_type,
&interface_enum,
);
let sudo_methods_declarations =
sudo_variants.emit_proxy_methods_declarations(&custom_msg, error_type, &interface_enum);

#[cfg(not(tarpaulin_include))]
{
quote! {
pub mod test_utils {
use super::*;

pub trait #trait_name<MtApp> {
pub trait #interface_name <MtApp> {
#(#query_methods_declarations)*
#(#exec_methods_declarations)*
#(#sudo_methods_declarations)*
}

impl<BankT, ApiT, StorageT, CustomT, WasmT, StakingT, DistrT, IbcT, GovT> #trait_name< #mt_app > for #module sv::trait_utils:: #proxy_name<'_, #mt_app >
impl<BankT, ApiT, StorageT, CustomT, WasmT, StakingT, DistrT, IbcT, GovT> #interface_name < #mt_app > for #module sv::trait_utils:: #proxy_name<'_, #mt_app >
where
CustomT: #sylvia ::cw_multi_test::Module,
WasmT: #sylvia ::cw_multi_test::Wasm<CustomT::ExecT, CustomT::QueryT>,
Expand All @@ -382,6 +400,7 @@ where
{
#(#query_methods)*
#(#exec_methods)*
#(#sudo_methods)*
}
}
}
Expand Down Expand Up @@ -631,6 +650,7 @@ where
instantiate_variants,
exec_variants,
query_variants,
sudo_variants,
migrate_variants,
reply_variants,
..
Expand All @@ -639,6 +659,7 @@ where

let bracketed_generics = emit_bracketed_generics(generics);
let full_where_clause = &source.generics.where_clause;

let instantiate_body = override_entry_points
.get_entry_point(MsgType::Instantiate)
.map(OverrideEntryPoint::emit_multitest_dispatch)
Expand All @@ -657,20 +678,14 @@ where
let sudo_body = override_entry_points
.get_entry_point(MsgType::Sudo)
.map(OverrideEntryPoint::emit_multitest_dispatch)
.unwrap_or_else(|| {
quote! {
#sylvia ::anyhow::bail!("sudo not implemented for contract")
}
});
.unwrap_or_else(|| sudo_variants.emit_multitest_default_dispatch());

let migrate_body = match override_entry_points.get_entry_point(MsgType::Migrate) {
Some(entry_point) => entry_point.emit_multitest_dispatch(),
None if migrate_variants.get_only_variant().is_some() => {
migrate_variants.emit_multitest_default_dispatch()
}
None => quote! {
#sylvia ::anyhow::bail!("migrate not implemented for contract")
},
None => quote! { #sylvia ::anyhow::bail!("migrate not implemented for contract") },
};

let reply_body = match override_entry_points.get_entry_point(MsgType::Reply) {
Expand Down
Loading