#1839 - Fix JSON marshalling of @ElementCollection maps and scalar

This commit is contained in:
rob bygrave
2019-10-10 21:32:44 +13:00
parent 20dd33ebca
commit 8890079b80
17 changed files with 206 additions and 45 deletions
@@ -1,6 +1,7 @@
package org.tests.model.elementcollection;
import io.ebean.BaseTestCase;
import io.ebean.DB;
import io.ebean.Ebean;
import org.ebeantest.LoggedSqlCollector;
import org.junit.Test;
@@ -175,4 +176,21 @@ public class TestElementCollectionBasicMap extends BaseTestCase {
assertThat(fromJson.getPhoneNumbers()).containsValues("021 1234", "021 4321");
assertThat(fromJson.getPhoneNumbers().get("home")).isEqualTo("021 1234");
}
@Test
public void json() {
EcmPerson person = new EcmPerson("Fiona021");
person.getPhoneNumbers().put("home", "021 1234");
person.getPhoneNumbers().put("work", "021 4321");
final String asJson = DB.json().toJson(person);
assertThat(asJson).isEqualTo("{\"name\":\"Fiona021\",\"phoneNumbers\":{\"home\":\"021 1234\",\"work\":\"021 4321\"}}");
final EcmPerson fromJson = DB.json().toBean(EcmPerson.class, asJson);
assertThat(fromJson.getName()).isEqualTo("Fiona021");
assertThat(fromJson.getPhoneNumbers()).hasSize(2);
assertThat(fromJson.getPhoneNumbers().toString()).isEqualTo("BeanMap size[2] map{home=021 1234, work=021 4321}");
}
}
@@ -1,6 +1,7 @@
package org.tests.model.elementcollection;
import io.ebean.BaseTestCase;
import io.ebean.DB;
import io.ebean.Ebean;
import org.ebeantest.LoggedSqlCollector;
import org.junit.Test;
@@ -170,4 +171,21 @@ public class TestElementCollectionBasicSet extends BaseTestCase {
EcsPerson fromJson = Ebean.json().toBean(EcsPerson.class, asJson);
assertThat(fromJson.getPhoneNumbers()).containsAll(foundFirst.getPhoneNumbers());
}
@Test
public void json() {
EcsPerson person = new EcsPerson("Fiona021");
person.getPhoneNumbers().add("021 1234");
person.getPhoneNumbers().add("021 4321");
final String asJson = DB.json().toJson(person);
assertThat(asJson).isEqualTo("{\"name\":\"Fiona021\",\"phoneNumbers\":[\"021 1234\",\"021 4321\"]}");
final EcsPerson fromJson = DB.json().toBean(EcsPerson.class, asJson);
assertThat(fromJson.getName()).isEqualTo("Fiona021");
assertThat(fromJson.getPhoneNumbers()).hasSize(2);
assertThat(fromJson.getPhoneNumbers().toString()).isEqualTo("BeanSet size[2] set[021 1234, 021 4321]");
}
}
@@ -1,6 +1,7 @@
package org.tests.model.elementcollection;
import io.ebean.BaseTestCase;
import io.ebean.DB;
import io.ebean.Ebean;
import org.ebeantest.LoggedSqlCollector;
import org.junit.Test;
@@ -17,8 +18,8 @@ public class TestElementCollectionEmbeddedList extends BaseTestCase {
LoggedSqlCollector.start();
EcblPerson person = new EcblPerson("Fiona64021");
person.getPhoneNumbers().add(new EcPhone("64", "021","1234"));
person.getPhoneNumbers().add(new EcPhone("64","021","4321"));
person.getPhoneNumbers().add(new EcPhone("64", "021", "1234"));
person.getPhoneNumbers().add(new EcPhone("64", "021", "4321"));
Ebean.save(person);
List<String> sql = LoggedSqlCollector.current();
@@ -35,8 +36,8 @@ public class TestElementCollectionEmbeddedList extends BaseTestCase {
}
EcblPerson person1 = new EcblPerson("Fiona6409");
person1.getPhoneNumbers().add(new EcPhone("61","09","1234"));
person1.getPhoneNumbers().add(new EcPhone("64","09","4321"));
person1.getPhoneNumbers().add(new EcPhone("61", "09", "1234"));
person1.getPhoneNumbers().add(new EcPhone("64", "09", "4321"));
Ebean.save(person1);
LoggedSqlCollector.current();
@@ -175,4 +176,21 @@ public class TestElementCollectionEmbeddedList extends BaseTestCase {
assertThat(phoneString).contains("64-021-1234");
assertThat(phoneString).contains("64-021-4321");
}
@Test
public void json() {
EcblPerson person = new EcblPerson("Fiona64021");
person.getPhoneNumbers().add(new EcPhone("64", "021", "1234"));
person.getPhoneNumbers().add(new EcPhone("64", "021", "4321"));
final String asJson = DB.json().toJson(person);
assertThat(asJson).isEqualTo("{\"name\":\"Fiona64021\",\"phoneNumbers\":[{\"countryCode\":\"64\",\"area\":\"021\",\"number\":\"1234\"},{\"countryCode\":\"64\",\"area\":\"021\",\"number\":\"4321\"}]}");
final EcblPerson fromJson = DB.json().toBean(EcblPerson.class, asJson);
assertThat(fromJson.getName()).isEqualTo("Fiona64021");
assertThat(fromJson.getPhoneNumbers()).hasSize(2);
assertThat(fromJson.getPhoneNumbers().toString()).isEqualTo("BeanList size[2] list[64-021-1234, 64-021-4321]");
}
}
@@ -1,6 +1,7 @@
package org.tests.model.elementcollection;
import io.ebean.BaseTestCase;
import io.ebean.DB;
import io.ebean.Ebean;
import org.ebeantest.LoggedSqlCollector;
import org.junit.Test;
@@ -167,4 +168,20 @@ public class TestElementCollectionEmbeddedMap extends BaseTestCase {
assertThat(phoneString).contains("64-021-4321");
}
@Test
public void json() {
EcbmPerson person = new EcbmPerson("Fiona64021");
person.getPhoneNumbers().put("home", new EcPhone("64", "021","1234"));
person.getPhoneNumbers().put("work", new EcPhone("64","021","4321"));
final String asJson = DB.json().toJson(person);
assertThat(asJson).isEqualTo("{\"name\":\"Fiona64021\",\"phoneNumbers\":{\"home\":{\"countryCode\":\"64\",\"area\":\"021\",\"number\":\"1234\"},\"work\":{\"countryCode\":\"64\",\"area\":\"021\",\"number\":\"4321\"}}}");
final EcbmPerson fromJson = DB.json().toBean(EcbmPerson.class, asJson);
assertThat(fromJson.getName()).isEqualTo("Fiona64021");
assertThat(fromJson.getPhoneNumbers()).hasSize(2);
assertThat(fromJson.getPhoneNumbers().toString()).isEqualTo("BeanMap size[2] map{home=64-021-1234, work=64-021-4321}");
}
}
@@ -1,6 +1,7 @@
package org.tests.model.elementcollection;
import io.ebean.BaseTestCase;
import io.ebean.DB;
import io.ebean.Ebean;
import org.junit.Test;
@@ -30,4 +31,21 @@ public class TestElementCollectionEnumSet extends BaseTestCase {
Ebean.save(one);
}
@Test
public void json() {
EcEnumPerson person = new EcEnumPerson("Enum Person");
person.getTags().add(EcEnumPerson.Tags.BLUE);
person.getTags().add(EcEnumPerson.Tags.RED);
final String asJson = DB.json().toJson(person);
assertThat(asJson).isEqualTo("{\"name\":\"Enum Person\",\"tags\":[\"BLUE\",\"RED\"]}");
final EcEnumPerson fromJson = DB.json().toBean(EcEnumPerson.class, asJson);
assertThat(fromJson.getName()).isEqualTo("Enum Person");
assertThat(fromJson.getTags()).hasSize(2);
assertThat(fromJson.getTags().toString()).isEqualTo("BeanSet size[2] set[BLUE, RED]");
}
}
@@ -1,14 +1,18 @@
package org.tests.query.other;
import io.ebean.BaseTestCase;
import io.ebean.DB;
import io.ebean.Ebean;
import org.junit.Assert;
import org.junit.Test;
import org.tests.model.map.MpRole;
import org.tests.model.map.MpUser;
import java.util.LinkedHashMap;
import java.util.Map;
import static org.assertj.core.api.Assertions.assertThat;
public class TestOneToManyAsMap extends BaseTestCase {
@Test
@@ -39,4 +43,35 @@ public class TestOneToManyAsMap extends BaseTestCase {
}
@Test
public void json() {
Map<String,MpRole> roles = new LinkedHashMap<>();
roles.put("r1", newRole(1L, "r1"));
roles.put("r2", newRole(2L, "r2"));
MpUser u = new MpUser();
u.setName("myName");
u.setRoles(roles);
final String asJson = DB.json().toJson(u);
assertThat(asJson).isEqualTo("{\"name\":\"myName\",\"roles\":[{\"id\":1,\"code\":\"r1\"},{\"id\":2,\"code\":\"r2\"}]}");
final MpUser bean = DB.json().toBean(MpUser.class, asJson);
assertThat(bean.getName()).isEqualTo("myName");
final Map<String, MpRole> beanRoles = bean.getRoles();
assertThat(beanRoles.get("r1").getId()).isEqualTo(1L);
assertThat(beanRoles.get("r1").getCode()).isEqualTo("r1");
assertThat(beanRoles.get("r2").getId()).isEqualTo(2L);
assertThat(beanRoles.get("r2").getCode()).isEqualTo("r2");
}
private MpRole newRole(Long id, String code) {
MpRole role = new MpRole();
role.setId(id);
role.setCode(code);
return role;
}
}