use agent_pay::{InvoiceCreateRequest, LightningNode, MemoryLedger, MemoryNode};
#[tokio::test]
async fn two_memory_nodes_share_ledger_and_route_a_payment() {
let ledger = MemoryLedger::new();
let alice = MemoryNode::new(ledger.clone(), "alice");
let bob = MemoryNode::new(ledger.clone(), "bob");
let inv = alice
.create_invoice(InvoiceCreateRequest {
amount_msat: 1000,
memo: Some("tea".into()),
expiry_seconds: None,
})
.await
.unwrap();
assert!(inv.bolt11.starts_with("lnbcrt"));
assert_eq!(inv.payment_hash.len(), 64);
let before = alice.lookup_invoice(&inv.payment_hash).await.unwrap();
assert!(!before.settled);
let pay = bob.pay_invoice(&inv.bolt11).await.unwrap();
assert_eq!(pay.preimage.len(), 32);
let after = alice.lookup_invoice(&inv.payment_hash).await.unwrap();
assert!(after.settled);
assert_eq!(after.preimage.unwrap(), pay.preimage);
}
#[tokio::test]
async fn pay_invoice_rejects_unknown_bolt11() {
let ledger = MemoryLedger::new();
let node = MemoryNode::new(ledger, "solo");
assert!(node.pay_invoice("lnbcrt0unknown").await.is_err());
}