Files
breez-sdk-liquid/lib/core/tests/regtest/liquid.rs
Daniel Granhão f437c9194e Add regtest end-to-end tests (#816)
* Add regtest end-to-end tests

* Check that regtest environment is set up

* Add todo comment

* Add missing gloo-timers feature

* Link GH issues

* Update DEVELOPMENT.md

* Update boltz submodule

* Fix after rebase
2025-04-03 01:26:21 +01:00

107 lines
3.3 KiB
Rust

use breez_sdk_liquid::model::{
PayAmount, PaymentDetails, PaymentMethod, PaymentState, PaymentType, PrepareReceiveRequest,
PrepareSendRequest, SdkEvent,
};
use serial_test::serial;
use crate::regtest::{utils, SdkNodeHandle, TIMEOUT};
#[cfg(all(target_family = "wasm", target_os = "unknown"))]
wasm_bindgen_test::wasm_bindgen_test_configure!(run_in_browser);
#[sdk_macros::async_test_all]
#[serial]
async fn liquid() {
let mut handle = SdkNodeHandle::init_node().await.unwrap();
// --------------RECEIVE--------------
let (prepare_response, receive_response) = handle
.receive_payment(&PrepareReceiveRequest {
payment_method: PaymentMethod::LiquidAddress,
amount: None,
})
.await
.unwrap();
assert!(prepare_response.amount.is_none());
assert_eq!(prepare_response.fees_sat, 0);
let address = receive_response.destination;
let amount_sat = 100_000;
utils::send_to_address_elementsd(&address, amount_sat)
.await
.unwrap();
handle
.wait_for_event(
|e| matches!(e, SdkEvent::PaymentWaitingConfirmation { .. }),
TIMEOUT,
)
.await
.unwrap();
assert_eq!(handle.get_pending_receive_sat().await.unwrap(), amount_sat);
assert_eq!(handle.get_balance_sat().await.unwrap(), 0);
utils::mine_blocks(1).await.unwrap();
handle
.wait_for_event(|e| matches!(e, SdkEvent::PaymentSucceeded { .. }), TIMEOUT)
.await
.unwrap();
assert_eq!(handle.get_pending_receive_sat().await.unwrap(), 0);
assert_eq!(handle.get_balance_sat().await.unwrap(), amount_sat);
let payments = handle.get_payments().await.unwrap();
assert_eq!(payments.len(), 1);
let payment = &payments[0];
assert_eq!(payment.amount_sat, amount_sat);
assert_eq!(payment.fees_sat, 0);
assert_eq!(payment.payment_type, PaymentType::Receive);
assert_eq!(payment.status, PaymentState::Complete);
assert!(matches!(payment.details, PaymentDetails::Liquid { .. }));
// --------------SEND--------------
let initial_balance_sat = handle.get_balance_sat().await.unwrap();
let address = utils::generate_address_elementsd().await.unwrap();
let receiver_amount_sat = 50_000;
let (prepare_response, _) = handle
.send_payment(&PrepareSendRequest {
destination: address,
amount: Some(PayAmount::Bitcoin {
receiver_amount_sat,
}),
})
.await
.unwrap();
let fees_sat = prepare_response.fees_sat.unwrap();
let sender_amount_sat = receiver_amount_sat + fees_sat;
utils::mine_blocks(1).await.unwrap();
handle
.wait_for_event(|e| matches!(e, SdkEvent::PaymentSucceeded { .. }), TIMEOUT)
.await
.unwrap();
assert_eq!(
handle.get_balance_sat().await.unwrap(),
initial_balance_sat - sender_amount_sat
);
let payments = handle.get_payments().await.unwrap();
assert_eq!(payments.len(), 2);
let payment = &payments[0];
assert_eq!(payment.amount_sat, receiver_amount_sat);
assert_eq!(payment.fees_sat, fees_sat);
assert_eq!(payment.payment_type, PaymentType::Send);
assert_eq!(payment.status, PaymentState::Complete);
assert!(matches!(payment.details, PaymentDetails::Liquid { .. }));
}