Type Definition concordium_std::test_infrastructure::TestReceiveContext
source · [−]pub type TestReceiveContext<'a> = TestContext<'a, TestReceiveOnlyData>;
Expand description
Placeholder for the receiving context. All the fields can be set optionally
and the getting an unset field will result in calling
fail!
. Use only in tests!
Setters
Every field have a setter function prefixed with set_
.
Example
Creating an empty context and setting the init_origin
.
let owner = AccountAddress([0u8; 32]);
let mut ctx = TestReceiveContext::empty();
ctx.set_owner(owner);
ctx.set_sender(Address::Account(owner));
Set chain meta data
Chain meta data is set using setters on the context or by setters on a
mutable reference of TestChainMeta
.
Example
Creating an empty context and setting the slot_time
metadata.
let mut ctx = TestReceiveContext::empty();
ctx.set_metadata_slot_time(Timestamp::from_timestamp_millis(1609459200));
or
let mut ctx = TestReceiveContext::empty();
ctx.metadata_mut().set_slot_time(Timestamp::from_timestamp_millis(1609459200));
Use case example
Creating a context for running unit tests
#[receive(contract = "mycontract", name = "receive", mutable)]
fn contract_receive<S: HasStateApi>(
ctx: &impl HasReceiveContext,
host: &mut impl HasHost<State, StateApiType = S>,
) -> ReceiveResult<()> {
ensure!(ctx.sender().matches_account(&ctx.owner()));
// ...
Ok(())
}
#[cfg(test)]
mod tests {
use super::*;
use concordium_sc_base::test_infrastructure::*;
#[test]
fn test() {
let owner = AccountAddress([0u8; 32]);
let mut ctx = TestReceiveContext::empty();
ctx.set_owner(owner);
ctx.set_sender(Address::Account(owner));
// ...
let result: ReceiveResult<ActionsTree> = contract_receive(&ctx, 0, &mut logger, state);
}
}
Implementations
sourceimpl<'a> TestReceiveContext<'a>
impl<'a> TestReceiveContext<'a>
sourcepub fn empty() -> Self
pub fn empty() -> Self
Create a TestReceiveContext
where every field is unset, and getting
any of the fields will result in fail!
.
pub fn set_invoker(&mut self, value: AccountAddress) -> &mut Self
pub fn set_self_address(&mut self, value: ContractAddress) -> &mut Self
pub fn set_sender(&mut self, value: Address) -> &mut Self
pub fn set_owner(&mut self, value: AccountAddress) -> &mut Self
pub fn set_named_entrypoint(&mut self, value: OwnedEntrypointName) -> &mut Self
Trait Implementations
sourceimpl<'a> HasReceiveContext<()> for TestReceiveContext<'a>
impl<'a> HasReceiveContext<()> for TestReceiveContext<'a>
type ReceiveData = ()
sourcefn open(_data: Self::ReceiveData) -> Self
fn open(_data: Self::ReceiveData) -> Self
Open the receive context for reading and accessing values.
sourcefn invoker(&self) -> AccountAddress
fn invoker(&self) -> AccountAddress
Who is the account that initiated the top-level transaction this invocation is a part of. Read more
sourcefn self_address(&self) -> ContractAddress
fn self_address(&self) -> ContractAddress
The address of the contract being invoked.
sourcefn sender(&self) -> Address
fn sender(&self) -> Address
The immediate sender of the message. In general different from the invoker. Read more
sourcefn owner(&self) -> AccountAddress
fn owner(&self) -> AccountAddress
Account which created the contract instance.
sourcefn named_entrypoint(&self) -> OwnedEntrypointName
fn named_entrypoint(&self) -> OwnedEntrypointName
Get the name of the entrypoint that was named. In case a default entrypoint is invoked this can be different from the name of the entrypoint that is being executed. Read more