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) } } }