Saltar al contenido principal

Prueba de Autorización

Las pruebas pueden afirmar sobre las autenticaciones que se espera que ocurran.

El siguiente ejemplo configura un entorno de prueba, registra un Increment Contract y verifica después de la invocación del incremento qué autenticaciones fueron necesarias.

#[test]
fn test() {
let env = Env::default();
env.mock_all_auths();
let contract_id = env.register_contract(None, IncrementContract);
let client = IncrementContractClient::new(&env, &contract_id);

let user_1 = Address::random(&env);

assert_eq!(client.increment(&user_1, &5), 5);

// Verify that the user indeed had to authorize a call of `increment` with
// the expected arguments:
assert_eq!(
// Get the auths that were seen in the last invocation.
env.auths(),
std::vec![(
// Address for which authorization check is performed
user_1.clone(),
// Invocation tree that needs to be authorized
AuthorizedInvocation {
// Function that is authorized. Can be a contract function or
// a host function that requires authorization.
function: AuthorizedFunction::Contract((
// Address of the called contract
contract_id.clone(),
// Name of the called function
symbol_short!("increment"),
// Arguments used to call `increment` (converted to the
// env-managed vector via `into_val`)
(user_1.clone(), 5_u32).into_val(&env),
)),
// The contract doesn't call any other contracts that require
// authorization,
sub_invocations: std::vec![]
}
)]
);
}
consejo

Para el ejemplo completo del cual se extrae el fragmento anterior, consulta el ejemplo de contrato de autenticación.