package io.ebean; import io.ebean.bean.EntityBean; import org.tests.model.converstation.User; import org.ebeantest.LoggedSqlCollector; import org.junit.Test; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; public class TestUnsetLoadedProperties extends BaseTestCase { @Test public void testUnsetPropertyLoadedState() { // populate db with a user User seed = new User(); seed.setName("someName"); seed.setEmail("some@junk.com"); seed.save(); // our bean to perform stateless update User user = new User(); user.setId(seed.getId()); user.setName("name mod"); user.setEmail("change@junk.com"); BeanState beanState = Ebean.getBeanState(user); assertThat(beanState.getLoadedProps()).containsExactly("id", "name", "email"); user.markPropertyUnset("email"); assertThat(beanState.getLoadedProps()).containsExactly("id", "name"); LoggedSqlCollector.start(); user.update(); List<String> loggedSql = LoggedSqlCollector.stop(); assertThat(loggedSql).hasSize(1); assertThat(loggedSql.get(0)).doesNotContain("email"); } @Test public void testUnloadVia_EntityBeanIntercept_setPropertyLoaded() { // our bean to perform stateless update User user = new User(); user.setId(42L); user.setName("name mod"); user.setEmail("change@junk.com"); BeanState beanState = Ebean.getBeanState(user); assertThat(beanState.getLoadedProps()).containsExactly("id", "name", "email"); // unset the loaded state for email ((EntityBean) user)._ebean_getIntercept().setPropertyLoaded("email", false); assertThat(beanState.getLoadedProps()).containsExactly("id", "name"); } @Test public void testUnloadVia_Model_markPropertyUnset() { // our bean to perform stateless update User user = new User(); user.setId(42L); user.setName("name mod"); user.setEmail("change@junk.com"); BeanState beanState = Ebean.getBeanState(user); assertThat(beanState.getLoadedProps()).containsExactly("id", "name", "email"); user.markPropertyUnset("email"); assertThat(beanState.getLoadedProps()).containsExactly("id", "name"); } @Test public void testUnloadVia_BeanState_setPropertyLoaded() { // our bean to perform stateless update User user = new User(); user.setId(42L); user.setName("name mod"); user.setEmail("change@junk.com"); BeanState beanState = Ebean.getBeanState(user); assertThat(beanState.getLoadedProps()).containsExactly("id", "name", "email"); Ebean.getBeanState(user).setPropertyLoaded("email", false); assertThat(beanState.getLoadedProps()).containsExactly("id", "name"); } }