/tests/com/google/appengine/datanucleus/jpa/JPAAbstractBaseClassTest.java

http://datanucleus-appengine.googlecode.com/ · Java · 247 lines · 185 code · 39 blank · 23 comment · 0 complexity · 3e28601601c9f76f118a01f09eba4595 MD5 · raw file

  1. /*
  2. * Copyright (C) 2010 Google Inc
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. package com.google.appengine.datanucleus.jpa;
  17. import com.google.appengine.api.datastore.Entity;
  18. import com.google.appengine.api.datastore.EntityNotFoundException;
  19. import com.google.appengine.api.datastore.KeyFactory;
  20. import com.google.appengine.datanucleus.Utils;
  21. import com.google.appengine.datanucleus.test.jpa.AbstractBaseClassesJPA.Concrete1;
  22. import com.google.appengine.datanucleus.test.jpa.AbstractBaseClassesJPA.Concrete2;
  23. import com.google.appengine.datanucleus.test.jpa.AbstractBaseClassesJPA.Concrete3;
  24. import com.google.appengine.datanucleus.test.jpa.AbstractBaseClassesJPA.Concrete4;
  25. /**
  26. * @author Max Ross <max.ross@gmail.com>
  27. */
  28. public class JPAAbstractBaseClassTest extends JPATestCase {
  29. public void testConcrete() throws EntityNotFoundException {
  30. Concrete1 concrete = new Concrete1();
  31. concrete.setBase1Str("base 1");
  32. concrete.setConcrete1Str("concrete");
  33. Concrete3 concrete3 = new Concrete3();
  34. concrete3.setStr("str3");
  35. concrete.setConcrete3(concrete3);
  36. Concrete4 concrete4a = new Concrete4();
  37. concrete4a.setStr("str4a");
  38. Concrete4 concrete4b = new Concrete4();
  39. concrete4b.setStr("str4b");
  40. concrete.setConcrete4(Utils.newArrayList(concrete4a, concrete4b));
  41. beginTxn();
  42. em.persist(concrete);
  43. commitTxn();
  44. Entity concreteEntity = ds.get(KeyFactory.createKey(kindForObject(concrete), concrete.getId()));
  45. Entity concrete3Entity = ds.get(concrete3.getId());
  46. Entity concrete4aEntity = ds.get(concrete4a.getId());
  47. Entity concrete4bEntity = ds.get(concrete4b.getId());
  48. assertEquals(4, concreteEntity.getProperties().size());
  49. assertEquals("base 1", concreteEntity.getProperty("base1Str"));
  50. assertEquals("concrete", concreteEntity.getProperty("concrete1Str"));
  51. assertEquals(concrete3Entity.getKey(), concreteEntity.getProperty("concrete3_id"));
  52. assertEquals(Utils.newArrayList(concrete4aEntity.getKey(), concrete4bEntity.getKey()),
  53. concreteEntity.getProperty("concrete4"));
  54. assertEquals(1, concrete3Entity.getProperties().size());
  55. assertEquals("str3", concrete3Entity.getProperty("str"));
  56. assertEquals(1, concrete4aEntity.getProperties().size());
  57. assertEquals("str4a", concrete4aEntity.getProperty("str"));
  58. assertEquals(1, concrete4bEntity.getProperties().size());
  59. assertEquals("str4b", concrete4bEntity.getProperty("str"));
  60. beginTxn();
  61. concrete = em.find(concrete.getClass(), concrete.getId());
  62. assertEquals("base 1", concrete.getBase1Str());
  63. assertEquals("concrete", concrete.getConcrete1Str());
  64. assertEquals(concrete3.getId(), concrete.getConcrete3().getId());
  65. assertEquals(concrete3.getStr(), concrete.getConcrete3().getStr());
  66. assertEquals(2, concrete.getConcrete4().size());
  67. assertEquals(concrete4a.getId(), concrete.getConcrete4().get(0).getId());
  68. assertEquals(concrete4a.getStr(), concrete.getConcrete4().get(0).getStr());
  69. assertEquals(concrete4b.getId(), concrete.getConcrete4().get(1).getId());
  70. assertEquals(concrete4b.getStr(), concrete.getConcrete4().get(1).getStr());
  71. concrete.setBase1Str("not base 1");
  72. concrete.setConcrete1Str("not concrete");
  73. concrete.getConcrete3().setStr("blam3");
  74. concrete.getConcrete4().get(0).setStr("blam4");
  75. commitTxn();
  76. concreteEntity = ds.get(KeyFactory.createKey(kindForObject(concrete), concrete.getId()));
  77. concrete3Entity = ds.get(concrete3.getId());
  78. concrete4aEntity = ds.get(concrete4a.getId());
  79. assertEquals(4, concreteEntity.getProperties().size());
  80. assertEquals("not base 1", concreteEntity.getProperty("base1Str"));
  81. assertEquals("not concrete", concreteEntity.getProperty("concrete1Str"));
  82. assertEquals(concrete3Entity.getKey(), concreteEntity.getProperty("concrete3_id"));
  83. assertEquals(Utils.newArrayList(concrete4aEntity.getKey(), concrete4bEntity.getKey()),
  84. concreteEntity.getProperty("concrete4"));
  85. assertEquals(1, concrete3Entity.getProperties().size());
  86. assertEquals("blam3", concrete3Entity.getProperty("str"));
  87. assertEquals(1, concrete4aEntity.getProperties().size());
  88. assertEquals("blam4", concrete4aEntity.getProperty("str"));
  89. try {
  90. ds.get(concrete4b.getId());
  91. } catch (EntityNotFoundException enfe) {
  92. // good
  93. }
  94. beginTxn();
  95. concrete = em.find(concrete.getClass(), concrete.getId());
  96. assertEquals("not base 1", concrete.getBase1Str());
  97. assertEquals("not concrete", concrete.getConcrete1Str());
  98. assertEquals(concrete3.getId(), concrete.getConcrete3().getId());
  99. assertEquals("blam3", concrete.getConcrete3().getStr());
  100. assertEquals(2, concrete.getConcrete4().size());
  101. assertEquals(concrete4a.getId(), concrete.getConcrete4().get(0).getId());
  102. assertEquals("blam4", concrete.getConcrete4().get(0).getStr());
  103. assertNotNull(em.createQuery(
  104. "select from " + concrete.getClass().getName() + " b where base1Str = 'not base 1'").getSingleResult());
  105. assertNotNull(em.createQuery(
  106. "select from " + concrete.getClass().getName() + " b where concrete1Str = 'not concrete'").getSingleResult());
  107. em.remove(concrete);
  108. commitTxn();
  109. assertEquals(0, countForClass(concrete.getClass()));
  110. assertEquals(0, countForClass(concrete3.getClass()));
  111. assertEquals(0, countForClass(concrete4a.getClass()));
  112. }
  113. // This test fails under the runtime enhancer when run right after the test
  114. // above. It does fine when run on its own and under the compile-time
  115. // enhancer. Sadness.
  116. public void testConcrete2() throws EntityNotFoundException {
  117. Concrete2 concrete = new Concrete2();
  118. concrete.setBase1Str("base 1");
  119. concrete.setBase2Str("base 2");
  120. concrete.setConcrete2Str("concrete");
  121. Concrete3 concrete3 = new Concrete3();
  122. concrete3.setStr("str3");
  123. concrete.setConcrete3(concrete3);
  124. Concrete4 concrete4a = new Concrete4();
  125. concrete4a.setStr("str4a");
  126. Concrete4 concrete4b = new Concrete4();
  127. concrete4b.setStr("str4b");
  128. concrete.setConcrete4(Utils.newArrayList(concrete4a, concrete4b));
  129. beginTxn();
  130. em.persist(concrete);
  131. commitTxn();
  132. Entity concreteEntity = ds.get(KeyFactory.createKey(kindForObject(concrete), concrete.getId()));
  133. Entity concrete3Entity = ds.get(concrete3.getId());
  134. Entity concrete4aEntity = ds.get(concrete4a.getId());
  135. Entity concrete4bEntity = ds.get(concrete4b.getId());
  136. assertEquals(5, concreteEntity.getProperties().size());
  137. assertEquals("base 1", concreteEntity.getProperty("base1Str"));
  138. assertEquals("base 2", concreteEntity.getProperty("base2Str"));
  139. assertEquals("concrete", concreteEntity.getProperty("concrete2Str"));
  140. assertEquals(concrete3Entity.getKey(), concreteEntity.getProperty("concrete3_id"));
  141. assertEquals(Utils.newArrayList(concrete4aEntity.getKey(), concrete4bEntity.getKey()),
  142. concreteEntity.getProperty("concrete4"));
  143. assertEquals(1, concrete3Entity.getProperties().size());
  144. assertEquals("str3", concrete3Entity.getProperty("str"));
  145. assertEquals(1, concrete4aEntity.getProperties().size());
  146. assertEquals("str4a", concrete4aEntity.getProperty("str"));
  147. assertEquals(1, concrete4bEntity.getProperties().size());
  148. assertEquals("str4b", concrete4bEntity.getProperty("str"));
  149. beginTxn();
  150. concrete = em.find(concrete.getClass(), concrete.getId());
  151. assertEquals("base 1", concrete.getBase1Str());
  152. assertEquals("base 2", concrete.getBase2Str());
  153. assertEquals("concrete", concrete.getConcrete2Str());
  154. assertEquals(concrete3.getId(), concrete.getConcrete3().getId());
  155. assertEquals(concrete3.getStr(), concrete.getConcrete3().getStr());
  156. assertEquals(2, concrete.getConcrete4().size());
  157. assertEquals(concrete4a.getId(), concrete.getConcrete4().get(0).getId());
  158. assertEquals(concrete4a.getStr(), concrete.getConcrete4().get(0).getStr());
  159. assertEquals(concrete4b.getId(), concrete.getConcrete4().get(1).getId());
  160. assertEquals(concrete4b.getStr(), concrete.getConcrete4().get(1).getStr());
  161. concrete.setBase1Str("not base 1");
  162. concrete.setBase2Str("not base 2");
  163. concrete.setConcrete2Str("not concrete");
  164. concrete.getConcrete3().setStr("blam3");
  165. concrete.getConcrete4().get(0).setStr("blam4");
  166. commitTxn();
  167. concreteEntity = ds.get(KeyFactory.createKey(kindForObject(concrete), concrete.getId()));
  168. concrete3Entity = ds.get(concrete3.getId());
  169. concrete4aEntity = ds.get(concrete4a.getId());
  170. assertEquals(5, concreteEntity.getProperties().size());
  171. assertEquals("not base 1", concreteEntity.getProperty("base1Str"));
  172. assertEquals("not base 2", concreteEntity.getProperty("base2Str"));
  173. assertEquals("not concrete", concreteEntity.getProperty("concrete2Str"));
  174. assertEquals(concrete3Entity.getKey(), concreteEntity.getProperty("concrete3_id"));
  175. assertEquals(Utils.newArrayList(concrete4aEntity.getKey(), concrete4bEntity.getKey()),
  176. concreteEntity.getProperty("concrete4"));
  177. assertEquals(1, concrete3Entity.getProperties().size());
  178. assertEquals("blam3", concrete3Entity.getProperty("str"));
  179. assertEquals(1, concrete4aEntity.getProperties().size());
  180. assertEquals("blam4", concrete4aEntity.getProperty("str"));
  181. try {
  182. ds.get(concrete4b.getId());
  183. } catch (EntityNotFoundException enfe) {
  184. // good
  185. }
  186. beginTxn();
  187. concrete = em.find(concrete.getClass(), concrete.getId());
  188. assertEquals("not base 1", concrete.getBase1Str());
  189. assertEquals("not base 2", concrete.getBase2Str());
  190. assertEquals("not concrete", concrete.getConcrete2Str());
  191. assertEquals(concrete3.getId(), concrete.getConcrete3().getId());
  192. assertEquals("blam3", concrete.getConcrete3().getStr());
  193. assertEquals(2, concrete.getConcrete4().size());
  194. assertEquals(concrete4a.getId(), concrete.getConcrete4().get(0).getId());
  195. assertEquals("blam4", concrete.getConcrete4().get(0).getStr());
  196. assertNotNull(em.createQuery(
  197. "select from " + concrete.getClass().getName() + " b where base1Str = 'not base 1'").getSingleResult());
  198. assertNotNull(em.createQuery(
  199. "select from " + concrete.getClass().getName() + " b where base2Str = 'not base 2'").getSingleResult());
  200. assertNotNull(em.createQuery(
  201. "select from " + concrete.getClass().getName() + " b where concrete2Str = 'not concrete'").getSingleResult());
  202. em.remove(concrete);
  203. commitTxn();
  204. assertEquals(0, countForClass(concrete.getClass()));
  205. assertEquals(0, countForClass(concrete3.getClass()));
  206. assertEquals(0, countForClass(concrete4a.getClass()));
  207. }
  208. }