private static Link buildLink(ProjectLinkDto link) { Link.Builder builder = Link.newBuilder() .setId(String.valueOf(link.getUuid())) .setType(link.getType()) .setUrl(link.getHref()); ofNullable(link.getName()).ifPresent(builder::setName); return builder.build(); }
private void mergeLinks(DbSession session, String componentUuid, List<ScannerReport.ComponentLink> links, List<ProjectLinkDto> previousLinks) { Set<String> linkType = new HashSet<>(); links.forEach( link -> { String type = convertType(link.getType()); checkArgument(!linkType.contains(type), "Link of type '%s' has already been declared on component '%s'", type, componentUuid); linkType.add(type); Optional<ProjectLinkDto> previousLink = previousLinks.stream() .filter(input -> input != null && input.getType().equals(convertType(link.getType()))) .findFirst(); if (previousLink.isPresent()) { previousLink.get().setHref(link.getHref()); dbClient.projectLinkDao().update(session, previousLink.get()); } else { dbClient.projectLinkDao().insert(session, new ProjectLinkDto() .setUuid(uuidFactory.create()) .setProjectUuid(componentUuid) .setType(type) .setHref(link.getHref())); } }); previousLinks.stream() .filter(dto -> !linkType.contains(dto.getType())) .filter(dto -> ProjectLinkDto.PROVIDED_TYPES.contains(dto.getType())) .forEach(dto -> dbClient.projectLinkDao().delete(session, dto.getUuid())); }
private static CreateWsResponse buildResponse(ProjectLinkDto link) { return CreateWsResponse.newBuilder().setLink(ProjectLinks.Link.newBuilder() .setId(String.valueOf(link.getUuid())) .setName(link.getName()) .setType(link.getType()) .setUrl(link.getHref())) .build(); }
@Test public void select_by_id() { ComponentDto project = db.components().insertPrivateProject(); ProjectLinkDto link = db.componentLinks().insertProvidedLink(project, c -> c .setUuid("ABCD") .setName("Home") .setType("homepage") .setHref("http://www.struts.org")); ProjectLinkDto reloaded = underTest.selectByUuid(db.getSession(), link.getUuid()); assertThat(reloaded.getUuid()).isEqualTo("ABCD"); assertThat(reloaded.getProjectUuid()).isEqualTo(project.uuid()); assertThat(reloaded.getType()).isEqualTo("homepage"); assertThat(reloaded.getName()).isEqualTo("Home"); assertThat(reloaded.getHref()).isEqualTo("http://www.struts.org"); assertThat(reloaded.getCreatedAt()).isEqualTo(NOW); assertThat(reloaded.getUpdatedAt()).isEqualTo(NOW); }
private TestResponse deleteLink(ProjectLinkDto link) { return ws.newRequest() .setMethod("POST") .setParam(PARAM_ID, link.getUuid()) .execute(); }
@Test public void select_by_project_uuids() { ComponentDto project1 = db.components().insertPrivateProject(); ProjectLinkDto link1 = db.componentLinks().insertProvidedLink(project1); ProjectLinkDto link2 = db.componentLinks().insertProvidedLink(project1); ComponentDto project2 = db.components().insertPrivateProject(); ProjectLinkDto link3 = db.componentLinks().insertProvidedLink(project2); assertThat(underTest.selectByProjectUuids(db.getSession(), asList(project1.uuid(), project2.uuid()))) .extracting(ProjectLinkDto::getUuid) .containsOnly(link1.getUuid(), link2.getUuid(), link3.getUuid()); assertThat(underTest.selectByProjectUuids(db.getSession(), singletonList(project1.uuid()))) .extracting(ProjectLinkDto::getUuid) .containsOnly(link1.getUuid(), link2.getUuid()); assertThat(underTest.selectByProjectUuids(db.getSession(), Collections.emptyList())).isEmpty(); }
private void doHandle(String id) { try (DbSession dbSession = dbClient.openSession(false)) { ProjectLinkDto link = dbClient.projectLinkDao().selectByUuid(dbSession, id); link = WsUtils.checkFound(link, "Link with id '%s' not found", id); checkProjectAdminPermission(link); checkNotProvided(link); dbClient.projectLinkDao().delete(dbSession, link.getUuid()); dbSession.commit(); } }
@Test public void insert() { ComponentDto project = db.components().insertPrivateProject(); ProjectLinkDto link = ProjectLinkTesting.newProvidedLinkDto() .setUuid("ABCD") .setProjectUuid(project.uuid()) .setName("Home") .setType("homepage") .setHref("http://www.struts.org") // These fields will be set by the DAO .setCreatedAt(0L) .setUpdatedAt(0L); underTest.insert(db.getSession(), link); db.getSession().commit(); ProjectLinkDto reloaded = underTest.selectByUuid(db.getSession(), link.getUuid()); assertThat(reloaded.getUuid()).isEqualTo("ABCD"); assertThat(reloaded.getProjectUuid()).isEqualTo(project.uuid()); assertThat(reloaded.getType()).isEqualTo("homepage"); assertThat(reloaded.getName()).isEqualTo("Home"); assertThat(reloaded.getHref()).isEqualTo("http://www.struts.org"); assertThat(reloaded.getCreatedAt()).isEqualTo(NOW); assertThat(reloaded.getUpdatedAt()).isEqualTo(NOW); }
@Test public void delete() { ComponentDto project = db.components().insertPrivateProject(); ProjectLinkDto link = db.componentLinks().insertProvidedLink(project); underTest.delete(db.getSession(), link.getUuid()); db.getSession().commit(); assertThat(db.countRowsOfTable("project_links")).isEqualTo(0); }
@Test public void select_by_project_uuid() { ComponentDto project = db.components().insertPrivateProject(); ProjectLinkDto link1 = db.componentLinks().insertProvidedLink(project); ProjectLinkDto link2 = db.componentLinks().insertProvidedLink(project); ProjectLinkDto link3 = db.componentLinks().insertProvidedLink(project); ComponentDto otherProject = db.components().insertPrivateProject(); ProjectLinkDto otherLink = db.componentLinks().insertProvidedLink(otherProject); assertThat(underTest.selectByProjectUuid(db.getSession(), project.uuid())) .extracting(ProjectLinkDto::getUuid) .containsExactlyInAnyOrder(link1.getUuid(), link2.getUuid(), link3.getUuid()); assertThat(underTest.selectByProjectUuid(db.getSession(), otherProject.uuid())) .extracting(ProjectLinkDto::getUuid) .containsExactlyInAnyOrder(otherLink.getUuid()); assertThat(underTest.selectByProjectUuid(db.getSession(), "UNKNOWN")).isEmpty(); }
@Test public void update() { ComponentDto project = db.components().insertPrivateProject(); ProjectLinkDto link = db.componentLinks().insertProvidedLink(project, c -> c .setUuid("ABCD") .setType("ci") .setName("Gihub") .setHref("http://www.github.org")); // Force dates to be in the past db.executeUpdateSql("UPDATE project_links SET created_at=" + PAST + " ,updated_at=" + PAST); ComponentDto project2 = db.components().insertPrivateProject(); underTest.update(db.getSession(), link .setProjectUuid(project2.uuid()) .setType("homepage") .setName("Home") .setHref("http://www.sonarqube.org")); db.getSession().commit(); ProjectLinkDto reloaded = underTest.selectByUuid(db.getSession(), link.getUuid()); assertThat(reloaded.getUuid()).isEqualTo("ABCD"); assertThat(reloaded.getProjectUuid()).isEqualTo(project2.uuid()); assertThat(reloaded.getType()).isEqualTo("homepage"); assertThat(reloaded.getName()).isEqualTo("Home"); assertThat(reloaded.getHref()).isEqualTo("http://www.sonarqube.org"); assertThat(reloaded.getCreatedAt()).isEqualTo(PAST); assertThat(reloaded.getUpdatedAt()).isEqualTo(NOW); }
@Test public void keep_links_of_another_project() { ComponentDto project1 = db.components().insertPrivateProject(); ComponentDto project2 = db.components().insertPrivateProject(); ProjectLinkDto customLink1 = db.componentLinks().insertCustomLink(project1); ProjectLinkDto customLink2 = db.componentLinks().insertCustomLink(project2); userSession.logIn().addProjectPermission(ADMIN, project1, project2); deleteLink(customLink1); assertLinkIsDeleted(customLink1.getUuid()); assertLinkIsNotDeleted(customLink2.getUuid()); }
@Test public void remove_custom_link() { ComponentDto project = db.components().insertPrivateProject(); ProjectLinkDto link = db.componentLinks().insertCustomLink(project); logInAsProjectAdministrator(project); deleteLink(link); assertLinkIsDeleted(link.getUuid()); }
@Test public void request_does_not_fail_when_link_has_no_name() { ComponentDto project = db.components().insertPrivateProject(); ProjectLinkDto link = db.componentLinks().insertProvidedLink(project); logInAsProjectAdministrator(project); SearchWsResponse response = callByKey(project.getKey()); assertThat(response.getLinksList()) .extracting(Link::getId, Link::hasName) .containsExactlyInAnyOrder(tuple(link.getUuid(), false)); }
@Test public void response_fields() { ComponentDto project = db.components().insertPrivateProject(); ProjectLinkDto homepageLink = db.componentLinks().insertProvidedLink(project); ProjectLinkDto customLink = db.componentLinks().insertCustomLink(project); logInAsProjectAdministrator(project); SearchWsResponse response = callByKey(project.getKey()); assertThat(response.getLinksList()).extracting(Link::getId, Link::getName, Link::getType, Link::getUrl) .containsExactlyInAnyOrder( tuple(homepageLink.getUuid(), "", homepageLink.getType(), homepageLink.getHref()), tuple(customLink.getUuid(), customLink.getName(), customLink.getType(), customLink.getHref())); }
@Test public void request_by_project_key() { ComponentDto project = db.components().insertPrivateProject(); ProjectLinkDto link = db.componentLinks().insertCustomLink(project); logInAsProjectAdministrator(project); SearchWsResponse response = callByKey(project.getKey()); assertThat(response.getLinksList()) .extracting(Link::getId, Link::getName) .containsExactlyInAnyOrder(tuple(link.getUuid(), link.getName())); }
@Test public void request_by_project_id() { ComponentDto project = db.components().insertPrivateProject(); ProjectLinkDto link = db.componentLinks().insertCustomLink(project); logInAsProjectAdministrator(project); SearchWsResponse response = callByUuid(project.uuid()); assertThat(response.getLinksList()) .extracting(Link::getId, Link::getName) .containsExactlyInAnyOrder(tuple(link.getUuid(), link.getName())); }
@Test public void project_administrator_can_search_for_links() { ComponentDto project = db.components().insertPrivateProject(); ProjectLinkDto link = db.componentLinks().insertCustomLink(project); userSession.logIn().addProjectPermission(UserRole.ADMIN, project); SearchWsResponse response = callByKey(project.getKey()); assertThat(response.getLinksList()) .extracting(Link::getId, Link::getName) .containsExactlyInAnyOrder(tuple(link.getUuid(), link.getName())); }
@Test public void project_user_can_search_for_links() { ComponentDto project = db.components().insertPrivateProject(); ProjectLinkDto link = db.componentLinks().insertCustomLink(project); userSession.logIn().addProjectPermission(UserRole.USER, project); SearchWsResponse response = callByKey(project.getKey()); assertThat(response.getLinksList()) .extracting(Link::getId, Link::getName) .containsExactlyInAnyOrder(tuple(link.getUuid(), link.getName())); }
@Test public void several_projects() { ComponentDto project1 = db.components().insertPrivateProject(); ComponentDto project2 = db.components().insertPrivateProject(); ProjectLinkDto link1 = db.componentLinks().insertCustomLink(project1); ProjectLinkDto link2 = db.componentLinks().insertCustomLink(project2); userSession.logIn().setRoot(); SearchWsResponse response = callByKey(project1.getKey()); assertThat(response.getLinksList()) .extracting(Link::getId, Link::getName) .containsExactlyInAnyOrder(tuple(link1.getUuid(), link1.getName())); }