use wallet_system::wallets::{Wallet, WalletType, TransferResponse};
use wallet_system::basic_account::BasicAccount;
use wallet_system::accounts::Account;
#[cfg(test)]
mod tests {
use rand::distributions::Alphanumeric;
use rand::Rng;
use wallet_system::accounts::AccountType;
use super::*;
#[test]
fn test_new_account() {
let account: Box<dyn Account> = Box::new(BasicAccount::new("USD"));
assert_eq!(account.get_balance(), 0.0);
assert_eq!(account.get_currency(), "USD");
assert!(account.get_account_number().starts_with(&format!("{}", AccountType::Basic)));
}
#[test]
fn test_deposit() {
let mut account = BasicAccount::new("USD");
let response = account.deposit(100.0);
assert!(response.is_successful);
assert_eq!(account.get_balance(), 100.0);
}
#[test]
fn test_deposit_negative_amount() {
let mut account = BasicAccount::new("USD");
let response = account.deposit(-100.0);
assert!(!response.is_successful);
assert_eq!(account.get_balance(), 0.0);
}
#[test]
fn test_withdraw() {
let mut account = BasicAccount::new("USD");
account.deposit(100.0);
let response = account.withdraw(50.0);
assert!(response.is_successful);
assert_eq!(account.get_balance(), 50.0);
}
#[test]
fn test_withdraw_insufficient_funds() {
let mut account = BasicAccount::new("USD");
let response = account.withdraw(50.0);
assert!(!response.is_successful);
assert_eq!(account.get_balance(), 0.0);
}
#[test]
fn test_withdraw_negative_amount() {
let mut account = BasicAccount::new("USD");
account.deposit(100.0);
let response = account.withdraw(-50.0);
assert!(!response.is_successful);
assert_eq!(account.get_balance(), 100.0);
}
#[test]
fn test_failed_deposit() {
let mut account = BasicAccount::new("USD");
let response = account.deposit(-100.0);
assert!(!response.is_successful);
assert_eq!(account.get_balance(), 0.0);
}
#[test]
fn test_failed_withdraw() {
let mut account = BasicAccount::new("USD");
let response = account.withdraw(-100.0);
assert!(!response.is_successful);
assert_eq!(account.get_balance(), 0.0);
}
}