package org.tests.json;
import io.ebean.BaseTestCase;
import io.ebean.Ebean;
import org.tests.model.json.EBasicJsonList;
import org.tests.model.json.PlainBean;
import org.ebeantest.LoggedSqlCollector;
import org.junit.Test;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.*;
public class TestDbJson_List extends BaseTestCase {
private EBasicJsonList bean = new EBasicJsonList();
private EBasicJsonList found;
@Test
public void insert() {
bean.setName("stuff");
bean.getTags().add("one");
bean.getTags().add("two");
bean.getFlags().add(42L);
bean.getFlags().add(43L);
bean.getFlags().add(44L);
bean.setPlainBean(new PlainBean("plain", 52));
List<PlainBean> beanList = new ArrayList<>();
beanList.add(new PlainBean("one", 1));
beanList.add(new PlainBean("two", 2));
bean.setBeanList(beanList);
Set<PlainBean> beanSet = new LinkedHashSet<>();
beanSet.add(new PlainBean("A", 1));
beanSet.add(new PlainBean("B", 2));
bean.setBeanSet(beanSet);
bean.getBeanMap().put("key0", new PlainBean("k0", 90));
bean.getBeanMap().put("key1", new PlainBean("k1", 91));
Ebean.save(bean);
found = Ebean.find(EBasicJsonList.class, bean.getId());
assertThat(found.getTags()).containsExactly("one", "two");
assertTrue(found.getFlags().contains(42L));
assertTrue(found.getFlags().contains(43L));
assertTrue(found.getFlags().contains(44L));
assertThat(found.getBeanList()).hasSize(2);
assertThat(found.getBeanSet()).hasSize(2);
assertThat(found.getBeanMap()).hasSize(2);
json_parse_format();
update_when_notDirty();
update_when_dirty();
update_when_dirty_flags();
update_when_dirty_SetListMap();
}
//@Test//(dependsOnMethods = "insert")
public void json_parse_format() {
String asJson = Ebean.json().toJson(found);
assertThat(asJson).contains("\"tags\":[\"one\",\"two\"]");
assertThat(asJson).contains("\"flags\":[42,43,44]");
assertThat(asJson).contains("\"plainBean\":{\"name\":\"plain\"");
assertThat(asJson).contains("\"beanSet\":[");
assertThat(asJson).contains("\"beanList\":[");
assertThat(asJson).contains("\"beanMap\":{");
assertThat(asJson).contains("\"id\":");
EBasicJsonList fromJson = Ebean.json().toBean(EBasicJsonList.class, asJson);
assertEquals(found.getId(), fromJson.getId());
assertEquals(found.getId(), fromJson.getId());
assertEquals(found.getName(), fromJson.getName());
assertThat(fromJson.getTags()).containsExactly("one", "two");
assertTrue(fromJson.getFlags().contains(42L));
assertTrue(fromJson.getFlags().contains(43L));
assertTrue(fromJson.getFlags().contains(44L));
assertThat(fromJson.getBeanSet()).hasSize(2);
assertThat(fromJson.getBeanList()).hasSize(2);
assertThat(fromJson.getBeanMap()).hasSize(2);
}
//@Test//(dependsOnMethods = "insert")
public void update_when_notDirty() {
found.setName("mod");
LoggedSqlCollector.start();
Ebean.save(found);
List<String> sql = LoggedSqlCollector.stop();
// we don't update the phone numbers (as they are not dirty)
assertThat(sql.get(0)).contains("update ebasic_json_list set name=?, plain_bean=?, version=? where");
}
public void update_when_dirty() {
//found.setName("modAgain");
found.getTags().add("three");
LoggedSqlCollector.start();
Ebean.save(found);
List<String> sql = LoggedSqlCollector.stop();
// we don't update the phone numbers (as they are not dirty)
assertThat(sql.get(0)).contains("update ebasic_json_list set plain_bean=?, tags=?, version=? where id=? and version=?");
}
public void update_when_dirty_flags() {
//found.setName("modAgain");
found.getFlags().remove(42L);
LoggedSqlCollector.start();
Ebean.save(found);
List<String> sql = LoggedSqlCollector.stop();
// we don't update the phone numbers (as they are not dirty)
assertThat(sql.get(0)).contains("update ebasic_json_list set plain_bean=?, flags=?, version=? where id=? and version=?;");
}
public void update_when_dirty_SetListMap() {
//found.setName("modAgain");
found.getBeanSet().clear();
found.getBeanList().clear();
found.getBeanMap().remove("key0");
LoggedSqlCollector.start();
Ebean.save(found);
List<String> sql = LoggedSqlCollector.stop();
// we don't update the phone numbers (as they are not dirty)
assertThat(sql.get(0)).contains("update ebasic_json_list set bean_set=?, bean_list=?, bean_map=?, plain_bean=?, version=? where id=? and version=?");
}
@Test
public void insert_fetch_when_null() {
EBasicJsonList bean = new EBasicJsonList();
bean.setName("leave some nulls");
bean.setFlags(null);
bean.setTags(null);
bean.setBeanMap(null);
Ebean.save(bean);
EBasicJsonList found = Ebean.find(EBasicJsonList.class, bean.getId());
assertNull(found.getPlainBean());
String asJson = Ebean.json().toJson(found);
assertNotNull(asJson);
}
}