]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-3755 Use a single method to return action plan stats
authorJulien Lancelot <julien.lancelot@gmail.com>
Mon, 13 May 2013 12:43:36 +0000 (14:43 +0200)
committerJulien Lancelot <julien.lancelot@gmail.com>
Mon, 13 May 2013 12:43:36 +0000 (14:43 +0200)
14 files changed:
sonar-core/src/main/java/org/sonar/core/issue/ActionPlanStats.java
sonar-core/src/main/java/org/sonar/core/issue/db/ActionPlanStatsDao.java
sonar-core/src/main/java/org/sonar/core/issue/db/ActionPlanStatsDto.java
sonar-core/src/main/java/org/sonar/core/issue/db/ActionPlanStatsMapper.java
sonar-core/src/main/resources/org/sonar/core/issue/db/ActionPlanStatsMapper.xml
sonar-core/src/test/java/org/sonar/core/issue/db/ActionPlanStatsDaoTest.java
sonar-core/src/test/resources/org/sonar/core/issue/db/ActionPlanStatsDaoTest/should_find_by_project.xml [new file with mode: 0644]
sonar-core/src/test/resources/org/sonar/core/issue/db/ActionPlanStatsDaoTest/should_find_closed_by_project.xml [deleted file]
sonar-core/src/test/resources/org/sonar/core/issue/db/ActionPlanStatsDaoTest/should_find_open_by_project.xml [deleted file]
sonar-server/src/main/java/org/sonar/server/issue/ActionPlanService.java
sonar-server/src/main/java/org/sonar/server/issue/InternalRubyIssueService.java
sonar-server/src/main/webapp/WEB-INF/app/controllers/api/issues_controller.rb
sonar-server/src/main/webapp/WEB-INF/app/controllers/issues_action_plans_controller.rb
sonar-server/src/test/java/org/sonar/server/issue/ActionPlanServiceTest.java

