summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntonio Barone <syntonyze@gmail.com>2021-09-15 21:11:34 +0200
committerAntonio Barone <syntonyze@gmail.com>2021-09-16 22:54:14 +0200
commit8c14edcaef8e4817358d8f97e3924e0d013669ba (patch)
tree337e0a33d776bd43afb62fad421895fa373cf5c8
parent86aed433d564017b947c31079468362be486a291 (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.java2
-rw-r--r--javatests/com/google/gerrit/server/events/EventDeserializerTest.java27
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);
}