Files
descro/programs/descro/tests/test_buyer_flow.rs
2026-05-26 21:33:32 +02:00

75 lines
2.0 KiB
Rust

mod common;
use common::*;
use anchor_lang::solana_program::system_program;
use solana_signer::Signer;
#[test]
fn buyer_can_create_and_fund_escrow() {
let (mut svm, seller, buyer, _resolver) = setup();
send(
&mut svm,
ix_buyer_create_escrow(&buyer.pubkey(), &seller.pubkey(), AMOUNT, None, ESCROW_ID),
&buyer,
);
let escrow = read_escrow(&svm, &seller.pubkey(), ESCROW_ID);
assert_eq!(escrow.state, EscrowState::AwaitingSellerConfirm);
assert_eq!(escrow.buyer, buyer.pubkey());
assert_eq!(escrow.seller, seller.pubkey());
assert_eq!(escrow.amount, AMOUNT);
let vault = vault_pda(&escrow_pda(&seller.pubkey(), ESCROW_ID));
let vault_lamports = svm.get_account(&vault).map(|a| a.lamports).unwrap_or(0);
assert_eq!(vault_lamports, AMOUNT);
}
#[test]
fn buyer_create_escrow_fails_below_rent_minimum() {
let (mut svm, seller, buyer, _resolver) = setup();
assert!(!try_send(
&mut svm,
ix_buyer_create_escrow(&buyer.pubkey(), &seller.pubkey(), 0, None, ESCROW_ID),
&buyer,
));
}
#[test]
fn seller_can_confirm_buyer_escrow() {
let (mut svm, seller, buyer, _resolver) = setup();
send(
&mut svm,
ix_buyer_create_escrow(&buyer.pubkey(), &seller.pubkey(), AMOUNT, None, ESCROW_ID),
&buyer,
);
send(
&mut svm,
ix_seller_confirm(&seller.pubkey(), &seller.pubkey(), &system_program::ID, ESCROW_ID),
&seller,
);
let escrow = read_escrow(&svm, &seller.pubkey(), ESCROW_ID);
assert_eq!(escrow.state, EscrowState::Active);
}
#[test]
fn seller_confirm_fails_from_wrong_state() {
let (mut svm, seller, buyer, _resolver) = setup();
// Seller-initiated → AwaitingDeposit — seller_confirm must fail
send(
&mut svm,
ix_create_escrow(&seller.pubkey(), &buyer.pubkey(), AMOUNT, None, ESCROW_ID),
&seller,
);
assert!(!try_send(
&mut svm,
ix_seller_confirm(&seller.pubkey(), &seller.pubkey(), &system_program::ID, ESCROW_ID),
&seller,
));
}