package org.tests.types; import io.ebean.BaseTestCase; import io.ebean.Ebean; import org.tests.model.json.EBasicHstore; import org.assertj.core.api.Assertions; import org.ebeantest.LoggedSqlCollector; import org.junit.Test; import java.util.List; import static org.assertj.core.api.StrictAssertions.assertThat; import static org.junit.Assert.assertEquals; public class TestHstore extends BaseTestCase { private EBasicHstore bean; @Test public void insert() { if (isPostgres()) { // run this manually for Postgres with the HSTORE extension installed // psql mydb -c 'create extension hstore;' return; } bean = new EBasicHstore("one"); bean.getMap().put("home", "123"); bean.getMap().put("work", "987"); Ebean.save(bean); json_parse_format(); update_when_notDirty(); update_when_dirty(); insert_when_null(); } void json_parse_format() { String asJson = Ebean.json().toJson(bean); assertThat(asJson).contains("\"map\":{\"home\":\"123\",\"work\":\"987\"}"); EBasicHstore fromJson = Ebean.json().toBean(EBasicHstore.class, asJson); assertEquals(bean.getId(), fromJson.getId()); assertEquals(bean.getName(), fromJson.getName()); Assertions.assertThat(fromJson.getMap().keySet()).containsExactly("home", "work"); } void update_when_notDirty() { EBasicHstore found = Ebean.find(EBasicHstore.class, bean.getId()); found.setName("modName"); LoggedSqlCollector.start(); Ebean.save(found); List<String> sql = LoggedSqlCollector.stop(); // we don't update the map as it is not dirty assertThat(sql.get(0)).contains("update ebasic_hstore set name=?, version=? where"); } void update_when_dirty() { EBasicHstore found = Ebean.find(EBasicHstore.class, bean.getId()); found.setName("modNamePlus"); found.getMap().put("foo", "9987"); LoggedSqlCollector.start(); Ebean.save(found); List<String> sql = LoggedSqlCollector.stop(); assertThat(sql.get(0)).contains("update ebasic_hstore set name=?, map=?, version=? where id=? and version=?"); } void insert_when_null() { EBasicHstore bean = new EBasicHstore("one"); bean.setMap(null); Ebean.save(bean); } }