diff options
author | Michal Duda <michal.duda@sonarsource.com> | 2021-03-11 16:56:02 +0100 |
---|---|---|
committer | sonartech <sonartech@sonarsource.com> | 2021-03-15 21:29:06 +0000 |
commit | a7a57bdc88427dad381ed294cfef9d041b07d451 (patch) | |
tree | f3f65fb33fe1e3e69cd16435cb205c2836a1eaa4 /server | |
parent | 19b1cc5031afac8928aa7dff6370f96d76390a1a (diff) | |
download | sonarqube-a7a57bdc88427dad381ed294cfef9d041b07d451.tar.gz sonarqube-a7a57bdc88427dad381ed294cfef9d041b07d451.zip |
SONAR-13703 api/measures/component_tree returns an SVW qualifier for Applications
Diffstat (limited to 'server')
2 files changed, 54 insertions, 0 deletions
diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/measure/ws/ComponentTreeAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/measure/ws/ComponentTreeAction.java index cbd139a13b7..e56d72b6770 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/measure/ws/ComponentTreeAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/measure/ws/ComponentTreeAction.java @@ -374,6 +374,8 @@ public class ComponentTreeAction implements MeasuresWsAction { ComponentDto referenceComponent = referenceComponentsByUuid.get(component.getCopyResourceUuid()); if (referenceComponent != null) { wsComponent.setRefKey(referenceComponent.getKey()); + String displayQualifier = getDisplayQualifier(component, referenceComponent); + wsComponent.setQualifier(displayQualifier); } Measures.Measure.Builder measureBuilder = Measures.Measure.newBuilder(); for (Map.Entry<MetricDto, ComponentTreeData.Measure> entry : measures.entrySet()) { @@ -385,6 +387,16 @@ public class ComponentTreeAction implements MeasuresWsAction { return wsComponent; } + // https://jira.sonarsource.com/browse/SONAR-13703 - for apps that were added as a local reference to a portfolio, we want to + // show them as apps, not sub-portfolios + private static String getDisplayQualifier(ComponentDto component, ComponentDto referenceComponent) { + String qualifier = component.qualifier(); + if (qualifier.equals(Qualifiers.SUBVIEW) && referenceComponent.qualifier().equals(Qualifiers.APP)) { + return Qualifiers.APP; + } + return qualifier; + } + private ComponentTreeData load(ComponentTreeRequest wsRequest) { try (DbSession dbSession = dbClient.openSession(false)) { ComponentDto baseComponent = loadComponent(dbSession, wsRequest); diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/measure/ws/ComponentTreeActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/measure/ws/ComponentTreeActionTest.java index ace3cf74fec..26e4c6f5479 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/measure/ws/ComponentTreeActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/measure/ws/ComponentTreeActionTest.java @@ -73,6 +73,8 @@ import static org.sonar.db.component.BranchType.PULL_REQUEST; import static org.sonar.db.component.ComponentTesting.newDirectory; import static org.sonar.db.component.ComponentTesting.newFileDto; import static org.sonar.db.component.ComponentTesting.newProjectCopy; +import static org.sonar.db.component.ComponentTesting.newSubView; +import static org.sonar.db.component.ComponentTesting.newView; import static org.sonar.db.component.SnapshotTesting.newAnalysis; import static org.sonar.server.component.ws.MeasuresWsParameters.ADDITIONAL_PERIOD; import static org.sonar.server.component.ws.MeasuresWsParameters.DEPRECATED_ADDITIONAL_PERIODS; @@ -658,6 +660,46 @@ public class ComponentTreeActionTest { } @Test + public void portfolio_local_reference_in_portfolio() { + ComponentDto view = db.components().insertComponent(newView("VIEW1-UUID").setDbKey("Apache-Projects").setName("Apache Projects")); + ComponentDto view2 = db.components().insertPrivatePortfolio(); + ComponentDto localView = db.components().insertComponent( + newSubView(view, "SUB-VIEW-UUID", "All-Projects").setName("All projects").setCopyComponentUuid(view2.uuid())); + db.components().insertSnapshot(view); + MetricDto ncloc = insertNclocMetric(); + db.measures().insertLiveMeasure(localView, ncloc, m -> m.setValue(5d)); + + ComponentTreeWsResponse result = ws.newRequest() + .setParam(PARAM_COMPONENT, view.getKey()) + .setParam(PARAM_METRIC_KEYS, ncloc.getKey()) + .executeProtobuf(ComponentTreeWsResponse.class); + + assertThat(result.getComponentsList()) + .extracting(Component::getKey, Component::getRefKey, Component::getQualifier) + .containsExactlyInAnyOrder(tuple(localView.getKey(), view2.getKey(), "SVW")); + } + + @Test + public void application_local_reference_in_portfolio() { + ComponentDto view = db.components().insertComponent(newView("VIEW1-UUID").setDbKey("Apache-Projects").setName("Apache Projects")); + ComponentDto application = db.components().insertPrivateApplication(); + ComponentDto localView = db.components().insertComponent( + newSubView(view, "SUB-VIEW-UUID", "All-Projects").setName("All projects").setCopyComponentUuid(application.uuid())); + db.components().insertSnapshot(view); + MetricDto ncloc = insertNclocMetric(); + db.measures().insertLiveMeasure(localView, ncloc, m -> m.setValue(5d)); + + ComponentTreeWsResponse result = ws.newRequest() + .setParam(PARAM_COMPONENT, view.getKey()) + .setParam(PARAM_METRIC_KEYS, ncloc.getKey()) + .executeProtobuf(ComponentTreeWsResponse.class); + + assertThat(result.getComponentsList()) + .extracting(Component::getKey, Component::getRefKey, Component::getQualifier) + .containsExactlyInAnyOrder(tuple(localView.getKey(), application.getKey(), "APP")); + } + + @Test public void project_branch_reference_from_application_branch() { MetricDto ncloc = insertNclocMetric(); ComponentDto application = db.components().insertPublicProject(c -> c.setQualifier(APP).setDbKey("app-key")); |