diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/accounts/GeneralPreferencesIT.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/accounts/GeneralPreferencesIT.java index ee2f5d9a75..1cfd8bf8ba 100644 --- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/accounts/GeneralPreferencesIT.java +++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/accounts/GeneralPreferencesIT.java @@ -31,6 +31,7 @@ import com.google.gerrit.extensions.client.GeneralPreferencesInfo.EmailStrategy; import com.google.gerrit.extensions.client.GeneralPreferencesInfo.ReviewCategoryStrategy; import com.google.gerrit.extensions.client.GeneralPreferencesInfo.TimeFormat; import com.google.gerrit.extensions.client.MenuItem; +import com.google.gerrit.extensions.restapi.BadRequestException; import com.google.gerrit.reviewdb.client.RefNames; import com.google.gerrit.server.config.AllUsersName; import com.google.inject.Inject; @@ -168,4 +169,26 @@ public class GeneralPreferencesIT extends AbstractDaemonTest { assertThat(a.changesPerPage).isEqualTo(d.changesPerPage); assertPrefs(a, d, "my", "changeTable", "changesPerPage"); } + + @Test + public void rejectMyMenuWithoutName() throws Exception { + GeneralPreferencesInfo i = GeneralPreferencesInfo.defaults(); + i.my = new ArrayList<>(); + i.my.add(new MenuItem(null, "url")); + + exception.expect(BadRequestException.class); + exception.expectMessage("name for menu item is required"); + gApi.accounts().id(user42.getId().toString()).setPreferences(i); + } + + @Test + public void rejectMyMenuWithoutUrl() throws Exception { + GeneralPreferencesInfo i = GeneralPreferencesInfo.defaults(); + i.my = new ArrayList<>(); + i.my.add(new MenuItem("name", null)); + + exception.expect(BadRequestException.class); + exception.expectMessage("URL for menu item is required"); + gApi.accounts().id(user42.getId().toString()).setPreferences(i); + } } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/account/SetPreferences.java b/gerrit-server/src/main/java/com/google/gerrit/server/account/SetPreferences.java index c033d9dd44..506d710dec 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/account/SetPreferences.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/account/SetPreferences.java @@ -100,7 +100,7 @@ public class SetPreferences implements RestModifyView my) { + public static void storeMyMenus(VersionedAccountPreferences prefs, List my) + throws BadRequestException { Config cfg = prefs.getConfig(); if (my != null) { unsetSection(cfg, UserConfigSections.MY); for (MenuItem item : my) { + checkRequiredMenuItemField(item.name, "name"); + checkRequiredMenuItemField(item.url, "URL"); + set(cfg, item.name, KEY_URL, item.url); set(cfg, item.name, KEY_TARGET, item.target); set(cfg, item.name, KEY_ID, item.id); @@ -174,6 +178,13 @@ public class SetPreferences implements RestModifyView