aboutsummaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
authorTeryk Bellahsene <teryk.bellahsene@sonarsource.com>2017-03-09 12:21:14 +0100
committerJulien Lancelot <julien.lancelot@sonarsource.com>2017-03-21 13:05:50 +0100
commita9f15d8ddb02de93e87cdd95cb6151922d7bf489 (patch)
treee57dedc10cf57eabb9c089f16d52935778165f29 /server
parenta136d807a7f077a4b30640895a7c963a0a437ed4 (diff)
downloadsonarqube-a9f15d8ddb02de93e87cdd95cb6151922d7bf489.tar.gz
sonarqube-a9f15d8ddb02de93e87cdd95cb6151922d7bf489.zip
SONAR-8892 Add an organization member in database
Diffstat (limited to 'server')
-rw-r--r--server/sonar-ce/src/test/java/org/sonar/ce/container/ComputeEngineContainerImplTest.java2
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/DaoModule.java2
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/DbClient.java7
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/MyBatis.java4
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/organization/OrganizationMemberDao.java34
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/organization/OrganizationMemberDto.java44
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/organization/OrganizationMemberMapper.java25
-rw-r--r--server/sonar-db-dao/src/main/resources/org/sonar/db/organization/OrganizationMemberMapper.xml18
-rw-r--r--server/sonar-db-dao/src/test/java/org/sonar/db/DaoModuleTest.java2
-rw-r--r--server/sonar-db-dao/src/test/java/org/sonar/db/organization/OrganizationMemberDaoTest.java82
10 files changed, 218 insertions, 2 deletions
diff --git a/server/sonar-ce/src/test/java/org/sonar/ce/container/ComputeEngineContainerImplTest.java b/server/sonar-ce/src/test/java/org/sonar/ce/container/ComputeEngineContainerImplTest.java
index c416ceb7a9d..f1e24e5c84c 100644
--- a/server/sonar-ce/src/test/java/org/sonar/ce/container/ComputeEngineContainerImplTest.java
+++ b/server/sonar-ce/src/test/java/org/sonar/ce/container/ComputeEngineContainerImplTest.java
@@ -108,7 +108,7 @@ public class ComputeEngineContainerImplTest {
assertThat(picoContainer.getParent().getParent().getParent().getComponentAdapters()).hasSize(
COMPONENTS_IN_LEVEL_1_AT_CONSTRUCTION
+ 23 // level 1
- + 47 // content of DaoModule
+ + 48 // content of DaoModule
+ 3 // content of EsSearchModule
+ 57 // content of CorePropertyDefinitions
+ 1 // content of CePropertyDefinitions
diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/DaoModule.java b/server/sonar-db-dao/src/main/java/org/sonar/db/DaoModule.java
index b088950c1bd..17e164dfd1d 100644
--- a/server/sonar-db-dao/src/main/java/org/sonar/db/DaoModule.java
+++ b/server/sonar-db-dao/src/main/java/org/sonar/db/DaoModule.java
@@ -41,6 +41,7 @@ import org.sonar.db.measure.custom.CustomMeasureDao;
import org.sonar.db.metric.MetricDao;
import org.sonar.db.notification.NotificationQueueDao;
import org.sonar.db.organization.OrganizationDao;
+import org.sonar.db.organization.OrganizationMemberDao;
import org.sonar.db.permission.AuthorizationDao;
import org.sonar.db.permission.GroupPermissionDao;
import org.sonar.db.permission.UserPermissionDao;
@@ -98,6 +99,7 @@ public class DaoModule extends Module {
MetricDao.class,
NotificationQueueDao.class,
OrganizationDao.class,
+ OrganizationMemberDao.class,
PermissionTemplateCharacteristicDao.class,
PermissionTemplateDao.class,
ProjectQgateAssociationDao.class,
diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/DbClient.java b/server/sonar-db-dao/src/main/java/org/sonar/db/DbClient.java
index 0102d58ac2f..c36d7934c0b 100644
--- a/server/sonar-db-dao/src/main/java/org/sonar/db/DbClient.java
+++ b/server/sonar-db-dao/src/main/java/org/sonar/db/DbClient.java
@@ -40,6 +40,7 @@ import org.sonar.db.measure.custom.CustomMeasureDao;
import org.sonar.db.metric.MetricDao;
import org.sonar.db.notification.NotificationQueueDao;
import org.sonar.db.organization.OrganizationDao;
+import org.sonar.db.organization.OrganizationMemberDao;
import org.sonar.db.permission.AuthorizationDao;
import org.sonar.db.permission.GroupPermissionDao;
import org.sonar.db.permission.UserPermissionDao;
@@ -74,6 +75,7 @@ public class DbClient {
private final SchemaMigrationDao schemaMigrationDao;
private final AuthorizationDao authorizationDao;
private final OrganizationDao organizationDao;
+ private final OrganizationMemberDao organizationMemberDao;
private final QualityProfileDao qualityProfileDao;
private final LoadedTemplateDao loadedTemplateDao;
private final PropertiesDao propertiesDao;
@@ -128,6 +130,7 @@ public class DbClient {
schemaMigrationDao = getDao(map, SchemaMigrationDao.class);
authorizationDao = getDao(map, AuthorizationDao.class);
organizationDao = getDao(map, OrganizationDao.class);
+ organizationMemberDao = getDao(map, OrganizationMemberDao.class);
qualityProfileDao = getDao(map, QualityProfileDao.class);
loadedTemplateDao = getDao(map, LoadedTemplateDao.class);
propertiesDao = getDao(map, PropertiesDao.class);
@@ -192,6 +195,10 @@ public class DbClient {
return organizationDao;
}
+ public OrganizationMemberDao organizationMemberDao() {
+ return organizationMemberDao;
+ }
+
public IssueDao issueDao() {
return issueDao;
}
diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/MyBatis.java b/server/sonar-db-dao/src/main/java/org/sonar/db/MyBatis.java
index 6f88bffc749..b55c6e18984 100644
--- a/server/sonar-db-dao/src/main/java/org/sonar/db/MyBatis.java
+++ b/server/sonar-db-dao/src/main/java/org/sonar/db/MyBatis.java
@@ -66,6 +66,8 @@ import org.sonar.db.notification.NotificationQueueDto;
import org.sonar.db.notification.NotificationQueueMapper;
import org.sonar.db.organization.OrganizationDto;
import org.sonar.db.organization.OrganizationMapper;
+import org.sonar.db.organization.OrganizationMemberDto;
+import org.sonar.db.organization.OrganizationMemberMapper;
import org.sonar.db.permission.AuthorizationMapper;
import org.sonar.db.permission.GroupPermissionDto;
import org.sonar.db.permission.GroupPermissionMapper;
@@ -156,6 +158,7 @@ public class MyBatis implements Startable {
confBuilder.loadAlias("Measure", MeasureDto.class);
confBuilder.loadAlias("NotificationQueue", NotificationQueueDto.class);
confBuilder.loadAlias("Organization", OrganizationDto.class);
+ confBuilder.loadAlias("OrganizationMember", OrganizationMemberDto.class);
confBuilder.loadAlias("PermissionTemplateCharacteristic", PermissionTemplateCharacteristicDto.class);
confBuilder.loadAlias("PermissionTemplateGroup", PermissionTemplateGroupDto.class);
confBuilder.loadAlias("PermissionTemplate", PermissionTemplateDto.class);
@@ -211,6 +214,7 @@ public class MyBatis implements Startable {
MetricMapper.class,
NotificationQueueMapper.class,
OrganizationMapper.class,
+ OrganizationMemberMapper.class,
PermissionTemplateCharacteristicMapper.class,
PermissionTemplateMapper.class,
ProjectQgateAssociationMapper.class,
diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/organization/OrganizationMemberDao.java b/server/sonar-db-dao/src/main/java/org/sonar/db/organization/OrganizationMemberDao.java
new file mode 100644
index 00000000000..81668a5174a
--- /dev/null
+++ b/server/sonar-db-dao/src/main/java/org/sonar/db/organization/OrganizationMemberDao.java
@@ -0,0 +1,34 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2017 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.
+ */
+
+package org.sonar.db.organization;
+
+import org.sonar.db.Dao;
+import org.sonar.db.DbSession;
+
+public class OrganizationMemberDao implements Dao {
+ public void insert(DbSession dbSession, OrganizationMemberDto organizationMemberDto) {
+ mapper(dbSession).insert(organizationMemberDto);
+ }
+
+ private OrganizationMemberMapper mapper(DbSession dbSession) {
+ return dbSession.getMapper(OrganizationMemberMapper.class);
+ }
+}
diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/organization/OrganizationMemberDto.java b/server/sonar-db-dao/src/main/java/org/sonar/db/organization/OrganizationMemberDto.java
new file mode 100644
index 00000000000..93ff03a7b8c
--- /dev/null
+++ b/server/sonar-db-dao/src/main/java/org/sonar/db/organization/OrganizationMemberDto.java
@@ -0,0 +1,44 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2017 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.
+ */
+
+package org.sonar.db.organization;
+
+public class OrganizationMemberDto {
+ private String organizationUuid;
+ private Integer userId;
+
+ public String getOrganizationUuid() {
+ return organizationUuid;
+ }
+
+ public OrganizationMemberDto setOrganizationUuid(String organizationUuid) {
+ this.organizationUuid = organizationUuid;
+ return this;
+ }
+
+ public Integer getUserId() {
+ return userId;
+ }
+
+ public OrganizationMemberDto setUserId(Integer userId) {
+ this.userId = userId;
+ return this;
+ }
+}
diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/organization/OrganizationMemberMapper.java b/server/sonar-db-dao/src/main/java/org/sonar/db/organization/OrganizationMemberMapper.java
new file mode 100644
index 00000000000..cec53d6b149
--- /dev/null
+++ b/server/sonar-db-dao/src/main/java/org/sonar/db/organization/OrganizationMemberMapper.java
@@ -0,0 +1,25 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2017 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.
+ */
+
+package org.sonar.db.organization;
+
+public interface OrganizationMemberMapper {
+ void insert(OrganizationMemberDto organizationMember);
+}
diff --git a/server/sonar-db-dao/src/main/resources/org/sonar/db/organization/OrganizationMemberMapper.xml b/server/sonar-db-dao/src/main/resources/org/sonar/db/organization/OrganizationMemberMapper.xml
new file mode 100644
index 00000000000..bdb144975a3
--- /dev/null
+++ b/server/sonar-db-dao/src/main/resources/org/sonar/db/organization/OrganizationMemberMapper.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="org.sonar.db.organization.OrganizationMemberMapper">
+ <insert id="insert" parameterType="OrganizationMember" useGeneratedKeys="false">
+ insert into organization_members
+ (
+ organization_uuid,
+ user_id
+ )
+ values
+ (
+ #{organizationUuid, jdbcType=VARCHAR},
+ #{userId, jdbcType=INTEGER}
+ )
+ </insert>
+</mapper>
diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/DaoModuleTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/DaoModuleTest.java
index 914622cfd1e..4e2c7cb812e 100644
--- a/server/sonar-db-dao/src/test/java/org/sonar/db/DaoModuleTest.java
+++ b/server/sonar-db-dao/src/test/java/org/sonar/db/DaoModuleTest.java
@@ -29,6 +29,6 @@ public class DaoModuleTest {
public void verify_count_of_added_components() {
ComponentContainer container = new ComponentContainer();
new DaoModule().configure(container);
- assertThat(container.size()).isEqualTo(2 + 45);
+ assertThat(container.size()).isEqualTo(2 + 46);
}
}
diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/organization/OrganizationMemberDaoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/organization/OrganizationMemberDaoTest.java
new file mode 100644
index 00000000000..09c82d526e4
--- /dev/null
+++ b/server/sonar-db-dao/src/test/java/org/sonar/db/organization/OrganizationMemberDaoTest.java
@@ -0,0 +1,82 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2017 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.
+ */
+
+package org.sonar.db.organization;
+
+import java.util.Map;
+import org.apache.ibatis.exceptions.PersistenceException;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.sonar.db.DbClient;
+import org.sonar.db.DbSession;
+import org.sonar.db.DbTester;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.entry;
+
+public class OrganizationMemberDaoTest {
+ @Rule
+ public final DbTester db = DbTester.create().setDisableDefaultOrganization(true);
+ @Rule
+ public ExpectedException expectedException = ExpectedException.none();
+
+ private DbClient dbClient = db.getDbClient();
+ private DbSession dbSession = db.getSession();
+
+ private OrganizationMemberDao underTest = dbClient.organizationMemberDao();
+
+ @Test
+ public void insert() {
+ underTest.insert(dbSession, create("O_1", 256));
+
+ Map<String, Object> result = db.selectFirst(dbSession, "select organization_uuid as \"organizationUuid\", user_id as \"userId\" from organization_members");
+
+ assertThat(result).containsOnly(entry("organizationUuid", "O_1"), entry("userId", 256L));
+ }
+
+ @Test
+ public void fail_insert_if_no_organization_uuid() {
+ expectedException.expect(PersistenceException.class);
+
+ underTest.insert(dbSession, create(null, 256));
+ }
+
+ @Test
+ public void fail_insert_if_no_user_id() {
+ expectedException.expect(PersistenceException.class);
+
+ underTest.insert(dbSession, create("O_1", null));
+ }
+
+ @Test
+ public void fail_if_organization_member_already_exist() {
+ underTest.insert(dbSession, create("O_1", 256));
+ expectedException.expect(PersistenceException.class);
+
+ underTest.insert(dbSession, create("O_1", 256));
+ }
+
+ private OrganizationMemberDto create(String organizationUuid, Integer userId) {
+ return new OrganizationMemberDto()
+ .setOrganizationUuid(organizationUuid)
+ .setUserId(userId);
+ }
+}