use demo_custom::{InitMessage, WASM_BINARY};
use gclient::{EventProcessor, GearApi};
use gear_core::ids::ActorId;
use parity_scale_codec::Encode;
#[tokio::test]
async fn voucher_issue_and_upload_code_and_send_message() -> anyhow::Result<()> {
let api = GearApi::dev_from_path("../target/release/gear").await?;
let actor_id =
ActorId::try_from(api.account_id().encode().as_ref()).expect("failed to create actor id");
let voucher_initial_balance = 100_000_000_000_000;
let gas_limit = api.block_gas_limit()?;
let _balance = api.total_balance(api.account_id()).await?;
let mut listener = api.subscribe().await?;
let (voucher_id, ..) = api
.issue_voucher(actor_id, voucher_initial_balance, None, true, 100)
.await?;
let (code_id, _) = api
.upload_code_with_voucher(voucher_id.clone(), WASM_BINARY)
.await?;
let payload = InitMessage::Capacitor("15".to_string()).encode();
let (message_id, program_id, ..) = api
.create_program_bytes(code_id, vec![], payload, gas_limit, 0)
.await?;
assert!(listener.message_processed(message_id).await?.succeed());
let payload = b"10".to_vec();
let (message_id, ..) = api
.send_message_bytes_with_voucher(
voucher_id.clone(),
program_id,
payload,
gas_limit,
0,
true,
)
.await?;
assert!(listener.message_processed(message_id).await?.succeed());
let (_voucher_id, ..) = api.decline_voucher_with_voucher(voucher_id.clone()).await?;
Ok(())
}