aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-db-dao
diff options
context:
space:
mode:
authorJulien HENRY <julien.henry@sonarsource.com>2018-10-23 18:30:16 +0200
committerEric Hartmann <hartmann.eric@gmail.com>2018-10-25 10:25:58 +0200
commitb9c7590f0ffdef3c0ee234717035938fa202b02f (patch)
tree57e6a55ff9a9ddd0d57241302fdb08c20fa934ac /server/sonar-db-dao
parent9ae4d36711470f72d3d1ced0705118c37f906d2c (diff)
downloadsonarqube-b9c7590f0ffdef3c0ee234717035938fa202b02f.tar.gz
sonarqube-b9c7590f0ffdef3c0ee234717035938fa202b02f.zip
SONARCLOUD-150 Store if application owner is a user
Diffstat (limited to 'server/sonar-db-dao')
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/alm/ALM.java4
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/alm/AlmAppInstallDao.java15
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/alm/AlmAppInstallDto.java117
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/alm/AlmAppInstallMapper.java12
-rw-r--r--server/sonar-db-dao/src/main/resources/org/sonar/db/alm/AlmAppInstallMapper.xml26
-rw-r--r--server/sonar-db-dao/src/test/java/org/sonar/db/alm/AlmAppInstallDaoTest.java58
6 files changed, 201 insertions, 31 deletions
diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/alm/ALM.java b/server/sonar-db-dao/src/main/java/org/sonar/db/alm/ALM.java
index a76b362d0e3..2520f943458 100644
--- a/server/sonar-db-dao/src/main/java/org/sonar/db/alm/ALM.java
+++ b/server/sonar-db-dao/src/main/java/org/sonar/db/alm/ALM.java
@@ -25,6 +25,10 @@ public enum ALM {
BITBUCKETCLOUD,
GITHUB;
+ public static ALM fromId(String almId) {
+ return ALM.valueOf(almId.toUpperCase(Locale.ENGLISH));
+ }
+
public String getId() {
return this.name().toLowerCase(Locale.ENGLISH);
}
diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/alm/AlmAppInstallDao.java b/server/sonar-db-dao/src/main/java/org/sonar/db/alm/AlmAppInstallDao.java
index 6deb486a5f4..60344b58569 100644
--- a/server/sonar-db-dao/src/main/java/org/sonar/db/alm/AlmAppInstallDao.java
+++ b/server/sonar-db-dao/src/main/java/org/sonar/db/alm/AlmAppInstallDao.java
@@ -19,6 +19,7 @@
*/
package org.sonar.db.alm;
+import java.util.List;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;
@@ -48,7 +49,7 @@ public class AlmAppInstallDao implements Dao {
* @param ownerId ALM specific identifier of the owner of the app, like team or user uuid for Bitbucket Cloud or organization id for Github, can't be null
* @param installId ALM specific identifier of the app installation, can't be null
*/
- public void insertOrUpdate(DbSession dbSession, ALM alm, String ownerId, String installId) {
+ public void insertOrUpdate(DbSession dbSession, ALM alm, String ownerId, @Nullable Boolean isOwnerUser, String installId) {
checkAlm(alm);
checkOwnerId(ownerId);
checkArgument(isNotEmpty(installId), "installId can't be null nor empty");
@@ -56,17 +57,21 @@ public class AlmAppInstallDao implements Dao {
AlmAppInstallMapper mapper = getMapper(dbSession);
long now = system2.now();
- if (mapper.update(alm.getId(), ownerId, installId, now) == 0) {
- mapper.insert(uuidFactory.create(), alm.getId(), ownerId, installId, now);
+ if (mapper.update(alm.getId(), ownerId, isOwnerUser, installId, now) == 0) {
+ mapper.insert(uuidFactory.create(), alm.getId(), ownerId, isOwnerUser, installId, now);
}
}
- public Optional<String> getInstallId(DbSession dbSession, ALM alm, String ownerId) {
+ public List<AlmAppInstallDto> findAllWithNoOwnerType(DbSession dbSession) {
+ return getMapper(dbSession).selectAllWithNoOwnerType();
+ }
+
+ public Optional<AlmAppInstallDto> selectByOwner(DbSession dbSession, ALM alm, String ownerId) {
checkAlm(alm);
checkOwnerId(ownerId);
AlmAppInstallMapper mapper = getMapper(dbSession);
- return Optional.ofNullable(mapper.selectInstallId(alm.getId(), ownerId));
+ return Optional.ofNullable(mapper.selectByOwner(alm.getId(), ownerId));
}
public void delete(DbSession dbSession, ALM alm, String ownerId) {
diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/alm/AlmAppInstallDto.java b/server/sonar-db-dao/src/main/java/org/sonar/db/alm/AlmAppInstallDto.java
new file mode 100644
index 00000000000..2887472c4a5
--- /dev/null
+++ b/server/sonar-db-dao/src/main/java/org/sonar/db/alm/AlmAppInstallDto.java
@@ -0,0 +1,117 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2018 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.alm;
+
+import javax.annotation.Nullable;
+
+public class AlmAppInstallDto {
+
+ /**
+ * Technical unique identifier, can't be null
+ */
+ private String uuid;
+ /**
+ * alm_id, can't be null
+ */
+ private String almId;
+ /**
+ * Owner id, can't be null
+ */
+ private String ownerId;
+ /**
+ * Installation id, can't be null
+ */
+ private String installId;
+ /**
+ * Is owner a user, can be null
+ */
+ private Boolean isOwnerUser;
+
+ private long createdAt;
+ private long updatedAt;
+
+ public AlmAppInstallDto setUuid(String uuid) {
+ this.uuid = uuid;
+ return this;
+ }
+
+ public AlmAppInstallDto setAlmId(String almId) {
+ this.almId = almId;
+ return this;
+ }
+
+ public AlmAppInstallDto setOwnerId(String ownerId) {
+ this.ownerId = ownerId;
+ return this;
+ }
+
+ public AlmAppInstallDto setInstallId(String installId) {
+ this.installId = installId;
+ return this;
+ }
+
+ public AlmAppInstallDto setIsOwnerUser(@Nullable Boolean isOwnerUser) {
+ this.isOwnerUser = isOwnerUser;
+ return this;
+ }
+
+ AlmAppInstallDto setCreatedAt(long createdAt) {
+ this.createdAt = createdAt;
+ return this;
+ }
+
+ AlmAppInstallDto setUpdatedAt(long updatedAt) {
+ this.updatedAt = updatedAt;
+ return this;
+ }
+
+ public String getUuid() {
+ return uuid;
+ }
+
+ public String getAlmId() {
+ return almId;
+ }
+
+ public ALM getAlm() {
+ return ALM.fromId(almId);
+ }
+
+ public String getOwnerId() {
+ return ownerId;
+ }
+
+ public String getInstallId() {
+ return installId;
+ }
+
+ @Nullable
+ public Boolean isOwnerUser() {
+ return isOwnerUser;
+ }
+
+ public long getCreatedAt() {
+ return createdAt;
+ }
+
+ public long getUpdatedAt() {
+ return updatedAt;
+ }
+}
diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/alm/AlmAppInstallMapper.java b/server/sonar-db-dao/src/main/java/org/sonar/db/alm/AlmAppInstallMapper.java
index 9a3f4eec310..809a054ca26 100644
--- a/server/sonar-db-dao/src/main/java/org/sonar/db/alm/AlmAppInstallMapper.java
+++ b/server/sonar-db-dao/src/main/java/org/sonar/db/alm/AlmAppInstallMapper.java
@@ -19,17 +19,23 @@
*/
package org.sonar.db.alm;
+import java.util.List;
import javax.annotation.CheckForNull;
+import javax.annotation.Nullable;
import org.apache.ibatis.annotations.Param;
public interface AlmAppInstallMapper {
@CheckForNull
- String selectInstallId(@Param("almId") String almId, @Param("ownerId") String ownerId);
+ AlmAppInstallDto selectByOwner(@Param("almId") String almId, @Param("ownerId") String ownerId);
- void insert(@Param("uuid") String uuid, @Param("almId") String almId, @Param("ownerId") String ownerId, @Param("installId") String installId, @Param("now") long now);
+ List<AlmAppInstallDto> selectAllWithNoOwnerType();
- int update(@Param("almId") String almId, @Param("ownerId") String ownerId, @Param("installId") String installId, @Param("now") long now);
+ void insert(@Param("uuid") String uuid, @Param("almId") String almId, @Param("ownerId") String ownerId,
+ @Nullable @Param("isOwnerUser") Boolean isOwnerUser, @Param("installId") String installId, @Param("now") long now);
+
+ int update(@Param("almId") String almId, @Param("ownerId") String ownerId,
+ @Nullable @Param("isOwnerUser") Boolean isOwnerUser, @Param("installId") String installId, @Param("now") long now);
void delete(@Param("almId") String almId, @Param("ownerId") String ownerId);
}
diff --git a/server/sonar-db-dao/src/main/resources/org/sonar/db/alm/AlmAppInstallMapper.xml b/server/sonar-db-dao/src/main/resources/org/sonar/db/alm/AlmAppInstallMapper.xml
index 262ba4a8b76..2454efde08c 100644
--- a/server/sonar-db-dao/src/main/resources/org/sonar/db/alm/AlmAppInstallMapper.xml
+++ b/server/sonar-db-dao/src/main/resources/org/sonar/db/alm/AlmAppInstallMapper.xml
@@ -3,9 +3,18 @@
<mapper namespace="org.sonar.db.alm.AlmAppInstallMapper">
- <select id="selectInstallId" parameterType="Map" resultType="String">
- select
- install_id as installId
+ <sql id="sqlColumns">
+ uuid,
+ alm_id as almId,
+ owner_id as ownerId,
+ is_owner_user as isOwnerUser,
+ install_id as installId,
+ created_at as createdAt,
+ updated_at as updatedAt
+ </sql>
+
+ <select id="selectByOwner" parameterType="Map" resultType="org.sonar.db.alm.AlmAppInstallDto">
+ select <include refid="sqlColumns" />
from
alm_app_installs
where
@@ -13,12 +22,21 @@
and owner_id = #{ownerId, jdbcType=VARCHAR}
</select>
+ <select id="selectAllWithNoOwnerType" parameterType="Map" resultType="org.sonar.db.alm.AlmAppInstallDto">
+ select <include refid="sqlColumns" />
+ from
+ alm_app_installs
+ where
+ is_owner_user is null
+ </select>
+
<insert id="insert" parameterType="Map" useGeneratedKeys="false">
INSERT INTO alm_app_installs
(
uuid,
alm_id,
owner_id,
+ is_owner_user,
install_id,
created_at,
updated_at
@@ -27,6 +45,7 @@
#{uuid, jdbcType=VARCHAR},
#{almId, jdbcType=VARCHAR},
#{ownerId, jdbcType=VARCHAR},
+ #{isOwnerUser, jdbcType=BOOLEAN},
#{installId, jdbcType=VARCHAR},
#{now, jdbcType=BIGINT},
#{now, jdbcType=BIGINT}
@@ -36,6 +55,7 @@
<update id="update" parameterType="map">
update alm_app_installs set
install_id = #{installId, jdbcType=VARCHAR},
+ is_owner_user = #{isOwnerUser, jdbcType=BOOLEAN},
updated_at = #{now, jdbcType=BIGINT}
where
alm_id = #{almId, jdbcType=VARCHAR}
diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/alm/AlmAppInstallDaoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/alm/AlmAppInstallDaoTest.java
index aab2669fb06..8cd15f7f975 100644
--- a/server/sonar-db-dao/src/test/java/org/sonar/db/alm/AlmAppInstallDaoTest.java
+++ b/server/sonar-db-dao/src/test/java/org/sonar/db/alm/AlmAppInstallDaoTest.java
@@ -65,42 +65,42 @@ public class AlmAppInstallDaoTest {
public void insert_throws_NPE_if_alm_is_null() {
expectAlmNPE();
- underTest.insertOrUpdate(dbSession, null, A_OWNER, AN_INSTALL);
+ underTest.insertOrUpdate(dbSession, null, A_OWNER, true, AN_INSTALL);
}
@Test
public void insert_throws_IAE_if_owner_id_is_null() {
expectOwnerIdNullOrEmptyIAE();
- underTest.insertOrUpdate(dbSession, GITHUB, null, AN_INSTALL);
+ underTest.insertOrUpdate(dbSession, GITHUB, null, true, AN_INSTALL);
}
@Test
public void insert_throws_IAE_if_owner_id_is_empty() {
expectOwnerIdNullOrEmptyIAE();
- underTest.insertOrUpdate(dbSession, GITHUB, EMPTY_STRING, AN_INSTALL);
+ underTest.insertOrUpdate(dbSession, GITHUB, EMPTY_STRING, true, AN_INSTALL);
}
@Test
public void insert_throws_IAE_if_install_id_is_null() {
expectInstallIdNullOrEmptyIAE();
- underTest.insertOrUpdate(dbSession, GITHUB, A_OWNER, null);
+ underTest.insertOrUpdate(dbSession, GITHUB, A_OWNER, true, null);
}
@Test
public void insert_throws_IAE_if_install_id_is_empty() {
expectInstallIdNullOrEmptyIAE();
- underTest.insertOrUpdate(dbSession, GITHUB, A_OWNER, EMPTY_STRING);
+ underTest.insertOrUpdate(dbSession, GITHUB, A_OWNER, true, EMPTY_STRING);
}
@Test
public void insert() {
when(uuidFactory.create()).thenReturn(A_UUID);
when(system2.now()).thenReturn(DATE);
- underTest.insertOrUpdate(dbSession, GITHUB, A_OWNER, AN_INSTALL);
+ underTest.insertOrUpdate(dbSession, GITHUB, A_OWNER, true, AN_INSTALL);
assertThatAlmAppInstall(GITHUB, A_OWNER)
.hasInstallId(AN_INSTALL)
@@ -112,7 +112,7 @@ public class AlmAppInstallDaoTest {
public void delete() {
when(uuidFactory.create()).thenReturn(A_UUID);
when(system2.now()).thenReturn(DATE);
- underTest.insertOrUpdate(dbSession, GITHUB, A_OWNER, AN_INSTALL);
+ underTest.insertOrUpdate(dbSession, GITHUB, A_OWNER, true, AN_INSTALL);
assertThatAlmAppInstall(GITHUB, A_OWNER)
.hasInstallId(AN_INSTALL)
@@ -134,10 +134,10 @@ public class AlmAppInstallDaoTest {
public void update() {
when(uuidFactory.create()).thenReturn(A_UUID);
when(system2.now()).thenReturn(DATE);
- underTest.insertOrUpdate(dbSession, GITHUB, A_OWNER, AN_INSTALL);
+ underTest.insertOrUpdate(dbSession, GITHUB, A_OWNER, true, AN_INSTALL);
when(system2.now()).thenReturn(DATE_LATER);
- underTest.insertOrUpdate(dbSession, GITHUB, A_OWNER, OTHER_INSTALL);
+ underTest.insertOrUpdate(dbSession, GITHUB, A_OWNER,true, OTHER_INSTALL);
assertThatAlmAppInstall(GITHUB, A_OWNER)
.hasInstallId(OTHER_INSTALL)
@@ -151,16 +151,18 @@ public class AlmAppInstallDaoTest {
when(uuidFactory.create())
.thenReturn(A_UUID)
.thenReturn(A_UUID_2);
- underTest.insertOrUpdate(dbSession, GITHUB, A_OWNER, AN_INSTALL);
- underTest.insertOrUpdate(dbSession, GITHUB, ANOTHER_OWNER, OTHER_INSTALL);
+ underTest.insertOrUpdate(dbSession, GITHUB, A_OWNER, true, AN_INSTALL);
+ underTest.insertOrUpdate(dbSession, GITHUB, ANOTHER_OWNER, false, OTHER_INSTALL);
assertThatAlmAppInstall(GITHUB, A_OWNER)
.hasInstallId(AN_INSTALL)
+ .hasOwnerUser(true)
.hasCreatedAt(DATE)
.hasUpdatedAt(DATE);
assertThatAlmAppInstall(GITHUB, ANOTHER_OWNER)
.hasInstallId(OTHER_INSTALL)
+ .hasOwnerUser(false)
.hasCreatedAt(DATE)
.hasUpdatedAt(DATE);
}
@@ -169,34 +171,34 @@ public class AlmAppInstallDaoTest {
public void getInstallId_throws_NPE_when_alm_is_null() {
expectAlmNPE();
- underTest.getInstallId(dbSession, null, A_OWNER);
+ underTest.selectByOwner(dbSession, null, A_OWNER);
}
@Test
public void getInstallId_throws_IAE_when_owner_id_is_null() {
expectOwnerIdNullOrEmptyIAE();
- underTest.getInstallId(dbSession, GITHUB, null);
+ underTest.selectByOwner(dbSession, GITHUB, null);
}
@Test
public void getInstallId_throws_IAE_when_owner_id_is_empty() {
expectOwnerIdNullOrEmptyIAE();
- underTest.getInstallId(dbSession, GITHUB, EMPTY_STRING);
+ underTest.selectByOwner(dbSession, GITHUB, EMPTY_STRING);
}
@Test
public void getInstallId_returns_empty_optional_when_entry_does_not_exist_in_DB() {
- assertThat(underTest.getInstallId(dbSession, GITHUB, A_OWNER)).isEmpty();
+ assertThat(underTest.selectByOwner(dbSession, GITHUB, A_OWNER)).isEmpty();
}
@Test
public void getInstallId_returns_install_id_when_entry_exists() {
when(uuidFactory.create()).thenReturn(A_UUID);
- underTest.insertOrUpdate(dbSession, GITHUB, A_OWNER, AN_INSTALL);
+ underTest.insertOrUpdate(dbSession, GITHUB, A_OWNER, true, AN_INSTALL);
- assertThat(underTest.getInstallId(dbSession, GITHUB, A_OWNER)).contains(AN_INSTALL);
+ assertThat(underTest.selectByOwner(dbSession, GITHUB, A_OWNER).map(AlmAppInstallDto::getInstallId)).contains(AN_INSTALL);
}
private void expectAlmNPE() {
@@ -228,7 +230,7 @@ public class AlmAppInstallDaoTest {
List<Map<String, Object>> rows = dbTester.select(
dbSession,
"select" +
- " install_id as \"installId\", created_at as \"createdAt\", updated_at as \"updatedAt\"" +
+ " install_id as \"installId\", is_owner_user as \"isOwnerUser\", created_at as \"createdAt\", updated_at as \"updatedAt\"" +
" from alm_app_installs" +
" where alm_id='" + alm.getId() + "' and owner_id='" + ownerId + "'");
if (rows.isEmpty()) {
@@ -239,6 +241,7 @@ public class AlmAppInstallDaoTest {
}
return new AlmAppInstall(
(String) rows.get(0).get("installId"),
+ (Boolean) rows.get(0).get("isOwnerUser"),
(Long) rows.get(0).get("createdAt"),
(Long) rows.get(0).get("updatedAt"));
}
@@ -251,7 +254,16 @@ public class AlmAppInstallDaoTest {
isNotNull();
if (!Objects.equals(actual.getInstallId(), expected)) {
- failWithMessage("Expected ALM App Install to have column INSTALL_ID to be <%s> but was <%s>", true, actual.getInstallId());
+ failWithMessage("Expected ALM App Install to have column INSTALL_ID to be <%s> but was <%s>", expected, actual.getInstallId());
+ }
+ return this;
+ }
+
+ public AlmAppInstallAssert hasOwnerUser(boolean expected) {
+ isNotNull();
+
+ if (!Objects.equals(actual.isOwnerUser(), expected)) {
+ failWithMessage("Expected ALM App Install to have column IS_OWNER_USER to be <%s> but was <%s>", expected, actual.isOwnerUser());
}
return this;
}
@@ -280,11 +292,13 @@ public class AlmAppInstallDaoTest {
private static final class AlmAppInstall {
private final String installId;
+ private final Boolean isOwnerUser;
private final Long createdAt;
private final Long updatedAt;
- public AlmAppInstall(@Nullable String installId, @Nullable Long createdAt, @Nullable Long updatedAt) {
+ public AlmAppInstall(@Nullable String installId, @Nullable Boolean isOwnerUser, @Nullable Long createdAt, @Nullable Long updatedAt) {
this.installId = installId;
+ this.isOwnerUser = isOwnerUser;
this.createdAt = createdAt;
this.updatedAt = updatedAt;
}
@@ -303,5 +317,9 @@ public class AlmAppInstallDaoTest {
public Long getUpdatedAt() {
return updatedAt;
}
+
+ public Boolean isOwnerUser() {
+ return isOwnerUser;
+ }
}
}