use rust_x402::{
types::PaymentRequirements,
wallet::{Wallet, WalletFactory},
};
#[test]
fn test_wallet_creation() {
let wallet = Wallet::new(
"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef".to_string(),
"base-sepolia".to_string(),
);
assert_eq!(wallet.network(), "base-sepolia");
}
#[test]
fn test_wallet_factory_from_private_key() {
let wallet = WalletFactory::from_private_key(
"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",
"base-sepolia",
);
assert!(wallet.is_ok());
let wallet = wallet.unwrap();
assert_eq!(wallet.network(), "base-sepolia");
}
#[test]
fn test_wallet_factory_from_private_key_invalid_private_key() {
let wallet = WalletFactory::from_private_key("invalid", "base-sepolia");
assert!(wallet.is_err());
}
#[test]
fn test_wallet_factory_for_different_networks() {
let private_key = "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef";
let wallet_sepolia = WalletFactory::from_private_key(private_key, "base-sepolia").unwrap();
assert_eq!(wallet_sepolia.network(), "base-sepolia");
let wallet_base = WalletFactory::from_private_key(private_key, "base").unwrap();
assert_eq!(wallet_base.network(), "base");
let wallet_fuji = WalletFactory::from_private_key(private_key, "avalanche-fuji").unwrap();
assert_eq!(wallet_fuji.network(), "avalanche-fuji");
let wallet_avalanche = WalletFactory::from_private_key(private_key, "avalanche").unwrap();
assert_eq!(wallet_avalanche.network(), "avalanche");
}
#[test]
fn test_wallet_get_network_config() {
let wallet = WalletFactory::from_private_key(
"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",
"base-sepolia",
)
.unwrap();
let config = wallet.get_network_config();
assert!(config.is_ok());
let config = config.unwrap();
assert_eq!(config.chain_id, 84532); assert!(!config.usdc_contract.is_zero());
}
#[test]
fn test_wallet_create_signed_payment_payload() {
let wallet = WalletFactory::from_private_key(
"0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80",
"base-sepolia",
)
.unwrap();
let requirements = PaymentRequirements::new(
"exact",
"base-sepolia",
"1000000",
"0x036CbD53842c5426634e7929541eC2318f3dCF7e",
"0x209693Bc6afc0C5328bA36FaF03C514EF312287C",
"https://example.com/test",
"Test payment",
);
let test_address = "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266";
let payment_payload = wallet.create_signed_payment_payload(&requirements, test_address);
match payment_payload {
Ok(payload) => {
assert_eq!(payload.scheme, "exact");
assert_eq!(payload.network, "base-sepolia");
assert!(!payload.payload.signature.is_empty());
}
Err(_) => {
}
}
}
#[test]
fn test_wallet_network_mismatch() {
let wallet = WalletFactory::from_private_key(
"0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80",
"base-sepolia",
)
.unwrap();
let requirements = PaymentRequirements::new(
"exact",
"base", "1000000",
"0x036CbD53842c5426634e7929541eC2318f3dCF7e",
"0x209693Bc6afc0C5328bA36FaF03C514EF312287C",
"https://example.com/test",
"Test payment",
);
let test_address = "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266";
let result = wallet.create_signed_payment_payload(&requirements, test_address);
assert!(result.is_err());
}
#[test]
fn test_wallet_consistency() {
let private_key = "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80";
let wallet1 = WalletFactory::from_private_key(private_key, "base-sepolia").unwrap();
let wallet2 = WalletFactory::from_private_key(private_key, "base-sepolia").unwrap();
assert_eq!(wallet1.network(), wallet2.network());
let config1 = wallet1.get_network_config().unwrap();
let config2 = wallet2.get_network_config().unwrap();
assert_eq!(config1.chain_id, config2.chain_id);
assert_eq!(config1.usdc_contract, config2.usdc_contract);
}
#[test]
fn test_wallet_different_networks() {
let private_key = "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80";
let wallet_sepolia = WalletFactory::from_private_key(private_key, "base-sepolia").unwrap();
let wallet_base = WalletFactory::from_private_key(private_key, "base").unwrap();
let config_sepolia = wallet_sepolia.get_network_config().unwrap();
let config_base = wallet_base.get_network_config().unwrap();
assert_ne!(config_sepolia.chain_id, config_base.chain_id);
assert_ne!(config_sepolia.usdc_contract, config_base.usdc_contract);
}