use super::*;
use serial_test::parallel;
#[test]
#[parallel]
fn success() {
initialize();
let amount = 69;
let expiration = 60;
let (wallet, online) = get_funded_wallet!();
let bak_info_before = wallet.database.get_backup_info().unwrap().unwrap();
let now_timestamp = now().unix_timestamp();
let receive_data = test_witness_receive(&wallet);
let bak_info_after = wallet.database.get_backup_info().unwrap().unwrap();
assert!(bak_info_after.last_operation_timestamp > bak_info_before.last_operation_timestamp);
assert!(receive_data.expiration_timestamp.is_some());
let timestamp = now_timestamp + DURATION_RCV_TRANSFER as i64;
assert!(receive_data.expiration_timestamp.unwrap() - timestamp <= 1);
let decoded_invoice = Invoice::new(receive_data.invoice).unwrap();
assert!(decoded_invoice.invoice_data.network.is_some());
let transfer = get_test_transfer_recipient(&wallet, &receive_data.recipient_id);
let (_, batch_transfer) = get_test_transfer_related(&wallet, &transfer);
assert_eq!(batch_transfer.min_confirmations, MIN_CONFIRMATIONS);
let now_timestamp = now().unix_timestamp();
let receive_data = wallet
.witness_receive(
None,
None,
Some(expiration),
TRANSPORT_ENDPOINTS.clone(),
MIN_CONFIRMATIONS,
)
.unwrap();
assert!(receive_data.expiration_timestamp.is_some());
let timestamp = now_timestamp + expiration as i64;
assert!(receive_data.expiration_timestamp.unwrap() - timestamp <= 1);
let receive_data = wallet
.witness_receive(
None,
None,
Some(0),
TRANSPORT_ENDPOINTS.clone(),
MIN_CONFIRMATIONS,
)
.unwrap();
assert!(receive_data.expiration_timestamp.is_none());
let min_confirmations = 2;
let receive_data = wallet
.witness_receive(
None,
None,
None,
TRANSPORT_ENDPOINTS.clone(),
min_confirmations,
)
.unwrap();
let transfer = get_test_transfer_recipient(&wallet, &receive_data.recipient_id);
let (_, batch_transfer) = get_test_transfer_related(&wallet, &transfer);
assert_eq!(batch_transfer.min_confirmations, min_confirmations);
let asset = test_issue_asset_cfa(&wallet, &online, None, None);
let asset_id = asset.asset_id;
let result = wallet.witness_receive(
Some(asset_id.clone()),
None,
None,
TRANSPORT_ENDPOINTS.clone(),
MIN_CONFIRMATIONS,
);
assert!(result.is_ok());
let now_timestamp = now().unix_timestamp();
let result = wallet.witness_receive(
Some(asset_id.clone()),
Some(amount),
Some(expiration),
TRANSPORT_ENDPOINTS.clone(),
MIN_CONFIRMATIONS,
);
assert!(result.is_ok());
let receive_data = result.unwrap();
let invoice = Invoice::new(receive_data.invoice).unwrap();
let mut invoice_data = invoice.invoice_data();
let invoice_from_data = Invoice::from_invoice_data(invoice_data.clone()).unwrap();
let approx_expiry = now_timestamp + expiration as i64;
assert_eq!(invoice.invoice_string(), invoice_from_data.invoice_string());
assert_eq!(invoice_data.recipient_id, receive_data.recipient_id);
assert_eq!(invoice_data.asset_id, Some(asset_id));
assert_eq!(invoice_data.amount, Some(amount));
assert_eq!(invoice_data.network, Some(BitcoinNetwork::Regtest));
assert!(invoice_data.expiration_timestamp.unwrap() - approx_expiry <= 1);
let invalid_asset_id = s!("invalid");
invoice_data.asset_id = Some(invalid_asset_id.clone());
let result = Invoice::from_invoice_data(invoice_data);
assert!(matches!(result, Err(Error::InvalidAssetID { asset_id: a }) if a == invalid_asset_id));
let result = ScriptBuf::from_hex(&receive_data.recipient_id);
assert!(result.is_ok());
let transport_endpoints = vec![
format!("rpc://{}", "127.0.0.1:3000/json-rpc"),
format!("rpc://{}", "127.0.0.1:3001/json-rpc"),
format!("rpc://{}", "127.0.0.1:3002/json-rpc"),
];
let result = wallet.witness_receive(
None,
None,
Some(0),
transport_endpoints.clone(),
MIN_CONFIRMATIONS,
);
assert!(result.is_ok());
let transfer = get_test_transfer_recipient(&wallet, &result.unwrap().recipient_id);
let tte_data = wallet
.database
.get_transfer_transport_endpoints_data(transfer.idx)
.unwrap();
assert_eq!(tte_data.len(), transport_endpoints.len());
}
#[test]
#[parallel]
fn fail() {
initialize();
let (wallet, _) = get_empty_wallet!();
let receive_data = test_witness_receive(&wallet);
let invoice = Invoice::new(receive_data.invoice).unwrap();
let mut invoice_data = invoice.invoice_data();
invoice_data.network = None;
let result = Invoice::from_invoice_data(invoice_data);
assert!(matches!(
result,
Err(Error::InvalidInvoiceData { details: _ })
));
}