@Test public void search_tags() { RuleDefinitionDto rule = db.rules().insert(); ComponentDto project = db.components().insertPrivateProject(); db.issues().insert(rule, project, project, issue -> issue.setTags(asList("tag1", "tag2"))); db.issues().insert(rule, project, project, issue -> issue.setTags(asList("tag3", "tag4", "tag5"))); issueIndexer.indexOnStartup(emptySet()); permissionIndexer.allowOnlyAnyone(project); TagsResponse result = ws.newRequest().executeProtobuf(TagsResponse.class); assertThat(result.getTagsList()).containsExactly("tag1", "tag2", "tag3", "tag4", "tag5"); }
@Test public void search_tags_by_query() { RuleDefinitionDto rule = db.rules().insert(); ComponentDto project = db.components().insertPrivateProject(); db.issues().insert(rule, project, project, issue -> issue.setTags(asList("tag1", "tag2"))); db.issues().insert(rule, project, project, issue -> issue.setTags(asList("tag12", "tag4", "tag5"))); issueIndexer.indexOnStartup(emptySet()); permissionIndexer.allowOnlyAnyone(project); TagsResponse result = ws.newRequest() .setParam("q", "ag1") .executeProtobuf(TagsResponse.class); assertThat(result.getTagsList()).containsExactly("tag1", "tag12"); }
@Test public void do_transition() { ComponentDto project = db.components().insertPrivateProject(); ComponentDto file = db.components().insertComponent(newFileDto(project)); RuleDefinitionDto rule = db.rules().insert(); IssueDto issue = db.issues().insert(rule, project, file, i -> i.setStatus(STATUS_OPEN).setResolution(null)); DefaultIssue defaultIssue = issue.toDefaultIssue(); boolean result = underTest.doTransition(defaultIssue, IssueChangeContext.createUser(new Date(), "user_uuid"), "confirm"); assertThat(result).isTrue(); assertThat(defaultIssue.status()).isEqualTo(STATUS_CONFIRMED); }
@Test public void return_only_open_project_issues_if_no_modules_and_folders() { ComponentDto file = dbTester.components().insertComponent(newFileDto(rootProjectDto)); IssueDto openIssueOnProject = dbTester.issues().insert(rule, rootProjectDto, rootProjectDto, i -> i.setStatus("OPEN").setResolution(null)); IssueDto closedIssueOnProject = dbTester.issues().insert(rule, rootProjectDto, rootProjectDto, i -> i.setStatus("CLOSED").setResolution("FIXED")); IssueDto openIssue1OnFile = dbTester.issues().insert(rule, rootProjectDto, file, i -> i.setStatus("OPEN").setResolution(null)); assertThat(underTest.loadIssues()).extracting(DefaultIssue::key).containsOnly(openIssueOnProject.getKey()); }
@Test public void json_example() { RuleDefinitionDto rule = db.rules().insert(); ComponentDto project = db.components().insertPrivateProject(); db.issues().insert(rule, project, project, issue -> issue.setTags(asList("convention", "security"))); db.issues().insert(rule, project, project, issue -> issue.setTags(singletonList("cwe"))); issueIndexer.indexOnStartup(emptySet()); permissionIndexer.allowOnlyAnyone(project); String result = ws.newRequest().execute().getInput(); assertJson(result).isSimilarTo(ws.getDef().responseExampleAsString()); }
@Test public void migrate_and_return_folder_issues_on_root_project() { when(reportModulesPath.get()).thenReturn(Collections.emptyMap()); ComponentDto folder = dbTester.components().insertComponent(newDirectory(rootProjectDto, "src")); ComponentDto file = dbTester.components().insertComponent(newFileDto(rootProjectDto)); IssueDto openIssueOnProject = dbTester.issues().insert(rule, rootProjectDto, rootProjectDto, i -> i.setStatus("OPEN").setResolution(null)); IssueDto openIssueOnDir = dbTester.issues().insert(rule, rootProjectDto, folder, i -> i.setStatus("OPEN").setMessage("Issue on dir").setResolution(null)); IssueDto openIssue1OnFile = dbTester.issues().insert(rule, rootProjectDto, file, i -> i.setStatus("OPEN").setResolution(null)); assertThat(underTest.loadIssues()).extracting(DefaultIssue::key, DefaultIssue::getMessage) .containsExactlyInAnyOrder( tuple(openIssueOnProject.getKey(), openIssueOnProject.getMessage()), tuple(openIssueOnDir.getKey(), "[src] Issue on dir")); }
private ComponentDto insertProjectWithBranchAndRelatedData() { RuleDefinitionDto rule = db.rules().insert(); ComponentDto project = db.components().insertMainBranch(); ComponentDto branch = db.components().insertProjectBranch(project); ComponentDto module = db.components().insertComponent(newModuleDto(branch)); ComponentDto subModule = db.components().insertComponent(newModuleDto(module)); ComponentDto file = db.components().insertComponent(newFileDto(subModule)); db.issues().insert(rule, branch, file); db.issues().insert(rule, branch, subModule); db.issues().insert(rule, branch, module); return project; }
@Test public void set_assignee() { ComponentDto project = db.components().insertPrivateProject(); ComponentDto file = db.components().insertComponent(newFileDto(project)); RuleDefinitionDto rule = db.rules().insert(); UserDto user = db.users().insertUser(); IssueDto issue = db.issues().insert(rule, project, file, i -> i.setAssigneeUuid(user.getUuid())); NewIssuesStatistics.Stats stats = new NewIssuesStatistics.Stats(i -> true); IntStream.rangeClosed(1, 5).forEach(i -> stats.add(issue.toDefaultIssue())); underTest.setStatistics(project.longName(), stats); assertThat(underTest.getFieldValue(ASSIGNEE + ".1.label")).isEqualTo(user.getName()); assertThat(underTest.getFieldValue(ASSIGNEE + ".1.count")).isEqualTo("5"); }
@Test public void list_transitions_returns_nothing_when_not_logged() { ComponentDto project = db.components().insertPrivateProject(); ComponentDto file = db.components().insertComponent(newFileDto(project)); RuleDefinitionDto rule = db.rules().insert(); IssueDto issue = db.issues().insert(rule, project, file, i -> i.setStatus(STATUS_OPEN).setResolution(null)); List<Transition> result = underTest.listTransitions(issue.toDefaultIssue()); assertThat(result).isEmpty(); }
@Test public void json_example() { ComponentDto project = db.components().insertPrivateProject(); permissionIndexer.allowOnlyAnyone(project); RuleDefinitionDto rule = db.rules().insert(); db.issues().insert(rule, project, project, issue -> issue.setAuthorLogin("luke.skywalker")); db.issues().insert(rule, project, project, issue -> issue.setAuthorLogin("leia.organa")); issueIndexer.indexOnStartup(emptySet()); userSession.logIn().addMembership(db.getDefaultOrganization()); String result = ws.newRequest().execute().getInput(); assertJson(result).isSimilarTo(ws.getDef().responseExampleAsString()); }
@Test public void list_transitions_returns_empty_list_on_external_issue() { ComponentDto project = db.components().insertPrivateProject(); ComponentDto file = db.components().insertComponent(newFileDto(project)); RuleDefinitionDto externalRule = db.rules().insert(r -> r.setIsExternal(true)); IssueDto externalIssue = db.issues().insert(externalRule, project, file, i -> i.setStatus(STATUS_OPEN).setResolution(null)); userSession.logIn().addProjectPermission(ISSUE_ADMIN, project); List<Transition> result = underTest.listTransitions(externalIssue.toDefaultIssue()); assertThat(result).isEmpty(); }
private DbData insertData() { OrganizationDto organization = db.organizations().insert(); ComponentDto project = db.components().insertPrivateProject(organization); RuleDefinitionDto rule = db.rules().insert(); IssueDto issue = db.issues().insert(rule, project, project); SnapshotDto analysis = db.components().insertSnapshot(project); mockResourceTypeAsValidProject(); return new DbData(project, analysis, issue); }
@Test public void list_transitions_returns_only_transitions_that_do_not_requires_issue_admin_permission() { ComponentDto project = db.components().insertPrivateProject(); ComponentDto file = db.components().insertComponent(newFileDto(project)); RuleDefinitionDto rule = db.rules().insert(); IssueDto issue = db.issues().insert(rule, project, file, i -> i.setStatus(STATUS_OPEN).setResolution(null)); userSession.logIn(); List<Transition> result = underTest.listTransitions(issue.toDefaultIssue()); assertThat(result).extracting(Transition::key).containsOnly("confirm", "resolve"); }
@Test public void do_transition_fail_on_external_issue() { ComponentDto project = db.components().insertPrivateProject(); ComponentDto file = db.components().insertComponent(newFileDto(project)); RuleDefinitionDto externalRule = db.rules().insert(r -> r.setIsExternal(true)); IssueDto externalIssue = db.issues().insert(externalRule, project, file, i -> i.setStatus(STATUS_OPEN).setResolution(null)); DefaultIssue defaultIssue = externalIssue.toDefaultIssue(); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("Transition is not allowed on issues imported from external rule engines"); underTest.doTransition(defaultIssue, IssueChangeContext.createUser(new Date(), "user_uuid"), "confirm"); } }
@Test public void list_transitions() { ComponentDto project = db.components().insertPrivateProject(); ComponentDto file = db.components().insertComponent(newFileDto(project)); RuleDefinitionDto rule = db.rules().insert(); IssueDto issue = db.issues().insert(rule, project, file, i -> i.setStatus(STATUS_OPEN).setResolution(null)); userSession.logIn().addProjectPermission(ISSUE_ADMIN, project); List<Transition> result = underTest.listTransitions(issue.toDefaultIssue()); assertThat(result).extracting(Transition::key).containsOnly("confirm", "resolve", "falsepositive", "wontfix"); }
@Test public void return_issues_by_project_and_branch() { RuleDefinitionDto rule = db.rules().insert(); ComponentDto project = db.components().insertPrivateProject(); addPermissionTo(project); ComponentDto branch = db.components().insertProjectBranch(project, b -> b.setKey("my_branch")); ComponentDto file = db.components().insertComponent(newFileDto(branch)); IssueDto issueOnFile = db.issues().insert(rule, branch, file, i -> i.setType(randomRuleTypeExceptHotspot())); IssueDto issueOnBranch = db.issues().insert(rule, branch, branch, i -> i.setType(randomRuleTypeExceptHotspot())); assertResult(project.getKey(), "my_branch", tuple(issueOnFile.getKey(), branch.getKey()), tuple(issueOnBranch.getKey(), branch.getKey())); }
@Test public void fail_if_no_transition_param() { ComponentDto project = db.components().insertPrivateProject(); ComponentDto file = db.components().insertComponent(newFileDto(project)); RuleDefinitionDto rule = db.rules().insert(); IssueDto issue = db.issues().insert(rule, project, file, i -> i.setStatus(STATUS_OPEN).setResolution(null)); userSession.logIn().addProjectPermission(USER, project, file); expectedException.expect(IllegalArgumentException.class); call(issue.getKey(), null); }
@Test public void fail_if_not_enough_permission_to_apply_transition() { ComponentDto project = db.components().insertPrivateProject(); ComponentDto file = db.components().insertComponent(newFileDto(project)); RuleDefinitionDto rule = db.rules().insert(); IssueDto issue = db.issues().insert(rule, project, file, i -> i.setStatus(STATUS_OPEN).setResolution(null)); userSession.logIn().addProjectPermission(USER, project, file); // False-positive transition is requiring issue admin permission expectedException.expect(ForbiddenException.class); call(issue.getKey(), "falsepositive"); }
@Test public void fail_if_not_enough_permission_to_access_issue() { ComponentDto project = db.components().insertPrivateProject(); ComponentDto file = db.components().insertComponent(newFileDto(project)); RuleDefinitionDto rule = db.rules().insert(); IssueDto issue = db.issues().insert(rule, project, file, i -> i.setStatus(STATUS_OPEN).setResolution(null)); userSession.logIn().addProjectPermission(CODEVIEWER, project, file); expectedException.expect(ForbiddenException.class); call(issue.getKey(), "confirm"); }
@Test public void fail_if_external_issue() { ComponentDto project = db.components().insertPrivateProject(); ComponentDto file = db.components().insertComponent(newFileDto(project)); RuleDefinitionDto externalRule = db.rules().insert(r -> r.setIsExternal(true)); IssueDto externalIssue = db.issues().insert(externalRule, project, file, i -> i.setStatus(STATUS_OPEN).setResolution(null)); userSession.logIn().addProjectPermission(USER, project, file); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("Transition is not allowed on issues imported from external rule engines"); call(externalIssue.getKey(), "confirm"); }