changelog generator & diff tool
stormlightlabs.github.io/git-storm/
changelog
changeset
markdown
golang
git
1package main
2
3import (
4 "os"
5 "path/filepath"
6 "testing"
7
8 "github.com/stormlightlabs/git-storm/internal/changeset"
9 "github.com/stormlightlabs/git-storm/internal/testutils"
10)
11
12func TestUnreleasedReviewWorkflow_Delete(t *testing.T) {
13 tmpDir := t.TempDir()
14 changesDir := filepath.Join(tmpDir, ".changes")
15
16 entry1 := changeset.Entry{
17 Type: "added",
18 Scope: "test",
19 Summary: "Entry to keep",
20 }
21 entry2 := changeset.Entry{
22 Type: "fixed",
23 Scope: "test",
24 Summary: "Entry to delete",
25 }
26
27 filePath1, err := changeset.Write(changesDir, entry1)
28 if err != nil {
29 t.Fatalf("Failed to create entry1: %v", err)
30 }
31 filePath2, err := changeset.Write(changesDir, entry2)
32 if err != nil {
33 t.Fatalf("Failed to create entry2: %v", err)
34 }
35
36 filename2 := filepath.Base(filePath2)
37
38 err = changeset.Delete(changesDir, filename2)
39 if err != nil {
40 t.Fatalf("Delete action failed: %v", err)
41 }
42
43 if _, err := os.Stat(filePath1); os.IsNotExist(err) {
44 t.Error("Entry1 should still exist")
45 }
46
47 if _, err := os.Stat(filePath2); !os.IsNotExist(err) {
48 t.Error("Entry2 should have been deleted")
49 }
50
51 entries, err := changeset.List(changesDir)
52 if err != nil {
53 t.Fatalf("Failed to list entries: %v", err)
54 }
55
56 testutils.Expect.Equal(t, len(entries), 1, "Should have 1 entry remaining")
57 testutils.Expect.Equal(t, entries[0].Entry.Summary, "Entry to keep")
58}
59
60func TestUnreleasedReviewWorkflow_Edit(t *testing.T) {
61 tmpDir := t.TempDir()
62 changesDir := filepath.Join(tmpDir, ".changes")
63
64 originalEntry := changeset.Entry{
65 Type: "added",
66 Scope: "cli",
67 Summary: "Original summary",
68 Breaking: false,
69 CommitHash: "abc123",
70 }
71
72 filePath, err := changeset.Write(changesDir, originalEntry)
73 if err != nil {
74 t.Fatalf("Failed to create entry: %v", err)
75 }
76
77 filename := filepath.Base(filePath)
78
79 editedEntry := changeset.Entry{
80 Type: "changed",
81 Scope: "api",
82 Summary: "Updated summary",
83 Breaking: true,
84 CommitHash: "abc123",
85 }
86
87 err = changeset.Update(changesDir, filename, editedEntry)
88 if err != nil {
89 t.Fatalf("Update action failed: %v", err)
90 }
91
92 entries, err := changeset.List(changesDir)
93 if err != nil {
94 t.Fatalf("Failed to list entries: %v", err)
95 }
96
97 testutils.Expect.Equal(t, len(entries), 1, "Should still have 1 entry")
98 testutils.Expect.Equal(t, entries[0].Entry.Type, "changed", "Type should be updated")
99 testutils.Expect.Equal(t, entries[0].Entry.Scope, "api", "Scope should be updated")
100 testutils.Expect.Equal(t, entries[0].Entry.Summary, "Updated summary", "Summary should be updated")
101 testutils.Expect.Equal(t, entries[0].Entry.Breaking, true, "Breaking should be updated")
102 testutils.Expect.Equal(t, entries[0].Entry.CommitHash, "abc123", "CommitHash should be preserved")
103}
104
105func TestUnreleasedReviewWorkflow_DeleteAndEdit(t *testing.T) {
106 tmpDir := t.TempDir()
107 changesDir := filepath.Join(tmpDir, ".changes")
108
109 entry1 := changeset.Entry{
110 Type: "added",
111 Summary: "Entry to delete",
112 }
113 entry2 := changeset.Entry{
114 Type: "fixed",
115 Summary: "Entry to edit",
116 }
117 entry3 := changeset.Entry{
118 Type: "changed",
119 Summary: "Entry to keep",
120 }
121
122 filePath1, err := changeset.Write(changesDir, entry1)
123 if err != nil {
124 t.Fatalf("Failed to create entry1: %v", err)
125 }
126 filePath2, err := changeset.Write(changesDir, entry2)
127 if err != nil {
128 t.Fatalf("Failed to create entry2: %v", err)
129 }
130 _, err = changeset.Write(changesDir, entry3)
131 if err != nil {
132 t.Fatalf("Failed to create entry3: %v", err)
133 }
134
135 filename1 := filepath.Base(filePath1)
136 filename2 := filepath.Base(filePath2)
137
138 err = changeset.Delete(changesDir, filename1)
139 if err != nil {
140 t.Fatalf("Delete action failed: %v", err)
141 }
142
143 editedEntry := changeset.Entry{
144 Type: "security",
145 Scope: "auth",
146 Summary: "Updated security fix",
147 }
148 err = changeset.Update(changesDir, filename2, editedEntry)
149 if err != nil {
150 t.Fatalf("Update action failed: %v", err)
151 }
152
153 entries, err := changeset.List(changesDir)
154 if err != nil {
155 t.Fatalf("Failed to list entries: %v", err)
156 }
157
158 testutils.Expect.Equal(t, len(entries), 2, "Should have 2 entries remaining")
159
160 var found bool
161 for _, e := range entries {
162 if e.Entry.Type == "security" {
163 testutils.Expect.Equal(t, e.Entry.Scope, "auth")
164 testutils.Expect.Equal(t, e.Entry.Summary, "Updated security fix")
165 found = true
166 }
167 }
168
169 if !found {
170 t.Error("Edited entry not found in results")
171 }
172
173 if _, err := os.Stat(filePath1); !os.IsNotExist(err) {
174 t.Error("Deleted entry should not exist")
175 }
176}
177
178func TestUnreleasedReviewWorkflow_EmptyChanges(t *testing.T) {
179 tmpDir := t.TempDir()
180 changesDir := filepath.Join(tmpDir, ".changes")
181
182 if err := os.MkdirAll(changesDir, 0755); err != nil {
183 t.Fatalf("Failed to create directory: %v", err)
184 }
185
186 entries, err := changeset.List(changesDir)
187 if err != nil {
188 t.Fatalf("List should not error on empty directory: %v", err)
189 }
190
191 testutils.Expect.Equal(t, len(entries), 0, "Should have no entries")
192}