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.

ProjectDaoTest.java 8.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. /*
  2. * SonarQube
  3. * Copyright (C) 2009-2021 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.project;
  21. import java.util.Arrays;
  22. import java.util.Collections;
  23. import java.util.HashSet;
  24. import java.util.List;
  25. import java.util.Optional;
  26. import javax.annotation.Nullable;
  27. import org.junit.Rule;
  28. import org.junit.Test;
  29. import org.sonar.api.impl.utils.AlwaysIncreasingSystem2;
  30. import org.sonar.api.resources.Qualifiers;
  31. import org.sonar.api.utils.System2;
  32. import org.sonar.db.DbTester;
  33. import static org.assertj.core.api.Assertions.assertThat;
  34. import static org.assertj.core.api.Assertions.tuple;
  35. public class ProjectDaoTest {
  36. private final System2 system2 = new AlwaysIncreasingSystem2(1000L);
  37. @Rule
  38. public DbTester db = DbTester.create(system2);
  39. private final ProjectDao projectDao = new ProjectDao(system2);
  40. @Test
  41. public void should_insert_and_select_by_uuid() {
  42. ProjectDto dto = createProject("o1", "p1");
  43. projectDao.insert(db.getSession(), dto);
  44. Optional<ProjectDto> projectByUuid = projectDao.selectByUuid(db.getSession(), "uuid_o1_p1");
  45. assertThat(projectByUuid).isPresent();
  46. assertProject(projectByUuid.get(), "projectName_p1", "projectKee_o1_p1", "uuid_o1_p1", "desc_p1", "tag1,tag2", false);
  47. assertThat(projectByUuid.get().isPrivate()).isFalse();
  48. }
  49. @Test
  50. public void select_project_by_key() {
  51. ProjectDto dto = createProject("o1", "p1");
  52. projectDao.insert(db.getSession(), dto);
  53. Optional<ProjectDto> projectByKee = projectDao.selectProjectByKey(db.getSession(), "projectKee_o1_p1");
  54. assertThat(projectByKee).isPresent();
  55. assertProject(projectByKee.get(), "projectName_p1", "projectKee_o1_p1", "uuid_o1_p1", "desc_p1", "tag1,tag2", false);
  56. }
  57. @Test
  58. public void select_projects() {
  59. ProjectDto dto1 = createProject("o1", "p1");
  60. ProjectDto dto2 = createProject("o1", "p2");
  61. projectDao.insert(db.getSession(), dto1);
  62. projectDao.insert(db.getSession(), dto2);
  63. List<ProjectDto> projects = projectDao.selectProjects(db.getSession());
  64. assertThat(projects).extracting(ProjectDto::getKey).containsExactlyInAnyOrder("projectKee_o1_p1", "projectKee_o1_p2");
  65. }
  66. @Test
  67. public void select_all() {
  68. ProjectDto dto1 = createProject("o1", "p1");
  69. ProjectDto dto2 = createProject("o1", "p2");
  70. ProjectDto dto3 = createProject("o2", "p1");
  71. projectDao.insert(db.getSession(), dto1);
  72. projectDao.insert(db.getSession(), dto2);
  73. projectDao.insert(db.getSession(), dto3);
  74. List<ProjectDto> projectsByOrg = projectDao.selectAll(db.getSession());
  75. assertThat(projectsByOrg)
  76. .extracting(ProjectDto::getName, ProjectDto::getKey, ProjectDto::getUuid, ProjectDto::getDescription,
  77. ProjectDto::getTagsString, ProjectDto::isPrivate)
  78. .containsExactlyInAnyOrder(
  79. tuple("projectName_p1", "projectKee_o1_p1", "uuid_o1_p1", "desc_p1", "tag1,tag2", false),
  80. tuple("projectName_p2", "projectKee_o1_p2", "uuid_o1_p2", "desc_p2", "tag1,tag2", false),
  81. tuple("projectName_p1", "projectKee_o2_p1", "uuid_o2_p1", "desc_p1", "tag1,tag2", false));
  82. }
  83. @Test
  84. public void update_tags() {
  85. ProjectDto dto1 = createProject("o1", "p1").setTagsString("");
  86. ProjectDto dto2 = createProject("o1", "p2").setTagsString("tag1,tag2");
  87. projectDao.insert(db.getSession(), dto1);
  88. projectDao.insert(db.getSession(), dto2);
  89. List<ProjectDto> projectsByUuids = projectDao.selectByUuids(db.getSession(), new HashSet<>(Arrays.asList("uuid_o1_p1", "uuid_o1_p2")));
  90. assertThat(projectsByUuids).hasSize(2);
  91. assertProject(projectsByUuids.get(0), "projectName_p1", "projectKee_o1_p1", "uuid_o1_p1", "desc_p1", null, false);
  92. assertProject(projectsByUuids.get(1), "projectName_p2", "projectKee_o1_p2", "uuid_o1_p2", "desc_p2", "tag1,tag2", false);
  93. dto1.setTags(Collections.singletonList("tag3"));
  94. dto2.setTagsString("");
  95. projectDao.updateTags(db.getSession(), dto1);
  96. projectDao.updateTags(db.getSession(), dto2);
  97. projectsByUuids = projectDao.selectByUuids(db.getSession(), new HashSet<>(Arrays.asList("uuid_o1_p1", "uuid_o1_p2")));
  98. assertThat(projectsByUuids).hasSize(2);
  99. assertProject(projectsByUuids.get(0), "projectName_p1", "projectKee_o1_p1", "uuid_o1_p1", "desc_p1", "tag3", false);
  100. assertProject(projectsByUuids.get(1), "projectName_p2", "projectKee_o1_p2", "uuid_o1_p2", "desc_p2", null, false);
  101. assertThat(projectsByUuids.get(0).getTags()).containsOnly("tag3");
  102. }
  103. @Test
  104. public void update_visibility() {
  105. ProjectDto dto1 = createProject("o1", "p1").setPrivate(true);
  106. ProjectDto dto2 = createProject("o1", "p2");
  107. projectDao.insert(db.getSession(), dto1);
  108. projectDao.insert(db.getSession(), dto2);
  109. List<ProjectDto> projectsByUuids = projectDao.selectByUuids(db.getSession(), new HashSet<>(Arrays.asList("uuid_o1_p1", "uuid_o1_p2")));
  110. assertThat(projectsByUuids).hasSize(2);
  111. assertProject(projectsByUuids.get(0), "projectName_p1", "projectKee_o1_p1", "uuid_o1_p1", "desc_p1", "tag1,tag2", true);
  112. assertProject(projectsByUuids.get(1), "projectName_p2", "projectKee_o1_p2", "uuid_o1_p2", "desc_p2", "tag1,tag2", false);
  113. projectDao.updateVisibility(db.getSession(), dto1.getUuid(), false);
  114. projectDao.updateVisibility(db.getSession(), dto2.getUuid(), true);
  115. projectsByUuids = projectDao.selectByUuids(db.getSession(), new HashSet<>(Arrays.asList("uuid_o1_p1", "uuid_o1_p2")));
  116. assertThat(projectsByUuids).hasSize(2);
  117. assertProject(projectsByUuids.get(0), "projectName_p1", "projectKee_o1_p1", "uuid_o1_p1", "desc_p1", "tag1,tag2", false);
  118. assertProject(projectsByUuids.get(1), "projectName_p2", "projectKee_o1_p2", "uuid_o1_p2", "desc_p2", "tag1,tag2", true);
  119. }
  120. @Test
  121. public void select_by_uuids() {
  122. ProjectDto dto1 = createProject("o1", "p1");
  123. ProjectDto dto2 = createProject("o1", "p2");
  124. ProjectDto dto3 = createProject("o1", "p3");
  125. projectDao.insert(db.getSession(), dto1);
  126. projectDao.insert(db.getSession(), dto2);
  127. projectDao.insert(db.getSession(), dto3);
  128. List<ProjectDto> projectsByUuids = projectDao.selectByUuids(db.getSession(), new HashSet<>(Arrays.asList("uuid_o1_p1", "uuid_o1_p2")));
  129. assertThat(projectsByUuids).hasSize(2);
  130. assertProject(projectsByUuids.get(0), "projectName_p1", "projectKee_o1_p1", "uuid_o1_p1", "desc_p1", "tag1,tag2", false);
  131. assertProject(projectsByUuids.get(1), "projectName_p2", "projectKee_o1_p2", "uuid_o1_p2", "desc_p2", "tag1,tag2", false);
  132. }
  133. @Test
  134. public void select_empty_by_uuids() {
  135. ProjectDto dto1 = createProject("o1", "p1");
  136. ProjectDto dto2 = createProject("o1", "p2");
  137. ProjectDto dto3 = createProject("o1", "p3");
  138. projectDao.insert(db.getSession(), dto1);
  139. projectDao.insert(db.getSession(), dto2);
  140. projectDao.insert(db.getSession(), dto3);
  141. List<ProjectDto> projectsByUuids = projectDao.selectByUuids(db.getSession(), Collections.emptySet());
  142. assertThat(projectsByUuids).isEmpty();
  143. }
  144. private void assertProject(ProjectDto dto, String name, String kee, String uuid, String desc, @Nullable String tags, boolean isPrivate) {
  145. assertThat(dto).extracting("name", "kee", "key","uuid", "description", "tagsString", "private")
  146. .containsExactly(name, kee, kee, uuid, desc, tags, isPrivate);
  147. }
  148. private ProjectDto createProject(String org, String name) {
  149. return new ProjectDto()
  150. .setName("projectName_" + name)
  151. .setKey("projectKee_" + org + "_" + name)
  152. .setQualifier(Qualifiers.PROJECT)
  153. .setUuid("uuid_" + org + "_" + name)
  154. .setTags(Arrays.asList("tag1", "tag2"))
  155. .setDescription("desc_" + name)
  156. .setPrivate(false);
  157. }
  158. }