use crate::test_utils::{create_app, create_app_by_req, create_random_auth_req};
use crate::AppError;
use safe_core::{Client, CoreError};
use safe_nd::{AppPermissions, Coins, Error};
use std::str::FromStr;
use xor_name::XorName;
#[tokio::test]
async fn coin_app_deny_permissions() -> Result<(), AppError> {
let mut app_auth_req = create_random_auth_req();
app_auth_req.app_permissions = AppPermissions {
transfer_coins: false,
perform_mutations: false,
get_balance: false,
};
let app = create_app_by_req(&app_auth_req).await?;
let client = app.client;
match client.get_balance(None).await {
Err(CoreError::DataError(Error::AccessDenied)) => (),
res => panic!("Unexpected result: {:?}", res),
}
match client
.transfer_coins(None, rand::random(), Coins::from_str("1.0")?, None)
.await
{
Err(CoreError::DataError(Error::AccessDenied)) => (),
res => panic!("Unexpected result: {:?}", res),
}
Ok(())
}
#[tokio::test]
async fn coin_app_allow_permissions() -> Result<(), AppError> {
let app = create_app().await;
let client = app.client;
let coin_balance = XorName::from(client.owner_key().await);
let mut app_auth_req = create_random_auth_req();
app_auth_req.app_permissions = AppPermissions {
transfer_coins: true,
perform_mutations: false,
get_balance: true,
};
let _app = create_app_by_req(&app_auth_req).await?;
let _ = client.get_balance(None).await?;
match client
.transfer_coins(None, coin_balance, Coins::from_str("1.0")?, Some(1))
.await
{
Ok(transaction) => {
assert_eq!(transaction.id, 1);
assert_eq!(transaction.amount, Coins::from_str("1.0")?);
}
res => panic!("Unexpected result: {:?}", res),
}
Ok(())
}