/* * $Id: BeanMixin.java 1075 2009-05-07 06:41:19Z lhoriman $ * $URL: https://subetha.googlecode.com/svn/branches/resin/rtest/src/org/subethamail/rtest/util/BeanMixin.java $ */ package com.googlecode.objectify.test; import javax.persistence.Embedded; import javax.persistence.Id; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.testng.annotations.Test; import com.google.appengine.api.datastore.DatastoreService; import com.google.appengine.api.datastore.Entity; import com.googlecode.objectify.Key; import com.googlecode.objectify.Objectify; import com.googlecode.objectify.annotation.Cached; import com.googlecode.objectify.annotation.NotSaved; import com.googlecode.objectify.condition.IfDefault; import com.googlecode.objectify.condition.IfNull; import com.googlecode.objectify.condition.IfTrue; /** * Tests of using the @NotSaved annotation and its various conditions. * * @author Jeff Schnitzer <jeff@infohazard.org> */ public class NotSavedTests extends TestBase { /** */ @SuppressWarnings("unused") private static Logger log = LoggerFactory.getLogger(NotSavedTests.class); /** */ public static final String TEST_VALUE = "blah"; /** Just making sure it works when we have deeper inheritance */ static class DeeperIfTrue extends IfTrue {} /** */ @Cached static class CompletelyUnsaved { @Id Long id; @NotSaved String foo; } /** */ @Test public void testCompletelyUnsaved() throws Exception { this.fact.register(CompletelyUnsaved.class); Objectify ofy = this.fact.begin(); DatastoreService ds = ofy.getDatastore(); Entity ent = new Entity(this.fact.getKind(CompletelyUnsaved.class)); ent.setProperty("foo", TEST_VALUE); ds.put(ent); Key<CompletelyUnsaved> key = this.fact.rawKeyToTypedKey(ent.getKey()); CompletelyUnsaved fetched = ofy.get(key); assert fetched.foo.equals(TEST_VALUE); fetched = putAndGet(fetched); assert fetched.foo == null; // will fail if session caching objectify is turned on } /** */ @Cached static class UnsavedWhenTrue { @Id Long id; @NotSaved(IfTrue.class) boolean foo; boolean bar; } /** */ @Test public void testUnsavedWhenTrue() throws Exception { this.fact.register(UnsavedWhenTrue.class); UnsavedWhenTrue thing = new UnsavedWhenTrue(); thing.foo = true; thing.bar = true; UnsavedWhenTrue fetched = putAndGet(thing); assert fetched.foo == false; // will fail with session caching turned on assert fetched.bar == true; } /** */ @Cached static class DeeperUnsavedWhenTrue { @Id Long id; @NotSaved(IfTrue.class) boolean foo; boolean bar; } /** */ @Test public void testDeeperUnsavedWhenTrue() throws Exception { this.fact.register(DeeperUnsavedWhenTrue.class); DeeperUnsavedWhenTrue thing = new DeeperUnsavedWhenTrue(); thing.foo = true; thing.bar = true; DeeperUnsavedWhenTrue fetched = putAndGet(thing); assert fetched.foo == false; // will fail with session caching objectify turned on assert fetched.bar == true; } /** Should not be registerable */ static class BadFieldType { @Id Long id; @NotSaved(IfTrue.class) String foo; } /** Should not be registerable */ static class DeeperBadFieldType { @Id Long id; @NotSaved(DeeperIfTrue.class) String foo; } /** Should not be registerable */ static class TryToEmbedMe { @NotSaved(IfNull.class) String bar; } static class EmbeddedCollectionWithUnsaved { @Id Long id; @Embedded TryToEmbedMe[] stuff; } /** */ @Test public void testNotRegisterable() throws Exception { try { this.fact.register(BadFieldType.class); assert false; } catch (IllegalStateException ex) {} try { this.fact.register(DeeperBadFieldType.class); assert false; } catch (IllegalStateException ex) {} try { this.fact.register(EmbeddedCollectionWithUnsaved.class); assert false; } catch (IllegalStateException ex) {} } /** */ @Cached static class UnsavedDefaults { @Id Long id; @NotSaved(IfDefault.class) boolean booleanDefault = true; @NotSaved(IfDefault.class) String stringDefault = TEST_VALUE; @NotSaved(IfDefault.class) int intDefault = 10; @NotSaved(IfDefault.class) float floatDefault = 10f; } /** */ @Test public void testUnsavedDefaults() throws Exception { this.fact.register(UnsavedDefaults.class); Objectify ofy = this.fact.begin(); DatastoreService ds = ofy.getDatastore(); UnsavedDefaults thing = new UnsavedDefaults(); Key<UnsavedDefaults> key = ofy.put(thing); // Now get the raw entity and verify that it doesn't have properties saved Entity ent = ds.get(this.fact.getRawKey(key)); assert ent.getProperties().isEmpty(); } }