aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSébastien Lesaint <sebastien.lesaint@sonarsource.com>2018-08-08 11:20:06 +0200
committerSonarTech <sonartech@sonarsource.com>2018-08-10 20:21:32 +0200
commit24c9674eccdf9138ab91ff8273b28fd880d2fbf7 (patch)
treedadedfd65f3126a311aa3c07f6b3850f7d1bce76
parentd3530ff0004d44a2c4e9140ff9cc7774b8bc38a4 (diff)
downloadsonarqube-24c9674eccdf9138ab91ff8273b28fd880d2fbf7.tar.gz
sonarqube-24c9674eccdf9138ab91ff8273b28fd880d2fbf7.zip
SONAR-10209 api/navigation/component returns QP deleted flag
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/ui/ws/ComponentAction.java26
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/ui/ws/ComponentActionTest.java22
-rw-r--r--server/sonar-server/src/test/resources/org/sonar/server/ui/ws/ComponentActionTest/return_deleted_quality_profiles.json16
-rw-r--r--server/sonar-server/src/test/resources/org/sonar/server/ui/ws/ComponentActionTest/return_quality_profiles.json6
4 files changed, 56 insertions, 14 deletions
diff --git a/server/sonar-server/src/main/java/org/sonar/server/ui/ws/ComponentAction.java b/server/sonar-server/src/main/java/org/sonar/server/ui/ws/ComponentAction.java
index 32a79ea029a..4fb3bf2f420 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/ui/ws/ComponentAction.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/ui/ws/ComponentAction.java
@@ -23,10 +23,11 @@ import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Lists;
import java.util.Date;
import java.util.List;
+import java.util.Map;
import java.util.Optional;
import java.util.Set;
-import java.util.function.Consumer;
import java.util.function.Predicate;
+import java.util.stream.Collectors;
import javax.annotation.Nullable;
import org.sonar.api.resources.Qualifiers;
import org.sonar.api.resources.ResourceType;
@@ -51,6 +52,7 @@ import org.sonar.db.permission.OrganizationPermission;
import org.sonar.db.property.PropertyDto;
import org.sonar.db.property.PropertyQuery;
import org.sonar.db.qualitygate.QualityGateDto;
+import org.sonar.db.qualityprofile.QProfileDto;
import org.sonar.server.component.ComponentFinder;
import org.sonar.server.exceptions.NotFoundException;
import org.sonar.server.organization.BillingValidations;
@@ -63,10 +65,12 @@ import org.sonar.server.ui.PageRepository;
import org.sonar.server.user.UserSession;
import static java.lang.String.format;
+import static java.util.Collections.emptySortedSet;
import static org.sonar.api.measures.CoreMetrics.QUALITY_PROFILES_KEY;
import static org.sonar.api.utils.DateUtils.formatDateTime;
import static org.sonar.api.web.UserRole.ADMIN;
import static org.sonar.api.web.UserRole.USER;
+import static org.sonar.core.util.stream.MoreCollectors.uniqueIndex;
import static org.sonar.db.permission.OrganizationPermission.ADMINISTER_QUALITY_GATES;
import static org.sonar.db.permission.OrganizationPermission.ADMINISTER_QUALITY_PROFILES;
import static org.sonar.server.user.AbstractUserSession.insufficientPrivilegesException;
@@ -77,8 +81,8 @@ import static org.sonar.server.ws.KeyExamples.KEY_PULL_REQUEST_EXAMPLE_001;
public class ComponentAction implements NavigationWsAction {
static final String PARAM_COMPONENT = "component";
- static final String PARAM_BRANCH = "branch";
- static final String PARAM_PULL_REQUEST = "pullRequest";
+ private static final String PARAM_BRANCH = "branch";
+ private static final String PARAM_PULL_REQUEST = "pullRequest";
private static final String PROPERTY_CONFIGURABLE = "configurable";
private static final String PROPERTY_HAS_ROLE_POLICY = "hasRolePolicy";
@@ -193,11 +197,12 @@ public class ComponentAction implements NavigationWsAction {
});
}
- private static Consumer<QualityProfile> writeToJson(JsonWriter json) {
- return profile -> json.beginObject()
+ private static void writeToJson(JsonWriter json, QualityProfile profile, boolean deleted) {
+ json.beginObject()
.prop("key", profile.getQpKey())
.prop("name", profile.getQpName())
.prop("language", profile.getLanguageKey())
+ .prop("deleted", deleted)
.endObject();
}
@@ -241,10 +246,15 @@ public class ComponentAction implements NavigationWsAction {
}
private void writeProfiles(JsonWriter json, DbSession dbSession, ComponentDto component) {
- json.name("qualityProfiles").beginArray();
- dbClient.liveMeasureDao().selectMeasure(dbSession, component.projectUuid(), QUALITY_PROFILES_KEY)
+ Set<QualityProfile> qualityProfiles = dbClient.liveMeasureDao().selectMeasure(dbSession, component.projectUuid(), QUALITY_PROFILES_KEY)
.map(LiveMeasureDto::getDataAsString)
- .ifPresent(data -> QPMeasureData.fromJson(data).getProfiles().forEach(writeToJson(json)));
+ .map(data -> QPMeasureData.fromJson(data).getProfiles())
+ .orElse(emptySortedSet());
+ Map<String, QProfileDto> dtoByQPKey = dbClient.qualityProfileDao().selectByUuids(dbSession, qualityProfiles.stream().map(QualityProfile::getQpKey).collect(Collectors.toList()))
+ .stream()
+ .collect(uniqueIndex(QProfileDto::getKee));
+ json.name("qualityProfiles").beginArray();
+ qualityProfiles.forEach(qp -> writeToJson(json, qp, !dtoByQPKey.containsKey(qp.getQpKey())));
json.endArray();
}
diff --git a/server/sonar-server/src/test/java/org/sonar/server/ui/ws/ComponentActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/ui/ws/ComponentActionTest.java
index 6c190302f17..9edc7b47337 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/ui/ws/ComponentActionTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/ui/ws/ComponentActionTest.java
@@ -19,6 +19,7 @@
*/
package org.sonar.server.ui.ws;
+import com.google.common.collect.ImmutableSet;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
@@ -52,6 +53,7 @@ import org.sonar.db.permission.OrganizationPermission;
import org.sonar.db.property.PropertyDbTester;
import org.sonar.db.property.PropertyDto;
import org.sonar.db.qualitygate.QualityGateDto;
+import org.sonar.db.qualityprofile.QProfileDto;
import org.sonar.db.user.UserDto;
import org.sonar.server.component.ComponentFinder;
import org.sonar.server.exceptions.ForbiddenException;
@@ -224,15 +226,23 @@ public class ComponentActionTest {
}
@Test
- public void return_quality_profiles() {
- ComponentDto project = insertOrganizationAndProject();
+ public void return_quality_profiles_and_supports_deleted_ones() {
+ OrganizationDto organization = db.organizations().insert(o -> o.setKey("my-org"));
+ ComponentDto project = insertProject(organization);
+ QProfileDto qp1 = db.qualityProfiles().insert(organization, t -> t.setKee("qp1").setName("Sonar Way Java").setLanguage("java"));
+ QProfileDto qp2 = db.qualityProfiles().insert(organization, t -> t.setKee("qp2").setName("Sonar Way Xoo").setLanguage("xoo"));
addQualityProfiles(project,
- createQProfile("qp1", "Sonar Way Java", "java"),
- createQProfile("qp2", "Sonar Way Xoo", "xoo"));
+ new QualityProfile(qp1.getKee(), qp1.getName(), qp1.getLanguage(), new Date()),
+ new QualityProfile(qp2.getKee(), qp2.getName(), qp2.getLanguage(), new Date()));
userSession.addProjectPermission(UserRole.USER, project);
init();
executeAndVerify(project.getDbKey(), "return_quality_profiles.json");
+
+ db.getDbClient().qualityProfileDao().deleteOrgQProfilesByUuids(db.getSession(), ImmutableSet.of(qp1.getKee(), qp2.getKee()));
+ db.commit();
+
+ executeAndVerify(project.getDbKey(), "return_deleted_quality_profiles.json");
}
@Test
@@ -629,6 +639,10 @@ public class ComponentActionTest {
private ComponentDto insertOrganizationAndProject() {
OrganizationDto organization = db.organizations().insert(o -> o.setKey("my-org"));
+ return insertProject(organization);
+ }
+
+ private ComponentDto insertProject(OrganizationDto organization) {
db.qualityGates().createDefaultQualityGate(organization);
return db.components().insertPrivateProject(organization, "abcd", p -> p.setDbKey("polop").setName("Polop").setDescription("test project"));
}
diff --git a/server/sonar-server/src/test/resources/org/sonar/server/ui/ws/ComponentActionTest/return_deleted_quality_profiles.json b/server/sonar-server/src/test/resources/org/sonar/server/ui/ws/ComponentActionTest/return_deleted_quality_profiles.json
new file mode 100644
index 00000000000..70c873a7e13
--- /dev/null
+++ b/server/sonar-server/src/test/resources/org/sonar/server/ui/ws/ComponentActionTest/return_deleted_quality_profiles.json
@@ -0,0 +1,16 @@
+{
+ "qualityProfiles": [
+ {
+ "key": "qp1",
+ "name": "Sonar Way Java",
+ "language": "java",
+ "deleted": true
+ },
+ {
+ "key": "qp2",
+ "name": "Sonar Way Xoo",
+ "language": "xoo",
+ "deleted": true
+ }
+ ]
+}
diff --git a/server/sonar-server/src/test/resources/org/sonar/server/ui/ws/ComponentActionTest/return_quality_profiles.json b/server/sonar-server/src/test/resources/org/sonar/server/ui/ws/ComponentActionTest/return_quality_profiles.json
index 10865b08326..148e21a0bbf 100644
--- a/server/sonar-server/src/test/resources/org/sonar/server/ui/ws/ComponentActionTest/return_quality_profiles.json
+++ b/server/sonar-server/src/test/resources/org/sonar/server/ui/ws/ComponentActionTest/return_quality_profiles.json
@@ -3,12 +3,14 @@
{
"key": "qp1",
"name": "Sonar Way Java",
- "language": "java"
+ "language": "java",
+ "deleted": false
},
{
"key": "qp2",
"name": "Sonar Way Xoo",
- "language": "xoo"
+ "language": "xoo",
+ "deleted": false
}
]
}