選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

ProjectAlmSettingDaoIT.java 13KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. /*
  2. * SonarQube
  3. * Copyright (C) 2009-2023 SonarSource SA
  4. * mailto:info AT sonarsource DOT com
  5. *
  6. * This program is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU Lesser General Public
  8. * License as published by the Free Software Foundation; either
  9. * version 3 of the License, or (at your option) any later version.
  10. *
  11. * This program is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * Lesser General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU Lesser General Public License
  17. * along with this program; if not, write to the Free Software Foundation,
  18. * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  19. */
  20. package org.sonar.db.alm.setting;
  21. import java.util.HashSet;
  22. import java.util.List;
  23. import java.util.Set;
  24. import org.junit.Rule;
  25. import org.junit.Test;
  26. import org.sonar.api.impl.utils.TestSystem2;
  27. import org.sonar.core.util.UuidFactory;
  28. import org.sonar.db.DbSession;
  29. import org.sonar.db.DbTester;
  30. import org.sonar.db.audit.NoOpAuditPersister;
  31. import org.sonar.db.project.ProjectDto;
  32. import static org.assertj.core.api.Assertions.assertThat;
  33. import static org.assertj.core.api.Assertions.tuple;
  34. import static org.mockito.Mockito.mock;
  35. import static org.mockito.Mockito.when;
  36. import static org.sonar.db.almsettings.AlmSettingsTesting.newBitbucketProjectAlmSettingDto;
  37. import static org.sonar.db.almsettings.AlmSettingsTesting.newGithubProjectAlmSettingDto;
  38. public class ProjectAlmSettingDaoIT {
  39. private static final long A_DATE = 1_000_000_000_000L;
  40. private static final long A_DATE_LATER = 1_700_000_000_000L;
  41. private static final String A_UUID = "SOME_UUID";
  42. private TestSystem2 system2 = new TestSystem2().setNow(A_DATE);
  43. @Rule
  44. public DbTester db = DbTester.create(system2);
  45. private DbSession dbSession = db.getSession();
  46. private UuidFactory uuidFactory = mock(UuidFactory.class);
  47. private ProjectAlmSettingDao underTest = new ProjectAlmSettingDao(system2, uuidFactory, new NoOpAuditPersister());
  48. @Test
  49. public void select_by_project() {
  50. when(uuidFactory.create()).thenReturn(A_UUID);
  51. AlmSettingDto githubAlmSettingDto = db.almSettings().insertGitHubAlmSetting();
  52. ProjectDto project = db.components().insertPrivateProject().getProjectDto();
  53. ProjectDto anotherProject = db.components().insertPrivateProject().getProjectDto();
  54. ProjectAlmSettingDto githubProjectAlmSettingDto = newGithubProjectAlmSettingDto(githubAlmSettingDto, project);
  55. underTest.insertOrUpdate(dbSession, githubProjectAlmSettingDto, githubAlmSettingDto.getKey(), anotherProject.getName(),
  56. anotherProject.getKey());
  57. assertThat(underTest.selectByProject(dbSession, project).get())
  58. .extracting(ProjectAlmSettingDto::getUuid, ProjectAlmSettingDto::getAlmSettingUuid, ProjectAlmSettingDto::getProjectUuid,
  59. ProjectAlmSettingDto::getAlmRepo, ProjectAlmSettingDto::getAlmSlug,
  60. ProjectAlmSettingDto::getCreatedAt, ProjectAlmSettingDto::getUpdatedAt,
  61. ProjectAlmSettingDto::getSummaryCommentEnabled, ProjectAlmSettingDto::getMonorepo)
  62. .containsExactly(A_UUID, githubAlmSettingDto.getUuid(), project.getUuid(),
  63. githubProjectAlmSettingDto.getAlmRepo(), githubProjectAlmSettingDto.getAlmSlug(),
  64. A_DATE, A_DATE, githubProjectAlmSettingDto.getSummaryCommentEnabled(), false);
  65. assertThat(underTest.selectByProject(dbSession, anotherProject)).isNotPresent();
  66. }
  67. @Test
  68. public void select_by_alm_setting_and_slugs() {
  69. when(uuidFactory.create()).thenReturn(A_UUID);
  70. AlmSettingDto almSettingsDto = db.almSettings().insertBitbucketAlmSetting();
  71. ProjectDto project = db.components().insertPrivateProject().getProjectDto();
  72. ProjectAlmSettingDto bitbucketProjectAlmSettingDto = newBitbucketProjectAlmSettingDto(almSettingsDto, project);
  73. bitbucketProjectAlmSettingDto.setAlmSlug("slug1");
  74. underTest.insertOrUpdate(dbSession, bitbucketProjectAlmSettingDto, almSettingsDto.getKey(), project.getName(), project.getKey());
  75. ProjectAlmSettingDto bitbucketProjectAlmSettingDto2 = newBitbucketProjectAlmSettingDto(almSettingsDto, db.components().insertPrivateProject().getProjectDto());
  76. bitbucketProjectAlmSettingDto2.setAlmSlug("slug2");
  77. when(uuidFactory.create()).thenReturn(A_UUID + 1);
  78. underTest.insertOrUpdate(dbSession, bitbucketProjectAlmSettingDto2, almSettingsDto.getKey(), project.getName(), project.getKey());
  79. Set<String> slugs = new HashSet<>();
  80. slugs.add("slug1");
  81. assertThat(underTest.selectByAlmSettingAndSlugs(dbSession, almSettingsDto, slugs))
  82. .extracting(ProjectAlmSettingDto::getProjectUuid, ProjectAlmSettingDto::getSummaryCommentEnabled)
  83. .containsExactly(tuple(project.getUuid(), bitbucketProjectAlmSettingDto2.getSummaryCommentEnabled()));
  84. }
  85. @Test
  86. public void selectByAlm_whenGivenGithub_onlyReturnsGithubProjects() {
  87. ProjectAlmSettingDto githubProject1 = createAlmProject(db.almSettings().insertGitHubAlmSetting());
  88. ProjectAlmSettingDto githubProject2 = createAlmProject(db.almSettings().insertGitHubAlmSetting());
  89. createAlmProject(db.almSettings().insertGitlabAlmSetting());
  90. List<ProjectAlmSettingDto> projectAlmSettingDtos = underTest.selectByAlm(dbSession, ALM.GITHUB);
  91. assertThat(projectAlmSettingDtos)
  92. .usingRecursiveFieldByFieldElementComparator()
  93. .containsExactlyInAnyOrder(githubProject1, githubProject2);
  94. }
  95. @Test
  96. public void selectByProjectUuidsAndAlm_whenGivenGithubAndProjectUuids_shouldOnlyReturnThose() {
  97. AlmSettingDto githubSetting = db.almSettings().insertGitHubAlmSetting();
  98. ProjectAlmSettingDto githubProject = createAlmProject(githubSetting);
  99. createAlmProject(githubSetting);
  100. AlmSettingDto gitlabSetting = db.almSettings().insertGitlabAlmSetting();
  101. ProjectAlmSettingDto gitlabProject = createAlmProject(gitlabSetting);
  102. List<ProjectAlmSettingDto> projectAlmSettingDtos =
  103. underTest.selectByProjectUuidsAndAlm(dbSession, Set.of(githubProject.getProjectUuid(), gitlabProject.getProjectUuid()), ALM.GITHUB);
  104. assertThat(projectAlmSettingDtos)
  105. .usingRecursiveFieldByFieldElementComparator()
  106. .containsExactlyInAnyOrder(githubProject);
  107. }
  108. private ProjectAlmSettingDto createAlmProject(AlmSettingDto almSettingsDto) {
  109. ProjectDto project = db.components().insertPrivateProject().getProjectDto();
  110. when(uuidFactory.create()).thenReturn(project.getUuid() + "_forSetting");
  111. ProjectAlmSettingDto githubProjectAlmSettingDto = newGithubProjectAlmSettingDto(almSettingsDto, project);
  112. underTest.insertOrUpdate(dbSession, githubProjectAlmSettingDto, almSettingsDto.getKey(), project.getName(), project.getKey());
  113. return githubProjectAlmSettingDto;
  114. }
  115. @Test
  116. public void select_with_no_slugs_return_empty() {
  117. when(uuidFactory.create()).thenReturn(A_UUID);
  118. AlmSettingDto almSettingsDto = db.almSettings().insertBitbucketAlmSetting();
  119. assertThat(underTest.selectByAlmSettingAndSlugs(dbSession, almSettingsDto, new HashSet<>())).isEmpty();
  120. }
  121. @Test
  122. public void select_by_alm_setting_and_repos() {
  123. when(uuidFactory.create()).thenReturn(A_UUID);
  124. AlmSettingDto almSettingsDto = db.almSettings().insertGitHubAlmSetting();
  125. ProjectDto project = db.components().insertPrivateProject().getProjectDto();
  126. ProjectAlmSettingDto githubProjectAlmSettingDto = newGithubProjectAlmSettingDto(almSettingsDto, project);
  127. githubProjectAlmSettingDto.setAlmRepo("repo1");
  128. underTest.insertOrUpdate(dbSession, githubProjectAlmSettingDto, almSettingsDto.getKey(), project.getName(), project.getKey());
  129. ProjectAlmSettingDto githubProjectAlmSettingDto2 = newGithubProjectAlmSettingDto(almSettingsDto, db.components().insertPrivateProject().getProjectDto());
  130. githubProjectAlmSettingDto2.setAlmRepo("repo2");
  131. when(uuidFactory.create()).thenReturn(A_UUID + 1);
  132. underTest.insertOrUpdate(dbSession, githubProjectAlmSettingDto2, almSettingsDto.getKey(), project.getName(), project.getKey());
  133. Set<String> repos = new HashSet<>();
  134. repos.add("repo1");
  135. assertThat(underTest.selectByAlmSettingAndRepos(dbSession, almSettingsDto, repos))
  136. .extracting(ProjectAlmSettingDto::getProjectUuid, ProjectAlmSettingDto::getSummaryCommentEnabled)
  137. .containsExactly(tuple(project.getUuid(), githubProjectAlmSettingDto.getSummaryCommentEnabled()));
  138. }
  139. @Test
  140. public void select_with_no_repos_return_empty() {
  141. when(uuidFactory.create()).thenReturn(A_UUID);
  142. AlmSettingDto almSettingsDto = db.almSettings().insertGitHubAlmSetting();
  143. assertThat(underTest.selectByAlmSettingAndRepos(dbSession, almSettingsDto, new HashSet<>())).isEmpty();
  144. }
  145. @Test
  146. public void select_alm_type_and_url_by_project() {
  147. when(uuidFactory.create()).thenReturn(A_UUID);
  148. AlmSettingDto almSettingsDto = db.almSettings().insertGitHubAlmSetting();
  149. ProjectDto project = db.components().insertPrivateProject().getProjectDto();
  150. ProjectAlmSettingDto githubProjectAlmSettingDto = newGithubProjectAlmSettingDto(almSettingsDto, project);
  151. underTest.insertOrUpdate(dbSession, githubProjectAlmSettingDto, almSettingsDto.getKey(), project.getName(), project.getKey());
  152. assertThat(underTest.selectAlmTypeAndUrlByProject(dbSession))
  153. .extracting(ProjectAlmKeyAndProject::getProjectUuid, ProjectAlmKeyAndProject::getAlmId, ProjectAlmKeyAndProject::getUrl)
  154. .containsExactly(tuple(project.getUuid(), almSettingsDto.getAlm().getId(), almSettingsDto.getUrl()));
  155. }
  156. @Test
  157. public void update_existing_binding() {
  158. when(uuidFactory.create()).thenReturn(A_UUID);
  159. AlmSettingDto githubAlmSetting = db.almSettings().insertGitHubAlmSetting();
  160. ProjectDto project = db.components().insertPrivateProject().getProjectDto();
  161. ProjectAlmSettingDto projectAlmSettingDto = db.almSettings().insertGitHubProjectAlmSetting(githubAlmSetting, project);
  162. AlmSettingDto anotherGithubAlmSetting = db.almSettings().insertGitHubAlmSetting();
  163. system2.setNow(A_DATE_LATER);
  164. ProjectAlmSettingDto newProjectAlmSettingDto = newGithubProjectAlmSettingDto(anotherGithubAlmSetting, project)
  165. .setSummaryCommentEnabled(false);
  166. underTest.insertOrUpdate(dbSession, newProjectAlmSettingDto, githubAlmSetting.getKey(), project.getName(), project.getKey());
  167. assertThat(underTest.selectByProject(dbSession, project).get())
  168. .extracting(ProjectAlmSettingDto::getUuid, ProjectAlmSettingDto::getAlmSettingUuid, ProjectAlmSettingDto::getProjectUuid,
  169. ProjectAlmSettingDto::getAlmRepo, ProjectAlmSettingDto::getAlmSlug,
  170. ProjectAlmSettingDto::getCreatedAt, ProjectAlmSettingDto::getUpdatedAt,
  171. ProjectAlmSettingDto::getSummaryCommentEnabled)
  172. .containsExactly(projectAlmSettingDto.getUuid(), anotherGithubAlmSetting.getUuid(), project.getUuid(),
  173. newProjectAlmSettingDto.getAlmRepo(), newProjectAlmSettingDto.getAlmSlug(),
  174. A_DATE, A_DATE_LATER, newProjectAlmSettingDto.getSummaryCommentEnabled());
  175. }
  176. @Test
  177. public void deleteByProject() {
  178. when(uuidFactory.create()).thenReturn(A_UUID);
  179. AlmSettingDto githubAlmSetting = db.almSettings().insertGitHubAlmSetting();
  180. ProjectDto project = db.components().insertPrivateProject().getProjectDto();
  181. db.almSettings().insertGitHubProjectAlmSetting(githubAlmSetting, project);
  182. ProjectDto anotherProject = db.components().insertPrivateProject().getProjectDto();
  183. db.almSettings().insertGitHubProjectAlmSetting(githubAlmSetting, anotherProject);
  184. underTest.deleteByProject(dbSession, project);
  185. assertThat(underTest.selectByProject(dbSession, project)).isEmpty();
  186. assertThat(underTest.selectByProject(dbSession, anotherProject)).isNotEmpty();
  187. }
  188. @Test
  189. public void deleteByAlmSetting() {
  190. when(uuidFactory.create()).thenReturn(A_UUID);
  191. AlmSettingDto githubAlmSetting = db.almSettings().insertGitHubAlmSetting();
  192. ProjectDto project1 = db.components().insertPrivateProject().getProjectDto();
  193. ProjectDto project2 = db.components().insertPrivateProject().getProjectDto();
  194. db.almSettings().insertGitHubProjectAlmSetting(githubAlmSetting, project1);
  195. db.almSettings().insertGitHubProjectAlmSetting(githubAlmSetting, project2);
  196. AlmSettingDto githubAlmSetting1 = db.almSettings().insertGitHubAlmSetting();
  197. ProjectDto anotherProject = db.components().insertPrivateProject().getProjectDto();
  198. db.almSettings().insertGitHubProjectAlmSetting(githubAlmSetting1, anotherProject);
  199. underTest.deleteByAlmSetting(dbSession, githubAlmSetting);
  200. assertThat(underTest.countByAlmSetting(dbSession, githubAlmSetting)).isZero();
  201. assertThat(underTest.countByAlmSetting(dbSession, githubAlmSetting1)).isOne();
  202. }
  203. }