You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ProjectAlmSettingDaoTest.java 8.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. /*
  2. * SonarQube
  3. * Copyright (C) 2009-2020 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.Set;
  23. import org.junit.Rule;
  24. import org.junit.Test;
  25. import org.junit.rules.ExpectedException;
  26. import org.sonar.api.utils.System2;
  27. import org.sonar.core.util.UuidFactory;
  28. import org.sonar.db.DbSession;
  29. import org.sonar.db.DbTester;
  30. import org.sonar.db.project.ProjectDto;
  31. import static org.assertj.core.api.Assertions.assertThat;
  32. import static org.assertj.core.api.Assertions.tuple;
  33. import static org.mockito.Mockito.mock;
  34. import static org.mockito.Mockito.when;
  35. import static org.sonar.db.almsettings.AlmSettingsTesting.newBitbucketProjectAlmSettingDto;
  36. import static org.sonar.db.almsettings.AlmSettingsTesting.newGithubProjectAlmSettingDto;
  37. public class ProjectAlmSettingDaoTest {
  38. private static final long A_DATE = 1_000_000_000_000L;
  39. private static final long A_DATE_LATER = 1_700_000_000_000L;
  40. private static final String A_UUID = "SOME_UUID";
  41. @Rule
  42. public ExpectedException expectedException = ExpectedException.none();
  43. private System2 system2 = mock(System2.class);
  44. @Rule
  45. public DbTester db = DbTester.create(system2);
  46. private DbSession dbSession = db.getSession();
  47. private UuidFactory uuidFactory = mock(UuidFactory.class);
  48. private ProjectAlmSettingDao underTest = new ProjectAlmSettingDao(system2, uuidFactory);
  49. @Test
  50. public void select_by_project() {
  51. when(uuidFactory.create()).thenReturn(A_UUID);
  52. when(system2.now()).thenReturn(A_DATE);
  53. AlmSettingDto githubAlmSettingDto = db.almSettings().insertGitHubAlmSetting();
  54. ProjectDto project = db.components().insertPrivateProjectDto();
  55. ProjectDto anotherProject = db.components().insertPrivateProjectDto();
  56. ProjectAlmSettingDto githubProjectAlmSettingDto = newGithubProjectAlmSettingDto(githubAlmSettingDto, project);
  57. underTest.insertOrUpdate(dbSession, githubProjectAlmSettingDto);
  58. assertThat(underTest.selectByProject(dbSession, project).get())
  59. .extracting(ProjectAlmSettingDto::getUuid, ProjectAlmSettingDto::getAlmSettingUuid, ProjectAlmSettingDto::getProjectUuid,
  60. ProjectAlmSettingDto::getAlmRepo, ProjectAlmSettingDto::getAlmSlug,
  61. ProjectAlmSettingDto::getCreatedAt, ProjectAlmSettingDto::getUpdatedAt,
  62. ProjectAlmSettingDto::getSummaryCommentEnabled)
  63. .containsExactly(A_UUID, githubAlmSettingDto.getUuid(), project.getUuid(),
  64. githubProjectAlmSettingDto.getAlmRepo(), githubProjectAlmSettingDto.getAlmSlug(),
  65. A_DATE, A_DATE, githubProjectAlmSettingDto.getSummaryCommentEnabled());
  66. assertThat(underTest.selectByProject(dbSession, anotherProject)).isNotPresent();
  67. }
  68. @Test
  69. public void select_by_alm_setting_and_slugs() {
  70. when(uuidFactory.create()).thenReturn(A_UUID);
  71. when(system2.now()).thenReturn(A_DATE);
  72. AlmSettingDto almSettingsDto = db.almSettings().insertBitbucketAlmSetting();
  73. ProjectDto project = db.components().insertPrivateProjectDto();
  74. ProjectAlmSettingDto bitbucketProjectAlmSettingDto = newBitbucketProjectAlmSettingDto(almSettingsDto, project);
  75. bitbucketProjectAlmSettingDto.setAlmSlug("slug1");
  76. underTest.insertOrUpdate(dbSession, bitbucketProjectAlmSettingDto);
  77. ProjectAlmSettingDto bitbucketProjectAlmSettingDto2 = newBitbucketProjectAlmSettingDto(almSettingsDto, db.components().insertPrivateProjectDto());
  78. bitbucketProjectAlmSettingDto2.setAlmSlug("slug2");
  79. when(uuidFactory.create()).thenReturn(A_UUID + 1);
  80. underTest.insertOrUpdate(dbSession, bitbucketProjectAlmSettingDto2);
  81. Set<String> slugs = new HashSet<>();
  82. slugs.add("slug1");
  83. assertThat(underTest.selectByAlmSettingAndSlugs(dbSession, almSettingsDto, slugs))
  84. .extracting(ProjectAlmSettingDto::getProjectUuid, ProjectAlmSettingDto::getSummaryCommentEnabled)
  85. .containsExactly(tuple(project.getUuid(), bitbucketProjectAlmSettingDto2.getSummaryCommentEnabled()));
  86. }
  87. @Test
  88. public void select_with_no_slugs_return_empty() {
  89. when(uuidFactory.create()).thenReturn(A_UUID);
  90. when(system2.now()).thenReturn(A_DATE);
  91. AlmSettingDto almSettingsDto = db.almSettings().insertBitbucketAlmSetting();
  92. assertThat(underTest.selectByAlmSettingAndSlugs(dbSession, almSettingsDto, new HashSet<>())).isEmpty();
  93. }
  94. @Test
  95. public void update_existing_binding() {
  96. when(uuidFactory.create()).thenReturn(A_UUID);
  97. when(system2.now()).thenReturn(A_DATE);
  98. AlmSettingDto githubAlmSetting = db.almSettings().insertGitHubAlmSetting();
  99. ProjectDto project = db.components().insertPrivateProjectDto();
  100. ProjectAlmSettingDto projectAlmSettingDto = db.almSettings().insertGitHubProjectAlmSetting(githubAlmSetting, project);
  101. AlmSettingDto anotherGithubAlmSetting = db.almSettings().insertGitHubAlmSetting();
  102. when(system2.now()).thenReturn(A_DATE_LATER);
  103. ProjectAlmSettingDto newProjectAlmSettingDto = newGithubProjectAlmSettingDto(anotherGithubAlmSetting, project)
  104. .setSummaryCommentEnabled(false);
  105. underTest.insertOrUpdate(dbSession, newProjectAlmSettingDto);
  106. assertThat(underTest.selectByProject(dbSession, project).get())
  107. .extracting(ProjectAlmSettingDto::getUuid, ProjectAlmSettingDto::getAlmSettingUuid, ProjectAlmSettingDto::getProjectUuid,
  108. ProjectAlmSettingDto::getAlmRepo, ProjectAlmSettingDto::getAlmSlug,
  109. ProjectAlmSettingDto::getCreatedAt, ProjectAlmSettingDto::getUpdatedAt,
  110. ProjectAlmSettingDto::getSummaryCommentEnabled)
  111. .containsExactly(projectAlmSettingDto.getUuid(), anotherGithubAlmSetting.getUuid(), project.getUuid(),
  112. newProjectAlmSettingDto.getAlmRepo(), newProjectAlmSettingDto.getAlmSlug(),
  113. A_DATE, A_DATE_LATER, newProjectAlmSettingDto.getSummaryCommentEnabled());
  114. }
  115. @Test
  116. public void deleteByProject() {
  117. when(uuidFactory.create()).thenReturn(A_UUID);
  118. when(system2.now()).thenReturn(A_DATE);
  119. AlmSettingDto githubAlmSetting = db.almSettings().insertGitHubAlmSetting();
  120. ProjectDto project = db.components().insertPrivateProjectDto();
  121. db.almSettings().insertGitHubProjectAlmSetting(githubAlmSetting, project);
  122. ProjectDto anotherProject = db.components().insertPrivateProjectDto();
  123. db.almSettings().insertGitHubProjectAlmSetting(githubAlmSetting, anotherProject);
  124. underTest.deleteByProject(dbSession, project);
  125. assertThat(underTest.selectByProject(dbSession, project)).isEmpty();
  126. assertThat(underTest.selectByProject(dbSession, anotherProject)).isNotEmpty();
  127. }
  128. @Test
  129. public void deleteByAlmSetting() {
  130. when(uuidFactory.create()).thenReturn(A_UUID);
  131. when(system2.now()).thenReturn(A_DATE);
  132. AlmSettingDto githubAlmSetting = db.almSettings().insertGitHubAlmSetting();
  133. ProjectDto project1 = db.components().insertPrivateProjectDto();
  134. ProjectDto project2 = db.components().insertPrivateProjectDto();
  135. db.almSettings().insertGitHubProjectAlmSetting(githubAlmSetting, project1);
  136. db.almSettings().insertGitHubProjectAlmSetting(githubAlmSetting, project2);
  137. AlmSettingDto githubAlmSetting1 = db.almSettings().insertGitHubAlmSetting();
  138. ProjectDto anotherProject = db.components().insertPrivateProjectDto();
  139. db.almSettings().insertGitHubProjectAlmSetting(githubAlmSetting1, anotherProject);
  140. underTest.deleteByAlmSetting(dbSession, githubAlmSetting);
  141. assertThat(underTest.countByAlmSetting(dbSession, githubAlmSetting)).isZero();
  142. assertThat(underTest.countByAlmSetting(dbSession, githubAlmSetting1)).isEqualTo(1);
  143. }
  144. }