@Test public void return_measures_on_application() { OrganizationDto organization = db.organizations().insert(); ComponentDto application = db.components().insertPrivateApplication(organization); userSession.addProjectPermission(UserRole.USER, application); MetricDto coverage = db.measures().insertMetric(m -> m.setValueType(FLOAT.name())); db.measures().insertLiveMeasure(application, coverage, m -> m.setValue(15.5d)); SearchWsResponse result = call(singletonList(application.getDbKey()), singletonList(coverage.getKey())); List<Measure> measures = result.getMeasuresList(); assertThat(measures).hasSize(1); Measure measure = measures.get(0); assertThat(measure.getMetric()).isEqualTo(coverage.getKey()); assertThat(measure.getValue()).isEqualTo("15.5"); }
@Test public void set_application_homepage() { OrganizationDto organization = db.organizations().insert(); ComponentDto application = db.components().insertPrivateApplication(organization); UserDto user = db.users().insertUser(); userSession.logIn(user); ws.newRequest() .setMethod("POST") .setParam(PARAM_TYPE, "APPLICATION") .setParam(PARAM_COMPONENT, application.getKey()) .execute(); UserDto actual = db.getDbClient().userDao().selectByLogin(db.getSession(), user.getLogin()); assertThat(actual).isNotNull(); assertThat(actual.getHomepageType()).isEqualTo("APPLICATION"); assertThat(actual.getHomepageParameter()).isEqualTo(application.uuid()); }
@Test public void fallback_when_user_homepage_application_and_governance_plugin_is_not_installed() { withoutGovernancePlugin(); ComponentDto application = db.components().insertPrivateApplication(db.getDefaultOrganization()); UserDto user = db.users().insertUser(u -> u.setHomepageType("APPLICATION").setHomepageParameter(application.uuid())); userSessionRule.logIn(user.getLogin()); CurrentWsResponse response = ws.newRequest().executeProtobuf(CurrentWsResponse.class); assertThat(response.getHomepage().getType().toString()).isEqualTo("PROJECTS"); }
@Test public void search_tags_by_application() { OrganizationDto organization = db.getDefaultOrganization(); ComponentDto application = db.components().insertPrivateApplication(organization); ComponentDto project = db.components().insertPrivateProject(organization); db.components().insertComponent(newProjectCopy(project, application)); permissionIndexer.allowOnlyAnyone(project); RuleDefinitionDto rule = db.rules().insert(); db.issues().insert(rule, project, project, issue -> issue.setTags(singletonList("cwe"))); issueIndexer.indexOnStartup(emptySet()); viewIndexer.indexOnStartup(emptySet()); userSession.logIn().addMembership(organization); TagsResponse result = ws.newRequest() .setParam("project", application.getKey()) .executeProtobuf(TagsResponse.class); assertThat(result.getTagsList()).containsExactly("cwe"); }
@Test public void return_default_homepage_when_set_to_an_application_but_no_rights_on_this_application() { withGovernancePlugin(); ComponentDto application = db.components().insertPrivateApplication(db.getDefaultOrganization()); UserDto user = db.users().insertUser(u -> u.setHomepageType("APPLICATION").setHomepageParameter(application.uuid())); userSessionRule.logIn(user); CurrentWsResponse response = call(); assertThat(response.getHomepage()) .extracting(CurrentWsResponse.Homepage::getType) .containsExactly(CurrentWsResponse.HomepageType.PROJECTS); }
@Test public void do_not_return_issues_from_project_branch_when_filtering_by_portfolios() { ComponentDto portfolio = db.components().insertPrivateApplication(db.getDefaultOrganization()); ComponentDto project = db.components().insertMainBranch(); ComponentDto projectBranch = db.components().insertProjectBranch(project); ComponentDto fileOnProjectBranch = db.components().insertComponent(newFileDto(projectBranch)); indexView(portfolio.uuid(), singletonList(project.uuid())); IssueDoc issueOnProject = newDoc(project); IssueDoc issueOnProjectBranch = newDoc(projectBranch); IssueDoc issueOnFileOnProjectBranch = newDoc(fileOnProjectBranch); indexIssues(issueOnProject, issueOnFileOnProjectBranch, issueOnProjectBranch); assertThatSearchReturnsOnly(IssueQuery.builder().viewUuids(singletonList(portfolio.uuid())), issueOnProject.key()); assertThatSearchReturnsOnly(IssueQuery.builder().viewUuids(singletonList(portfolio.uuid())).projectUuids(singletonList(project.uuid())), issueOnProject.key()); assertThatSearchReturnsEmpty(IssueQuery.builder().viewUuids(singletonList(portfolio.uuid())).projectUuids(singletonList(projectBranch.uuid()))); }
@Test public void return_homepage_when_set_to_an_application() { withGovernancePlugin(); ComponentDto application = db.components().insertPrivateApplication(db.getDefaultOrganization()); UserDto user = db.users().insertUser(u -> u.setHomepageType("APPLICATION").setHomepageParameter(application.uuid())); userSessionRule.logIn(user).addProjectPermission(USER, application); CurrentWsResponse response = call(); assertThat(response.getHomepage()) .extracting(CurrentWsResponse.Homepage::getType, CurrentWsResponse.Homepage::getComponent) .containsExactly(CurrentWsResponse.HomepageType.APPLICATION, application.getKey()); }
@Test public void search_by_application_key() { ComponentDto application = db.components().insertPrivateApplication(db.getDefaultOrganization()); ComponentDto project1 = db.components().insertPrivateProject(); ComponentDto project2 = db.components().insertPrivateProject(); db.components().insertComponents(newProjectCopy(project1, application)); db.components().insertComponents(newProjectCopy(project2, application)); userSession.addProjectPermission(USER, application); assertThat(underTest.create(new SearchRequest() .setComponentKeys(singletonList(application.getKey()))) .viewUuids()).containsExactly(application.uuid()); }
@Test public void filter_by_portfolios() { ComponentDto portfolio1 = db.components().insertPrivateApplication(db.getDefaultOrganization()); ComponentDto portfolio2 = db.components().insertPrivateApplication(db.getDefaultOrganization()); ComponentDto project1 = db.components().insertPrivateProject(); ComponentDto file = db.components().insertComponent(newFileDto(project1)); ComponentDto project2 = db.components().insertPrivateProject(); IssueDoc issueOnProject1 = newDoc(project1); IssueDoc issueOnFile = newDoc(file); IssueDoc issueOnProject2 = newDoc(project2); indexIssues(issueOnProject1, issueOnFile, issueOnProject2); indexView(portfolio1.uuid(), singletonList(project1.uuid())); indexView(portfolio2.uuid(), singletonList(project2.uuid())); assertThatSearchReturnsOnly(IssueQuery.builder().viewUuids(singletonList(portfolio1.uuid())), issueOnProject1.key(), issueOnFile.key()); assertThatSearchReturnsOnly(IssueQuery.builder().viewUuids(singletonList(portfolio2.uuid())), issueOnProject2.key()); assertThatSearchReturnsOnly(IssueQuery.builder().viewUuids(asList(portfolio1.uuid(), portfolio2.uuid())), issueOnProject1.key(), issueOnFile.key(), issueOnProject2.key()); assertThatSearchReturnsOnly(IssueQuery.builder().viewUuids(singletonList(portfolio1.uuid())).projectUuids(singletonList(project1.uuid())), issueOnProject1.key(), issueOnFile.key()); assertThatSearchReturnsOnly(IssueQuery.builder().viewUuids(singletonList(portfolio1.uuid())).fileUuids(singletonList(file.uuid())), issueOnFile.key()); assertThatSearchReturnsEmpty(IssueQuery.builder().viewUuids(singletonList("unknown"))); }
@Test public void search_authors_by_application() { String leia = "leia.organa"; OrganizationDto defaultOrganization = db.getDefaultOrganization(); ComponentDto application = db.components().insertPrivateApplication(defaultOrganization); ComponentDto project = db.components().insertPrivateProject(defaultOrganization); db.components().insertComponent(newProjectCopy(project, application)); permissionIndexer.allowOnlyAnyone(project); RuleDefinitionDto rule = db.rules().insert(); db.issues().insert(rule, project, project, issue -> issue.setAuthorLogin(leia)); issueIndexer.indexOnStartup(emptySet()); viewIndexer.indexOnStartup(emptySet()); userSession.logIn().addMembership(defaultOrganization); assertThat(ws.newRequest() .setParam("project", application.getKey()) .executeProtobuf(AuthorsResponse.class).getAuthorsList()) .containsExactlyInAnyOrder(leia); }
@Test public void getSansTop25Report_aggregation_on_portfolio() { ComponentDto portfolio1 = db.components().insertPrivateApplication(db.getDefaultOrganization()); ComponentDto portfolio2 = db.components().insertPrivateApplication(db.getDefaultOrganization()); ComponentDto project1 = db.components().insertPrivateProject(); ComponentDto project2 = db.components().insertPrivateProject();
@Test public void filter_by_main_application() { ComponentDto application1 = db.components().insertPrivateApplication(db.getDefaultOrganization()); ComponentDto application2 = db.components().insertPrivateApplication(db.getDefaultOrganization()); ComponentDto project1 = db.components().insertPrivateProject(); ComponentDto file = db.components().insertComponent(newFileDto(project1)); ComponentDto project2 = db.components().insertPrivateProject(); indexView(application1.uuid(), singletonList(project1.uuid())); indexView(application2.uuid(), singletonList(project2.uuid())); IssueDoc issueOnProject1 = newDoc(project1); IssueDoc issueOnFile = newDoc(file); IssueDoc issueOnProject2 = newDoc(project2); indexIssues(issueOnProject1, issueOnFile, issueOnProject2); assertThatSearchReturnsOnly(IssueQuery.builder().viewUuids(singletonList(application1.uuid())), issueOnProject1.key(), issueOnFile.key()); assertThatSearchReturnsOnly(IssueQuery.builder().viewUuids(singletonList(application2.uuid())), issueOnProject2.key()); assertThatSearchReturnsOnly(IssueQuery.builder().viewUuids(asList(application1.uuid(), application2.uuid())), issueOnProject1.key(), issueOnFile.key(), issueOnProject2.key()); assertThatSearchReturnsOnly(IssueQuery.builder().viewUuids(singletonList(application1.uuid())).projectUuids(singletonList(project1.uuid())), issueOnProject1.key(), issueOnFile.key()); assertThatSearchReturnsOnly(IssueQuery.builder().viewUuids(singletonList(application1.uuid())).fileUuids(singletonList(file.uuid())), issueOnFile.key()); assertThatSearchReturnsEmpty(IssueQuery.builder().viewUuids(singletonList("unknown"))); }
@Test public void application_branches() { ComponentDto application = db.components().insertPrivateApplication(db.getDefaultOrganization()); db.components().insertProjectBranch(application, b -> b.setKey("feature/bar")); db.components().insertProjectBranch(application, b -> b.setKey("feature/foo")); userSession.logIn().addProjectPermission(USER, application); ListWsResponse response = ws.newRequest() .setParam("project", application.getDbKey()) .executeProtobuf(ListWsResponse.class); assertThat(response.getBranchesList()) .extracting(Branch::getName, Branch::getType) .containsExactlyInAnyOrder( tuple("feature/foo", BranchType.LONG), tuple("feature/bar", BranchType.LONG)); }
@Test public void update_an_application_to_public() { OrganizationDto organization = dbTester.organizations().insert(); ComponentDto portfolio = dbTester.components().insertPrivateApplication(organization); userSessionRule.addProjectPermission(UserRole.ADMIN, portfolio); GroupDto group = dbTester.users().insertGroup(organization); dbTester.users().insertProjectPermissionOnGroup(group, UserRole.ISSUE_ADMIN, portfolio); dbTester.users().insertProjectPermissionOnGroup(group, UserRole.USER, portfolio); dbTester.users().insertProjectPermissionOnGroup(group, UserRole.CODEVIEWER, portfolio); UserDto user = dbTester.users().insertUser(); dbTester.users().insertProjectPermissionOnUser(user, UserRole.ADMIN, portfolio); dbTester.users().insertProjectPermissionOnUser(user, UserRole.USER, portfolio); dbTester.users().insertProjectPermissionOnUser(user, UserRole.CODEVIEWER, portfolio); request.setParam(PARAM_PROJECT, portfolio.getDbKey()) .setParam(PARAM_VISIBILITY, PUBLIC) .execute(); assertThat(dbClient.componentDao().selectByUuid(dbSession, portfolio.uuid()).get().isPrivate()).isFalse(); assertThat(dbClient.groupPermissionDao().selectProjectPermissionsOfGroup(dbSession, organization.getUuid(), group.getId(), portfolio.getId())) .containsOnly(UserRole.ISSUE_ADMIN); assertThat(dbClient.userPermissionDao().selectProjectPermissionsOfUser(dbSession, user.getId(), portfolio.getId())) .containsOnly(UserRole.ADMIN); }
@Test public void scrollAllFilesForFileMove_ignores_non_file_and_non_ut_component_with_source() { OrganizationDto organization = db.organizations().insert(); ComponentDto project = random.nextBoolean() ? db.components().insertPrivateProject(organization) : db.components().insertPublicProject(organization); db.fileSources().insertFileSource(project); ComponentDto module = db.components().insertComponent(ComponentTesting.newModuleDto(project)); db.fileSources().insertFileSource(module); ComponentDto dir = db.components().insertComponent(ComponentTesting.newDirectory(module, "foo")); db.fileSources().insertFileSource(dir); ComponentAndSource file = insertFileAndSource(module, FILE); ComponentAndSource ut = insertFileAndSource(dir, UNIT_TEST_FILE); ComponentDto portfolio = random.nextBoolean() ? db.components().insertPublicPortfolio(organization) : db.components().insertPrivatePortfolio(organization); db.fileSources().insertFileSource(portfolio); ComponentDto subView = db.components().insertSubView(portfolio); db.fileSources().insertFileSource(subView); ComponentDto application = random.nextBoolean() ? db.components().insertPrivateApplication(organization) : db.components().insertPublicApplication(organization); db.fileSources().insertFileSource(application); RecordingResultHandler resultHandler = new RecordingResultHandler(); underTest.scrollAllFilesForFileMove(dbSession, project.uuid(), resultHandler); underTest.scrollAllFilesForFileMove(dbSession, portfolio.uuid(), resultHandler); underTest.scrollAllFilesForFileMove(dbSession, application.uuid(), resultHandler); assertThat(resultHandler.dtos).hasSize(2); verifyFileMoveRowDto(resultHandler, file); verifyFileMoveRowDto(resultHandler, ut); }
@Test public void search_by_application_key() { ComponentDto application = db.components().insertPrivateApplication(db.getDefaultOrganization()); ComponentDto project1 = db.components().insertPrivateProject(); ComponentDto project2 = db.components().insertPrivateProject(); db.components().insertComponents(newProjectCopy(project1, application)); db.components().insertComponents(newProjectCopy(project2, application)); RuleDefinitionDto rule = db.rules().insert(); IssueDto issue1 = db.issues().insert(rule, project1, project1); IssueDto issue2 = db.issues().insert(rule, project2, project2); allowAnyoneOnProjects(project1, project2, application); userSession.addProjectPermission(USER, application); indexIssuesAndViews(); SearchWsResponse result = ws.newRequest() .setParam(PARAM_COMPONENT_KEYS, application.getDbKey()) .executeProtobuf(SearchWsResponse.class); assertThat(result.getIssuesList()).extracting(Issue::getKey) .containsExactlyInAnyOrder(issue1.getKey(), issue2.getKey()); }