aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-server/src
diff options
context:
space:
mode:
Diffstat (limited to 'server/sonar-server/src')
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/user/ws/UpdateAction.java3
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/user/ws/UpdateActionTest.java32
-rw-r--r--server/sonar-server/src/test/resources/org/sonar/server/user/ws/UpdateActionTest/update_scm_accounts.json4
3 files changed, 38 insertions, 1 deletions
diff --git a/server/sonar-server/src/main/java/org/sonar/server/user/ws/UpdateAction.java b/server/sonar-server/src/main/java/org/sonar/server/user/ws/UpdateAction.java
index b40b8659275..b71f3fe2f49 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/user/ws/UpdateAction.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/user/ws/UpdateAction.java
@@ -25,6 +25,7 @@ import java.util.List;
import java.util.Set;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
+import org.sonar.api.internal.google.common.base.Preconditions;
import org.sonar.api.server.ws.Change;
import org.sonar.api.server.ws.Request;
import org.sonar.api.server.ws.Response;
@@ -126,9 +127,11 @@ public class UpdateAction implements UsersWsAction {
UserDto user = getUser(dbSession, login);
UpdateUser updateUser = new UpdateUser();
if (request.getName() != null) {
+ Preconditions.checkArgument(user.isLocal(), "Name cannot be updated for a non-local user");
updateUser.setName(request.getName());
}
if (request.getEmail() != null) {
+ Preconditions.checkArgument(user.isLocal(), "Email cannot be updated for a non-local user");
updateUser.setEmail(emptyToNull(request.getEmail()));
}
if (!request.getScmAccounts().isEmpty()) {
diff --git a/server/sonar-server/src/test/java/org/sonar/server/user/ws/UpdateActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/user/ws/UpdateActionTest.java
index efab9c999c0..8901a4c7dd5 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/user/ws/UpdateActionTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/user/ws/UpdateActionTest.java
@@ -98,6 +98,32 @@ public class UpdateActionTest {
}
@Test
+ public void fail_on_update_name_non_local_user() {
+ createUser(false);
+
+ expectedException.expect(IllegalArgumentException.class);
+ expectedException.expectMessage("Name cannot be updated for a non-local user");
+
+ ws.newRequest()
+ .setParam("login", "john")
+ .setParam("name", "Jean Neige")
+ .execute();
+ }
+
+ @Test
+ public void fail_on_update_email_non_local_user() {
+ createUser(false);
+
+ expectedException.expect(IllegalArgumentException.class);
+ expectedException.expectMessage("Email cannot be updated for a non-local user");
+
+ ws.newRequest()
+ .setParam("login", "john")
+ .setParam("email", "jean.neige@thegreatw.all")
+ .execute();
+ }
+
+ @Test
public void update_only_name() {
createUser();
@@ -283,13 +309,17 @@ public class UpdateActionTest {
}
private void createUser() {
+ createUser(true);
+ }
+
+ private void createUser(boolean local) {
UserDto userDto = newUserDto()
.setEmail("john@email.com")
.setLogin("john")
.setName("John")
.setScmAccounts(newArrayList("jn"))
.setActive(true)
- .setLocal(true)
+ .setLocal(local)
.setExternalLogin("jo")
.setExternalIdentityProvider("sonarqube");
dbClient.userDao().insert(dbSession, userDto);
diff --git a/server/sonar-server/src/test/resources/org/sonar/server/user/ws/UpdateActionTest/update_scm_accounts.json b/server/sonar-server/src/test/resources/org/sonar/server/user/ws/UpdateActionTest/update_scm_accounts.json
index a9539069466..445f1b29800 100644
--- a/server/sonar-server/src/test/resources/org/sonar/server/user/ws/UpdateActionTest/update_scm_accounts.json
+++ b/server/sonar-server/src/test/resources/org/sonar/server/user/ws/UpdateActionTest/update_scm_accounts.json
@@ -4,6 +4,10 @@
"name": "John",
"email": "john@email.com",
"active": true,
+ "local": false,
+ "externalIdentity": "jo",
+ "externalProvider": "sonarqube",
+ "groups": [],
"scmAccounts": [
"jon.snow"
],