1package types
2
3import (
4 "testing"
5)
6
7func TestDiffId(t *testing.T) {
8 tests := []struct {
9 name string
10 diff Diff
11 expected string
12 }{
13 {
14 name: "regular file uses new name",
15 diff: Diff{
16 Name: struct {
17 Old string `json:"old"`
18 New string `json:"new"`
19 }{Old: "", New: "src/main.go"},
20 },
21 expected: "src/main.go",
22 },
23 {
24 name: "new file uses new name",
25 diff: Diff{
26 Name: struct {
27 Old string `json:"old"`
28 New string `json:"new"`
29 }{Old: "", New: "src/new.go"},
30 IsNew: true,
31 },
32 expected: "src/new.go",
33 },
34 {
35 name: "deleted file uses old name",
36 diff: Diff{
37 Name: struct {
38 Old string `json:"old"`
39 New string `json:"new"`
40 }{Old: "src/deleted.go", New: ""},
41 IsDelete: true,
42 },
43 expected: "src/deleted.go",
44 },
45 {
46 name: "renamed file uses new name",
47 diff: Diff{
48 Name: struct {
49 Old string `json:"old"`
50 New string `json:"new"`
51 }{Old: "src/old.go", New: "src/renamed.go"},
52 IsRename: true,
53 },
54 expected: "src/renamed.go",
55 },
56 }
57
58 for _, tt := range tests {
59 t.Run(tt.name, func(t *testing.T) {
60 if got := tt.diff.Id(); got != tt.expected {
61 t.Errorf("Diff.Id() = %q, want %q", got, tt.expected)
62 }
63 })
64 }
65}
66
67func TestChangedFilesMatchesDiffId(t *testing.T) {
68 // ChangedFiles() must return values matching each Diff's Id()
69 // so that sidebar links point to the correct anchors.
70 // Tests existing, deleted, new, and renamed files.
71 nd := NiceDiff{
72 Diff: []Diff{
73 {
74 Name: struct {
75 Old string `json:"old"`
76 New string `json:"new"`
77 }{Old: "", New: "src/modified.go"},
78 },
79 {
80 Name: struct {
81 Old string `json:"old"`
82 New string `json:"new"`
83 }{Old: "src/deleted.go", New: ""},
84 IsDelete: true,
85 },
86 {
87 Name: struct {
88 Old string `json:"old"`
89 New string `json:"new"`
90 }{Old: "", New: "src/new.go"},
91 IsNew: true,
92 },
93 {
94 Name: struct {
95 Old string `json:"old"`
96 New string `json:"new"`
97 }{Old: "src/old.go", New: "src/renamed.go"},
98 IsRename: true,
99 },
100 },
101 }
102
103 changedFiles := nd.ChangedFiles()
104
105 if len(changedFiles) != len(nd.Diff) {
106 t.Fatalf("ChangedFiles() returned %d items, want %d", len(changedFiles), len(nd.Diff))
107 }
108
109 for i, diff := range nd.Diff {
110 if changedFiles[i].Id() != diff.Id() {
111 t.Errorf("ChangedFiles()[%d] = %q, but Diff.Id() = %q", i, changedFiles[i], diff.Id())
112 }
113 }
114}
115
116func TestImplsInterfaces(t *testing.T) {
117 nd := NiceDiff{}
118 _ = isDiffsRenderer(nd)
119}
120
121func isDiffsRenderer[S DiffRenderer](S) bool { return true }