index 3e3822623ee82545c5393532f11023ac14198493..ae6a533e8ca7dc5582187c4ab7de3137fe66bac4 100644 (file)
@@ -34,8 +34,8 @@ public class ActionPlanStats implements Serializable {
   private String userLogin;
   private String status;
   private Date deadLine;
-  private Date creationDate;
-  private Date updateDate;
+  private Date createdAt;
+  private Date updatedAt;
   private int totalIssues;
   private int openIssues;
 
@@ -49,7 +49,7 @@ public class ActionPlanStats implements Serializable {
     Date now = new Date();
     actionPlan.setName(name);
     actionPlan.setStatus(ActionPlan.STATUS_OPEN);
-    actionPlan.setCreationDate(now).setUpdateDate(now);
+    actionPlan.setCreatedAt(now).setUpdatedAt(now);
     return actionPlan;
   }
 
@@ -107,21 +107,21 @@ public class ActionPlanStats implements Serializable {
     return this;
   }
 
-  public Date creationDate() {
-    return creationDate;
+  public Date createdAt() {
+    return createdAt;
   }
 
-  public ActionPlanStats setCreationDate(Date creationDate) {
-    this.creationDate = creationDate;
+  public ActionPlanStats setCreatedAt(Date creationDate) {
+    this.createdAt = creationDate;
     return this;
   }
 
-  public Date updateDate() {
-    return updateDate;
+  public Date updatedAt() {
+    return updatedAt;
   }
 
-  public ActionPlanStats setUpdateDate(Date updateDate) {
-    this.updateDate = updateDate;
+  public ActionPlanStats setUpdatedAt(Date updatedAt) {
+    this.updatedAt = updatedAt;
     return this;
   }
 
index a6e5d7fad9f7f703fc3b006021d9f9f8546367a9..443b23f9f8a2177fc9069e6d84313126f2bea13c 100644 (file)
@@ -23,7 +23,6 @@ package org.sonar.core.issue.db;
 import org.apache.ibatis.session.SqlSession;
 import org.sonar.api.BatchComponent;
 import org.sonar.api.ServerComponent;
-import org.sonar.api.issue.ActionPlan;
 import org.sonar.core.persistence.MyBatis;
 
 import java.util.Collection;
@@ -39,21 +38,13 @@ public class ActionPlanStatsDao implements BatchComponent, ServerComponent {
     this.mybatis = mybatis;
   }
 
-  private Collection<ActionPlanStatsDto> findByProjectId(Long projectId, String status, String sort, boolean asc) {
+  public Collection<ActionPlanStatsDto> findByProjectId(Long projectId) {
     SqlSession session = mybatis.openSession();
     try {
-      return session.getMapper(ActionPlanStatsMapper.class).findByProjectId(projectId, status, sort, asc);
+      return session.getMapper(ActionPlanStatsMapper.class).findByProjectId(projectId);
     } finally {
       MyBatis.closeQuietly(session);
     }
   }
 
-  public Collection<ActionPlanStatsDto> findOpenByProjectId(Long projectId) {
-      return findByProjectId(projectId, ActionPlan.STATUS_OPEN, "DEADLINE", true);
-  }
-
-  public Collection<ActionPlanStatsDto> findClosedByProjectId(Long projectId) {
-    return findByProjectId(projectId, ActionPlan.STATUS_CLOSED, "DEADLINE", false);
-  }
-
 }
index 27e301993993e27662685f82b83c5727ab1573f6..e94d76c93cd6249bf07bb24cec747d97cd5dbdc7 100644 (file)
@@ -166,8 +166,8 @@ public class ActionPlanStatsDto {
       .setStatus(status)
       .setDeadLine(deadLine)
       .setUserLogin(userLogin)
-      .setCreationDate(createdAt)
-      .setUpdateDate(updatedAt)
+      .setCreatedAt(createdAt)
+      .setUpdatedAt(updatedAt)
       .setTotalIssues(totalIssues)
       .setOpenIssues(openIssues);
   }
index e1fceaac7fb921c9754b0207b8f92ffae81add41..7fc910f6af4f54d9d720a930122af2a77de3ae96 100644 (file)
@@ -32,5 +32,5 @@ public interface ActionPlanStatsMapper {
   /**
    * @since3.6
    */
-  Collection<ActionPlanStatsDto> findByProjectId(@Param("projectId") Long projectId, @Param("status")String status, @Param("sort")String sort, @Param("asc")boolean asc);
+  Collection<ActionPlanStatsDto> findByProjectId(@Param("projectId") Long projectId);
 }
index dd359fece9b455f9b42e74a0759ecc624a372524..092e4747ddcfbaece6d49286131ea43aad5fec9a 100644 (file)
     left join issues open_issues on open_issues.id = total_issues.id and open_issues.resolution is null
     <where>
       and ap.project_id = #{projectId}
-      and ap.status = #{status}
     </where>
     group by ap.id, ap.kee, ap.name, ap.description, ap.user_login, ap.project_id, ap.status, ap.deadline, ap.created_at, ap.updated_at
-    <if test="sort != null">
-    order by
-    <choose>
-      <when test="'DEADLINE'.equals(sort)">
-        ap.deadline
-      </when>
-    </choose>
-    <choose>
-      <when test="true.equals(asc)">
-        asc
-      </when>
-      <otherwise>
-        desc
-      </otherwise>
-    </choose>
-    </if>
+    order by ap.deadline asc
   </select>
 
 </mapper>
\ No newline at end of file
index 2161ab289042c54d7edc8201acfb272cdf64cf0e..bb5aae2eb57a24a5f352f03e4859f91b47503fae 100644 (file)
@@ -38,22 +38,10 @@ public class ActionPlanStatsDaoTest extends AbstractDaoTestCase {
   }
 
   @Test
-  public void should_find_open_by_project() {
-    setupData("should_find_open_by_project");
+  public void should_find_by_project() {
+    setupData("should_find_by_project");
 
-    Collection<ActionPlanStatsDto> result = dao.findOpenByProjectId(1l);
-    assertThat(result).isNotEmpty();
-
-    ActionPlanStatsDto actionPlanStatsDto = result.iterator().next();
-    assertThat(actionPlanStatsDto.getTotalIssues()).isEqualTo(3);
-    assertThat(actionPlanStatsDto.getOpenIssues()).isEqualTo(1);
-  }
-
-  @Test
-  public void should_find_closed_by_project() {
-    setupData("should_find_closed_by_project");
-
-    Collection<ActionPlanStatsDto> result = dao.findClosedByProjectId(1l);
+    Collection<ActionPlanStatsDto> result = dao.findByProjectId(1l);
     assertThat(result).isNotEmpty();
 
     ActionPlanStatsDto actionPlanStatsDto = result.iterator().next();
diff --git a/sonar-core/src/test/resources/org/sonar/core/issue/db/ActionPlanStatsDaoTest/should_find_by_project.xml b/sonar-core/src/test/resources/org/sonar/core/issue/db/ActionPlanStatsDaoTest/should_find_by_project.xml
new file mode 100644 (file)
index 0000000..6596479
--- /dev/null
@@ -0,0 +1,81 @@
+<dataset>
+
+  <action_plans id="1" kee="ABC" project_id="1" name="SHORT_TERM" description="[null]" deadline="[null]"
+                user_login="igor" status="OPEN" created_at="[null]" updated_at="[null]" />
+
+  <issues
+      id="100"
+      kee="ABCDE"
+      resource_id="400"
+      rule_id="500"
+      severity="BLOCKER"
+      manual_severity="[false]"
+      manual_issue="[false]"
+      description="[null]"
+      line="200"
+      status="OPEN"
+      resolution="[null]"
+      checksum="XXX"
+      user_login="arthur"
+      assignee_login="perceval"
+      author_login="[null]"
+      attributes="JIRA=FOO-1234"
+      action_plan_key="ABC"
+      issue_creation_date="2013-04-16"
+      issue_update_date="2013-04-16"
+      issue_close_date="2013-04-16"
+      created_at="2013-04-16"
+      updated_at="2013-04-16"
+      />
+
+  <issues
+      id="101"
+      kee="ABCDF"
+      resource_id="400"
+      rule_id="500"
+      severity="BLOCKER"
+      manual_severity="[false]"
+      manual_issue="[false]"
+      description="[null]"
+      line="200"
+      status="CLOSED"
+      resolution="FIXED"
+      checksum="XXX"
+      user_login="arthur"
+      assignee_login="perceval"
+      author_login="[null]"
+      attributes="JIRA=FOO-1234"
+      action_plan_key="ABC"
+      issue_creation_date="2013-04-16"
+      issue_update_date="2013-04-16"
+      issue_close_date="2013-04-16"
+      created_at="2013-04-16"
+      updated_at="2013-04-16"
+      />
+
+  <issues
+      id="102"
+      kee="ABCDG"
+      resource_id="400"
+      rule_id="500"
+      severity="BLOCKER"
+      manual_severity="[false]"
+      manual_issue="[false]"
+      description="[null]"
+      line="200"
+      status="CLOSED"
+      resolution="FIXED"
+      checksum="XXX"
+      user_login="arthur"
+      assignee_login="perceval"
+      author_login="[null]"
+      attributes="JIRA=FOO-1234"
+      action_plan_key="ABC"
+      issue_creation_date="2013-04-16"
+      issue_update_date="2013-04-16"
+      issue_close_date="2013-04-16"
+      created_at="2013-04-16"
+      updated_at="2013-04-16"
+      />
+
+</dataset>
diff --git a/sonar-core/src/test/resources/org/sonar/core/issue/db/ActionPlanStatsDaoTest/should_find_closed_by_project.xml b/sonar-core/src/test/resources/org/sonar/core/issue/db/ActionPlanStatsDaoTest/should_find_closed_by_project.xml
deleted file mode 100644 (file)
index ec95313..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-<dataset>
-
-  <action_plans id="1" kee="ABC" project_id="1" name="SHORT_TERM" description="[null]" deadline="[null]"
-                user_login="igor" status="CLOSED" created_at="[null]" updated_at="[null]" />
-
-  <issues
-      id="100"
-      kee="ABCDE"
-      resource_id="400"
-      rule_id="500"
-      severity="BLOCKER"
-      manual_severity="[false]"
-      manual_issue="[false]"
-      description="[null]"
-      line="200"
-      status="OPEN"
-      resolution="[null]"
-      checksum="XXX"
-      user_login="arthur"
-      assignee_login="perceval"
-      author_login="[null]"
-      attributes="JIRA=FOO-1234"
-      action_plan_key="ABC"
-      issue_creation_date="2013-04-16"
-      issue_update_date="2013-04-16"
-      issue_close_date="2013-04-16"
-      created_at="2013-04-16"
-      updated_at="2013-04-16"
-      />
-
-  <issues
-      id="101"
-      kee="ABCDF"
-      resource_id="400"
-      rule_id="500"
-      severity="BLOCKER"
-      manual_severity="[false]"
-      manual_issue="[false]"
-      description="[null]"
-      line="200"
-      status="CLOSED"
-      resolution="FIXED"
-      checksum="XXX"
-      user_login="arthur"
-      assignee_login="perceval"
-      author_login="[null]"
-      attributes="JIRA=FOO-1234"
-      action_plan_key="ABC"
-      issue_creation_date="2013-04-16"
-      issue_update_date="2013-04-16"
-      issue_close_date="2013-04-16"
-      created_at="2013-04-16"
-      updated_at="2013-04-16"
-      />
-
-  <issues
-      id="102"
-      kee="ABCDG"
-      resource_id="400"
-      rule_id="500"
-      severity="BLOCKER"
-      manual_severity="[false]"
-      manual_issue="[false]"
-      description="[null]"
-      line="200"
-      status="CLOSED"
-      resolution="FIXED"
-      checksum="XXX"
-      user_login="arthur"
-      assignee_login="perceval"
-      author_login="[null]"
-      attributes="JIRA=FOO-1234"
-      action_plan_key="ABC"
-      issue_creation_date="2013-04-16"
-      issue_update_date="2013-04-16"
-      issue_close_date="2013-04-16"
-      created_at="2013-04-16"
-      updated_at="2013-04-16"
-      />
-
-</dataset>
diff --git a/sonar-core/src/test/resources/org/sonar/core/issue/db/ActionPlanStatsDaoTest/should_find_open_by_project.xml b/sonar-core/src/test/resources/org/sonar/core/issue/db/ActionPlanStatsDaoTest/should_find_open_by_project.xml
deleted file mode 100644 (file)
index 6596479..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-<dataset>
-
-  <action_plans id="1" kee="ABC" project_id="1" name="SHORT_TERM" description="[null]" deadline="[null]"
-                user_login="igor" status="OPEN" created_at="[null]" updated_at="[null]" />
-
-  <issues
-      id="100"
-      kee="ABCDE"
-      resource_id="400"
-      rule_id="500"
-      severity="BLOCKER"
-      manual_severity="[false]"
-      manual_issue="[false]"
-      description="[null]"
-      line="200"
-      status="OPEN"
-      resolution="[null]"
-      checksum="XXX"
-      user_login="arthur"
-      assignee_login="perceval"
-      author_login="[null]"
-      attributes="JIRA=FOO-1234"
-      action_plan_key="ABC"
-      issue_creation_date="2013-04-16"
-      issue_update_date="2013-04-16"
-      issue_close_date="2013-04-16"
-      created_at="2013-04-16"
-      updated_at="2013-04-16"
-      />
-
-  <issues
-      id="101"
-      kee="ABCDF"
-      resource_id="400"
-      rule_id="500"
-      severity="BLOCKER"
-      manual_severity="[false]"
-      manual_issue="[false]"
-      description="[null]"
-      line="200"
-      status="CLOSED"
-      resolution="FIXED"
-      checksum="XXX"
-      user_login="arthur"
-      assignee_login="perceval"
-      author_login="[null]"
-      attributes="JIRA=FOO-1234"
-      action_plan_key="ABC"
-      issue_creation_date="2013-04-16"
-      issue_update_date="2013-04-16"
-      issue_close_date="2013-04-16"
-      created_at="2013-04-16"
-      updated_at="2013-04-16"
-      />
-
-  <issues
-      id="102"
-      kee="ABCDG"
-      resource_id="400"
-      rule_id="500"
-      severity="BLOCKER"
-      manual_severity="[false]"
-      manual_issue="[false]"
-      description="[null]"
-      line="200"
-      status="CLOSED"
-      resolution="FIXED"
-      checksum="XXX"
-      user_login="arthur"
-      assignee_login="perceval"
-      author_login="[null]"
-      attributes="JIRA=FOO-1234"
-      action_plan_key="ABC"
-      issue_creation_date="2013-04-16"
-      issue_update_date="2013-04-16"
-      issue_close_date="2013-04-16"
-      created_at="2013-04-16"
-      updated_at="2013-04-16"
-      />
-
-</dataset>
index 7b9bf35ac4f9db85a1585f37e5ca809a30ab869a..476312684338c28ed0a3989e6dd8604f3244abc4 100644 (file)
@@ -100,18 +100,8 @@ public class ActionPlanService implements ServerComponent {
     return toActionPlans(actionPlanDtos);
   }
 
-  public List<ActionPlanStats> findOpenActionPlanStats(String projectKey) {
-    Collection<ActionPlanStatsDto> actionPlanStatsDtos = actionPlanStatsDao.findOpenByProjectId(findProject(projectKey).getId());
-    return newArrayList(Iterables.transform(actionPlanStatsDtos, new Function<ActionPlanStatsDto, ActionPlanStats>() {
-      @Override
-      public ActionPlanStats apply(ActionPlanStatsDto actionPlanStatsDto) {
-        return actionPlanStatsDto.toActionPlanStat();
-      }
-    }));
-  }
-
-  public List<ActionPlanStats> findClosedActionPlanStats(String projectKey) {
-    Collection<ActionPlanStatsDto> actionPlanStatsDtos = actionPlanStatsDao.findClosedByProjectId(findProject(projectKey).getId());
+  public List<ActionPlanStats> findActionPlanStats(String projectKey) {
+    Collection<ActionPlanStatsDto> actionPlanStatsDtos = actionPlanStatsDao.findByProjectId(findProject(projectKey).getId());
     return newArrayList(Iterables.transform(actionPlanStatsDtos, new Function<ActionPlanStatsDto, ActionPlanStats>() {
       @Override
       public ActionPlanStats apply(ActionPlanStatsDto actionPlanStatsDto) {
index 6052aaed06e7da9c2b15f96ccef6a0111e5fd827..8018b6487190d5f156f6d40425d03a7c884e40d7 100644 (file)
@@ -114,12 +114,8 @@ public class InternalRubyIssueService implements ServerComponent {
     return actionPlanService.findByKey(actionPlanKey);
   }
 
-  List<ActionPlanStats> findOpenActionPlanStats(String projectKey) {
-    return actionPlanService.findOpenActionPlanStats(projectKey);
-  }
-
-  List<ActionPlanStats> findClosedActionPlanStats(String projectKey) {
-    return actionPlanService.findClosedActionPlanStats(projectKey);
+  List<ActionPlanStats> findActionPlanStats(String projectKey) {
+    return actionPlanService.findActionPlanStats(projectKey);
   }
 
   public Result<ActionPlan> createActionPlan(Map<String, String> parameters) {
index 5d6c806b253a06af105a401f3b3fa2cbd97b3f2a..06e128b9825a9f4a3c6b1ae5593155073300a9a9 100644 (file)
@@ -275,8 +275,8 @@ class Api::IssuesController < Api::ApiController
     hash[:desc] = action_plan.description() if action_plan.description() && !action_plan.description().blank?
     hash[:userLogin] = action_plan.userLogin() if action_plan.userLogin()
     hash[:deadLine] = Api::Utils.format_datetime(action_plan.deadLine()) if action_plan.deadLine()
-    hash[:creationDate] = Api::Utils.format_datetime(action_plan.creationDate()) if action_plan.creationDate()
-    hash[:updateDate] = Api::Utils.format_datetime(action_plan.updateDate()) if action_plan.updateDate()
+    hash[:createdAt] = Api::Utils.format_datetime(action_plan.createdAt()) if action_plan.createdAt()
+    hash[:updatedAt] = Api::Utils.format_datetime(action_plan.updatedAt()) if action_plan.updatedAt()
     hash
   end
 
index 13293fc1b4bc903ea0cc65541e8fe9c6e202490f..e336377b6a5c3237bc10f177f0e60bc320374f6a 100644 (file)
@@ -84,8 +84,8 @@ class IssuesActionPlansController < ApplicationController
   end
 
   def load_action_plans
-    @open_action_plans = Internal.issues.findOpenActionPlanStats(@resource.key)
-    @closed_action_plans = Internal.issues.findClosedActionPlanStats(@resource.key)
+    @open_action_plans = Internal.issues.findActionPlanStats(@resource.key).select {|plan| plan.status() == 'OPEN'}
+    @closed_action_plans = Internal.issues.findActionPlanStats(@resource.key).select {|plan| plan.status() == 'CLOSED'}.sort{|plan1, plan2| plan2.deadLine() <=> plan1.deadLine()}
   end
 
   def find_by_key(key)
index d1fadfde1cc2c6e7fd3180e68c8c1ea382c928ca..c33adff4d1754902ccc845e5d9716d3961950539 100644 (file)
@@ -116,11 +116,11 @@ public class ActionPlanServiceTest {
   }
 
   @Test
-  public void should_find_open_action_plan_stats(){
+  public void should_find_action_plan_stats(){
     when(resourceDao.getResource(any(ResourceQuery.class))).thenReturn(new ResourceDto().setId(1L).setKey("org.sonar.Sample"));
-    when(actionPlanStatsDao.findOpenByProjectId(1L)).thenReturn(newArrayList(new ActionPlanStatsDto()));
+    when(actionPlanStatsDao.findByProjectId(1L)).thenReturn(newArrayList(new ActionPlanStatsDto()));
 
-    Collection<ActionPlanStats> results = actionPlanService.findOpenActionPlanStats("org.sonar.Sample");
+    Collection<ActionPlanStats> results = actionPlanService.findActionPlanStats("org.sonar.Sample");
     assertThat(results).hasSize(1);
   }
 
@@ -128,23 +128,7 @@ public class ActionPlanServiceTest {
   public void should_throw_exception_if_project_not_found_when_find_open_action_plan_stats(){
     when(resourceDao.getResource(any(ResourceQuery.class))).thenReturn(null);
 
-    actionPlanService.findOpenActionPlanStats("org.sonar.Sample");
-  }
-
-  @Test
-  public void should_find_closed_action_plan_stats(){
-    when(resourceDao.getResource(any(ResourceQuery.class))).thenReturn(new ResourceDto().setId(1L).setKey("org.sonar.Sample"));
-    when(actionPlanStatsDao.findClosedByProjectId(1L)).thenReturn(newArrayList(new ActionPlanStatsDto()));
-
-    Collection<ActionPlanStats> results = actionPlanService.findClosedActionPlanStats("org.sonar.Sample");
-    assertThat(results).hasSize(1);
-  }
-
-  @Test(expected = IllegalArgumentException.class)
-  public void should_throw_exception_if_project_not_found_when_find_closed_action_plan_stats(){
-    when(resourceDao.getResource(any(ResourceQuery.class))).thenReturn(null);
-
-    actionPlanService.findClosedActionPlanStats("org.sonar.Sample");
+    actionPlanService.findActionPlanStats("org.sonar.Sample");
   }
 
 }