]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-10044 fix projects permalink redirection
authorStas Vilchik <stas.vilchik@sonarsource.com>
Fri, 3 Nov 2017 14:12:29 +0000 (15:12 +0100)
committerStas Vilchik <stas.vilchik@sonarsource.com>
Mon, 6 Nov 2017 07:55:48 +0000 (08:55 +0100)
server/sonar-web/src/main/js/apps/projects/components/AllProjects.tsx
tests/src/test/java/org/sonarqube/pageobjects/Navigation.java
tests/src/test/java/org/sonarqube/tests/projectSearch/ProjectsPageTest.java

index 65bdfac3f43018817aae9190474fbffd649e7391..cd5f60bd1eb1cd3592974e40f97759e7db57a46b 100644 (file)
@@ -71,7 +71,9 @@ export default class AllProjects extends React.PureComponent<Props, State> {
     }
     this.handleQueryChange(true);
     const footer = document.getElementById('footer');
-    footer && footer.classList.add('page-footer-with-sidebar');
+    if (footer) {
+      footer.classList.add('page-footer-with-sidebar');
+    }
   }
 
   componentDidUpdate(prevProps: Props) {
@@ -83,7 +85,9 @@ export default class AllProjects extends React.PureComponent<Props, State> {
   componentWillUnmount() {
     this.mounted = false;
     const footer = document.getElementById('footer');
-    footer && footer.classList.remove('page-footer-with-sidebar');
+    if (footer) {
+      footer.classList.remove('page-footer-with-sidebar');
+    }
   }
 
   getView = () => this.state.query.view || 'overall';
@@ -92,7 +96,8 @@ export default class AllProjects extends React.PureComponent<Props, State> {
 
   getSort = () => this.state.query.sort || 'name';
 
-  isFiltered = () => Object.values(this.state.query).some(value => value !== undefined);
+  isFiltered = (query = this.state.query) =>
+    Object.values(query).some(value => value !== undefined);
 
   stopLoading = () => {
     if (this.mounted) {
@@ -197,7 +202,7 @@ export default class AllProjects extends React.PureComponent<Props, State> {
     const savedOptionsSet = savedOptions.sort || savedOptions.view || savedOptions.visualization;
 
     // if there is no filter, but there are saved preferences in the localStorage
-    if (initialMount && !this.isFiltered() && savedOptionsSet) {
+    if (initialMount && !this.isFiltered(query) && savedOptionsSet) {
       this.context.router.replace({ pathname: this.props.location.pathname, query: savedOptions });
     } else {
       this.fetchProjects(query);
index 72d0d27705c544e86ebe3064b7932f1960364bb8..8dbe70f84f4985e7bc09d11d9526b7b6f3199c27 100644 (file)
@@ -84,6 +84,10 @@ public class Navigation {
     return open("/organizations/" + organization + "/projects", ProjectsPage.class);
   }
 
+  public ProjectsPage openProjectsWithQuery(String query) {
+    return open("/projects?" + query, ProjectsPage.class);
+  }
+
   public IssuesPage openIssues() {
     return open("/issues", IssuesPage.class);
   }
index c14cc18e9fc71fa74bf52ec93aec844af421ffbd..cdd2e9b97d2139c2f7020ccb9a49b2a17f5c4078 100644 (file)
@@ -200,4 +200,20 @@ public class ProjectsPageTest {
     page.shouldHaveTotal(1);
     page.searchProject("sample").shouldHaveTotal(0);
   }
+
+  @Test
+  public void should_open_permalink() {
+    String user = tester.users().generate().getLogin();
+    Navigation nav = tester.openBrowser().logIn().submitCredentials(user);
+
+    // make a search, so its parameters saved to local storage
+    nav.openProjects().changePerspective("Leak");
+
+    // change a page
+    nav.openHome();
+
+    // open a permalink to a particular visualization, it must be kept
+    nav.openProjectsWithQuery("view=visualizations&visualization=coverage");
+    assertThat(url()).contains("view=visualizations&visualization=coverage");
+  }
 }