diff options
| author | Paul Buetow <paul@buetow.org> | 2026-05-27 21:41:26 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-05-27 21:41:26 +0300 |
| commit | 573dce2ed0a85165970060b034c9bc3ec2317ba9 (patch) | |
| tree | 71436fe053c35904e9f8e51c841ab7857a85af26 /internal/showcase/rank_history_svg_test.go | |
| parent | bd86e04f112edbe0f6b4f8c2b6a8a5161ff11699 (diff) | |
showcase: extend rank history to 32 weeks, trim leading empty columns
Previously the graph was fixed at 5 weekly data points. Now:
- rankHistoryPoints raised from 5 → 32 so the store accumulates up to 32
weekly snapshots and each project carries 32 history entries.
- GenerateRankHistorySVG trims all leading all-zero columns before layout,
so the graph only spans from the oldest week that any project actually
has data — no empty space on the left when history is short.
- displayPoints (trimmed width) drives all layout math: xPos(), xLabels,
and the X-axis loop; numPoints is only used for the reversal placement.
- xLabelStep() thins X-axis text labels when many columns are visible
(step 1 for ≤6, 2 for ≤12, 4 for ≤24, 8 for >24 columns) while still
drawing a grid line at every column and always labelling 'now'.
- Test: give alpha a Spot at '4w' so trimming keeps that column and the
time-axis label test still finds '4w ago' in the output.
- New TestXLabelStep_ReturnsSensibleSteps covers the new helper.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'internal/showcase/rank_history_svg_test.go')
| -rw-r--r-- | internal/showcase/rank_history_svg_test.go | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/internal/showcase/rank_history_svg_test.go b/internal/showcase/rank_history_svg_test.go index 06aab4c..d086a7d 100644 --- a/internal/showcase/rank_history_svg_test.go +++ b/internal/showcase/rank_history_svg_test.go @@ -16,7 +16,7 @@ func makeTestSummaries() []ProjectSummary { {Spot: 2, Anchor: "1w", SnapshotDate: "2026-05-20"}, {Spot: 2, Anchor: "2w", SnapshotDate: "2026-05-13"}, {Spot: 3, Anchor: "3w", SnapshotDate: "2026-05-06"}, - {Spot: 0, Anchor: "4w"}, // missing snapshot week + {Spot: 4, Anchor: "4w", SnapshotDate: "2026-04-29"}, // oldest data point }, }, { @@ -239,6 +239,32 @@ func TestGenerateRankHistorySVG_PartialRankHistory(t *testing.T) { require(strings.Contains(svg, `"name":"single-entry"`), "SVG should include 'single-entry' project") } +// TestXLabelStep_ReturnsSensibleSteps verifies the X-axis label density +// function thins out labels as the number of display columns grows. +func TestXLabelStep_ReturnsSensibleSteps(t *testing.T) { + t.Parallel() + + tests := []struct { + displayPoints int + wantMax int // step must be ≤ wantMax + }{ + {5, 1}, + {10, 2}, + {20, 4}, + {32, 8}, + } + + for _, tc := range tests { + got := xLabelStep(tc.displayPoints) + if got > tc.wantMax { + t.Errorf("xLabelStep(%d) = %d, want ≤ %d", tc.displayPoints, got, tc.wantMax) + } + if got <= 0 { + t.Errorf("xLabelStep(%d) = %d, want > 0", tc.displayPoints, got) + } + } +} + // TestGridStep_ReturnsSensibleSteps ensures the Y-axis step function keeps // the graph legible across various project counts. func TestGridStep_ReturnsSensibleSteps(t *testing.T) { |
