fix: show meaningful update runs and tidy update access layout
This commit is contained in:
1 parent
81def77e3c
commit
bef669f3d9
12 files changed
+85
-20
No files matched your search
@@ -364,7 +364,7 @@ func TestDashboardRendersLiveUpdateHooks(t *testing.T) {
|
||||
`data-dashboard-ipv6`,
|
||||
`data-recent-runs aria-live="polite" aria-busy="true"`,
|
||||
`Aktualisierung läuft`,
|
||||
`features-30`,
|
||||
`features-31`,
|
||||
`data-local-time="1788001920"`,
|
||||
`dashboard-zone-item`,
|
||||
`DNS-Zone · example.de`,
|
||||
@@ -375,7 +375,7 @@ func TestDashboardRendersLiveUpdateHooks(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestSchedulerAPIIncludesRecentRunsOnlyForAdministrators(t *testing.T) {
|
||||
func TestRecentRunsShowChangesAndErrorsOnlyForAdministrators(t *testing.T) {
|
||||
t.Parallel()
|
||||
ctx := context.Background()
|
||||
database, err := store.Open(ctx, filepath.Join(t.TempDir(), "app.db"))
|
||||
@@ -390,8 +390,38 @@ func TestSchedulerAPIIncludesRecentRunsOnlyForAdministrators(t *testing.T) {
|
||||
if err := database.FinishUpdateRun(ctx, runID, "ok", "198.51.100.10", "", "1 Ziel aktualisiert"); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
// More no-op runs than the display limit must not push out older changes.
|
||||
for index := 0; index < 12; index++ {
|
||||
id, err := database.CreateUpdateRun(ctx)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
summary := "0 Ziel(e) aktualisiert, 0 Fehler"
|
||||
if index%2 == 0 {
|
||||
summary = "Keine aktiven DynDNS-Ziele"
|
||||
}
|
||||
if err := database.FinishUpdateRun(ctx, id, "ok", "", "", summary); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
for _, status := range []string{"partial", "error"} {
|
||||
id, err := database.CreateUpdateRun(ctx)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := database.FinishUpdateRun(ctx, id, status, "", "", "0 Ziel(e) aktualisiert, 0 Fehler"); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
if _, err := database.CreateUpdateRun(ctx); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
schedule := scheduler.New(database, nil, nil, nil, slog.Default())
|
||||
server := &Server{store: database, scheduler: schedule}
|
||||
templates, err := loadTemplates()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
server := &Server{store: database, scheduler: schedule, templates: templates, logger: slog.Default()}
|
||||
|
||||
adminResponse := httptest.NewRecorder()
|
||||
adminRequest := httptest.NewRequest(http.MethodGet, "/api/v1/scheduler?runs=1", nil)
|
||||
@@ -406,13 +436,26 @@ func TestSchedulerAPIIncludesRecentRunsOnlyForAdministrators(t *testing.T) {
|
||||
if err := json.NewDecoder(adminResponse.Body).Decode(&adminState); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if adminState.RecentRuns == nil || len(*adminState.RecentRuns) != 1 {
|
||||
if adminState.RecentRuns == nil || len(*adminState.RecentRuns) != 3 {
|
||||
t.Fatalf("administrator did not receive recent runs: %#v", adminState.RecentRuns)
|
||||
}
|
||||
if run := (*adminState.RecentRuns)[0]; run.ID != runID || run.Status != "ok" || run.Summary != "1 Ziel aktualisiert" {
|
||||
if run := (*adminState.RecentRuns)[2]; run.ID != runID || run.Status != "ok" || run.Summary != "1 Ziel aktualisiert" {
|
||||
t.Fatalf("unexpected recent run: %#v", run)
|
||||
}
|
||||
|
||||
if (*adminState.RecentRuns)[0].Status != "error" || (*adminState.RecentRuns)[1].Status != "partial" {
|
||||
t.Fatal("zero-change errors or partial runs were hidden")
|
||||
}
|
||||
allRuns, err := database.RecentRuns(ctx, 100)
|
||||
if err != nil || len(allRuns) != 16 {
|
||||
t.Fatalf("filter changed diagnostic history: count=%d err=%v", len(allRuns), err)
|
||||
}
|
||||
pageResponse := httptest.NewRecorder()
|
||||
server.dashboard(pageResponse, httptest.NewRequest(http.MethodGet, "/", nil), &model.Session{Role: "admin"})
|
||||
if pageResponse.Code != http.StatusOK || !strings.Contains(pageResponse.Body.String(), "1 Ziel aktualisiert") || strings.Contains(pageResponse.Body.String(), "Keine aktiven DynDNS-Ziele") || strings.Count(pageResponse.Body.String(), "0 Ziel(e) aktualisiert, 0 Fehler") != 2 {
|
||||
t.Fatal("initial dashboard differs from the filtered live history")
|
||||
}
|
||||
|
||||
memberResponse := httptest.NewRecorder()
|
||||
memberRequest := httptest.NewRequest(http.MethodGet, "/api/v1/scheduler?runs=1", nil)
|
||||
server.schedulerAPI(memberResponse, memberRequest, &model.Session{Role: "member"})
|
||||
|
||||
Reference in new issue
Block a user