]> source.dussan.org Git - sonarqube.git/commitdiff
Fix DB tests on MSSQL and Oracle
authorJean-Baptiste Lievremont <jean-baptiste.lievremont@sonarsource.com>
Thu, 19 Mar 2015 10:45:31 +0000 (11:45 +0100)
committerJean-Baptiste Lievremont <jean-baptiste.lievremont@sonarsource.com>
Thu, 19 Mar 2015 10:45:31 +0000 (11:45 +0100)
server/sonar-server/src/main/java/org/sonar/server/dashboard/ws/DashboardsShowAction.java
server/sonar-server/src/main/java/org/sonar/server/startup/RenameIssueWidgets.java
server/sonar-server/src/test/java/org/sonar/server/dashboard/db/WidgetDaoTest.java [new file with mode: 0644]
server/sonar-server/src/test/resources/org/sonar/server/dashboard/db/WidgetDaoTest/before.xml [new file with mode: 0644]
server/sonar-server/src/test/resources/org/sonar/server/startup/RenameIssueWidgetsTest/after.xml
server/sonar-server/src/test/resources/org/sonar/server/startup/RenameIssueWidgetsTest/before.xml
sonar-core/src/main/java/org/sonar/core/dashboard/WidgetDto.java
sonar-core/src/main/java/org/sonar/core/dashboard/WidgetMapper.java
sonar-core/src/main/resources/org/sonar/core/dashboard/WidgetMapper.xml

