]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-17037 Redirect after maintenance page doesn't work when running with a context
authorWouter Admiraal <wouter.admiraal@sonarsource.com>
Fri, 15 Jul 2022 10:17:01 +0000 (12:17 +0200)
committersonartech <sonartech@sonarsource.com>
Mon, 18 Jul 2022 20:03:26 +0000 (20:03 +0000)
server/sonar-web/src/main/js/app/components/MigrationContainer.tsx
server/sonar-web/src/main/js/app/components/__tests__/MigrationContainer-test.tsx [new file with mode: 0644]
server/sonar-web/src/main/js/app/components/__tests__/__snapshots__/MigrationContainer-test.tsx.snap [new file with mode: 0644]

index c11a011ad709cc5e9e04622d7a8fc30ef716fcb7..d846dd577bc129ac94ff0a2b50c4fd9d94a033f4 100644 (file)
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 import * as React from 'react';
-import { Navigate, Outlet, useLocation } from 'react-router-dom';
+import { Navigate, Outlet } from 'react-router-dom';
 import { getSystemStatus } from '../../helpers/system';
 
 export function MigrationContainer() {
-  const location = useLocation();
-
   if (getSystemStatus() !== 'UP') {
+    const returnTo = window.location.pathname + window.location.search + window.location.hash;
     const to = {
       pathname: '/maintenance',
       search: new URLSearchParams({
-        return_to: location.pathname + location.search + location.hash
+        return_to: returnTo
       }).toString()
     };
 
diff --git a/server/sonar-web/src/main/js/app/components/__tests__/MigrationContainer-test.tsx b/server/sonar-web/src/main/js/app/components/__tests__/MigrationContainer-test.tsx
new file mode 100644 (file)
index 0000000..b32306c
--- /dev/null
@@ -0,0 +1,63 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2022 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+
+import { shallow } from 'enzyme';
+import * as React from 'react';
+import { getSystemStatus } from '../../../helpers/system';
+import MigrationContainer from '../MigrationContainer';
+
+jest.mock('../../../helpers/system', () => ({
+  getSystemStatus: jest.fn()
+}));
+
+const originalLocation = window.location;
+
+beforeAll(() => {
+  const location = {
+    pathname: '/projects',
+    search: '?query=toto',
+    hash: '#hash'
+  };
+  Object.defineProperty(window, 'location', {
+    writable: true,
+    value: location
+  });
+});
+
+afterAll(() => {
+  Object.defineProperty(window, 'location', {
+    writable: true,
+    value: originalLocation
+  });
+});
+
+it('should render correctly if system is up', () => {
+  (getSystemStatus as jest.Mock).mockReturnValueOnce('UP');
+  expect(shallowRender()).toMatchSnapshot();
+});
+
+it('should render correctly if system is starting', () => {
+  (getSystemStatus as jest.Mock).mockReturnValueOnce('STARTING');
+  expect(shallowRender()).toMatchSnapshot();
+});
+
+function shallowRender() {
+  return shallow(<MigrationContainer />);
+}
diff --git a/server/sonar-web/src/main/js/app/components/__tests__/__snapshots__/MigrationContainer-test.tsx.snap b/server/sonar-web/src/main/js/app/components/__tests__/__snapshots__/MigrationContainer-test.tsx.snap
new file mode 100644 (file)
index 0000000..4a4b890
--- /dev/null
@@ -0,0 +1,14 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should render correctly if system is starting 1`] = `
+<Navigate
+  to={
+    Object {
+      "pathname": "/maintenance",
+      "search": "return_to=%2Fprojects%3Fquery%3Dtoto%23hash",
+    }
+  }
+/>
+`;
+
+exports[`should render correctly if system is up 1`] = `<Outlet />`;