Add account balance anchors

This commit is contained in:
Lars Nolden
2026-09-14 13:32:18 +02:00
parent 83bb86bc93
commit 71e95917da
15 changed files with 440 additions and 23 deletions
+58
View File
@@ -60,6 +60,64 @@ func seed(t *testing.T, a *App, s State) State {
return result.State
}
func TestSaveAccountClearsStaleBalanceAnchorOnIdentityChange(t *testing.T) {
cases := []struct {
name string
change func(*domain.Account)
clear bool
}{
{
name: "currency",
change: func(account *domain.Account) {
account.Currency = "USD"
},
clear: true,
},
{
name: "external account",
change: func(account *domain.Account) {
account.ExternalAccountID = "new_uid"
},
clear: true,
},
{
name: "display name",
change: func(account *domain.Account) {
account.DisplayName = "Renamed"
},
clear: false,
},
}
for _, tc := range cases {
t.Run(tc.name, func(t *testing.T) {
a, s := testApp(t)
anchored := s.Data.Accounts[0]
anchored.ExternalAccountID = "old_uid"
anchored.AnchorBalance = "100.00"
anchored.AnchorDate = "2026-09-10"
var err error
s, err = a.Mutate(context.Background(), s.Revision, func(d *domain.Dataset) error {
return SaveAccount(d, anchored)
})
if err != nil {
t.Fatal(err)
}
changed := anchored
tc.change(&changed)
s, err = a.Mutate(context.Background(), s.Revision, func(d *domain.Dataset) error {
return SaveAccount(d, changed)
})
if err != nil {
t.Fatal(err)
}
got := s.Data.Accounts[0]
if tc.clear != (got.AnchorBalance == "" && got.AnchorDate == "") {
t.Fatalf("anchor after %s change: balance=%q date=%q", tc.name, got.AnchorBalance, got.AnchorDate)
}
})
}
}
// A released binary wrote include_amount into config.toml. Refusing it on
// startup made every upgraded deployment crash-loop against its own settings
// file, so a retired key must load and then disappear on the next save.