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}