Accountant: Inventar, where, Checkmk, Abrechnung

This commit is contained in:
br committed 2026-10-18 17:08:58 +02:00
1 parent 9f16148cde
commit dd93277750
59 files changed
+7522 -113

No files matched your search

+60
View File
@@ -0,0 +1,60 @@
package accountant
import (
"encoding/json"
"path/filepath"
"testing"
"sultan/pkg/ledger"
)
// Ein Bericht legt für neue Mandanten automatisch Kunden an.
func TestReport_CreatesCustomers(t *testing.T) {
a := start(t, "")
key := enrolledPayee(t, a, "webproxy11")
body, _ := json.Marshal(whereReport("webdocker11", route("kunde", "webdocker11", "wp", "kunde.de")))
postReport(t, a, key, body)
l, _ := ledger.Open(ctx, filepath.Join(a.DataDir(), "accountant.db"))
defer l.Close()
for _, id := range []string{"kunde", "andere"} {
if c, err := l.GetCustomer(ctx, id); err != nil || !c.Auto || c.Cycle != ledger.CycleUnclassified {
t.Errorf("Kunde %s: %+v, %v", id, c, err)
}
}
if c, _ := l.GetCustomer(ctx, "kunde"); c.Name != "Kunde A" {
t.Errorf("Name aus dem Mandanten: %q", c.Name)
}
}
// where zeigt den Kunden – auch über eine Zuordnung.
func TestWhere_Customer(t *testing.T) {
l, _ := whereLedger(t)
l.AddCustomer(ctx, ledger.Customer{ID: "k-1001", Name: "Kunde A GmbH", Group: "extern"})
l.MapTenant(ctx, "", "kunde", "k-1001")
save(t, l, "webproxy11", whereReport("webdocker11", route("kunde", "webdocker11", "wp", "kunde.de")))
res, err := Where(ctx, l, "kunde.de")
if err != nil || len(res.Current) != 1 {
t.Fatalf("%+v, %v", res, err)
}
if c := res.Current[0].Customer; c == nil || c.ID != "k-1001" || c.Group != "extern" {
t.Errorf("Kunde: %+v", c)
}
}
func TestMoney(t *testing.T) {
for in, want := range map[string]int64{"89": 8900, "89,00": 8900, "89.5": 8950, "1.234,56": 123456, "0,99": 99, " 12,30 ": 1230} {
if got, err := ParseMoney(in); err != nil || got != want {
t.Errorf("ParseMoney(%q) = %d, %v; erwartet %d", in, got, err, want)
}
}
for _, bad := range []string{"", "abc", "1,234", "-5", "1,2,3"} {
if _, err := ParseMoney(bad); err == nil {
t.Errorf("ParseMoney(%q) ohne Fehler", bad)
}
}
for in, want := range map[int64]string{8900: "89,00", 99: "0,99", 123456: "1234,56", 0: "0,00"} {
if got := FormatMoney(in); got != want {
t.Errorf("FormatMoney(%d) = %q, erwartet %q", in, got, want)
}
}
}