private IssueDto doInsert(DbSession session, long now, DefaultIssue issue) { ComponentDto component = component(session, issue); ComponentDto project = project(session, issue); int ruleId = requireNonNull(getRuleId(issue), "Rule not found: " + issue.ruleKey()); IssueDto dto = IssueDto.toDtoForServerInsert(issue, component, project, ruleId, now); getDbClient().issueDao().insert(session, dto); return dto; }
public IssueDto insertIssue(IssueDto issueDto) { db.getDbClient().issueDao().insert(db.getSession(), issueDto); db.commit(); return issueDto; }
@Test public void sort_by_updated_at() { RuleDto rule = newRule(); OrganizationDto organization = db.organizations().insert(o -> o.setKey("my-org-2")); ComponentDto project = db.components().insertComponent(ComponentTesting.newPublicProjectDto(organization, "PROJECT_ID").setDbKey("PROJECT_KEY")); indexPermissions(); ComponentDto file = db.components().insertComponent(newFileDto(project, null, "FILE_ID").setDbKey("FILE_KEY")); dbClient.issueDao().insert(session, newDto(rule, file, project) .setKee("82fd47d4-b650-4037-80bc-7b112bd4eac1") .setIssueUpdateDate(parseDateTime("2014-11-02T00:00:00+0100"))); dbClient.issueDao().insert(session, newDto(rule, file, project) .setKee("82fd47d4-b650-4037-80bc-7b112bd4eac2") .setIssueUpdateDate(parseDateTime("2014-11-01T00:00:00+0100"))); dbClient.issueDao().insert(session, newDto(rule, file, project) .setKee("82fd47d4-b650-4037-80bc-7b112bd4eac3") .setIssueUpdateDate(parseDateTime("2014-11-03T00:00:00+0100"))); session.commit(); indexIssues(); TestResponse response = ws.newRequest() .setParam("sort", IssueQuery.SORT_BY_UPDATE_DATE) .setParam("asc", "false") .execute(); JsonElement parse = new JsonParser().parse(response.getInput()); assertThat(parse.getAsJsonObject().get("issues").getAsJsonArray()) .extracting(o -> o.getAsJsonObject().get("key").getAsString()) .containsExactly("82fd47d4-b650-4037-80bc-7b112bd4eac3", "82fd47d4-b650-4037-80bc-7b112bd4eac1", "82fd47d4-b650-4037-80bc-7b112bd4eac2"); }
@Test public void indexing_errors_during_commitAndIndexIssues_are_recovered() { RuleDefinitionDto rule = db.rules().insert(); ComponentDto project = db.components().insertPrivateProject(organization); ComponentDto file = db.components().insertComponent(newFileDto(project)); // insert issues in db without committing IssueDto issue1 = IssueTesting.newIssue(rule, project, file); IssueDto issue2 = IssueTesting.newIssue(rule, project, file); db.getDbClient().issueDao().insert(db.getSession(), issue1, issue2); // index is read-only es.lockWrites(INDEX_TYPE_ISSUE); underTest.commitAndIndexIssues(db.getSession(), asList(issue1, issue2)); // issues are persisted but not indexed assertThatIndexHasSize(0); assertThatDbHasOnly(issue1, issue2); assertThatEsQueueTableHasSize(2); // re-enable write on index es.unlockWrites(INDEX_TYPE_ISSUE); // emulate the recovery daemon IndexingResult result = recover(); assertThatEsQueueTableHasSize(0); assertThatIndexHasOnly(issue1, issue2); assertThat(result.isSuccess()).isTrue(); assertThat(result.getTotal()).isEqualTo(2L); }
@Test public void commitAndIndexIssues_commits_db_transaction_and_adds_issues_to_index() { RuleDefinitionDto rule = db.rules().insert(); ComponentDto project = db.components().insertPrivateProject(organization); ComponentDto file = db.components().insertComponent(newFileDto(project)); // insert issues in db without committing IssueDto issue1 = IssueTesting.newIssue(rule, project, file); IssueDto issue2 = IssueTesting.newIssue(rule, project, file); db.getDbClient().issueDao().insert(db.getSession(), issue1, issue2); underTest.commitAndIndexIssues(db.getSession(), asList(issue1, issue2)); // issues are persisted and indexed assertThatIndexHasOnly(issue1, issue2); assertThatDbHasOnly(issue1, issue2); assertThatEsQueueTableHasSize(0); }
private void prepareTables() { db.rules().insertRule(RULE.setIsExternal(true)); OrganizationDto organizationDto = db.organizations().insert(); ComponentDto projectDto = db.components().insertPrivateProject(organizationDto, (t) -> t.setUuid(PROJECT_UUID).setDbKey(PROJECT_KEY)); db.components().insertComponent(newFileDto(projectDto).setUuid(FILE_UUID).setDbKey(FILE_KEY)); underTest.insert(db.getSession(), newIssueDto(ISSUE_KEY1) .setMessage("the message") .setRuleId(RULE.getId()) .setComponentUuid(FILE_UUID) .setProjectUuid(PROJECT_UUID)); underTest.insert(db.getSession(), newIssueDto(ISSUE_KEY2) .setRuleId(RULE.getId()) .setComponentUuid(FILE_UUID) .setProjectUuid(PROJECT_UUID)); db.getSession().commit(); }
@Test public void apply_paging_with_one_component() { RuleDto rule = newRule(); OrganizationDto organization = db.organizations().insert(o -> o.setKey("my-org-2")); ComponentDto project = db.components().insertComponent(ComponentTesting.newPublicProjectDto(organization, "PROJECT_ID").setDbKey("PROJECT_KEY")); indexPermissions(); ComponentDto file = db.components().insertComponent(newFileDto(project, null, "FILE_ID").setDbKey("FILE_KEY")); for (int i = 0; i < SearchOptions.MAX_LIMIT + 1; i++) { IssueDto issue = newDto(rule, file, project).setAssigneeUuid(null); dbClient.issueDao().insert(session, issue); } session.commit(); indexIssues(); ws.newRequest().setParam(PARAM_COMPONENTS, file.getDbKey()).execute() .assertJson(this.getClass(), "apply_paging_with_one_component.json"); }
@Test public void paging() { RuleDto rule = newRule(); OrganizationDto organization = db.organizations().insert(o -> o.setKey("my-org-1")); ComponentDto project = db.components().insertComponent(ComponentTesting.newPublicProjectDto(organization, "PROJECT_ID").setDbKey("PROJECT_KEY")); indexPermissions(); ComponentDto file = db.components().insertComponent(newFileDto(project, null, "FILE_ID").setDbKey("FILE_KEY")); for (int i = 0; i < 12; i++) { IssueDto issue = newDto(rule, file, project); dbClient.issueDao().insert(session, issue); } session.commit(); indexIssues(); ws.newRequest() .setParam(WebService.Param.PAGE, "2") .setParam(WebService.Param.PAGE_SIZE, "9") .execute() .assertJson(this.getClass(), "paging.json"); }
@Test public void components_contains_sub_projects() { OrganizationDto organization = db.organizations().insert(o -> o.setKey("my-org-1")); ComponentDto project = db.components().insertComponent(ComponentTesting.newPublicProjectDto(organization, "PROJECT_ID").setDbKey("ProjectHavingModule")); indexPermissions(); ComponentDto module = db.components().insertComponent(ComponentTesting.newModuleDto(project).setDbKey("ModuleHavingFile")); ComponentDto file = db.components().insertComponent(newFileDto(module, null, "BCDE").setDbKey("FileLinkedToModule")); IssueDto issue = newDto(newRule(), file, project); dbClient.issueDao().insert(session, issue); session.commit(); indexIssues(); ws.newRequest().setParam(PARAM_ADDITIONAL_FIELDS, "_all").execute() .assertJson(this.getClass(), "components_contains_sub_projects.json"); }
@Test public void paging_with_page_size_to_minus_one() { RuleDto rule = newRule(); OrganizationDto organization = db.organizations().insert(o -> o.setKey("my-org-1")); ComponentDto project = db.components().insertComponent(ComponentTesting.newPublicProjectDto(organization, "PROJECT_ID").setDbKey("PROJECT_KEY")); indexPermissions(); ComponentDto file = db.components().insertComponent(newFileDto(project, null, "FILE_ID").setDbKey("FILE_KEY")); for (int i = 0; i < 12; i++) { IssueDto issue = newDto(rule, file, project); dbClient.issueDao().insert(session, issue); } session.commit(); indexIssues(); ws.newRequest() .setParam(WebService.Param.PAGE, "1") .setParam(WebService.Param.PAGE_SIZE, "-1") .execute() .assertJson(this.getClass(), "paging_with_page_size_to_minus_one.json"); }
@Test public void deprecated_paging() { RuleDto rule = newRule(); OrganizationDto organization = db.organizations().insert(o -> o.setKey("my-org-1")); ComponentDto project = db.components().insertComponent(ComponentTesting.newPublicProjectDto(organization, "PROJECT_ID").setDbKey("PROJECT_KEY")); indexPermissions(); ComponentDto file = db.components().insertComponent(newFileDto(project, null, "FILE_ID").setDbKey("FILE_KEY")); for (int i = 0; i < 12; i++) { IssueDto issue = newDto(rule, file, project).setAssigneeUuid(null); dbClient.issueDao().insert(session, issue); } session.commit(); indexIssues(); ws.newRequest() .setParam(PARAM_PAGE_INDEX, "2") .setParam(PARAM_PAGE_SIZE, "9") .execute() .assertJson(this.getClass(), "deprecated_paging.json"); }
@Test public void owasp_empty() { userSessionRule.addProjectPermission(UserRole.USER, project); indexPermissions(); ComponentDto file = insertComponent(newFileDto(project, null, "FILE_ID").setDbKey("FILE_KEY")); IssueDto issue1 = newIssue(rule1, project, file) .setStatus("OPEN") .setSeverity("MAJOR") .setType(RuleType.CODE_SMELL); IssueDto issue2 = newIssue(rule1, project, file) .setStatus("OPEN") .setSeverity("MAJOR") .setType(RuleType.BUG); IssueDto issue3 = newIssue(rule1, project, file) .setStatus("OPEN") .setSeverity("MAJOR") .setType(RuleType.CODE_SMELL); dbClient.issueDao().insert(session, issue1, issue2, issue3); session.commit(); indexIssues(); assertJson(ws.newRequest() .setParam("standard", "owaspTop10") .setParam("project", project.getKey()) .execute().getInput()) .withStrictArrayOrder() .isSimilarTo(this.getClass().getResource("ShowActionTest/empty.json")); }
private void addBaseIssue(RuleKey ruleKey) { ComponentDto project = ComponentTesting.newPrivateProjectDto(dbTester.organizations().insert(), PROJECT_UUID).setDbKey(PROJECT_KEY); ComponentDto file = ComponentTesting.newFileDto(project, null, FILE_UUID).setDbKey(FILE_KEY); dbTester.getDbClient().componentDao().insert(dbTester.getSession(), project, file); RuleDto ruleDto = RuleTesting.newDto(ruleKey); dbTester.rules().insertRule(ruleDto); ruleRepositoryRule.add(ruleKey); IssueDto issue = IssueTesting.newDto(ruleDto, file, project) .setKee("ISSUE") .setStatus(Issue.STATUS_OPEN) .setSeverity(Severity.MAJOR); dbTester.getDbClient().issueDao().insert(dbTester.getSession(), issue); dbTester.getSession().commit(); }
@Test public void search_by_rule_key() { RuleDto rule = newRule(); OrganizationDto organization = db.organizations().insert(o -> o.setKey("my-org-1")); ComponentDto project = db.components().insertComponent(ComponentTesting.newPublicProjectDto(organization, "PROJECT_ID").setDbKey("PROJECT_KEY").setLanguage("java")); ComponentDto file = db.components().insertComponent(newFileDto(project, null, "FILE_ID").setDbKey("FILE_KEY").setLanguage("java")); IssueDto issue = IssueTesting.newIssue(rule.getDefinition(), project, file); dbClient.issueDao().insert(session, issue); session.commit(); indexIssues(); userSession.logIn("john") .addProjectPermission(ISSUE_ADMIN, project); // granted by Anyone indexPermissions(); TestResponse execute = ws.newRequest() .setParam(PARAM_RULES, rule.getKey().toString()) .setParam("additionalFields", "_all") .execute(); execute.assertJson(this.getClass(), "result_for_rule_search.json"); }
private void addBaseIssueOnBranch(RuleKey ruleKey) { ComponentDto project = ComponentTesting.newPrivateProjectDto(dbTester.organizations().insert(), PROJECT_UUID_ON_BRANCH).setDbKey(PROJECT_KEY); ComponentDto file = ComponentTesting.newFileDto(project, null, FILE_UUID_ON_BRANCH).setDbKey(FILE_KEY); dbTester.getDbClient().componentDao().insert(dbTester.getSession(), project, file); RuleDto ruleDto = RuleTesting.newDto(ruleKey); dbTester.rules().insertRule(ruleDto); ruleRepositoryRule.add(ruleKey); IssueDto issue = IssueTesting.newDto(ruleDto, file, project) .setKee("ISSUE") .setStatus(Issue.STATUS_OPEN) .setSeverity(Severity.MAJOR); dbTester.getDbClient().issueDao().insert(dbTester.getSession(), issue); dbTester.getSession().commit(); } }
.setSeverity("MAJOR") .setType(RuleType.SECURITY_HOTSPOT); dbClient.issueDao().insert(session, issue1, issue2, issue3, issue4); session.commit(); indexIssues();
@Test public void issue_on_removed_file() { RuleDto rule = newRule(); OrganizationDto organization = db.organizations().insert(o -> o.setKey("my-org-2")); ComponentDto project = db.components().insertComponent(ComponentTesting.newPublicProjectDto(organization, "PROJECT_ID").setDbKey("PROJECT_KEY")); indexPermissions(); ComponentDto removedFile = db.components().insertComponent(newFileDto(project, null).setUuid("REMOVED_FILE_ID") .setDbKey("REMOVED_FILE_KEY") .setEnabled(false)); IssueDto issue = newDto(rule, removedFile, project) .setKee("82fd47d4-b650-4037-80bc-7b112bd4eac2") .setComponent(removedFile) .setStatus("OPEN").setResolution("OPEN") .setSeverity("MAJOR") .setIssueCreationDate(parseDateTime("2014-09-04T00:00:00+0100")) .setIssueUpdateDate(parseDateTime("2017-12-04T00:00:00+0100")); dbClient.issueDao().insert(session, issue); session.commit(); indexIssues(); ws.newRequest() .execute() .assertJson(this.getClass(), "issue_on_removed_file.json"); }
.setSeverity("MAJOR") .setType(RuleType.SECURITY_HOTSPOT); dbClient.issueDao().insert(session, issue1, issue2, issue3, issue4); session.commit(); indexIssues();
@Test public void load_additional_fields_with_issue_admin_permission() { UserDto simon = db.users().insertUser(u -> u.setLogin("simon").setName("Simon").setEmail("simon@email.com")); UserDto fabrice = db.users().insertUser(u -> u.setLogin("fabrice").setName("Fabrice").setEmail("fabrice@email.com")); OrganizationDto organization = db.organizations().insert(o -> o.setKey("my-org-1")); ComponentDto project = db.components().insertComponent(ComponentTesting.newPublicProjectDto(organization, "PROJECT_ID").setDbKey("PROJECT_KEY").setLanguage("java")); grantPermissionToAnyone(project, ISSUE_ADMIN); indexPermissions(); ComponentDto file = db.components().insertComponent(newFileDto(project, null, "FILE_ID").setDbKey("FILE_KEY").setLanguage("js")); IssueDto issue = newDto(newRule(), file, project) .setKee("82fd47d4-b650-4037-80bc-7b112bd4eac2") .setAuthorLogin(fabrice.getLogin()) .setAssigneeUuid(simon.getUuid()); dbClient.issueDao().insert(session, issue); session.commit(); indexIssues(); userSession.logIn("john") .addProjectPermission(ISSUE_ADMIN, project); // granted by Anyone ws.newRequest() .setParam("additionalFields", "_all").execute() .assertJson(this.getClass(), "load_additional_fields_with_issue_admin_permission.json"); }
.setKee("82fd47d4-4037-b650-80bc-7b112bd4eac2") .setAssigneeUuid(null); dbClient.issueDao().insert(session, issue1, issue2, issue3); session.commit(); indexIssues();