index 45e3f39aad55373732cdaefe620bd0bf35b80e11..035ad011da9f2401fab98abcf319be09cad86cc3 100644 (file)
@@ -102,7 +102,7 @@ public class DashboardsShowAction implements DashboardsAction {
         json.prop("configured", widget.getConfigured());
         json.prop("componentId", widget.getResourceId());
         json.name("props").beginArray();
-        for (WidgetPropertyDto prop : propertiesByWidget.get(widget.getKey())) {
+        for (WidgetPropertyDto prop : propertiesByWidget.get(widget.getId())) {
           json.beginObject();
           json.prop("key", prop.getPropertyKey());
           json.prop("val", prop.getTextValue());
index 63436e32df1b52a80c65c44ff03a8d7b72423893..389788e39296429791138ea3ad3759f5ecf77321 100644 (file)
@@ -65,7 +65,7 @@ public class RenameIssueWidgets implements Startable {
     DbSession session = dbClient.openSession(false);
 
     try {
-      if (dbClient.loadedTemplateDao().countByTypeAndKey(LoadedTemplateDto.ONE_SHOT_TASK_TYPE, TASK_KEY) != 0) {
+      if (dbClient.loadedTemplateDao().countByTypeAndKey(LoadedTemplateDto.ONE_SHOT_TASK_TYPE, TASK_KEY, session) != 0) {
         // Already done
         return;
       }
@@ -87,10 +87,10 @@ public class RenameIssueWidgets implements Startable {
       for (WidgetDto widget : dbClient.widgetDao().findAll(session)) {
         String widgetKey = widget.getWidgetKey();
         if (filterByWidgetKey.keySet().contains(widgetKey)) {
+          updatedWidgetIds.add(widget.getId());
           newWidgetProperties.add(createFilterProperty(filterByWidgetKey.get(widgetKey), widget));
           newWidgetProperties.add(createDistributionAxisProperty(distributionAxisByWidgetKey.get(widgetKey), widget));
           updateWidget(session, widget);
-          updatedWidgetIds.add(widget.getId());
         }
       }
 
diff --git a/server/sonar-server/src/test/java/org/sonar/server/dashboard/db/WidgetDaoTest.java b/server/sonar-server/src/test/java/org/sonar/server/dashboard/db/WidgetDaoTest.java
new file mode 100644 (file)
index 0000000..baea10d
--- /dev/null
@@ -0,0 +1,71 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube 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.
+ *
+ * SonarQube 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.
+ */
+package org.sonar.server.dashboard.db;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.sonar.core.dashboard.WidgetDto;
+import org.sonar.core.persistence.DbSession;
+import org.sonar.core.persistence.DbTester;
+import org.sonar.core.persistence.MyBatis;
+import org.sonar.test.DbTests;
+
+import java.util.Collection;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+@Category(DbTests.class)
+public class WidgetDaoTest {
+
+  WidgetDao dao;
+
+  @Rule
+  public DbTester dbTester = new DbTester();
+
+  private DbSession session;
+
+  @Before
+  public void setUp() throws Exception {
+    dao = new WidgetDao(dbTester.myBatis());
+    session = dbTester.myBatis().openSession(false);
+  }
+
+  @After
+  public void tearDown() {
+    MyBatis.closeQuietly(session);
+  }
+
+  @Test
+  public void should_select_all() throws Exception {
+    dbTester.prepareDbUnit(this.getClass(), "before.xml");
+    session.commit();
+
+    Collection<WidgetDto> widgets = dao.findAll(session);
+    assertThat(widgets).hasSize(5);
+    for (WidgetDto widget : widgets) {
+      assertThat(widget.getId()).isNotNull();
+      assertThat(widget.getName()).isNotNull();
+      assertThat(widget.getDescription()).isNotNull();
+    }
+  }
+}
diff --git a/server/sonar-server/src/test/resources/org/sonar/server/dashboard/db/WidgetDaoTest/before.xml b/server/sonar-server/src/test/resources/org/sonar/server/dashboard/db/WidgetDaoTest/before.xml
new file mode 100644 (file)
index 0000000..a942341
--- /dev/null
@@ -0,0 +1,18 @@
+<dataset>
+
+  <widgets id="1" dashboard_id="1" widget_key="polop" name="Polop" description="Palap"
+     column_index="1" row_index="1" configured="[true]" created_at="[null]" updated_at="[null]" resource_id="[null]"/>
+
+  <widgets id="2" dashboard_id="1" widget_key="false_positive_reviews" name="Polop" description="Palap"
+     column_index="1" row_index="2" configured="[true]" created_at="[null]" updated_at="[null]" resource_id="[null]"/>
+
+  <widgets id="3" dashboard_id="1" widget_key="my_reviews" name="Polop" description="Palap"
+     column_index="1" row_index="3" configured="[true]" created_at="[null]" updated_at="[null]" resource_id="[null]"/>
+
+  <widgets id="4" dashboard_id="1" widget_key="reviews_per_developer" name="Polop" description="Palap"
+     column_index="1" row_index="4" configured="[true]" created_at="[null]" updated_at="[null]" resource_id="[null]"/>
+
+  <widgets id="5" dashboard_id="1" widget_key="unresolved_issues_statuses" name="Polop" description="Palap"
+     column_index="1" row_index="5" configured="[true]" created_at="[null]" updated_at="[null]" resource_id="[null]"/>
+
+</dataset>
index 2cab15849f1e1a82cc38553d27b86b1a81c450f8..712f1304dea75558943f5e3e4c84f41698a43845 100644 (file)
 
 
   <widgets id="1" dashboard_id="1" widget_key="polop" name="[null]" description="[null]"
-     column_index="1" row_index="1" configured="true" created_at="[null]" updated_at="[null]" resource_id="[null]"/>
+     column_index="1" row_index="1" configured="[true]" created_at="[null]" updated_at="[null]" resource_id="[null]"/>
 
   <widget_properties id="1" widget_id="1" kee="palap" text_value="pulup"/>
 
 
   <!-- 'False Positive Issues' - replaced by project_issue_filter w/ 'False Positive and Won't Fix Issues' filter -->
   <widgets id="2" dashboard_id="1" widget_key="project_issue_filter" name="[null]" description="[null]"
-     column_index="1" row_index="2" configured="true" created_at="[null]" updated_at="2003-03-23 01:23:45" resource_id="[null]"/>
+     column_index="1" row_index="2" configured="[true]" created_at="[null]" updated_at="2003-03-23 01:23:45" resource_id="[null]"/>
 
   <!-- filter = 'False Positive and Won't Fix Issues' -->
   <widget_properties id="3" widget_id="2" kee="filter" text_value="2"/>
@@ -49,7 +49,7 @@
 
   <!-- 'My Unresolved Issues' - replaced by project_issue_filter w/ 'My Unresolved Issues' filter -->
   <widgets id="3" dashboard_id="1" widget_key="project_issue_filter" name="[null]" description="[null]"
-     column_index="1" row_index="3" configured="true" created_at="[null]" updated_at="2003-03-23 01:23:45" resource_id="[null]"/>
+     column_index="1" row_index="3" configured="[true]" created_at="[null]" updated_at="2003-03-23 01:23:45" resource_id="[null]"/>
 
   <!-- filter = 'My Unresolved Issues' -->
   <widget_properties id="5" widget_id="3" kee="filter" text_value="3"/>
@@ -59,7 +59,7 @@
 
   <!-- 'Unresolved Issues Per Developer' - replaced by project_issue_filter w/ 'Unresolved Issues' filter -->
   <widgets id="4" dashboard_id="1" widget_key="project_issue_filter" name="[null]" description="[null]"
-     column_index="1" row_index="4" configured="true" created_at="[null]" updated_at="2003-03-23 01:23:45" resource_id="[null]"/>
+     column_index="1" row_index="4" configured="[true]" created_at="[null]" updated_at="2003-03-23 01:23:45" resource_id="[null]"/>
 
   <!-- filter = 'Unresolved Issues' -->
   <widget_properties id="7" widget_id="4" kee="filter" text_value="1"/>
@@ -69,7 +69,7 @@
 
   <!-- 'Unresolved Issues Per Status' - replaced by project_issue_filter w/ 'Unresolved Issues' filter -->
   <widgets id="5" dashboard_id="1" widget_key="project_issue_filter" name="[null]" description="[null]"
-     column_index="1" row_index="5" configured="true" created_at="[null]" updated_at="2003-03-23 01:23:45" resource_id="[null]"/>
+     column_index="1" row_index="5" configured="[true]" created_at="[null]" updated_at="2003-03-23 01:23:45" resource_id="[null]"/>
 
   <!-- filter = 'Unresolved Issues' -->
   <widget_properties id="9" widget_id="5" kee="filter" text_value="1"/>
index d22705c26af996b5fe39e66e8b403518fe086278..0f3250d3ded534f82c7ccc30ef202da954d5030a 100644 (file)
@@ -33,7 +33,7 @@
 
   <!-- Will not be modified -->
   <widgets id="1" dashboard_id="1" widget_key="polop" name="[null]" description="[null]"
-     column_index="1" row_index="1" configured="true" created_at="[null]" updated_at="[null]" resource_id="[null]"/>
+     column_index="1" row_index="1" configured="[true]" created_at="[null]" updated_at="[null]" resource_id="[null]"/>
 
   <widget_properties id="1" widget_id="1" kee="palap" text_value="pulup"/>
   
 
   <!-- 'False Positive Issues' - replaced by project_issue_filter w/ 'False Positive and Won't Fix Issues' filter -->
   <widgets id="2" dashboard_id="1" widget_key="false_positive_reviews" name="[null]" description="[null]"
-     column_index="1" row_index="2" configured="true" created_at="[null]" updated_at="[null]" resource_id="[null]"/>
+     column_index="1" row_index="2" configured="[true]" created_at="[null]" updated_at="[null]" resource_id="[null]"/>
 
 
   <!-- 'My Unresolved Issues' - replaced by project_issue_filter w/ 'My Unresolved Issues' filter -->
   <widgets id="3" dashboard_id="1" widget_key="my_reviews" name="[null]" description="[null]"
-     column_index="1" row_index="3" configured="true" created_at="[null]" updated_at="[null]" resource_id="[null]"/>
+     column_index="1" row_index="3" configured="[true]" created_at="[null]" updated_at="[null]" resource_id="[null]"/>
 
   <!-- config for 'My Unresolved Issues' - will be deleted -->
   <widget_properties id="2" widget_id="3" kee="numberOfLines" text_value="20"/>
 
   <!-- 'Unresolved Issues Per Developer' - replaced by project_issue_filter w/ 'Unresolved Issues' filter -->
   <widgets id="4" dashboard_id="1" widget_key="reviews_per_developer" name="[null]" description="[null]"
-     column_index="1" row_index="4" configured="true" created_at="[null]" updated_at="[null]" resource_id="[null]"/>
+     column_index="1" row_index="4" configured="[true]" created_at="[null]" updated_at="[null]" resource_id="[null]"/>
 
 
   <!-- 'Unresolved Issues Per Status' - replaced by project_issue_filter w/ 'Unresolved Issues' filter -->
   <widgets id="5" dashboard_id="1" widget_key="unresolved_issues_statuses" name="[null]" description="[null]"
-     column_index="1" row_index="5" configured="true" created_at="[null]" updated_at="[null]" resource_id="[null]"/>
+     column_index="1" row_index="5" configured="[true]" created_at="[null]" updated_at="[null]" resource_id="[null]"/>
 
 
 </dataset>
index dcd945da250a96b11f6e3edd87134aa8453ff9e9..d3f6445ed1dd0d469d9d8a5d4fe7954bf482baeb 100644 (file)
@@ -185,10 +185,6 @@ public class WidgetDto {
     return this;
   }
 
-  public Long getKey() {
-    return id;
-  }
-
   public WidgetDto setCreatedAt(Date datetime) {
     this.createdAt = datetime;
     return this;
index 56abd720345923d205e9a4837d0ce934b99df2a4..c5d76c55cc2bef9d718add28efe0d83e1fd426be 100644 (file)
@@ -21,17 +21,12 @@ package org.sonar.core.dashboard;
 
 import org.apache.ibatis.annotations.Insert;
 import org.apache.ibatis.annotations.Options;
-import org.apache.ibatis.annotations.Select;
 import org.apache.ibatis.annotations.Update;
 
 import java.util.Collection;
 
 public interface WidgetMapper {
 
-  String COLUMNS = "id, dashboard_id as \"dashboardId\", widget_key as \"widgetKey\", name, description, " +
-    "column_index as \"columnIndex\", row_index as \"rowIndex\", configured, created_at as \"createdAt\", " +
-    "updated_at as \"updatedAt\", resource_id as \"resourceId\"";
-
   @Insert("insert into widgets (dashboard_id, widget_key, name, description, column_index, " +
     " row_index, configured, created_at, updated_at, resource_id)" +
     " values (#{dashboardId,jdbcType=INTEGER}, #{widgetKey,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, " +
@@ -40,13 +35,10 @@ public interface WidgetMapper {
   @Options(keyColumn = "id", useGeneratedKeys = true, keyProperty = "id")
   void insert(WidgetDto widgetDto);
 
-  @Select("select " + COLUMNS + " from widgets where id=#{id}")
   WidgetDto selectById(long widgetId);
 
-  @Select("select " + COLUMNS + " from widgets where dashboard_id=#{id}")
   Collection<WidgetDto> selectByDashboard(long dashboardKey);
 
-  @Select("select " + COLUMNS + " from widgets")
   Collection<WidgetDto> selectAll();
 
   @Update("UPDATE widgets SET " +
@@ -61,5 +53,6 @@ public interface WidgetMapper {
     "updated_at=#{updatedAt,jdbcType=TIMESTAMP}, " +
     "resource_id=#{resourceId,jdbcType=INTEGER} " +
     "WHERE id=#{id}")
+  @Options(useGeneratedKeys = false)
   void update(WidgetDto item);
 }
index 73669cb6807b759b0496a7659fab02fca89ad835..ce1a70bf225de03cb02c53fe3db69e2cebef53c9 100644 (file)
@@ -3,4 +3,30 @@
 
 <mapper namespace="org.sonar.core.dashboard.WidgetMapper">
 
+  <sql id="selectColumns">
+    w.id as "id",
+    w.dashboard_id as "dashboardId",
+    w.widget_key as "widgetKey",
+    w.name as "name",
+    w.description as "description",
+    w.column_index as "columnIndex",
+    w.row_index as "rowIndex",
+    w.configured as "configured",
+    w.created_at as "createdAt",
+    w.updated_at as "updatedAt",
+    w.resource_id as "resourceId"
+  </sql>
+
+  <select id="selectById" parameterType="Integer" resultType="Widget">
+    select <include refid="selectColumns"/> from widgets w where w.id=#{id}
+  </select>
+
+  <select id="selectByDashboard" parameterType="Integer" resultType="Widget">
+    select <include refid="selectColumns"/> from widgets w where w.dashboard_id=#{id}
+  </select>
+
+  <select id="selectAll" resultType="Widget">
+    select <include refid="selectColumns"/> from widgets w
+  </select>
+
 </mapper>