From 9b254b4a8d4d3fb1484891a4785b6e3fdc20c75c Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Tue, 16 Mar 2021 09:11:19 +0100 Subject: [PATCH] Fix diff for mercurial and subversion (#1588) The useDiff hook appends the query param for the limit always with a question mark, even if the link has already query parameters. Now we check if the url has an question mark and then we use an ampersand instead if the question mark to append the limit. --- gradle/changelog/fix_diff_for_hg_and_svn.yaml | 2 ++ scm-ui/ui-api/src/diff.test.ts | 12 ++++++++++++ scm-ui/ui-api/src/diff.ts | 7 ++++--- 3 files changed, 18 insertions(+), 3 deletions(-) create mode 100644 gradle/changelog/fix_diff_for_hg_and_svn.yaml diff --git a/gradle/changelog/fix_diff_for_hg_and_svn.yaml b/gradle/changelog/fix_diff_for_hg_and_svn.yaml new file mode 100644 index 0000000000..dfe71304df --- /dev/null +++ b/gradle/changelog/fix_diff_for_hg_and_svn.yaml @@ -0,0 +1,2 @@ +- type: fixed + description: Diff for mercurial and subversion ([#1588](https://github.com/scm-manager/scm-manager/issues/1588) and [#1587](https://github.com/scm-manager/scm-manager/issues/1587)) diff --git a/scm-ui/ui-api/src/diff.test.ts b/scm-ui/ui-api/src/diff.test.ts index ecdc316eb3..fb81058441 100644 --- a/scm-ui/ui-api/src/diff.test.ts +++ b/scm-ui/ui-api/src/diff.test.ts @@ -222,4 +222,16 @@ describe("Test diff", () => { expect(result.current.data).toEqual({ ...partialDiff2, files: [partialDiff1.files[0], partialDiff2.files[0]] }); }); + + it("should append query parameters to url which has already query params", async () => { + fetchMock.getOnce("/api/v2/diff?format=GIT&limit=25", { + body: simpleDiff, + headers: { "Content-Type": "application/vnd.scmm-diffparsed+json;v=2" } + }); + const { result, waitFor } = renderHook(() => useDiff("/diff?format=GIT", { limit: 25 }), { + wrapper: createWrapper() + }); + await waitFor(() => !!result.current.data); + expect(result.current.data).toEqual(simpleDiff); + }); }); diff --git a/scm-ui/ui-api/src/diff.ts b/scm-ui/ui-api/src/diff.ts index 3d3b9b2de6..0e6b3c8f00 100644 --- a/scm-ui/ui-api/src/diff.ts +++ b/scm-ui/ui-api/src/diff.ts @@ -35,7 +35,8 @@ type UseDiffOptions = { export const useDiff = (link: string, options: UseDiffOptions = {}) => { let initialLink = link; if (options.limit) { - initialLink = `${initialLink}?limit=${options.limit}`; + const separator = initialLink.includes("?") ? "&" : "?"; + initialLink = `${initialLink}${separator}limit=${options.limit}`; } const { isLoading, error, data, isFetchingNextPage, fetchNextPage } = useInfiniteQuery( ["link", link], @@ -48,9 +49,9 @@ export const useDiff = (link: string, options: UseDiffOptions = {}) => { return response .text() .then(parser.parse) - .then(data => { + .then(parsedGit => { return { - files: data, + files: parsedGit, partial: false, _links: {} };