diff options
author | Antonio Barone <syntonyze@gmail.com> | 2021-09-15 21:11:34 +0200 |
---|---|---|
committer | Antonio Barone <syntonyze@gmail.com> | 2021-09-16 22:54:14 +0200 |
commit | 8c14edcaef8e4817358d8f97e3924e0d013669ba (patch) | |
tree | 337e0a33d776bd43afb62fad421895fa373cf5c8 | |
parent | 86aed433d564017b947c31079468362be486a291 (diff) |
Fix serialization of AllUsersName and AllProjectsName
AllUsersName and AllProjectsName both extend Project.NameKey, however
their JSON serialized representation is unexpectedly different.
Whilst normal projects get serialized as a string representation of
their name (i.e. "project-foo"), AllUsersName and AllProjectsName
projects get serialized as JSON objects, such as {"name":"All-Projects"}
and {"name":"All-Users"}.
Fix this inconsistency by explicitly instructing GSON to use the
ProjectNameKeyAdapter for Project.KeyName and for all classes inheriting
from it (thus AllUsersName and AllProjectsName).
Bug: Issue 15024
Change-Id: I85db585f9f4799f35dfc0913ec10f473fe08c25a
-rw-r--r-- | java/com/google/gerrit/server/events/EventGsonProvider.java | 2 | ||||
-rw-r--r-- | javatests/com/google/gerrit/server/events/EventDeserializerTest.java | 27 |
2 files changed, 28 insertions, 1 deletions
diff --git a/java/com/google/gerrit/server/events/EventGsonProvider.java b/java/com/google/gerrit/server/events/EventGsonProvider.java index 688507bfe3..ab51518e01 100644 --- a/java/com/google/gerrit/server/events/EventGsonProvider.java +++ b/java/com/google/gerrit/server/events/EventGsonProvider.java @@ -30,7 +30,7 @@ public class EventGsonProvider implements Provider<Gson> { .registerTypeAdapter(Supplier.class, new SupplierSerializer()) .registerTypeAdapter(Supplier.class, new SupplierDeserializer()) .registerTypeAdapter(Change.Key.class, new ChangeKeyAdapter()) - .registerTypeAdapter(Project.NameKey.class, new ProjectNameKeyAdapter()) + .registerTypeHierarchyAdapter(Project.NameKey.class, new ProjectNameKeyAdapter()) .create(); } } diff --git a/javatests/com/google/gerrit/server/events/EventDeserializerTest.java b/javatests/com/google/gerrit/server/events/EventDeserializerTest.java index e0223e4885..97f6e4e64a 100644 --- a/javatests/com/google/gerrit/server/events/EventDeserializerTest.java +++ b/javatests/com/google/gerrit/server/events/EventDeserializerTest.java @@ -22,6 +22,8 @@ import com.google.gerrit.entities.Account; import com.google.gerrit.entities.BranchNameKey; import com.google.gerrit.entities.Change; import com.google.gerrit.entities.Project; +import com.google.gerrit.server.config.AllProjectsName; +import com.google.gerrit.server.config.AllUsersName; import com.google.gerrit.server.data.AccountAttribute; import com.google.gerrit.server.data.ChangeAttribute; import com.google.gerrit.server.data.RefUpdateAttribute; @@ -240,6 +242,31 @@ public class EventDeserializerTest { assertSameChangeEvent(e, orig); } + @Test + public void shouldSerializeAllProjectsToString() { + String allProjectsString = "foobar"; + AllProjectsName allProjectsNameKey = new AllProjectsName(allProjectsString); + + assertThat(gson.toJson(allProjectsNameKey)) + .isEqualTo(String.format("\"%s\"", allProjectsString)); + } + + @Test + public void shouldSerializeAllUsersToString() { + String allUsersString = "foobar"; + AllUsersName allUsersNameKey = new AllUsersName(allUsersString); + + assertThat(gson.toJson(allUsersNameKey)).isEqualTo(String.format("\"%s\"", allUsersString)); + } + + @Test + public void shouldSerializeProjectNameKeyToString() { + String projectString = "foobar"; + Project.NameKey projectNameKey = Project.nameKey(projectString); + + assertThat(gson.toJson(projectNameKey)).isEqualTo(String.format("\"%s\"", projectString)); + } + private <T> Supplier<T> createSupplier(T value) { return Suppliers.memoize(() -> value); } |