| @@ -173,7 +173,7 @@ struct FeedReleaseDestinationTests { |
| 173 | @MainActor |
173 | @MainActor |
| 174 | struct ReleaseSummaryTests { |
174 | struct ReleaseSummaryTests { |
| 175 | |
175 | |
| 176 | @Test func summarizingAppendsOneLinePerMergeRequestAfterWhatWasTyped() async throws { |
176 | @Test func theSummaryIsOneLinePerMergeRequestAppendedAfterWhatWasTyped() async throws { |
| 177 | let (client, stub) = try makeClient() |
177 | let (client, stub) = try makeClient() |
| 178 | stub.enqueue(.init(status: 200, json: """ |
178 | stub.enqueue(.init(status: 200, json: """ |
| 179 | {"protocol_version":1,"data":{"since":"v1.0.0","items":[\ |
179 | {"protocol_version":1,"data":{"since":"v1.0.0","items":[\ |
| @@ -182,32 +182,30 @@ struct ReleaseSummaryTests { |
| 182 | """)) |
182 | """)) |
| 183 | let model = ReleaseListViewModel(client: client, repoPath: "krz/gitbay") |
183 | let model = ReleaseListViewModel(client: client, repoPath: "krz/gitbay") |
| 184 | |
184 | |
| 185 | let notes = await model.summarize(tag: "v1.1.0", into: "Second cut.") |
185 | let lines = try #require(await model.summary(tag: "v1.1.0")) |
| 186 | |
186 | |
| 187 | #expect(notes == "Second cut.\n\n- Add a thing (!12) by @cmc\n- Fix it (!14) by @dee\n") |
187 | #expect(ReleaseListViewModel.appending(lines, to: "Second cut.\n") |
| |
188 | == "Second cut.\n\n- Add a thing (!12) by @cmc\n- Fix it (!14) by @dee\n") |
| |
189 | #expect(ReleaseListViewModel.appending(lines, to: " ") == lines) |
| 188 | #expect(stub.seen.first?.url.query() == "argv=release&argv=notes&argv=krz/gitbay&argv=v1.1.0") |
190 | #expect(stub.seen.first?.url.query() == "argv=release&argv=notes&argv=krz/gitbay&argv=v1.1.0") |
| 189 | #expect(model.summaryNote == nil) |
191 | #expect(model.summaryNote == nil) |
| 190 | } |
192 | } |
| 191 | |
193 | |
| 192 | @Test func anEmptyRangeLeavesTheNotesAndSaysWhy() async throws { |
194 | @Test func anEmptyRangeGivesNoLinesAndSaysWhy() async throws { |
| 193 | let (client, stub) = try makeClient() |
195 | let (client, stub) = try makeClient() |
| 194 | stub.enqueue(.init(status: 200, json: #"{"protocol_version":1,"data":{"since":"v1.0.0","items":[]},"exit_code":0}"#)) |
196 | stub.enqueue(.init(status: 200, json: #"{"protocol_version":1,"data":{"since":"v1.0.0","items":[]},"exit_code":0}"#)) |
| 195 | let model = ReleaseListViewModel(client: client, repoPath: "krz/gitbay") |
197 | let model = ReleaseListViewModel(client: client, repoPath: "krz/gitbay") |
| 196 | |
198 | |
| 197 | let notes = await model.summarize(tag: "v1.1.0", into: "typed") |
199 | #expect(await model.summary(tag: "v1.1.0") == nil) |
| 198 | |
| |
| 199 | #expect(notes == "typed") |
| |
| 200 | #expect(model.summaryNote == "No merge requests landed since v1.0.0.") |
200 | #expect(model.summaryNote == "No merge requests landed since v1.0.0.") |
| 201 | } |
201 | } |
| 202 | |
202 | |
| 203 | @Test func aRefusalLeavesTheNotesAndShowsIt() async throws { |
203 | @Test func aRefusalGivesNoLinesAndShowsIt() async throws { |
| 204 | let (client, stub) = try makeClient() |
204 | let (client, stub) = try makeClient() |
| 205 | stub.enqueue(.init(status: 404, json: #"{"protocol_version":1,"error":"no ref \"v9\" in krz/gitbay","exit_code":3}"#)) |
205 | stub.enqueue(.init(status: 404, json: #"{"protocol_version":1,"error":"no ref \"v9\" in krz/gitbay","exit_code":3}"#)) |
| 206 | let model = ReleaseListViewModel(client: client, repoPath: "krz/gitbay") |
206 | let model = ReleaseListViewModel(client: client, repoPath: "krz/gitbay") |
| 207 | |
207 | |
| 208 | let notes = await model.summarize(tag: "v9", into: "") |
208 | #expect(await model.summary(tag: "v9") == nil) |
| 209 | |
| |
| 210 | #expect(notes == "") |
| |
| 211 | #expect(model.summaryNote == #"no ref "v9" in krz/gitbay"#) |
209 | #expect(model.summaryNote == #"no ref "v9" in krz/gitbay"#) |
| 212 | } |
210 | } |
| 213 | } |
211 | } |