Lines
92.59 %
Functions
100 %
Branches
//! Tests for routing fetched account/commodity options into the open
//! transaction-create form's split rows (FormOptions source routing).
use super::{accounts_wire, make};
use crate::form::Form;
use crate::modal::Modal;
use crate::route::{FormOptionsSource, Route, RouteCtx};
use crate::view::ViewId;
use crate::widgets::{EditMode, Widget};
/// One-commodity list-commodities reply wire for the splits commodity fetch.
fn commodities_wire(id: u64, uuid: &str, symbol: &str) -> String {
format!(r#"(:id {id} :value "((:id \"{uuid}\" :symbol \"{symbol}\" :name \"\"))")"#)
}
#[test]
fn deliver_reply_commodity_options_populates_transaction_splits() {
let mut app = make();
app.overlays
.push(Modal::Form(Form::transaction_create(EditMode::Emacs)));
app.form_options_seq = 1;
let uuid = "550e8400-e29b-41d4-a716-446655440010";
let wire = commodities_wire(7, uuid, "USD");
app.deliver_reply(
Route {
target: ViewId::Commodities,
ctx: RouteCtx::FormOptions {
seq: 1,
source: FormOptionsSource::Commodities,
},
&wire,
);
let Some(Modal::Form(form)) = app.overlays.top() else {
panic!("transaction form must be open");
};
let Widget::Splits(sw) = &form.fields[2].widget else {
panic!("field 2 must be Splits");
let row = &sw.rows()[0];
assert_eq!(
row.from_commodity.option_count(),
1,
"from-commodity populated"
assert_eq!(row.to_commodity.option_count(), 1, "to-commodity populated");
assert_eq!(row.from_commodity.value(), uuid);
fn deliver_reply_account_options_populates_transaction_splits() {
let uuid = "550e8400-e29b-41d4-a716-446655440011";
let wire = accounts_wire(8, uuid, "Cash");
target: ViewId::Accounts,
source: FormOptionsSource::Accounts,
// The (none) sentinel + the single account.
row.from.option_count(),
2,
"from-account populated with (none)+1"
assert_eq!(row.to.option_count(), 2, "to-account populated");