]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-3755 Add parameter to IssueFinder to know if there were security exclusions
authorJulien Lancelot <julien.lancelot@gmail.com>
Wed, 24 Apr 2013 13:48:23 +0000 (15:48 +0200)
committerJulien Lancelot <julien.lancelot@gmail.com>
Wed, 24 Apr 2013 13:48:23 +0000 (15:48 +0200)
sonar-plugin-api/src/main/java/org/sonar/api/issue/IssueFinder.java
sonar-server/src/main/java/org/sonar/server/issue/ServerIssueFinder.java
sonar-server/src/main/webapp/WEB-INF/app/controllers/api/issues_controller.rb
sonar-server/src/test/java/org/sonar/server/issue/ServerIssueFinderTest.java
sonar-ws-client/src/main/java/org/sonar/wsclient/issue/IssueParser.java
sonar-ws-client/src/main/java/org/sonar/wsclient/issue/Issues.java
sonar-ws-client/src/test/java/org/sonar/wsclient/issue/IssueParserTest.java
sonar-ws-client/src/test/resources/org/sonar/wsclient/issue/IssueParserTest/search.json

index 59257860eaf2871a8fddff399c19eaf85922cda4..d82d43c00114aa78a53b748461a371e34241affe 100644 (file)
@@ -49,6 +49,8 @@ public interface IssueFinder extends ServerComponent {
     Collection<Component> components();
 
     Paging paging();
+
+    boolean securityExclusions();
   }
 
   Results find(IssueQuery query, @Nullable Integer currentUserId, String role);
index c57ce7ffb970ff3ce931f563e27e9a4b2d9dd788..e0fbe4b036223f02932ba57ed043449bdd54f9ba 100644 (file)
@@ -89,7 +89,7 @@ public class ServerIssueFinder implements IssueFinder {
         }
       }
 
-      return new DefaultResults(issues, getRulesByIssue(issues, ruleIds), getComponentsByIssue(issues, componentIds), paging);
+      return new DefaultResults(issues, getRulesByIssue(issues, ruleIds), getComponentsByIssue(issues, componentIds), paging, authorizedIssues.size() != allIssuesDto.size());
     } finally {
       MyBatis.closeQuietly(sqlSession);
     }
