flake-update-20260201
1package output
2
3import (
4 "bytes"
5 "encoding/json"
6 "testing"
7 "time"
8
9 "github.com/vdemeester/home/tools/review-tool/internal/activity"
10)
11
12func TestWriteJSON_ValidOutput(t *testing.T) {
13 report := &activity.ReviewReport{
14 GeneratedAt: time.Date(2026, 1, 27, 15, 30, 0, 0, time.UTC),
15 TimeRange: activity.TimeRange{
16 Start: time.Date(2026, 1, 20, 0, 0, 0, 0, time.UTC),
17 End: time.Date(2026, 1, 27, 0, 0, 0, 0, time.UTC),
18 Description: "last week",
19 },
20 Activities: map[string]*activity.Activity{
21 "github": {
22 Source: "github",
23 Items: []activity.ActivityItem{
24 {
25 ID: "1",
26 Title: "Test PR",
27 Type: "pr_merged",
28 Category: activity.CategoryGitHub,
29 },
30 },
31 },
32 },
33 }
34
35 var buf bytes.Buffer
36 err := WriteJSON(&buf, report)
37 if err != nil {
38 t.Fatalf("WriteJSON() error = %v", err)
39 }
40
41 // Verify it's valid JSON
42 var parsed activity.ReviewReport
43 if err := json.Unmarshal(buf.Bytes(), &parsed); err != nil {
44 t.Fatalf("output is not valid JSON: %v", err)
45 }
46
47 if parsed.TimeRange.Description != "last week" {
48 t.Errorf("parsed description = %q, want %q", parsed.TimeRange.Description, "last week")
49 }
50
51 if len(parsed.Activities["github"].Items) != 1 {
52 t.Errorf("parsed activities count = %d, want 1", len(parsed.Activities["github"].Items))
53 }
54}
55
56func TestWriteJSON_Indented(t *testing.T) {
57 report := &activity.ReviewReport{
58 GeneratedAt: time.Now(),
59 TimeRange: activity.TimeRange{
60 Description: "today",
61 },
62 Activities: make(map[string]*activity.Activity),
63 }
64
65 var buf bytes.Buffer
66 err := WriteJSON(&buf, report)
67 if err != nil {
68 t.Fatalf("WriteJSON() error = %v", err)
69 }
70
71 // Check that output is indented (contains newlines and spaces)
72 output := buf.String()
73 if !bytes.Contains(buf.Bytes(), []byte("\n ")) {
74 t.Errorf("output should be indented, got:\n%s", output)
75 }
76}