From 8a9bf0e1541175c1505237a49636efa0bcd88f6a Mon Sep 17 00:00:00 2001 From: Julien Lancelot Date: Wed, 18 Jun 2014 14:19:57 +0200 Subject: [PATCH] SONAR-5209 Add manual rules in /api/components/app --- .../sonar/core/component/ComponentDto.java | 10 ++++ .../core/component/db/ComponentMapper.java | 2 + .../core/component/db/ComponentMapper.xml | 9 ++++ .../component/persistence/ComponentDao.java | 11 ++-- .../component/ws/ComponentAppAction.java | 45 ++++++++++++---- ...-show.json => components-example-app.json} | 4 ++ .../persistence/ComponentDaoTest.java | 54 ++++++++++++++++++- .../component/ws/ComponentAppActionTest.java | 27 +++++++++- .../server/component/ws/ComponentsWsTest.java | 3 +- .../persistence/ComponentDaoTest/empty.xml | 3 ++ .../ComponentDaoTest/insert-result.xml | 9 ++++ .../ws/ComponentAppActionTest/app.json | 1 + .../app_with_extension.json | 1 + .../app_with_extension_having_permission.json | 1 + .../app_with_issues_measures.json | 1 + ...th_issues_measures_when_period_is_set.json | 1 + .../app_with_manual_rules.json | 19 +++++++ .../app_with_measures.json | 1 + .../app_with_measures_when_period_is_set.json | 1 + .../app_with_periods.json | 1 + .../app_with_rules.json | 1 + .../app_with_rules_when_period_is_set.json | 1 + .../app_with_severities.json | 1 + ...pp_with_severities_when_period_is_set.json | 1 + ...pp_with_sub_project_equals_to_project.json | 1 + .../ComponentAppActionTest/app_with_tabs.json | 1 + .../app_with_tests_measure.json | 1 + .../app_without_sub_project.json | 1 + 28 files changed, 194 insertions(+), 18 deletions(-) rename sonar-server/src/main/resources/org/sonar/server/component/ws/{components-app-example-show.json => components-example-app.json} (91%) create mode 100644 sonar-server/src/test/resources/org/sonar/server/component/persistence/ComponentDaoTest/empty.xml create mode 100644 sonar-server/src/test/resources/org/sonar/server/component/persistence/ComponentDaoTest/insert-result.xml create mode 100644 sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_manual_rules.json diff --git a/sonar-core/src/main/java/org/sonar/core/component/ComponentDto.java b/sonar-core/src/main/java/org/sonar/core/component/ComponentDto.java index a106603b7bf..1460e2034bc 100644 --- a/sonar-core/src/main/java/org/sonar/core/component/ComponentDto.java +++ b/sonar-core/src/main/java/org/sonar/core/component/ComponentDto.java @@ -37,6 +37,7 @@ public class ComponentDto extends Dto implements Component { private String language; private Long projectId; private Long subProjectId; + private boolean enabled = true; public Long getId() { return id; @@ -136,6 +137,15 @@ public class ComponentDto extends Dto implements Component { return this; } + public boolean isEnabled() { + return enabled; + } + + public ComponentDto setEnabled(boolean enabled) { + this.enabled = enabled; + return this; + } + @Override public String getKey() { return kee; diff --git a/sonar-core/src/main/java/org/sonar/core/component/db/ComponentMapper.java b/sonar-core/src/main/java/org/sonar/core/component/db/ComponentMapper.java index a95a6b6cf41..cb8c8dac1a0 100644 --- a/sonar-core/src/main/java/org/sonar/core/component/db/ComponentMapper.java +++ b/sonar-core/src/main/java/org/sonar/core/component/db/ComponentMapper.java @@ -31,4 +31,6 @@ public interface ComponentMapper { ComponentDto selectById(long id); long countById(long id); + + void insert(ComponentDto rule); } diff --git a/sonar-core/src/main/resources/org/sonar/core/component/db/ComponentMapper.xml b/sonar-core/src/main/resources/org/sonar/core/component/db/ComponentMapper.xml index 59bc16ecfbc..de9ad8a46b5 100644 --- a/sonar-core/src/main/resources/org/sonar/core/component/db/ComponentMapper.xml +++ b/sonar-core/src/main/resources/org/sonar/core/component/db/ComponentMapper.xml @@ -35,5 +35,14 @@ WHERE p.enabled=${_true} AND p.id=#{id} + + (kee, name, long_name, qualifier, scope, language, root_id, path, created_at) + + + + insert into projects + values (#{kee}, #{name}, #{longName}, #{qualifier}, #{scope}, #{language}, #{subProjectId}, #{path}, #{createdAt}) + + diff --git a/sonar-server/src/main/java/org/sonar/server/component/persistence/ComponentDao.java b/sonar-server/src/main/java/org/sonar/server/component/persistence/ComponentDao.java index 6c59c2179c0..cf64e3f423b 100644 --- a/sonar-server/src/main/java/org/sonar/server/component/persistence/ComponentDao.java +++ b/sonar-server/src/main/java/org/sonar/server/component/persistence/ComponentDao.java @@ -62,7 +62,8 @@ public class ComponentDao extends BaseDao @Override protected ComponentDto doInsert(DbSession session, ComponentDto item) { - throw notImplemented(); + getMapper(session).insert(item); + return item; } @Override @@ -75,12 +76,12 @@ public class ComponentDao extends BaseDao throw notImplemented(); } - private static IllegalStateException notImplemented() { - throw new IllegalStateException("Not implemented yet"); - } - @Override public void synchronizeAfter(DbSession session, long timestamp) { + throw notImplemented(); + } + + private static IllegalStateException notImplemented() { throw new IllegalStateException("Not implemented yet"); } } diff --git a/sonar-server/src/main/java/org/sonar/server/component/ws/ComponentAppAction.java b/sonar-server/src/main/java/org/sonar/server/component/ws/ComponentAppAction.java index 6852edbd5c9..a024c13319d 100644 --- a/sonar-server/src/main/java/org/sonar/server/component/ws/ComponentAppAction.java +++ b/sonar-server/src/main/java/org/sonar/server/component/ws/ComponentAppAction.java @@ -51,6 +51,12 @@ import org.sonar.server.db.DbClient; import org.sonar.server.exceptions.NotFoundException; import org.sonar.server.issue.IssueService; import org.sonar.server.issue.RulesAggregation; +import org.sonar.server.rule.Rule; +import org.sonar.server.rule.RuleService; +import org.sonar.server.rule.index.RuleDoc; +import org.sonar.server.rule.index.RuleQuery; +import org.sonar.server.search.QueryOptions; +import org.sonar.server.search.Result; import org.sonar.server.ui.ViewProxy; import org.sonar.server.ui.Views; import org.sonar.server.user.UserSession; @@ -74,14 +80,16 @@ public class ComponentAppAction implements RequestHandler { private final IssueService issueService; private final Views views; + private final RuleService ruleService; private final Periods periods; private final Durations durations; private final I18n i18n; - public ComponentAppAction(DbClient dbClient, IssueService issueService, Views views, Periods periods, Durations durations, I18n i18n) { + public ComponentAppAction(DbClient dbClient, IssueService issueService, Views views, RuleService ruleService, Periods periods, Durations durations, I18n i18n) { this.dbClient = dbClient; this.issueService = issueService; this.views = views; + this.ruleService = ruleService; this.periods = periods; this.durations = durations; this.i18n = i18n; @@ -93,7 +101,7 @@ public class ComponentAppAction implements RequestHandler { .setSince("4.4") .setInternal(true) .setHandler(this) - .setResponseExample(Resources.getResource(this.getClass(), "components-app-example-show.json")); + .setResponseExample(Resources.getResource(this.getClass(), "components-example-app.json")); action .createParam(PARAM_KEY) @@ -119,7 +127,7 @@ public class ComponentAppAction implements RequestHandler { try { ComponentDto component = dbClient.componentDao().getNullableByKey(session, fileKey); if (component == null) { - throw new NotFoundException(String.format("Component '%s' does not exists.", fileKey)); + throw new NotFoundException(String.format("Component '%s' does not exist", fileKey)); } userSession.checkComponentPermission(UserRole.USER, fileKey); @@ -138,6 +146,7 @@ public class ComponentAppAction implements RequestHandler { appendMeasures(json, measuresByMetricKey, severitiesAggregation, periodIndex); appendTabs(json, measuresByMetricKey); appendExtensions(json, component, userSession); + appendManualRules(json); } finally { MyBatis.closeQuietly(session); } @@ -148,12 +157,12 @@ public class ComponentAppAction implements RequestHandler { private void appendComponent(JsonWriter json, ComponentDto component, UserSession userSession, DbSession session) { List propertyDtos = dbClient.propertiesDao().selectByQuery(PropertyQuery.builder() - .setKey("favourite") - .setComponentId(component.getId()) - .setUserId(userSession.userId()) - .build(), + .setKey("favourite") + .setComponentId(component.getId()) + .setUserId(userSession.userId()) + .build(), session - ); + ); boolean isFavourite = propertyDtos.size() == 1; json.prop("key", component.key()); @@ -190,8 +199,10 @@ public class ComponentAppAction implements RequestHandler { } private void appendPermissions(JsonWriter json, ComponentDto component, UserSession userSession) { - json.prop("canMarkAsFavourite", userSession.isLoggedIn() && userSession.hasComponentPermission(UserRole.USER, component.key())); + boolean hasBrowsePermission = userSession.hasComponentPermission(UserRole.USER, component.key()); + json.prop("canMarkAsFavourite", userSession.isLoggedIn() && hasBrowsePermission); json.prop("canBulkChange", userSession.isLoggedIn()); + json.prop("canCreateManualIssue", userSession.isLoggedIn() && hasBrowsePermission); } private void appendMeasures(JsonWriter json, Map measuresByMetricKey, Multiset severitiesAggregation, Integer periodIndex) { @@ -245,6 +256,21 @@ public class ComponentAppAction implements RequestHandler { json.endArray(); } + private void appendManualRules(JsonWriter json) { + Result result = ruleService.search(new RuleQuery().setRepositories(newArrayList(RuleDoc.MANUAL_REPOSITORY)), new QueryOptions().setMaxLimit()); + if (result != null && !result.getHits().isEmpty()) { + List manualRules = result.getHits(); + json.name("manual_rules").beginArray(); + for (Rule manualRule : manualRules) { + json.beginObject() + .prop("key", manualRule.key().toString()) + .prop("name", manualRule.name()) + .endObject(); + } + json.endArray(); + } + } + private void appendExtensions(JsonWriter json, ComponentDto component, UserSession userSession) { List> extensionPages = views.getPages(NavigationSection.RESOURCE_TAB, component.scope(), component.qualifier(), component.language(), null); Map extensions = extensions(extensionPages, component, userSession); @@ -311,7 +337,6 @@ public class ComponentAppAction implements RequestHandler { return measuresByMetricKey; } - @CheckForNull private Date periodDate(@Nullable final Integer periodIndex, List periodList) { if (periodIndex != null) { diff --git a/sonar-server/src/main/resources/org/sonar/server/component/ws/components-app-example-show.json b/sonar-server/src/main/resources/org/sonar/server/component/ws/components-example-app.json similarity index 91% rename from sonar-server/src/main/resources/org/sonar/server/component/ws/components-app-example-show.json rename to sonar-server/src/main/resources/org/sonar/server/component/ws/components-example-app.json index 0380387e2db..11e05d39b7a 100644 --- a/sonar-server/src/main/resources/org/sonar/server/component/ws/components-app-example-show.json +++ b/sonar-server/src/main/resources/org/sonar/server/component/ws/components-example-app.json @@ -8,6 +8,7 @@ "fav": true, "canMarkAsFavourite": true, "canBulkChange": false, + "canCreateManualIssue": false, "periods": [ [ 1, @@ -50,5 +51,8 @@ ], "tabs": [ "scn", "coverage", "duplications" + ], + "manual_rules": [ + {"key": "manual:API", "name": "API"} ] } diff --git a/sonar-server/src/test/java/org/sonar/server/component/persistence/ComponentDaoTest.java b/sonar-server/src/test/java/org/sonar/server/component/persistence/ComponentDaoTest.java index 9d1cc0fcecf..e05ac4ca6b0 100644 --- a/sonar-server/src/test/java/org/sonar/server/component/persistence/ComponentDaoTest.java +++ b/sonar-server/src/test/java/org/sonar/server/component/persistence/ComponentDaoTest.java @@ -22,11 +22,15 @@ package org.sonar.server.component.persistence; import org.junit.After; import org.junit.Before; import org.junit.Test; +import org.sonar.api.utils.DateUtils; +import org.sonar.api.utils.System2; import org.sonar.core.component.ComponentDto; import org.sonar.core.persistence.AbstractDaoTestCase; import org.sonar.core.persistence.DbSession; import static org.fest.assertions.Assertions.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; public class ComponentDaoTest extends AbstractDaoTestCase { @@ -34,10 +38,13 @@ public class ComponentDaoTest extends AbstractDaoTestCase { ComponentDao dao; + System2 system2; + @Before public void createDao() throws Exception { session = getMyBatis().openSession(false); - dao = new ComponentDao(); + system2 = mock(System2.class); + dao = new ComponentDao(system2); } @After @@ -96,4 +103,49 @@ public class ComponentDaoTest extends AbstractDaoTestCase { assertThat(dao.existsById(4L, session)).isTrue(); assertThat(dao.existsById(111L, session)).isFalse(); } + + @Test + public void insert() { + when(system2.now()).thenReturn(DateUtils.parseDate("2014-06-18").getTime()); + setupData("empty"); + + ComponentDto componentDto = new ComponentDto() + .setId(1L) + .setKey("org.struts:struts-core:src/org/struts/RequestContext.java") + .setName("RequestContext.java") + .setLongName("org.struts.RequestContext") + .setQualifier("FIL") + .setScope("FIL") + .setLanguage("java") + .setPath("src/org/struts/RequestContext.java") + .setSubProjectId(3L) + .setEnabled(true); + + dao.insert(session, componentDto); + session.commit(); + + assertThat(componentDto.getId()).isNotNull(); + checkTables("insert", "projects"); + } + + @Test(expected = IllegalStateException.class) + public void update() { + dao.update(session, new ComponentDto() + .setId(1L) + .setKey("org.struts:struts-core:src/org/struts/RequestContext.java") + ); + } + + @Test(expected = IllegalStateException.class) + public void delete() { + dao.delete(session, new ComponentDto() + .setId(1L) + .setKey("org.struts:struts-core:src/org/struts/RequestContext.java") + ); + } + + @Test(expected = IllegalStateException.class) + public void synchronize_after() { + dao.synchronizeAfter(session, 1L); + } } diff --git a/sonar-server/src/test/java/org/sonar/server/component/ws/ComponentAppActionTest.java b/sonar-server/src/test/java/org/sonar/server/component/ws/ComponentAppActionTest.java index dafbe40c290..526cf38ad11 100644 --- a/sonar-server/src/test/java/org/sonar/server/component/ws/ComponentAppActionTest.java +++ b/sonar-server/src/test/java/org/sonar/server/component/ws/ComponentAppActionTest.java @@ -32,6 +32,7 @@ import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import org.sonar.api.i18n.I18n; import org.sonar.api.measures.CoreMetrics; +import org.sonar.api.rule.RuleKey; import org.sonar.api.utils.DateUtils; import org.sonar.api.utils.Duration; import org.sonar.api.utils.Durations; @@ -54,6 +55,11 @@ import org.sonar.server.db.DbClient; import org.sonar.server.issue.IssueService; import org.sonar.server.issue.RulesAggregation; import org.sonar.server.measure.persistence.MeasureDao; +import org.sonar.server.rule.Rule; +import org.sonar.server.rule.RuleService; +import org.sonar.server.rule.index.RuleQuery; +import org.sonar.server.search.QueryOptions; +import org.sonar.server.search.Result; import org.sonar.server.ui.ViewProxy; import org.sonar.server.ui.Views; import org.sonar.server.user.MockUserSession; @@ -99,6 +105,9 @@ public class ComponentAppActionTest { @Mock Views views; + @Mock + RuleService ruleService; + @Mock Periods periods; @@ -128,7 +137,7 @@ public class ComponentAppActionTest { when(issueService.findRulesByComponent(anyString(), any(Date.class), eq(session))).thenReturn(mock(RulesAggregation.class)); when(measureDao.findByComponentKeyAndMetricKeys(anyString(), anyListOf(String.class), eq(session))).thenReturn(measures); - tester = new WsTester(new ComponentsWs(new ComponentAppAction(dbClient, issueService, views, periods, durations, i18n))); + tester = new WsTester(new ComponentsWs(new ComponentAppAction(dbClient, issueService, views, ruleService, periods, durations, i18n))); } @Test @@ -409,6 +418,22 @@ public class ComponentAppActionTest { request.execute().assertJson(getClass(), "app_with_extension_having_permission.json"); } + @Test + public void app_with_manual_rules() throws Exception { + MockUserSession.set().addComponentPermission(UserRole.USER, PROJECT_KEY, COMPONENT_KEY); + addComponent(); + + Result result = mock(Result.class); + Rule rule = mock(Rule.class); + when(rule.key()).thenReturn(RuleKey.of("manual", "API")); + when(rule.name()).thenReturn("API"); + when(result.getHits()).thenReturn(newArrayList(rule)); + when(ruleService.search(any(RuleQuery.class), any(QueryOptions.class))).thenReturn(result); + + WsTester.TestRequest request = tester.newGetRequest("api/components", "app").setParam("key", COMPONENT_KEY); + request.execute().assertJson(getClass(), "app_with_manual_rules.json"); + } + private void addComponent() { ComponentDto file = new ComponentDto().setId(10L).setQualifier("FIL").setKey(COMPONENT_KEY).setName("Plugin.java") .setPath("src/main/java/org/sonar/api/Plugin.java").setSubProjectId(5L).setProjectId(1L); diff --git a/sonar-server/src/test/java/org/sonar/server/component/ws/ComponentsWsTest.java b/sonar-server/src/test/java/org/sonar/server/component/ws/ComponentsWsTest.java index 3f7580987db..c56203962aa 100644 --- a/sonar-server/src/test/java/org/sonar/server/component/ws/ComponentsWsTest.java +++ b/sonar-server/src/test/java/org/sonar/server/component/ws/ComponentsWsTest.java @@ -29,6 +29,7 @@ import org.sonar.api.utils.Durations; import org.sonar.core.timemachine.Periods; import org.sonar.server.db.DbClient; import org.sonar.server.issue.IssueService; +import org.sonar.server.rule.RuleService; import org.sonar.server.ui.Views; import org.sonar.server.ws.WsTester; @@ -42,7 +43,7 @@ public class ComponentsWsTest { @Before public void setUp() throws Exception { WsTester tester = new WsTester(new ComponentsWs(new ComponentAppAction(mock(DbClient.class), mock(IssueService.class), mock(Views.class), - mock(Periods.class), mock(Durations.class), mock(I18n.class)))); + mock(RuleService.class), mock(Periods.class), mock(Durations.class), mock(I18n.class)))); controller = tester.controller("api/components"); } diff --git a/sonar-server/src/test/resources/org/sonar/server/component/persistence/ComponentDaoTest/empty.xml b/sonar-server/src/test/resources/org/sonar/server/component/persistence/ComponentDaoTest/empty.xml new file mode 100644 index 00000000000..871dedcb5e9 --- /dev/null +++ b/sonar-server/src/test/resources/org/sonar/server/component/persistence/ComponentDaoTest/empty.xml @@ -0,0 +1,3 @@ + + + diff --git a/sonar-server/src/test/resources/org/sonar/server/component/persistence/ComponentDaoTest/insert-result.xml b/sonar-server/src/test/resources/org/sonar/server/component/persistence/ComponentDaoTest/insert-result.xml new file mode 100644 index 00000000000..73f37328882 --- /dev/null +++ b/sonar-server/src/test/resources/org/sonar/server/component/persistence/ComponentDaoTest/insert-result.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app.json b/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app.json index 9d71aad91ca..30715cd97d2 100644 --- a/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app.json +++ b/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app.json @@ -8,6 +8,7 @@ "fav": true, "canMarkAsFavourite": true, "canBulkChange": true, + "canCreateManualIssue": true, "periods": [], "severities": [], "rules": [], diff --git a/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_extension.json b/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_extension.json index 614c658f4d9..015c2e99a4b 100644 --- a/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_extension.json +++ b/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_extension.json @@ -8,6 +8,7 @@ "fav": false, "canMarkAsFavourite": false, "canBulkChange": false, + "canCreateManualIssue": false, "periods": [], "severities": [], "rules": [], diff --git a/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_extension_having_permission.json b/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_extension_having_permission.json index 1a11ef7c558..e74c50f7e01 100644 --- a/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_extension_having_permission.json +++ b/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_extension_having_permission.json @@ -8,6 +8,7 @@ "fav": false, "canMarkAsFavourite": false, "canBulkChange": false, + "canCreateManualIssue": false, "periods": [], "severities": [], "rules": [], diff --git a/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_issues_measures.json b/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_issues_measures.json index 4ff6b556c67..5d645e3c4c6 100644 --- a/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_issues_measures.json +++ b/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_issues_measures.json @@ -8,6 +8,7 @@ "fav": false, "canMarkAsFavourite": false, "canBulkChange": false, + "canCreateManualIssue": false, "periods": [], "severities": [ ["BLOCKER", "Blocker", 1], diff --git a/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_issues_measures_when_period_is_set.json b/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_issues_measures_when_period_is_set.json index 82200db87a8..31da0b9b1dc 100644 --- a/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_issues_measures_when_period_is_set.json +++ b/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_issues_measures_when_period_is_set.json @@ -8,6 +8,7 @@ "fav": false, "canMarkAsFavourite": false, "canBulkChange": false, + "canCreateManualIssue": false, "periods": [ [1, "since previous analysis (May 08 2014)", "2014-05-08T00:00:00+0200"] ], diff --git a/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_manual_rules.json b/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_manual_rules.json new file mode 100644 index 00000000000..60a000a0a43 --- /dev/null +++ b/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_manual_rules.json @@ -0,0 +1,19 @@ +{ + "key": "org.codehaus.sonar:sonar-plugin-api:src/main/java/org/sonar/api/Plugin.java", + "path": "src/main/java/org/sonar/api/Plugin.java", + "name": "Plugin.java", + "q": "FIL", + "subProjectName": "SonarQube :: Plugin API", + "projectName": "SonarQube", + "fav": false, + "canMarkAsFavourite": false, + "canBulkChange": false, + "canCreateManualIssue": false, + "periods": [], + "severities": [], + "rules": [], + "measures": {}, + "manual_rules": [ + {"key": "manual:API", "name": "API"} + ] +} diff --git a/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_measures.json b/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_measures.json index a3d7bf45ae2..efa46c28829 100644 --- a/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_measures.json +++ b/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_measures.json @@ -8,6 +8,7 @@ "fav": false, "canMarkAsFavourite": false, "canBulkChange": false, + "canCreateManualIssue": false, "periods": [], "severities": [], "rules": [], diff --git a/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_measures_when_period_is_set.json b/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_measures_when_period_is_set.json index 671e609f266..cc34de25f9d 100644 --- a/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_measures_when_period_is_set.json +++ b/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_measures_when_period_is_set.json @@ -8,6 +8,7 @@ "fav": false, "canMarkAsFavourite": false, "canBulkChange": false, + "canCreateManualIssue": false, "periods": [ [1, "since previous analysis (May 08 2014)", "2014-05-08T00:00:00+0200"] ], diff --git a/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_periods.json b/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_periods.json index 646cc2464e3..ce54c1e87ce 100644 --- a/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_periods.json +++ b/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_periods.json @@ -8,6 +8,7 @@ "fav": false, "canMarkAsFavourite": false, "canBulkChange": false, + "canCreateManualIssue": false, "periods": [ [1, "since previous analysis (May 08 2014)", "2014-05-08T00:00:00+0200"] ], diff --git a/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_rules.json b/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_rules.json index 78afaae5404..d9172f38383 100644 --- a/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_rules.json +++ b/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_rules.json @@ -8,6 +8,7 @@ "fav": false, "canMarkAsFavourite": false, "canBulkChange": false, + "canCreateManualIssue": false, "periods": [], "severities": [], "rules": [ diff --git a/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_rules_when_period_is_set.json b/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_rules_when_period_is_set.json index a2531e439e4..ad8444c8ef2 100644 --- a/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_rules_when_period_is_set.json +++ b/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_rules_when_period_is_set.json @@ -8,6 +8,7 @@ "fav": false, "canMarkAsFavourite": false, "canBulkChange": false, + "canCreateManualIssue": false, "periods": [ [1, "since previous analysis (May 08 2014)", "2014-05-08T00:00:00+0200"] ], diff --git a/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_severities.json b/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_severities.json index 1dcbac620c7..807a1671257 100644 --- a/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_severities.json +++ b/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_severities.json @@ -8,6 +8,7 @@ "fav": false, "canMarkAsFavourite": false, "canBulkChange": false, + "canCreateManualIssue": false, "periods": [], "severities": [ ["MAJOR", "Major", 5] diff --git a/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_severities_when_period_is_set.json b/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_severities_when_period_is_set.json index 2c8c24cd82e..53401307052 100644 --- a/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_severities_when_period_is_set.json +++ b/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_severities_when_period_is_set.json @@ -8,6 +8,7 @@ "fav": false, "canMarkAsFavourite": false, "canBulkChange": false, + "canCreateManualIssue": false, "periods": [ [1, "since previous analysis (May 08 2014)", "2014-05-08T00:00:00+0200"] ], diff --git a/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_sub_project_equals_to_project.json b/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_sub_project_equals_to_project.json index 923015a3262..2eaadf88663 100644 --- a/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_sub_project_equals_to_project.json +++ b/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_sub_project_equals_to_project.json @@ -7,6 +7,7 @@ "fav": true, "canMarkAsFavourite": true, "canBulkChange": true, + "canCreateManualIssue": true, "periods": [], "severities": [], "rules": [], diff --git a/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_tabs.json b/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_tabs.json index 8b5d5998ff4..9b3f2515f80 100644 --- a/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_tabs.json +++ b/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_tabs.json @@ -8,6 +8,7 @@ "fav": false, "canMarkAsFavourite": false, "canBulkChange": false, + "canCreateManualIssue": false, "periods": [], "severities": [], "rules": [], diff --git a/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_tests_measure.json b/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_tests_measure.json index 45bf9e20115..385d2ba2321 100644 --- a/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_tests_measure.json +++ b/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_with_tests_measure.json @@ -8,6 +8,7 @@ "fav": false, "canMarkAsFavourite": false, "canBulkChange": false, + "canCreateManualIssue": false, "periods": [], "severities": [], "rules": [], diff --git a/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_without_sub_project.json b/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_without_sub_project.json index 9d6f9806489..709353d023b 100644 --- a/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_without_sub_project.json +++ b/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_without_sub_project.json @@ -6,6 +6,7 @@ "fav": true, "canMarkAsFavourite": true, "canBulkChange": true, + "canCreateManualIssue": true, "periods": [], "severities": [], "rules": [], -- 2.39.5