Add account balance anchors
This commit is contained in:
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user