| ... | ... | @@ -212,3 +212,69 @@ describe("rewriting what has already been said", () => { |
| 212 | 212 | }), |
| 213 | 213 | ); |
| 214 | 214 | }); |
| 215 | |
| 216 | describe("expanding unchanged lines", () => { |
| 217 | const change = { |
| 218 | cwd: "/w", |
| 219 | repository: "acme/web", |
| 220 | host: "gitlab.com", |
| 221 | number: 7, |
| 222 | changeType: "change" as const, |
| 223 | oldPath: "src/page.ts", |
| 224 | newPath: "src/page.ts", |
| 225 | }; |
| 226 | |
| 227 | it.effect("reads both sides of a file through the merge request or one of its commits", () => |
| 228 | Effect.gen(function* () { |
| 229 | const getMergeRequestDiffFileContents = vi.fn(() => |
| 230 | Effect.succeed({ oldContents: "before\n", newContents: "after\n" }), |
| 231 | ); |
| 232 | const provider = yield* make.pipe( |
| 233 | Effect.provide( |
| 234 | Layer.mock(GitLabPullRequestCli.GitLabPullRequestCli)({ |
| 235 | getMergeRequestDiffFileContents, |
| 236 | }), |
| 237 | ), |
| 238 | ); |
| 239 | assert.isDefined(provider.getDiffFileContents); |
| 240 | const oneCommit = { ...change, commit: "a1b2c3d" }; |
| 241 | |
| 242 | expect(yield* provider.getDiffFileContents(change)).toEqual({ |
| 243 | oldContents: "before\n", |
| 244 | newContents: "after\n", |
| 245 | }); |
| 246 | yield* provider.getDiffFileContents(oneCommit); |
| 247 | expect(getMergeRequestDiffFileContents).toHaveBeenNthCalledWith(1, change); |
| 248 | expect(getMergeRequestDiffFileContents).toHaveBeenNthCalledWith(2, oneCommit); |
| 249 | }), |
| 250 | ); |
| 251 | |
| 252 | it.effect("reports a file GitLab cannot expand as a failed read", () => |
| 253 | Effect.gen(function* () { |
| 254 | const provider = yield* make.pipe( |
| 255 | Effect.provide( |
| 256 | Layer.mock(GitLabPullRequestCli.GitLabPullRequestCli)({ |
| 257 | getMergeRequestDiffFileContents: () => |
| 258 | Effect.fail( |
| 259 | new GitLabPullRequestCli.GitLabDiffFileContentsUnavailableError({ |
| 260 | command: "glab", |
| 261 | cwd: "/w", |
| 262 | path: "assets/logo.png", |
| 263 | reason: "binary", |
| 264 | }), |
| 265 | ), |
| 266 | }), |
| 267 | ), |
| 268 | ); |
| 269 | assert.isDefined(provider.getDiffFileContents); |
| 270 | |
| 271 | expect(yield* Effect.flip(provider.getDiffFileContents(change))).toMatchObject({ |
| 272 | _tag: "PullRequestProviderError", |
| 273 | provider: "gitlab", |
| 274 | operation: "getDiffFileContents", |
| 275 | reason: "failed", |
| 276 | detail: "The diff file 'assets/logo.png' is binary.", |
| 277 | }); |
| 278 | }), |
| 279 | ); |
| 280 | }); |