diff options
author | Michal Duda <michal.duda@sonarsource.com> | 2020-12-09 20:13:25 +0100 |
---|---|---|
committer | sonartech <sonartech@sonarsource.com> | 2020-12-22 20:09:35 +0000 |
commit | c73de56d4b6ab4c9fdb34a32f5f740bed672b586 (patch) | |
tree | c41d4e4a511c7acfa40bb7b098cff6801ebdd77a /server/sonar-db-dao | |
parent | 5141fc088089cdd155e8623e2d2f989e93c4fff4 (diff) | |
download | sonarqube-c73de56d4b6ab4c9fdb34a32f5f740bed672b586.tar.gz sonarqube-c73de56d4b6ab4c9fdb34a32f5f740bed672b586.zip |
SONAR-13999 remove orgs webhook WS
Diffstat (limited to 'server/sonar-db-dao')
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 |