aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-db-dao
diff options
context:
space:
mode:
authorMichal Duda <michal.duda@sonarsource.com>2020-12-09 20:13:25 +0100
committersonartech <sonartech@sonarsource.com>2020-12-22 20:09:35 +0000
commitc73de56d4b6ab4c9fdb34a32f5f740bed672b586 (patch)
treec41d4e4a511c7acfa40bb7b098cff6801ebdd77a /server/sonar-db-dao
parent5141fc088089cdd155e8623e2d2f989e93c4fff4 (diff)
downloadsonarqube-c73de56d4b6ab4c9fdb34a32f5f740bed672b586.tar.gz
sonarqube-c73de56d4b6ab4c9fdb34a32f5f740bed672b586.zip
SONAR-13999 remove orgs webhook WS
Diffstat (limited to 'server/sonar-db-dao')
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/webhook/WebhookDao.java29
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/webhook/WebhookMapper.java10
-rw-r--r--server/sonar-db-dao/src/main/resources/org/sonar/db/webhook/WebhookMapper.xml13
-rw-r--r--server/sonar-db-dao/src/test/java/org/sonar/db/webhook/WebhookDaoTest.java107
-rw-r--r--server/sonar-db-dao/src/testFixtures/java/org/sonar/db/DbTester.java19
-rw-r--r--server/sonar-db-dao/src/testFixtures/java/org/sonar/db/organization/OrganizationDbTester.java2
-rw-r--r--server/sonar-db-dao/src/testFixtures/java/org/sonar/db/webhook/WebhookDbTester.java10
-rw-r--r--server/sonar-db-dao/src/testFixtures/java/org/sonar/db/webhook/WebhookTesting.java11
8 files changed, 140 insertions, 61 deletions
diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/webhook/WebhookDao.java b/server/sonar-db-dao/src/main/java/org/sonar/db/webhook/WebhookDao.java
index 1fdc8d74b0a..e3a26b689fc 100644
--- a/server/sonar-db-dao/src/main/java/org/sonar/db/webhook/WebhookDao.java
+++ b/server/sonar-db-dao/src/main/java/org/sonar/db/webhook/WebhookDao.java
@@ -26,25 +26,40 @@ import org.sonar.db.Dao;
import org.sonar.db.DbSession;
import org.sonar.db.organization.OrganizationDto;
import org.sonar.db.project.ProjectDto;
+import org.sonar.db.property.InternalPropertiesDao;
import static com.google.common.base.Preconditions.checkState;
public class WebhookDao implements Dao {
private final System2 system2;
+ private final InternalPropertiesDao internalPropertiesDao;
- public WebhookDao(System2 system2) {
+ public WebhookDao(System2 system2, InternalPropertiesDao internalPropertiesDao) {
this.system2 = system2;
+ this.internalPropertiesDao = internalPropertiesDao;
+ }
+
+ public List<WebhookDto> selectAll(DbSession dbSession) {
+ return mapper(dbSession).selectAllOrderedByName();
+ }
+
+ public List<WebhookDto> selectGlobalWebhooks(DbSession dbSession) {
+ return mapper(dbSession).selectGlobalWebhooksOrderedByName();
}
public Optional<WebhookDto> selectByUuid(DbSession dbSession, String uuid) {
return Optional.ofNullable(mapper(dbSession).selectByUuid(uuid));
}
+ // TODO remove
+ @Deprecated
public List<WebhookDto> selectByOrganization(DbSession dbSession, OrganizationDto organizationDto) {
return mapper(dbSession).selectForOrganizationUuidOrderedByName(organizationDto.getUuid());
}
+ // TODO remove
+ @Deprecated
public List<WebhookDto> selectByOrganizationUuid(DbSession dbSession, String organizationUuid) {
return mapper(dbSession).selectForOrganizationUuidOrderedByName(organizationUuid);
}
@@ -54,10 +69,14 @@ public class WebhookDao implements Dao {
}
public void insert(DbSession dbSession, WebhookDto dto) {
- checkState(dto.getOrganizationUuid() != null || dto.getProjectUuid() != null,
- "A webhook can not be created if not linked to an organization or a project.");
checkState(dto.getOrganizationUuid() == null || dto.getProjectUuid() == null,
"A webhook can not be linked to both an organization and a project.");
+
+ if (dto.getProjectUuid() == null && dto.getOrganizationUuid() == null) {
+ Optional<String> uuid = internalPropertiesDao.selectByKey(dbSession, "organization.default");
+ checkState(uuid.isPresent() && !uuid.get().isEmpty(), "No Default organization uuid configured");
+ dto.setOrganizationUuid(uuid.get());
+ }
mapper(dbSession).insert(dto.setCreatedAt(system2.now()).setUpdatedAt(system2.now()));
}
@@ -69,10 +88,6 @@ public class WebhookDao implements Dao {
mapper(dbSession).delete(uuid);
}
- public void deleteByOrganization(DbSession dbSession, OrganizationDto organization) {
- mapper(dbSession).deleteForOrganizationUuid(organization.getUuid());
- }
-
public void deleteByProject(DbSession dbSession, ProjectDto projectDto) {
mapper(dbSession).deleteForProjectUuid(projectDto.getUuid());
}
diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/webhook/WebhookMapper.java b/server/sonar-db-dao/src/main/java/org/sonar/db/webhook/WebhookMapper.java
index 83c6af8634f..065036600bd 100644
--- a/server/sonar-db-dao/src/main/java/org/sonar/db/webhook/WebhookMapper.java
+++ b/server/sonar-db-dao/src/main/java/org/sonar/db/webhook/WebhookMapper.java
@@ -28,8 +28,16 @@ public interface WebhookMapper {
@CheckForNull
WebhookDto selectByUuid(@Param("webhookUuid") String webhookUuid);
+ List<WebhookDto> selectAllOrderedByName();
+
+ List<WebhookDto> selectGlobalWebhooksOrderedByName();
+
+ // TODO remove
+ @Deprecated
List<WebhookDto> selectForProjectUuidOrderedByName(@Param("projectUuid") String projectUuid);
+ // TODO remove
+ @Deprecated
List<WebhookDto> selectForOrganizationUuidOrderedByName(@Param("organizationUuid") String organizationUuid);
void insert(WebhookDto dto);
@@ -38,7 +46,5 @@ public interface WebhookMapper {
void delete(@Param("uuid") String uuid);
- void deleteForOrganizationUuid(@Param("organizationUuid") String organizationUuid);
-
void deleteForProjectUuid(@Param("projectUuid") String organizationUuid);
}
diff --git a/server/sonar-db-dao/src/main/resources/org/sonar/db/webhook/WebhookMapper.xml b/server/sonar-db-dao/src/main/resources/org/sonar/db/webhook/WebhookMapper.xml
index cd2a7ee3919..e1531e30aa1 100644
--- a/server/sonar-db-dao/src/main/resources/org/sonar/db/webhook/WebhookMapper.xml
+++ b/server/sonar-db-dao/src/main/resources/org/sonar/db/webhook/WebhookMapper.xml
@@ -21,6 +21,19 @@
where uuid = #{webhookUuid,jdbcType=VARCHAR}
</select>
+ <select id="selectAllOrderedByName" parameterType="String" resultType="org.sonar.db.webhook.WebhookDto">
+ select <include refid="sqlColumns" />
+ from webhooks
+ order by name asc
+ </select>
+
+ <select id="selectGlobalWebhooksOrderedByName" parameterType="String" resultType="org.sonar.db.webhook.WebhookDto">
+ select <include refid="sqlColumns" />
+ from webhooks
+ where project_uuid is null
+ order by name asc
+ </select>
+
<select id="selectForOrganizationUuidOrderedByName" parameterType="String" resultType="org.sonar.db.webhook.WebhookDto">
select <include refid="sqlColumns" />
from webhooks
diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/webhook/WebhookDaoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/webhook/WebhookDaoTest.java
index 5d8b6eaea06..c27ba15ecec 100644
--- a/server/sonar-db-dao/src/test/java/org/sonar/db/webhook/WebhookDaoTest.java
+++ b/server/sonar-db-dao/src/test/java/org/sonar/db/webhook/WebhookDaoTest.java
@@ -20,10 +20,10 @@
package org.sonar.db.webhook;
import java.util.Date;
+import java.util.List;
import java.util.Optional;
import org.junit.Rule;
import org.junit.Test;
-import org.junit.rules.ExpectedException;
import org.sonar.api.utils.System2;
import org.sonar.db.DbClient;
import org.sonar.db.DbSession;
@@ -34,17 +34,14 @@ import org.sonar.db.organization.OrganizationDto;
import org.sonar.db.project.ProjectDto;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
public class WebhookDaoTest {
@Rule
- public final DbTester dbTester = DbTester.create(System2.INSTANCE).setDisableDefaultOrganization(true);
-
- @Rule
- public ExpectedException expectedException = ExpectedException.none();
-
- private System2 system2 = System2.INSTANCE;
+ public final DbTester dbTester = DbTester.create(System2.INSTANCE);
+ private final System2 system2 = System2.INSTANCE;
private final DbClient dbClient = dbTester.getDbClient();
private final DbSession dbSession = dbTester.getSession();
private final WebhookDao underTest = dbClient.webhookDao();
@@ -58,12 +55,55 @@ public class WebhookDaoTest {
}
@Test
- public void insert_row_with_organization() {
+ public void select_all_webhooks() {
+ ProjectDto projectDto = componentDbTester.insertPrivateProjectDto();
+ webhookDbTester.insertGlobalWebhook();
+ webhookDbTester.insertGlobalWebhook();
+ webhookDbTester.insertWebhook(projectDto);
+ webhookDbTester.insertWebhook(projectDto);
+
+ List<WebhookDto> results = underTest.selectAll(dbSession);
+
+ assertThat(results).hasSize(4);
+ }
+
+ @Test
+ public void select_all_webhooks_returns_empty_list_if_there_are_no_webhooks() {
+ List<WebhookDto> results = underTest.selectAll(dbSession);
+
+ assertThat(results).isEmpty();
+ }
+
+ @Test
+ public void select_global_webhooks() {
+ ProjectDto projectDto = componentDbTester.insertPrivateProjectDto();
+ webhookDbTester.insertGlobalWebhook();
+ webhookDbTester.insertGlobalWebhook();
+ webhookDbTester.insertWebhook(projectDto);
+ webhookDbTester.insertWebhook(projectDto);
+
+ List<WebhookDto> results = underTest.selectGlobalWebhooks(dbSession);
+
+ assertThat(results).hasSize(2);
+ }
+
+ @Test
+ public void select_global_webhooks_returns_empty_list_if_there_are_no_global_webhooks() {
+ ProjectDto projectDto = componentDbTester.insertPrivateProjectDto();
+ webhookDbTester.insertWebhook(projectDto);
+ webhookDbTester.insertWebhook(projectDto);
+
+ List<WebhookDto> results = underTest.selectGlobalWebhooks(dbSession);
+
+ assertThat(results).isEmpty();
+ }
+
+ @Test
+ public void insert_global_webhook() {
WebhookDto dto = new WebhookDto()
.setUuid("UUID_1")
.setName("NAME_1")
.setUrl("URL_1")
- .setOrganizationUuid("UUID_2")
.setSecret("a_secret");
underTest.insert(dbSession, dto);
@@ -73,7 +113,7 @@ public class WebhookDaoTest {
assertThat(stored.getUuid()).isEqualTo(dto.getUuid());
assertThat(stored.getName()).isEqualTo(dto.getName());
assertThat(stored.getUrl()).isEqualTo(dto.getUrl());
- assertThat(stored.getOrganizationUuid()).isEqualTo(dto.getOrganizationUuid());
+ assertThat(stored.getOrganizationUuid()).isEqualTo(organizationDbTester.getDefaultOrganization().getUuid());
assertThat(stored.getProjectUuid()).isNull();
assertThat(stored.getSecret()).isEqualTo(dto.getSecret());
assertThat(new Date(stored.getCreatedAt())).isInSameMinuteWindowAs(new Date(system2.now()));
@@ -105,15 +145,16 @@ public class WebhookDaoTest {
@Test
public void update_with_only_required_fields() {
- OrganizationDto organization = organizationDbTester.insert();
- WebhookDto dto = webhookDbTester.insertWebhook(organization);
+ WebhookDto dto = webhookDbTester.insertGlobalWebhook();
underTest.update(dbSession, dto
.setName("a-fancy-webhook")
.setUrl("http://www.fancy-webhook.io")
.setSecret(null));
- WebhookDto reloaded = underTest.selectByUuid(dbSession, dto.getUuid()).get();
+ Optional<WebhookDto> optionalResult = underTest.selectByUuid(dbSession, dto.getUuid());
+ assertThat(optionalResult).isPresent();
+ WebhookDto reloaded = optionalResult.get();
assertThat(reloaded.getUuid()).isEqualTo(dto.getUuid());
assertThat(reloaded.getName()).isEqualTo("a-fancy-webhook");
assertThat(reloaded.getUrl()).isEqualTo("http://www.fancy-webhook.io");
@@ -126,15 +167,16 @@ public class WebhookDaoTest {
@Test
public void update_with_all_fields() {
- OrganizationDto organization = organizationDbTester.insert();
- WebhookDto dto = webhookDbTester.insertWebhook(organization);
+ WebhookDto dto = webhookDbTester.insertGlobalWebhook();
underTest.update(dbSession, dto
.setName("a-fancy-webhook")
.setUrl("http://www.fancy-webhook.io")
.setSecret("a_new_secret"));
- WebhookDto reloaded = underTest.selectByUuid(dbSession, dto.getUuid()).get();
+ Optional<WebhookDto> optionalResult = underTest.selectByUuid(dbSession, dto.getUuid());
+ assertThat(optionalResult).isPresent();
+ WebhookDto reloaded = optionalResult.get();
assertThat(reloaded.getUuid()).isEqualTo(dto.getUuid());
assertThat(reloaded.getName()).isEqualTo("a-fancy-webhook");
assertThat(reloaded.getUrl()).isEqualTo("http://www.fancy-webhook.io");
@@ -161,23 +203,8 @@ public class WebhookDaoTest {
}
@Test
- public void cleanWebhooksOfAnOrganization() {
- OrganizationDto organization = organizationDbTester.insert();
- webhookDbTester.insertWebhook(organization);
- webhookDbTester.insertWebhook(organization);
- webhookDbTester.insertWebhook(organization);
- webhookDbTester.insertWebhook(organization);
-
- underTest.deleteByOrganization(dbSession, organization);
-
- Optional<WebhookDto> reloaded = underTest.selectByUuid(dbSession, organization.getUuid());
- assertThat(reloaded).isEmpty();
- }
-
- @Test
public void delete() {
- OrganizationDto organization = organizationDbTester.insert();
- WebhookDto dto = webhookDbTester.insertWebhook(organization);
+ WebhookDto dto = webhookDbTester.insertGlobalWebhook();
underTest.delete(dbSession, dto.getUuid());
@@ -186,23 +213,21 @@ public class WebhookDaoTest {
}
@Test
- public void fail_if_webhook_does_not_have_an_organization_nor_a_project() {
- expectedException.expect(IllegalStateException.class);
- expectedException.expectMessage("A webhook can not be created if not linked to an organization or a project.");
-
+ public void set_default_org_if_webhook_does_not_have_a_project_nor_organization() {
WebhookDto dto = new WebhookDto()
.setUuid("UUID_1")
.setName("NAME_1")
.setUrl("URL_1");
underTest.insert(dbSession, dto);
+
+ Optional<WebhookDto> reloaded = underTest.selectByUuid(dbSession, dto.getUuid());
+ assertThat(reloaded).isPresent();
+ assertThat(reloaded.get().getOrganizationUuid()).isEqualTo(organizationDbTester.getDefaultOrganization().getUuid());
}
@Test
public void fail_if_webhook_have_both_an_organization_nor_a_project() {
- expectedException.expect(IllegalStateException.class);
- expectedException.expectMessage("A webhook can not be linked to both an organization and a project.");
-
WebhookDto dto = new WebhookDto()
.setUuid("UUID_1")
.setName("NAME_1")
@@ -210,7 +235,9 @@ public class WebhookDaoTest {
.setOrganizationUuid("UUID_2")
.setProjectUuid("UUID_3");
- underTest.insert(dbSession, dto);
+ assertThatThrownBy(() -> underTest.insert(dbSession, dto))
+ .isInstanceOf(IllegalStateException.class)
+ .hasMessage("A webhook can not be linked to both an organization and a project.");
}
private WebhookDto selectByUuid(String uuid) {
diff --git a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/DbTester.java b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/DbTester.java
index bab3211c881..b4f72ec2483 100644
--- a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/DbTester.java
+++ b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/DbTester.java
@@ -75,6 +75,7 @@ public class DbTester extends AbstractDbTester<TestDbImpl> {
private boolean disableDefaultOrganization = false;
private boolean started = false;
private String defaultOrganizationUuid = randomAlphanumeric(40);
+ private String defaultOrganizationKey = randomAlphanumeric(40);
private OrganizationDto defaultOrganization;
private final UserDbTester userTester;
@@ -161,18 +162,30 @@ public class DbTester extends AbstractDbTester<TestDbImpl> {
client = new DbClient(db.getDatabase(), db.getMyBatis(), new TestDBSessions(db.getMyBatis()), daos.toArray(new Dao[daos.size()]));
}
+ //TODO remove
+ @Deprecated
public DbTester setDisableDefaultOrganization(boolean b) {
checkState(!started, "DbTester is already started");
this.disableDefaultOrganization = b;
return this;
}
+ //TODO remove
+ @Deprecated
public DbTester setDefaultOrganizationUuid(String uuid) {
checkState(!started, "DbTester is already started");
this.defaultOrganizationUuid = uuid;
return this;
}
+ //TODO remove
+ @Deprecated
+ public DbTester setDefaultOrganizationKey(String key) {
+ checkState(!started, "DbTester is already started");
+ this.defaultOrganizationKey = key;
+ return this;
+ }
+
@Override
protected void before() {
db.start();
@@ -184,8 +197,10 @@ public class DbTester extends AbstractDbTester<TestDbImpl> {
started = true;
}
+ //TODO remove
+ @Deprecated
private void insertDefaultOrganization() {
- defaultOrganization = OrganizationTesting.newOrganizationDto().setUuid(defaultOrganizationUuid);
+ defaultOrganization = OrganizationTesting.newOrganizationDto().setUuid(defaultOrganizationUuid).setKey(defaultOrganizationKey);
try (DbSession dbSession = db.getMyBatis().openSession(false)) {
client.organizationDao().insert(dbSession, defaultOrganization, false);
client.internalPropertiesDao().save(dbSession, "organization.default", defaultOrganization.getUuid());
@@ -193,6 +208,8 @@ public class DbTester extends AbstractDbTester<TestDbImpl> {
}
}
+ //TODO remove
+ @Deprecated
public OrganizationDto getDefaultOrganization() {
checkState(defaultOrganization != null, "Default organization has not been created");
return defaultOrganization;
diff --git a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/organization/OrganizationDbTester.java b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/organization/OrganizationDbTester.java
index 684524fade4..22ce994c617 100644
--- a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/organization/OrganizationDbTester.java
+++ b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/organization/OrganizationDbTester.java
@@ -26,6 +26,8 @@ import org.sonar.db.DbSession;
import org.sonar.db.DbTester;
import org.sonar.db.user.UserDto;
+//TODO remove
+@Deprecated
public class OrganizationDbTester {
private final DbTester db;
diff --git a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/webhook/WebhookDbTester.java b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/webhook/WebhookDbTester.java
index ff6ce61641b..5405d3752c0 100644
--- a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/webhook/WebhookDbTester.java
+++ b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/webhook/WebhookDbTester.java
@@ -22,10 +22,9 @@ package org.sonar.db.webhook;
import java.util.Optional;
import org.sonar.db.DbSession;
import org.sonar.db.DbTester;
-import org.sonar.db.component.ComponentDto;
-import org.sonar.db.organization.OrganizationDto;
import org.sonar.db.project.ProjectDto;
+import static org.sonar.db.webhook.WebhookTesting.newGlobalWebhook;
import static org.sonar.db.webhook.WebhookTesting.newWebhook;
public class WebhookDbTester {
@@ -36,8 +35,8 @@ public class WebhookDbTester {
this.dbTester = dbTester;
}
- public WebhookDto insertWebhook(OrganizationDto organizationDto) {
- return insert(newWebhook(organizationDto));
+ public WebhookDto insertGlobalWebhook() {
+ return insert(newGlobalWebhook());
}
public WebhookDto insertWebhook(ProjectDto project) {
@@ -46,6 +45,9 @@ public class WebhookDbTester {
public WebhookDto insert(WebhookDto dto) {
DbSession dbSession = dbTester.getSession();
+ if (dto.getProjectUuid() == null && dto.getOrganizationUuid() == null) {
+ dto.setOrganizationUuid(dbTester.getDefaultOrganization().getUuid());
+ }
dbTester.getDbClient().webhookDao().insert(dbSession, dto);
dbSession.commit();
return dto;
diff --git a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/webhook/WebhookTesting.java b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/webhook/WebhookTesting.java
index 16d512aec55..ad024c89815 100644
--- a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/webhook/WebhookTesting.java
+++ b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/webhook/WebhookTesting.java
@@ -22,7 +22,6 @@ package org.sonar.db.webhook;
import java.util.Arrays;
import java.util.Calendar;
import java.util.function.Consumer;
-import org.sonar.db.organization.OrganizationDto;
import org.sonar.db.project.ProjectDto;
import static org.apache.commons.lang.RandomStringUtils.randomAlphanumeric;
@@ -43,16 +42,14 @@ public class WebhookTesting {
.setProjectUuid(projectUuid);
}
- public static WebhookDto newWebhook(OrganizationDto organizationDto) {
- return getWebhookDto()
- .setOrganizationUuid(organizationDto.getUuid());
+ public static WebhookDto newGlobalWebhook() {
+ return getWebhookDto();
}
@SafeVarargs
- public static WebhookDto newOrganizationWebhook(String name, String organizationUuid, Consumer<WebhookDto>... consumers) {
+ public static WebhookDto newGlobalWebhook(String name, Consumer<WebhookDto>... consumers) {
return getWebhookDto(consumers)
- .setName(name)
- .setOrganizationUuid(organizationUuid);
+ .setName(name);
}
@SafeVarargs