@@ -172,12 +172,14 @@ public class ServerIssueFinder implements IssueFinder {
     private final Paging paging;
     private final Map<Issue, Rule> rulesByIssue;
     private final Map<Issue, Component> componentsByIssue;
+    private final boolean securityExclusions;
 
-    DefaultResults(List<Issue> issues, Map<Issue, Rule> rulesByIssue, Map<Issue, Component> componentsByIssue, Paging paging) {
+    DefaultResults(List<Issue> issues, Map<Issue, Rule> rulesByIssue, Map<Issue, Component> componentsByIssue, Paging paging, boolean securityExclusions) {
       this.issues = issues;
       this.rulesByIssue = rulesByIssue;
       this.componentsByIssue = componentsByIssue;
       this.paging = paging;
+      this.securityExclusions = securityExclusions;
     }
 
     @Override
@@ -201,6 +203,10 @@ public class ServerIssueFinder implements IssueFinder {
       return componentsByIssue.values();
     }
 
+    public boolean securityExclusions() {
+      return securityExclusions;
+    }
+
     public Paging paging() {
       return paging;
     }
index 010ce384b9202039901badab400df55274142003..d5350a804f14f3b5181038c5eb29062cb85e68ba 100644 (file)
@@ -51,6 +51,7 @@ class Api::IssuesController < Api::ApiController
     json = {}
     json[:issues] = results.issues.map { |issue| issue_to_json(issue) }
     json[:paging] = pagination_to_json(results.paging)
+    json[:securityExclusions] = results.securityExclusions
     json
   end
 
index b82e21562ac004502ff7bb50cc5d9ad26ad00471..03524777c6a0bdc7f171c38768116b24ece6f91e 100644 (file)
@@ -92,6 +92,7 @@ public class ServerIssueFinderTest {
     Issue issue = results.issues().iterator().next();
     assertThat(issue.componentKey()).isEqualTo("Action.java");
     assertThat(issue.ruleKey().toString()).isEqualTo("squid:AvoidCycle");
+    assertThat(results.securityExclusions()).isFalse();
   }
 
   @Test
@@ -110,9 +111,10 @@ public class ServerIssueFinderTest {
     when(authorizationDao.keepAuthorizedComponentIds(anySet(), anyInt(), anyString(), any(SqlSession.class))).thenReturn(newHashSet(123));
     when(issueDao.selectByIds(anyCollection(), any(SqlSession.class))).thenReturn(newArrayList(issue1));
 
-    finder.find(issueQuery, null, UserRole.USER);
+    IssueFinder.Results results = finder.find(issueQuery, null, UserRole.USER);
 
     verify(issueDao).selectByIds(eq(newHashSet(1L)), any(SqlSession.class));
+    assertThat(results.securityExclusions()).isTrue();
   }
 
   @Test
index af538b4b27784e7fbdc24e276248a384d6bdb49b..ef76e3630a692246513e012820531441f3cb180e 100644 (file)
@@ -20,6 +20,7 @@
 package org.sonar.wsclient.issue;
 
 import org.json.simple.JSONValue;
+import org.sonar.wsclient.unmarshallers.JsonUtils;
 
 import java.util.List;
 import java.util.Map;
@@ -34,6 +35,8 @@ class IssueParser {
     }
     Map paging = (Map) jRoot.get("paging");
     result.setPaging(new Paging(paging));
+
+    result.setSecurityExclusions(JsonUtils.getBoolean(jRoot, "securityExclusions"));
     return result;
   }
 }
index e4663e8ea245aa5621400cefc540851919726103..7f9c655aa6bb851bf2c940d31f56b05196957f49 100644 (file)
@@ -29,6 +29,7 @@ public class Issues {
 
   private final List<Issue> list = new ArrayList<Issue>();
   private Paging paging;
+  private Boolean securityExclusions;
 
   Issues add(Issue issue) {
     list.add(issue);
@@ -38,12 +39,21 @@ public class Issues {
     return list;
   }
 
-  void setPaging(Paging paging) {
+  Issues setPaging(Paging paging) {
     this.paging = paging;
+    return this;
   }
 
   public Paging paging(){
     return paging;
   }
 
+  public Boolean securityExclusions() {
+    return securityExclusions;
+  }
+
+  Issues setSecurityExclusions(Boolean securityExclusions) {
+    this.securityExclusions = securityExclusions;
+    return this;
+  }
 }
index 003bd527a60035eb95b098393be703a87b6da1e3..363e08ec08fac877af0fac8bfd9bb3ab80b53f54 100644 (file)
@@ -60,5 +60,15 @@ public class IssueParserTest {
     assertThat(second.description()).isNull();
     assertThat(second.attribute("JIRA")).isNull();
     assertThat(second.attributes()).isEmpty();
+
+    assertThat(issues.paging()).isNotNull();
+    Paging paging = issues.paging();
+    assertThat(paging.pageIndex()).isEqualTo(1);
+    assertThat(paging.pageSize()).isEqualTo(100);
+    assertThat(paging.pages()).isEqualTo(1);
+    assertThat(paging.total()).isEqualTo(2);
+
+    assertThat(issues.securityExclusions()).isTrue();
   }
+
 }
index d253a8642ef20b4fe009d254ce67a81cba80cab0..14b1a6a402d03ea0ce227eb91bdf71263e8c52d0 100644 (file)
       "status": "OPEN"
     }
   ],
-  "pagination":
+  "paging":
     {
-      "page": 1,
-      "limit": 100,
-      "size": 2,
+      "pageIndex": 1,
+      "pageSize": 100,
+      "total": 2,
       "pages": 1
-    }
+    },
+  "securityExclusions": true
 }
\ No newline at end of file