munin/internal/web/diagramm_test.go

82 lines
2.7 KiB
Go

package web
import (
"testing"
"time"
"munin/internal/statistik"
)
func TestRunde125(t *testing.T) {
for _, fall := range []struct{ ein, aus int }{
{0, 1}, {1, 1}, {2, 2}, {3, 5}, {5, 5}, {6, 10}, {11, 20}, {37, 50}, {51, 100}, {999, 1000}, {1001, 2000},
} {
if got := runde125(fall.ein); got != fall.aus {
t.Errorf("runde125(%d) = %d, erwartet %d", fall.ein, got, fall.aus)
}
}
}
// TestDiagramm: Die Balken stapeln sich von der Nulllinie nach oben, der
// höchste reicht bis zur Skala, ein kleiner Wert bleibt sichtbar, und unter
// dem letzten Tag steht ein Datum.
func TestDiagramm(t *testing.T) {
tag0 := time.Date(2026, 10, 1, 0, 0, 0, 0, time.UTC)
tage := make([]statistik.Tag, 8)
for i := range tage {
tage[i].Datum = tag0.AddDate(0, 0, i)
}
tage[3].SchreibenAgent, tage[3].SchreibenMensch = 6, 4 // Summe 10 = Skala
tage[5].SchreibenAgent = 1
d := baueDiagramm("Test", diagrammEinheit{"Schreibvorgang", "Schreibvorgänge"}, tage,
diagrammReihe{wert: func(t statistik.Tag) int { return t.SchreibenAgent }, klasse: "a", name: "Agenten"},
diagrammReihe{wert: func(t statistik.Tag) int { return t.SchreibenMensch }, klasse: "m", name: "Menschen"},
)
if d.Leer || len(d.Balken) != len(tage) {
t.Fatalf("Leer=%v, %d Balken", d.Leer, len(d.Balken))
}
voll := d.Balken[3].Teile
if len(voll) != 2 {
t.Fatalf("Tag 3: %d Teile, erwartet 2", len(voll))
}
if voll[0].Y+voll[0].Hoehe != d.Grund {
t.Error("unterster Teil steht nicht auf der Nulllinie")
}
if voll[1].Y+voll[1].Hoehe != voll[0].Y {
t.Error("zweiter Teil liegt nicht auf dem ersten")
}
if voll[1].Y != diagrammOben {
t.Errorf("höchster Balken endet bei y=%d, erwartet %d (die Skala)", voll[1].Y, diagrammOben)
}
if klein := d.Balken[5].Teile; len(klein) != 1 || klein[0].Hoehe < 1 {
t.Errorf("ein einzelner Schreibvorgang ist unsichtbar: %+v", klein)
}
if len(d.Balken[0].Teile) != 0 {
t.Error("ein Tag ohne Aktivität hat Balken")
}
if got := d.Balken[3].Titel; got != "So 04.10.: 10 Schreibvorgänge (Agenten 6, Menschen 4)" {
t.Errorf("Tooltip %q", got)
}
if letzte := d.Achse[len(d.Achse)-1]; letzte.Text != "08.10." {
t.Errorf("letzte Beschriftung %q, erwartet den letzten Tag", letzte.Text)
}
if leer := baueDiagramm("Leer", diagrammEinheit{"Suche", "Suchen"}, tage[:2]); !leer.Leer {
t.Error("Diagramm ohne Werte ist nicht als leer markiert")
}
}
func TestGroesse(t *testing.T) {
for _, fall := range []struct {
ein int64
aus string
}{
{0, "0 B"}, {1023, "1023 B"}, {1536, "1,5 KB"}, {812 << 10, "812 KB"}, {3 << 30, "3,0 GB"},
} {
if got := groesse(fall.ein); got != fall.aus {
t.Errorf("groesse(%d) = %q, erwartet %q", fall.ein, got, fall.aus)
}
}
}