75 lines
2.0 KiB
Rust
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,
|
|
));
|
|
}
|