Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01T3gXMVt7XJPi6ens1or9Dj
This commit is contained in:
1 parent
f790a27cc1
commit
9c99a0cfe8
9 files changed
+30
-84
No files matched your search
@@ -541,13 +541,7 @@ open_at_start = "ask"
|
||||
#[test]
|
||||
fn what_the_file_leaves_out_is_cleared() {
|
||||
let s = imported(FERNHILL);
|
||||
let i = import(
|
||||
"[company]\nname = \"Fernhill Labs LLC\"\n",
|
||||
None,
|
||||
&s,
|
||||
"USD",
|
||||
)
|
||||
.unwrap();
|
||||
let i = import("[company]\nname = \"Fernhill Labs LLC\"\n", None, &s, "USD").unwrap();
|
||||
assert!(
|
||||
i.changes
|
||||
.iter()
|
||||
|
||||
@@ -294,9 +294,7 @@ fn shared_books() -> Shared {
|
||||
let dana = l.add_vendor("Dana").unwrap();
|
||||
l.set_vendor_1099(dana, Some(Form1099::Nec), true).unwrap();
|
||||
let dana_p = l.party_of_vendor(dana).unwrap();
|
||||
let tobin = l
|
||||
.add_party("Tobin", &[ledger_core::Role::Member])
|
||||
.unwrap();
|
||||
let tobin = l.add_party("Tobin", &[ledger_core::Role::Member]).unwrap();
|
||||
Shared {
|
||||
l,
|
||||
bank,
|
||||
|
||||
@@ -165,14 +165,8 @@ fn party_members_find_each_members_own_party() {
|
||||
let capital = l
|
||||
.add_account("3001", "Capital — Mo", AccountType::Equity, None, false)
|
||||
.unwrap();
|
||||
l.add_account(
|
||||
"3000",
|
||||
"Capital — Tobin",
|
||||
AccountType::Equity,
|
||||
None,
|
||||
false,
|
||||
)
|
||||
.unwrap();
|
||||
l.add_account("3000", "Capital — Tobin", AccountType::Equity, None, false)
|
||||
.unwrap();
|
||||
let mo = l.add_party("Mo", &[Role::Member]).unwrap();
|
||||
let other = l.add_party("Pat", &[Role::Member]).unwrap();
|
||||
l.update_party(mo, PartyField::Archived(true)).unwrap();
|
||||
|
||||
@@ -1527,9 +1527,7 @@ mod shares {
|
||||
let cap_k = add(&mut l, "3001", AccountType::Equity);
|
||||
let exp = add(&mut l, "6050", AccountType::Expense);
|
||||
let tobin = l.add_party("Tobin Harlow", &[Role::Member]).unwrap();
|
||||
let mo = l
|
||||
.add_party("Morgan Ellis", &[Role::Member])
|
||||
.unwrap();
|
||||
let mo = l.add_party("Morgan Ellis", &[Role::Member]).unwrap();
|
||||
let acme = l.add_party("Acme", &[Role::Contractor]).unwrap();
|
||||
let half = d("0.5");
|
||||
let members = vec![
|
||||
@@ -1717,11 +1715,7 @@ mod shares {
|
||||
.unwrap();
|
||||
assert_eq!(
|
||||
resolved(&b, e).unwrap(),
|
||||
vec![
|
||||
(b.acme, d("33.33")),
|
||||
(b.tobin, d("33.33")),
|
||||
(c, d("33.34"))
|
||||
]
|
||||
vec![(b.acme, d("33.33")), (b.tobin, d("33.33")), (c, d("33.34"))]
|
||||
);
|
||||
b.l.set_entry_parties(
|
||||
e,
|
||||
@@ -1730,11 +1724,7 @@ mod shares {
|
||||
.unwrap();
|
||||
assert_eq!(
|
||||
resolved(&b, e).unwrap(),
|
||||
vec![
|
||||
(b.acme, d("33.34")),
|
||||
(b.tobin, d("33.33")),
|
||||
(c, d("33.33"))
|
||||
]
|
||||
vec![(b.acme, d("33.34")), (b.tobin, d("33.33")), (c, d("33.33"))]
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -105,12 +105,8 @@ fn the_company_page_shows_how_the_books_are_kept() {
|
||||
d(2026, 10, 12),
|
||||
))
|
||||
.unwrap();
|
||||
s.retire_convention(
|
||||
"old-way",
|
||||
"replaced",
|
||||
&src("Tobin Harlow", d(2026, 10, 14)),
|
||||
)
|
||||
.unwrap();
|
||||
s.retire_convention("old-way", "replaced", &src("Tobin Harlow", d(2026, 10, 14)))
|
||||
.unwrap();
|
||||
let first = s
|
||||
.record_decision(&NewDecision {
|
||||
subject: "Materiality, first cut".into(),
|
||||
@@ -214,12 +210,8 @@ fn nothing_kept_shows_no_cards() {
|
||||
d(2026, 10, 12),
|
||||
))
|
||||
.unwrap();
|
||||
s.retire_convention(
|
||||
"old-way",
|
||||
"replaced",
|
||||
&src("Tobin Harlow", d(2026, 10, 14)),
|
||||
)
|
||||
.unwrap();
|
||||
s.retire_convention("old-way", "replaced", &src("Tobin Harlow", d(2026, 10, 14)))
|
||||
.unwrap();
|
||||
let only = s.raise_open_item(&item("Done already", None)).unwrap();
|
||||
s.resolve_open_item(only, "done", &src("Tobin Harlow", d(2026, 10, 17)))
|
||||
.unwrap();
|
||||
@@ -263,8 +255,5 @@ fn books_that_keep_their_settings_say_where_facts_come_from() {
|
||||
let h = company(&dir);
|
||||
assert!(!shows(&h, "No company facts"), "the facts are there");
|
||||
assert!(shows(&h, "Fernhill Labs LLC"));
|
||||
assert!(shows(
|
||||
&h,
|
||||
&format!("Tobin Harlow · {}", fmt::date(today()))
|
||||
));
|
||||
assert!(shows(&h, &format!("Tobin Harlow · {}", fmt::date(today()))));
|
||||
}
|
||||
@@ -1020,9 +1020,7 @@ fn member_books(tag: &str) -> MemberBooks {
|
||||
let rev = acct(&mut s, "4000", "App Revenue", AccountType::Revenue);
|
||||
let exp = acct(&mut s, "6050", "Domain & Hosting", AccountType::Expense);
|
||||
let tobin = s.add_party("Tobin Harlow", &[Role::Member]).unwrap();
|
||||
let mo = s
|
||||
.add_party("Morgan Ellis", &[Role::Member])
|
||||
.unwrap();
|
||||
let mo = s.add_party("Morgan Ellis", &[Role::Member]).unwrap();
|
||||
let both = [
|
||||
ledger_core::PartyShare::whole(tobin),
|
||||
ledger_core::PartyShare::whole(mo),
|
||||
@@ -1157,10 +1155,7 @@ fn entries_list_every_party_with_its_resolved_share() {
|
||||
.collect::<Vec<_>>(),
|
||||
vec![(m.tobin, Some(cents(5_000))), (m.mo, Some(cents(5_000)))]
|
||||
);
|
||||
assert_eq!(
|
||||
e.party.as_deref(),
|
||||
Some("Tobin Harlow & Morgan Ellis")
|
||||
);
|
||||
assert_eq!(e.party.as_deref(), Some("Tobin Harlow & Morgan Ellis"));
|
||||
// Property: net zero, shares of the total.
|
||||
let e = b.entry(m.property).unwrap();
|
||||
assert_eq!(e.parties[1].resolved, Some(cents(60_000)));
|
||||
@@ -1236,9 +1231,7 @@ fn a_members_page_is_their_capital_statement() {
|
||||
assert_eq!((kinds[2].1, kinds[2].2), (K::IncomeShare, cents(35_000)));
|
||||
// Over all time: the 2025 contribution is cash (1000 is
|
||||
// [books] cash_accounts), the laptop property.
|
||||
let all = b
|
||||
.capital_statement(m.mo, (d(2025, 1, 1), today()))
|
||||
.unwrap();
|
||||
let all = b.capital_statement(m.mo, (d(2025, 1, 1), today())).unwrap();
|
||||
assert_eq!(all.opening, Decimal::ZERO);
|
||||
assert_eq!(all.contributions_cash, cents(100_000));
|
||||
assert_eq!(all.contributions_property, cents(60_000));
|
||||
@@ -1284,15 +1277,14 @@ fn the_capital_statement_is_the_k1_worksheet_row() {
|
||||
let b = load(&m.dir.0);
|
||||
let chart = b.ledger.chart();
|
||||
let id = |c: &str| chart.find_by_code(c).unwrap().id;
|
||||
let members =
|
||||
[("Tobin Harlow", "3000"), ("Morgan Ellis", "3001")].map(|(name, code)| {
|
||||
ledger_core::MemberCapital {
|
||||
name: name.into(),
|
||||
capital_account: id(code),
|
||||
distribution_account: None,
|
||||
share: Decimal::new(5, 1),
|
||||
}
|
||||
});
|
||||
let members = [("Tobin Harlow", "3000"), ("Morgan Ellis", "3001")].map(|(name, code)| {
|
||||
ledger_core::MemberCapital {
|
||||
name: name.into(),
|
||||
capital_account: id(code),
|
||||
distribution_account: None,
|
||||
share: Decimal::new(5, 1),
|
||||
}
|
||||
});
|
||||
let cash: Vec<_> = if fallback {
|
||||
let mut all: Vec<_> = ledger_core::parties::money_accounts(&b.ledger, &[])
|
||||
.cash
|
||||
@@ -1392,9 +1384,7 @@ fn the_capital_statement_counts_income_not_yet_closed() {
|
||||
(cents(175_000), cents(5_000), cents(180_000))
|
||||
);
|
||||
assert!(july.lines.is_empty());
|
||||
let aug = b
|
||||
.capital_statement(m.mo, (d(2026, 8, 1), today()))
|
||||
.unwrap();
|
||||
let aug = b.capital_statement(m.mo, (d(2026, 8, 1), today())).unwrap();
|
||||
assert_eq!(
|
||||
(aug.opening, aug.income_share, aug.closing),
|
||||
(cents(180_000), Decimal::ZERO, cents(180_000))
|
||||
@@ -1472,9 +1462,7 @@ fn without_cash_accounts_the_capital_statement_reads_money_as_core_does() {
|
||||
ledger_gui::books::CapitalKind::CashContribution
|
||||
);
|
||||
assert_eq!(st.closing, cents(175_000));
|
||||
let all = b
|
||||
.capital_statement(m.mo, (d(2025, 1, 1), today()))
|
||||
.unwrap();
|
||||
let all = b.capital_statement(m.mo, (d(2025, 1, 1), today())).unwrap();
|
||||
assert_eq!(
|
||||
(all.contributions_cash, all.contributions_property),
|
||||
(cents(160_000), Decimal::ZERO)
|
||||
|
||||
@@ -1592,10 +1592,7 @@ fn under_require_several_parties_satisfy_the_policy() {
|
||||
"books.reverse_entry",
|
||||
json!({"entry_id": id, "date": "2026-07-02", "description": "undo", "confirmed": true}),
|
||||
);
|
||||
assert_eq!(
|
||||
m.party("Morgan Ellis", 2026)["totals"]["paid"],
|
||||
"0.00"
|
||||
);
|
||||
assert_eq!(m.party("Morgan Ellis", 2026)["totals"]["paid"], "0.00");
|
||||
m.read_only("books.verify", json!({}));
|
||||
}
|
||||
|
||||
|
||||
@@ -1504,8 +1504,8 @@ fn set_tin_refusals_write_nothing() {
|
||||
("Mo", json!(SSN), "itin"), // not an ITIN
|
||||
("Mo", json!(SSN), "passport"), // no such type
|
||||
("Mo", json!(291122846.0), "ssn"), // a float
|
||||
("Nobody", json!(SSN), "ssn"), // no such party
|
||||
("Acme Design", json!(SSN), "ssn"), // W-9 says 1111
|
||||
("Nobody", json!(SSN), "ssn"), // no such party
|
||||
("Acme Design", json!(SSN), "ssn"), // W-9 says 1111
|
||||
] {
|
||||
let why = m.refuse(
|
||||
"books.set_tin",
|
||||
|
||||
@@ -794,9 +794,7 @@ mod shares {
|
||||
let dir = test_dir("shares-event");
|
||||
let (mut s, fx) = fixture(&dir);
|
||||
let a = s.add_party("Tobin Harlow", &[Role::Member]).unwrap();
|
||||
let b = s
|
||||
.add_party("Morgan Ellis", &[Role::Member])
|
||||
.unwrap();
|
||||
let b = s.add_party("Morgan Ellis", &[Role::Member]).unwrap();
|
||||
let ((), pl) = one_event(&mut s, &dir, "entry.parties_set", |s| {
|
||||
s.set_entry_parties(fx.entry, &[PartyShare::whole(a), PartyShare::whole(b)])
|
||||
.unwrap()
|
||||
@@ -904,9 +902,7 @@ mod shares {
|
||||
let dir = test_dir("shares-replay");
|
||||
let (mut s, fx) = fixture(&dir);
|
||||
let a = s.add_party("Tobin Harlow", &[Role::Member]).unwrap();
|
||||
let b = s
|
||||
.add_party("Morgan Ellis", &[Role::Member])
|
||||
.unwrap();
|
||||
let b = s.add_party("Morgan Ellis", &[Role::Member]).unwrap();
|
||||
let v = s.add_vendor("Contractor").unwrap();
|
||||
let pv = s.ledger().party_of_vendor(v).unwrap();
|
||||
s.set_entry_parties(
|
||||
|
||||
Reference in new issue
Block a user