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.

ViewsPersistComponentsStepTest.java 22KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565
  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.ce.task.projectanalysis.step;
  21. import java.text.SimpleDateFormat;
  22. import java.util.Date;
  23. import java.util.Random;
  24. import java.util.stream.Stream;
  25. import javax.annotation.Nullable;
  26. import org.junit.Before;
  27. import org.junit.Rule;
  28. import org.junit.Test;
  29. import org.sonar.api.resources.Qualifiers;
  30. import org.sonar.api.resources.Scopes;
  31. import org.sonar.api.utils.System2;
  32. import org.sonar.ce.task.projectanalysis.analysis.AnalysisMetadataHolderRule;
  33. import org.sonar.ce.task.projectanalysis.component.BranchPersister;
  34. import org.sonar.ce.task.projectanalysis.component.Component;
  35. import org.sonar.ce.task.projectanalysis.component.DefaultBranchImpl;
  36. import org.sonar.ce.task.projectanalysis.component.MutableDisabledComponentsHolder;
  37. import org.sonar.ce.task.projectanalysis.component.ProjectPersister;
  38. import org.sonar.ce.task.projectanalysis.component.ProjectViewAttributes;
  39. import org.sonar.ce.task.projectanalysis.component.SubViewAttributes;
  40. import org.sonar.ce.task.projectanalysis.component.TreeRootHolderRule;
  41. import org.sonar.ce.task.projectanalysis.component.ViewAttributes;
  42. import org.sonar.ce.task.projectanalysis.component.ViewsComponent;
  43. import org.sonar.ce.task.step.ComputationStep;
  44. import org.sonar.ce.task.step.TestComputationStepContext;
  45. import org.sonar.db.DbClient;
  46. import org.sonar.db.DbTester;
  47. import org.sonar.db.component.ComponentDbTester;
  48. import org.sonar.db.component.ComponentDto;
  49. import org.sonar.db.component.ComponentTesting;
  50. import static org.assertj.core.api.Assertions.assertThat;
  51. import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
  52. import static org.mockito.Mockito.mock;
  53. import static org.mockito.Mockito.when;
  54. import static org.sonar.ce.task.projectanalysis.component.ViewAttributes.Type.APPLICATION;
  55. import static org.sonar.ce.task.projectanalysis.component.ViewAttributes.Type.PORTFOLIO;
  56. import static org.sonar.ce.task.projectanalysis.component.ViewsComponent.builder;
  57. import static org.sonar.db.component.ComponentTesting.newPrivateProjectDto;
  58. import static org.sonar.db.component.ComponentTesting.newProjectCopy;
  59. import static org.sonar.db.component.ComponentTesting.newSubView;
  60. public class ViewsPersistComponentsStepTest extends BaseStepTest {
  61. private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd");
  62. private static final String VIEW_KEY = "VIEW_KEY";
  63. private static final String VIEW_NAME = "VIEW_NAME";
  64. private static final String VIEW_DESCRIPTION = "view description";
  65. private static final String VIEW_UUID = "VIEW_UUID";
  66. private static final String SUBVIEW_1_KEY = "SUBVIEW_1_KEY";
  67. private static final String SUBVIEW_1_NAME = "SUBVIEW_1_NAME";
  68. private static final String SUBVIEW_1_DESCRIPTION = "subview 1 description";
  69. private static final String SUBVIEW_1_UUID = "SUBVIEW_1_UUID";
  70. private static final String PROJECT_VIEW_1_KEY = "PV1_KEY";
  71. private static final String PROJECT_VIEW_1_NAME = "PV1_NAME";
  72. private static final String PROJECT_VIEW_1_UUID = "PV1_UUID";
  73. @Rule
  74. public DbTester dbTester = DbTester.create(System2.INSTANCE);
  75. @Rule
  76. public TreeRootHolderRule treeRootHolder = new TreeRootHolderRule();
  77. @Rule
  78. public AnalysisMetadataHolderRule analysisMetadataHolder = new AnalysisMetadataHolderRule();
  79. private final System2 system2 = mock(System2.class);
  80. private final DbClient dbClient = dbTester.getDbClient();
  81. private Date now;
  82. private final ComponentDbTester componentDbTester = new ComponentDbTester(dbTester);
  83. private final MutableDisabledComponentsHolder disabledComponentsHolder = mock(MutableDisabledComponentsHolder.class, RETURNS_DEEP_STUBS);
  84. private PersistComponentsStep underTest;
  85. @Before
  86. public void setup() throws Exception {
  87. now = DATE_FORMAT.parse("2015-06-02");
  88. when(system2.now()).thenReturn(now.getTime());
  89. analysisMetadataHolder.setBranch(new DefaultBranchImpl());
  90. BranchPersister branchPersister = mock(BranchPersister.class);
  91. ProjectPersister projectPersister = mock(ProjectPersister.class);
  92. underTest = new PersistComponentsStep(dbClient, treeRootHolder, system2, disabledComponentsHolder, analysisMetadataHolder, branchPersister, projectPersister);
  93. }
  94. @Override
  95. protected ComputationStep step() {
  96. return underTest;
  97. }
  98. @Test
  99. public void persist_empty_view() {
  100. treeRootHolder.setRoot(createViewBuilder(PORTFOLIO).build());
  101. underTest.execute(new TestComputationStepContext());
  102. assertRowsCountInTableProjects(1);
  103. ComponentDto projectDto = getComponentFromDb(VIEW_KEY);
  104. assertDtoIsView(projectDto);
  105. }
  106. @Test
  107. public void persist_existing_empty_view() {
  108. // most of the time view already exists since its supposed to be created when config is uploaded
  109. persistComponents(newViewDto());
  110. treeRootHolder.setRoot(createViewBuilder(PORTFOLIO).build());
  111. underTest.execute(new TestComputationStepContext());
  112. assertRowsCountInTableProjects(1);
  113. assertDtoNotUpdated(VIEW_KEY);
  114. }
  115. @Test
  116. public void persist_view_with_projectView() {
  117. ComponentDto project = ComponentTesting.newPrivateProjectDto();
  118. persistComponents(project);
  119. treeRootHolder.setRoot(
  120. createViewBuilder(PORTFOLIO)
  121. .addChildren(createProjectView1Builder(project, null).build())
  122. .build());
  123. underTest.execute(new TestComputationStepContext());
  124. assertRowsCountInTableProjects(3);
  125. ComponentDto viewDto = getComponentFromDb(VIEW_KEY);
  126. assertDtoIsView(viewDto);
  127. ComponentDto pv1Dto = getComponentFromDb(PROJECT_VIEW_1_KEY);
  128. assertDtoIsProjectView1(pv1Dto, viewDto, viewDto, project);
  129. }
  130. @Test
  131. public void persist_application_with_projectView() {
  132. ComponentDto project = ComponentTesting.newPrivateProjectDto();
  133. persistComponents(project);
  134. treeRootHolder.setRoot(
  135. createViewBuilder(APPLICATION)
  136. .addChildren(createProjectView1Builder(project, null).build())
  137. .build());
  138. underTest.execute(new TestComputationStepContext());
  139. assertRowsCountInTableProjects(3);
  140. ComponentDto applicationDto = getComponentFromDb(VIEW_KEY);
  141. assertDtoIsApplication(applicationDto);
  142. ComponentDto pv1Dto = getComponentFromDb(PROJECT_VIEW_1_KEY);
  143. assertDtoIsProjectView1(pv1Dto, applicationDto, applicationDto, project);
  144. }
  145. @Test
  146. public void persist_empty_subview() {
  147. treeRootHolder.setRoot(
  148. createViewBuilder(PORTFOLIO)
  149. .addChildren(
  150. createSubView1Builder(null).build())
  151. .build());
  152. underTest.execute(new TestComputationStepContext());
  153. assertRowsCountInTableProjects(2);
  154. ComponentDto viewDto = getComponentFromDb(VIEW_KEY);
  155. assertDtoIsView(viewDto);
  156. ComponentDto sv1Dto = getComponentFromDb(SUBVIEW_1_KEY);
  157. assertDtoIsSubView1(viewDto, sv1Dto);
  158. }
  159. @Test
  160. public void persist_empty_subview_having_original_view_uuid() {
  161. treeRootHolder.setRoot(
  162. createViewBuilder(PORTFOLIO)
  163. .addChildren(
  164. createSubView1Builder("ORIGINAL_UUID").build())
  165. .build());
  166. underTest.execute(new TestComputationStepContext());
  167. assertRowsCountInTableProjects(2);
  168. ComponentDto subView = getComponentFromDb(SUBVIEW_1_KEY);
  169. assertThat(subView.getCopyResourceUuid()).isEqualTo("ORIGINAL_UUID");
  170. }
  171. @Test
  172. public void persist_existing_empty_subview_under_existing_view() {
  173. ComponentDto viewDto = newViewDto();
  174. persistComponents(viewDto);
  175. persistComponents(ComponentTesting.newSubView(viewDto, SUBVIEW_1_UUID, SUBVIEW_1_KEY).setName(SUBVIEW_1_NAME));
  176. treeRootHolder.setRoot(
  177. createViewBuilder(PORTFOLIO)
  178. .addChildren(
  179. createSubView1Builder(null).build())
  180. .build());
  181. underTest.execute(new TestComputationStepContext());
  182. assertRowsCountInTableProjects(2);
  183. assertDtoNotUpdated(VIEW_KEY);
  184. assertDtoNotUpdated(SUBVIEW_1_KEY);
  185. }
  186. @Test
  187. public void persist_empty_subview_under_existing_view() {
  188. persistComponents(newViewDto());
  189. treeRootHolder.setRoot(
  190. createViewBuilder(PORTFOLIO)
  191. .addChildren(
  192. createSubView1Builder(null).build())
  193. .build());
  194. underTest.execute(new TestComputationStepContext());
  195. assertRowsCountInTableProjects(2);
  196. assertDtoNotUpdated(VIEW_KEY);
  197. assertDtoIsSubView1(getComponentFromDb(VIEW_KEY), getComponentFromDb(SUBVIEW_1_KEY));
  198. }
  199. @Test
  200. public void persist_project_view_under_subview() {
  201. ComponentDto project = ComponentTesting.newPrivateProjectDto();
  202. persistComponents(project);
  203. treeRootHolder.setRoot(
  204. createViewBuilder(PORTFOLIO)
  205. .addChildren(
  206. createSubView1Builder(null)
  207. .addChildren(
  208. createProjectView1Builder(project, null).build())
  209. .build())
  210. .build());
  211. underTest.execute(new TestComputationStepContext());
  212. assertRowsCountInTableProjects(4);
  213. ComponentDto viewDto = getComponentFromDb(VIEW_KEY);
  214. assertDtoIsView(viewDto);
  215. ComponentDto subView1Dto = getComponentFromDb(SUBVIEW_1_KEY);
  216. assertDtoIsSubView1(viewDto, subView1Dto);
  217. ComponentDto pv1Dto = getComponentFromDb(PROJECT_VIEW_1_KEY);
  218. assertDtoIsProjectView1(pv1Dto, viewDto, subView1Dto, project);
  219. }
  220. @Test
  221. public void update_view_name_and_longName() {
  222. ComponentDto viewDto = newViewDto().setLongName("another long name").setCreatedAt(now);
  223. persistComponents(viewDto);
  224. treeRootHolder.setRoot(createViewBuilder(PORTFOLIO).build());
  225. underTest.execute(new TestComputationStepContext());
  226. // commit functional transaction -> copies B-fields to A-fields
  227. dbClient.componentDao().applyBChangesForRootComponentUuid(dbTester.getSession(), viewDto.uuid());
  228. dbTester.commit();
  229. assertRowsCountInTableProjects(1);
  230. ComponentDto newViewDto = getComponentFromDb(VIEW_KEY);
  231. assertDtoIsView(newViewDto);
  232. }
  233. @Test
  234. public void update_project_view() {
  235. ComponentDto view = newViewDto();
  236. ComponentDto project = ComponentTesting.newPrivateProjectDto();
  237. persistComponents(view, project);
  238. ComponentDto projectView = ComponentTesting.newProjectCopy(PROJECT_VIEW_1_UUID, project, view)
  239. .setDbKey(PROJECT_VIEW_1_KEY)
  240. .setName("Old name")
  241. .setCreatedAt(now);
  242. persistComponents(projectView);
  243. treeRootHolder.setRoot(
  244. createViewBuilder(PORTFOLIO)
  245. .addChildren(createProjectView1Builder(project, null).build())
  246. .build());
  247. underTest.execute(new TestComputationStepContext());
  248. // commit functional transaction -> copies B-fields to A-fields
  249. dbClient.componentDao().applyBChangesForRootComponentUuid(dbTester.getSession(), view.uuid());
  250. dbTester.commit();
  251. assertRowsCountInTableProjects(3);
  252. ComponentDto pv1Dto = getComponentFromDb(PROJECT_VIEW_1_KEY);
  253. assertDtoIsProjectView1(pv1Dto, view, view, project);
  254. }
  255. @Test
  256. public void update_copy_component_uuid_of_project_view() {
  257. ComponentDto view = newViewDto();
  258. ComponentDto project1 = newPrivateProjectDto("P1");
  259. ComponentDto project2 = newPrivateProjectDto("P2");
  260. persistComponents(view, project1, project2);
  261. // Project view in DB is associated to project1
  262. ComponentDto projectView = ComponentTesting.newProjectCopy(PROJECT_VIEW_1_UUID, project1, view)
  263. .setDbKey(PROJECT_VIEW_1_KEY)
  264. .setCreatedAt(now);
  265. persistComponents(projectView);
  266. treeRootHolder.setRoot(
  267. createViewBuilder(PORTFOLIO)
  268. // Project view in the View is linked to the first project2
  269. .addChildren(createProjectView1Builder(project2, null).build())
  270. .build());
  271. underTest.execute(new TestComputationStepContext());
  272. // commit functional transaction -> copies B-fields to A-fields
  273. dbClient.componentDao().applyBChangesForRootComponentUuid(dbTester.getSession(), view.uuid());
  274. dbTester.commit();
  275. ComponentDto pv1Dto = getComponentFromDb(PROJECT_VIEW_1_KEY);
  276. // Project view should now be linked to project2
  277. assertDtoIsProjectView1(pv1Dto, view, view, project2);
  278. }
  279. @Test
  280. public void update_copy_component_uuid_of_sub_view() {
  281. ComponentDto view = newViewDto();
  282. ComponentDto subView = newSubViewDto(view).setCopyComponentUuid("OLD_COPY");
  283. persistComponents(view, subView);
  284. treeRootHolder.setRoot(
  285. createViewBuilder(PORTFOLIO)
  286. .addChildren(
  287. createSubView1Builder("NEW_COPY").build())
  288. .build());
  289. underTest.execute(new TestComputationStepContext());
  290. // commit functional transaction -> copies B-fields to A-fields
  291. dbClient.componentDao().applyBChangesForRootComponentUuid(dbTester.getSession(), view.uuid());
  292. dbTester.commit();
  293. ComponentDto subViewReloaded = getComponentFromDb(SUBVIEW_1_KEY);
  294. assertThat(subViewReloaded.getCopyResourceUuid()).isEqualTo("NEW_COPY");
  295. }
  296. @Test
  297. public void persists_new_components_as_public_if_root_does_not_exist_yet_out_of_functional_transaction() {
  298. ComponentDto project = dbTester.components().insertComponent(ComponentTesting.newPrivateProjectDto());
  299. treeRootHolder.setRoot(
  300. createViewBuilder(PORTFOLIO)
  301. .addChildren(
  302. createSubView1Builder(null)
  303. .addChildren(
  304. createProjectView1Builder(project, null).build())
  305. .build())
  306. .build());
  307. underTest.execute(new TestComputationStepContext());
  308. Stream.of(VIEW_UUID, SUBVIEW_1_UUID, PROJECT_VIEW_1_UUID)
  309. .forEach(uuid -> assertThat(dbClient.componentDao().selectByUuid(dbTester.getSession(), uuid).get().isPrivate()).isFalse());
  310. }
  311. @Test
  312. public void persists_new_components_with_visibility_of_root_in_db_out_of_functional_transaction() {
  313. boolean isRootPrivate = new Random().nextBoolean();
  314. ComponentDto project = dbTester.components().insertComponent(ComponentTesting.newPrivateProjectDto());
  315. ComponentDto view = newViewDto().setUuid(VIEW_UUID).setDbKey(VIEW_KEY).setName("View").setPrivate(isRootPrivate);
  316. dbTester.components().insertComponent(view);
  317. treeRootHolder.setRoot(
  318. createViewBuilder(PORTFOLIO)
  319. .addChildren(
  320. createSubView1Builder(null)
  321. .addChildren(
  322. createProjectView1Builder(project, null).build())
  323. .build())
  324. .build());
  325. underTest.execute(new TestComputationStepContext());
  326. Stream.of(VIEW_UUID, SUBVIEW_1_UUID, PROJECT_VIEW_1_UUID)
  327. .forEach(uuid -> assertThat(dbClient.componentDao().selectByUuid(dbTester.getSession(), uuid).get().isPrivate())
  328. .describedAs("for uuid " + uuid)
  329. .isEqualTo(isRootPrivate));
  330. }
  331. @Test
  332. public void persists_existing_components_with_visibility_of_root_in_db_out_of_functional_transaction() {
  333. boolean isRootPrivate = new Random().nextBoolean();
  334. ComponentDto project = dbTester.components().insertComponent(ComponentTesting.newPrivateProjectDto());
  335. ComponentDto view = newViewDto().setUuid(VIEW_UUID).setDbKey(VIEW_KEY).setName("View").setPrivate(isRootPrivate);
  336. dbTester.components().insertComponent(view);
  337. ComponentDto subView = newSubView(view).setUuid("BCDE").setDbKey("MODULE").setPrivate(!isRootPrivate);
  338. dbTester.components().insertComponent(subView);
  339. dbTester.components().insertComponent(newProjectCopy("DEFG", project, view).setDbKey("DIR").setPrivate(isRootPrivate));
  340. treeRootHolder.setRoot(
  341. createViewBuilder(PORTFOLIO)
  342. .addChildren(
  343. createSubView1Builder(null)
  344. .addChildren(
  345. createProjectView1Builder(project, null).build())
  346. .build())
  347. .build());
  348. underTest.execute(new TestComputationStepContext());
  349. Stream.of(VIEW_UUID, SUBVIEW_1_UUID, PROJECT_VIEW_1_UUID, subView.uuid(), "DEFG")
  350. .forEach(uuid -> assertThat(dbClient.componentDao().selectByUuid(dbTester.getSession(), uuid).get().isPrivate())
  351. .describedAs("for uuid " + uuid)
  352. .isEqualTo(isRootPrivate));
  353. }
  354. private static ViewsComponent.Builder createViewBuilder(ViewAttributes.Type viewType) {
  355. return builder(Component.Type.VIEW, VIEW_KEY)
  356. .setUuid(VIEW_UUID)
  357. .setName(VIEW_NAME)
  358. .setDescription(VIEW_DESCRIPTION)
  359. .setViewAttributes(new ViewAttributes(viewType));
  360. }
  361. private ViewsComponent.Builder createSubView1Builder(@Nullable String originalViewUuid) {
  362. return builder(Component.Type.SUBVIEW, SUBVIEW_1_KEY)
  363. .setUuid(SUBVIEW_1_UUID)
  364. .setName(SUBVIEW_1_NAME)
  365. .setDescription(SUBVIEW_1_DESCRIPTION)
  366. .setSubViewAttributes(new SubViewAttributes(originalViewUuid));
  367. }
  368. private static ViewsComponent.Builder createProjectView1Builder(ComponentDto project, Long analysisDate) {
  369. return builder(Component.Type.PROJECT_VIEW, PROJECT_VIEW_1_KEY)
  370. .setUuid(PROJECT_VIEW_1_UUID)
  371. .setName(PROJECT_VIEW_1_NAME)
  372. .setDescription("project view description is not persisted")
  373. .setProjectViewAttributes(new ProjectViewAttributes(project.uuid(), project.getDbKey(), analysisDate, project.getBranch()));
  374. }
  375. private void persistComponents(ComponentDto... componentDtos) {
  376. componentDbTester.insertComponents(componentDtos);
  377. }
  378. private ComponentDto getComponentFromDb(String componentKey) {
  379. return dbClient.componentDao().selectByKey(dbTester.getSession(), componentKey).get();
  380. }
  381. private void assertRowsCountInTableProjects(int rowCount) {
  382. assertThat(dbTester.countRowsOfTable("components")).isEqualTo(rowCount);
  383. }
  384. private void assertDtoNotUpdated(String componentKey) {
  385. assertThat(getComponentFromDb(componentKey).getCreatedAt()).isNotEqualTo(now);
  386. }
  387. private ComponentDto newViewDto() {
  388. return ComponentTesting.newView(VIEW_UUID)
  389. .setDbKey(VIEW_KEY)
  390. .setName(VIEW_NAME);
  391. }
  392. private ComponentDto newSubViewDto(ComponentDto rootView) {
  393. return ComponentTesting.newSubView(rootView, SUBVIEW_1_UUID, SUBVIEW_1_KEY)
  394. .setName(SUBVIEW_1_NAME);
  395. }
  396. /**
  397. * Assertions to verify the DTO created from {@link #createViewBuilder(ViewAttributes.Type)} ()}
  398. */
  399. private void assertDtoIsView(ComponentDto dto) {
  400. assertThat(dto.name()).isEqualTo(VIEW_NAME);
  401. assertThat(dto.longName()).isEqualTo(VIEW_NAME);
  402. assertThat(dto.description()).isEqualTo(VIEW_DESCRIPTION);
  403. assertThat(dto.path()).isNull();
  404. assertThat(dto.uuid()).isEqualTo(VIEW_UUID);
  405. assertThat(dto.projectUuid()).isEqualTo(VIEW_UUID);
  406. assertThat(dto.getRootUuid()).isEqualTo(VIEW_UUID);
  407. assertThat(dto.moduleUuid()).isNull();
  408. assertThat(dto.moduleUuidPath()).isEqualTo("." + dto.uuid() + ".");
  409. assertThat(dto.qualifier()).isEqualTo(Qualifiers.VIEW);
  410. assertThat(dto.scope()).isEqualTo(Scopes.PROJECT);
  411. assertThat(dto.getCopyResourceUuid()).isNull();
  412. assertThat(dto.getCreatedAt()).isEqualTo(now);
  413. }
  414. /**
  415. * Assertions to verify the DTO created from {@link #createViewBuilder(ViewAttributes.Type)} ()}
  416. */
  417. private void assertDtoIsApplication(ComponentDto dto) {
  418. assertThat(dto.name()).isEqualTo(VIEW_NAME);
  419. assertThat(dto.longName()).isEqualTo(VIEW_NAME);
  420. assertThat(dto.description()).isEqualTo(VIEW_DESCRIPTION);
  421. assertThat(dto.path()).isNull();
  422. assertThat(dto.uuid()).isEqualTo(VIEW_UUID);
  423. assertThat(dto.projectUuid()).isEqualTo(VIEW_UUID);
  424. assertThat(dto.getRootUuid()).isEqualTo(VIEW_UUID);
  425. assertThat(dto.moduleUuid()).isNull();
  426. assertThat(dto.moduleUuidPath()).isEqualTo("." + dto.uuid() + ".");
  427. assertThat(dto.qualifier()).isEqualTo(Qualifiers.APP);
  428. assertThat(dto.scope()).isEqualTo(Scopes.PROJECT);
  429. assertThat(dto.getCopyResourceUuid()).isNull();
  430. assertThat(dto.getCreatedAt()).isEqualTo(now);
  431. }
  432. /**
  433. * Assertions to verify the DTO created from {@link #createProjectView1Builder(ComponentDto, Long)}
  434. */
  435. private void assertDtoIsSubView1(ComponentDto viewDto, ComponentDto sv1Dto) {
  436. assertThat(sv1Dto.name()).isEqualTo(SUBVIEW_1_NAME);
  437. assertThat(sv1Dto.longName()).isEqualTo(SUBVIEW_1_NAME);
  438. assertThat(sv1Dto.description()).isEqualTo(SUBVIEW_1_DESCRIPTION);
  439. assertThat(sv1Dto.path()).isNull();
  440. assertThat(sv1Dto.uuid()).isEqualTo(SUBVIEW_1_UUID);
  441. assertThat(sv1Dto.projectUuid()).isEqualTo(viewDto.uuid());
  442. assertThat(sv1Dto.getRootUuid()).isEqualTo(viewDto.uuid());
  443. assertThat(sv1Dto.moduleUuid()).isEqualTo(viewDto.uuid());
  444. assertThat(sv1Dto.moduleUuidPath()).isEqualTo(viewDto.moduleUuidPath() + sv1Dto.uuid() + ".");
  445. assertThat(sv1Dto.qualifier()).isEqualTo(Qualifiers.SUBVIEW);
  446. assertThat(sv1Dto.scope()).isEqualTo(Scopes.PROJECT);
  447. assertThat(sv1Dto.getCopyResourceUuid()).isNull();
  448. assertThat(sv1Dto.getCreatedAt()).isEqualTo(now);
  449. }
  450. private void assertDtoIsProjectView1(ComponentDto pv1Dto, ComponentDto viewDto, ComponentDto parentViewDto, ComponentDto project) {
  451. assertThat(pv1Dto.name()).isEqualTo(PROJECT_VIEW_1_NAME);
  452. assertThat(pv1Dto.longName()).isEqualTo(PROJECT_VIEW_1_NAME);
  453. assertThat(pv1Dto.description()).isNull();
  454. assertThat(pv1Dto.path()).isNull();
  455. assertThat(pv1Dto.uuid()).isEqualTo(PROJECT_VIEW_1_UUID);
  456. assertThat(pv1Dto.projectUuid()).isEqualTo(viewDto.uuid());
  457. assertThat(pv1Dto.getRootUuid()).isEqualTo(viewDto.uuid());
  458. assertThat(pv1Dto.moduleUuid()).isEqualTo(parentViewDto.uuid());
  459. assertThat(pv1Dto.moduleUuidPath()).isEqualTo(parentViewDto.moduleUuidPath() + pv1Dto.uuid() + ".");
  460. assertThat(pv1Dto.qualifier()).isEqualTo(Qualifiers.PROJECT);
  461. assertThat(pv1Dto.scope()).isEqualTo(Scopes.FILE);
  462. assertThat(pv1Dto.getCopyResourceUuid()).isEqualTo(project.uuid());
  463. assertThat(pv1Dto.getCreatedAt()).isEqualTo(now);
  464. }
  465. }