mod common;
use mmex_lib::domain::categories::CategoryId;
use mmex_lib::domain::payees::PayeeId;
use mmex_lib::domain::transactions::{
SplitTransaction, Transaction, TransactionCode, TransactionId, TransactionStatus,
};
use mmex_lib::domain::types::{AccountId, Money};
use rust_decimal_macros::dec;
#[test]
fn test_transaction_splits_integration() {
let ctx = common::setup_test_db();
let service = ctx.transactions();
let tx = Transaction {
id: TransactionId { v1: 0 },
account_id: AccountId { v1: 1 },
to_account_id: None,
payee_id: PayeeId { v1: 1 },
trans_code: TransactionCode::Withdrawal,
amount: Money::from(dec!(100.0)),
status: TransactionStatus::None,
transaction_number: None,
notes: None,
category_id: None,
date: None,
to_amount: None,
};
let created_tx = service.create_transaction(&tx).unwrap();
let split1 = SplitTransaction {
id: 0,
transaction_id: created_tx.id,
category_id: Some(CategoryId { v1: 10 }),
amount: Money::from(dec!(60.0)),
notes: Some("Comida".into()),
};
let split2 = SplitTransaction {
id: 0,
transaction_id: created_tx.id,
category_id: Some(CategoryId { v1: 11 }),
amount: Money::from(dec!(40.0)),
notes: Some("Bebida".into()),
};
service.add_split(&split1).unwrap();
service.add_split(&split2).unwrap();
let splits = service.get_splits_for_transaction(created_tx.id).unwrap();
assert_eq!(splits.len(), 2);
assert_eq!(splits[0].amount.to_decimal(), dec!(60.0));
service.delete_transaction(created_tx.id).unwrap();
let after_delete = service.get_splits_for_transaction(created_tx.id).unwrap();
assert_eq!(after_delete.len(), 0);
}