changelog generator & diff tool stormlightlabs.github.io/git-storm/
changelog changeset markdown golang git
at main 5.0 kB view raw
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}