/jack-test/test/java/com/rapleaf/jack/queries/TestRecordAndRecords.java

https://github.com/LiveRamp/jack · Java · 251 lines · 204 code · 46 blank · 1 comment · 0 complexity · fe48c962a7b9e31ef7e8f927e50988fe MD5 · raw file

  1. package com.rapleaf.jack.queries;
  2. import java.sql.Timestamp;
  3. import java.util.List;
  4. import com.google.common.collect.Lists;
  5. import org.joda.time.DateTime;
  6. import org.junit.Before;
  7. import org.junit.Test;
  8. import com.rapleaf.jack.test_project.DatabasesImpl;
  9. import com.rapleaf.jack.test_project.database_1.IDatabase1;
  10. import com.rapleaf.jack.test_project.database_1.iface.IPostPersistence;
  11. import com.rapleaf.jack.test_project.database_1.iface.IUserPersistence;
  12. import com.rapleaf.jack.test_project.database_1.models.Comment;
  13. import com.rapleaf.jack.test_project.database_1.models.Post;
  14. import com.rapleaf.jack.test_project.database_1.models.User;
  15. import static com.rapleaf.jack.queries.QueryOrder.ASC;
  16. import static org.junit.Assert.assertArrayEquals;
  17. import static org.junit.Assert.assertEquals;
  18. import static org.junit.Assert.assertNull;
  19. import static org.junit.Assert.assertTrue;
  20. public class TestRecordAndRecords {
  21. private static final IDatabase1 db = new DatabasesImpl().getDatabase1();
  22. private static final double DELTA = 0.000001;
  23. private final IUserPersistence users = db.users();
  24. private final IPostPersistence posts = db.posts();
  25. private User userA, userB, userC;
  26. private Post post;
  27. private long date, datetime;
  28. private Records results;
  29. @Before
  30. public void prepare() throws Exception {
  31. users.deleteAll();
  32. posts.deleteAll();
  33. results = null;
  34. // mysql with version < 5.6.4 does not support nano second resolution
  35. datetime = Timestamp.valueOf("2015-03-20 14:23:00").getTime();
  36. date = DateTime.parse("2015-04-16").getMillis();
  37. }
  38. @Test
  39. public void testGetMethodsForNotNullColumns() throws Exception {
  40. userA = users.create("A", datetime, 15, date, datetime, "Assembly Coder", new byte[]{(byte)3}, 1.1, 1.01, true);
  41. results = db.createQuery()
  42. .from(User.TBL)
  43. .select(User.ID, User.HANDLE, User.SOME_DECIMAL, User.SOME_DATE, User.SOME_DATETIME, User.NUM_POSTS, User.SOME_BOOLEAN, User.SOME_BINARY)
  44. .fetch();
  45. assertEquals(1, results.size());
  46. assertEquals(8, results.get(0).columnCount());
  47. Record record = results.get(0);
  48. assertTrue(record.getLong(User.ID).equals(userA.getId()));
  49. assertTrue(record.get(User.ID).equals(userA.getId()));
  50. assertTrue(record.getIntFromLong(User.ID).equals(userA.getIntId()));
  51. assertTrue(record.getString(User.HANDLE).equals(userA.getHandle()));
  52. assertTrue(record.get(User.HANDLE).equals(userA.getHandle()));
  53. assertTrue(record.getDouble(User.SOME_DECIMAL).equals(userA.getSomeDecimal()));
  54. assertTrue(record.get(User.SOME_DECIMAL).equals(userA.getSomeDecimal()));
  55. assertTrue(record.getLong(User.SOME_DATE).equals(userA.getSomeDate()));
  56. assertTrue(record.get(User.SOME_DATE).equals(userA.getSomeDate()));
  57. assertTrue(record.getLong(User.SOME_DATETIME).equals(userA.getSomeDatetime()));
  58. assertTrue(record.get(User.SOME_DATETIME).equals(userA.getSomeDatetime()));
  59. assertTrue(record.getInt(User.NUM_POSTS).equals(userA.getNumPosts()));
  60. assertTrue(record.get(User.NUM_POSTS).equals(userA.getNumPosts()));
  61. assertTrue(record.getBoolean(User.SOME_BOOLEAN).equals(userA.isSomeBoolean()));
  62. assertTrue(record.get(User.SOME_BOOLEAN).equals(userA.isSomeBoolean()));
  63. assertArrayEquals(userA.getSomeBinary(), record.getByteArray(User.SOME_BINARY));
  64. assertArrayEquals(userA.getSomeBinary(), record.get(User.SOME_BINARY));
  65. }
  66. @Test
  67. public void testGetMethodsForNullColumns() throws Exception {
  68. userA = users.create("A", 15);
  69. results = db.createQuery()
  70. .from(User.TBL)
  71. .select(User.SOME_DECIMAL, User.SOME_DATETIME, User.SOME_BOOLEAN, User.SOME_BINARY)
  72. .fetch();
  73. assertEquals(1, results.size());
  74. assertEquals(4, results.get(0).columnCount());
  75. Record record = results.get(0);
  76. assertNull(record.getDouble(User.SOME_DECIMAL));
  77. assertNull(record.get(User.SOME_DECIMAL));
  78. assertNull(record.getLong(User.SOME_DATETIME));
  79. assertNull(record.get(User.SOME_DATETIME));
  80. assertNull(record.getBoolean(User.SOME_BOOLEAN));
  81. assertNull(record.get(User.SOME_BOOLEAN));
  82. assertNull(record.getByteArray(User.SOME_BINARY));
  83. assertNull(record.get(User.SOME_BINARY));
  84. }
  85. @Test
  86. public void testGetMethodsForRecordsWithNullValues() throws Exception {
  87. userA = users.create("A", datetime, 1, 2L, null, null, new byte[]{(byte)3}, 1.1, null, true);
  88. userB = users.create("B", datetime + 3, 2, 4L, null, null, new byte[]{(byte)4}, 1.2, null, false);
  89. userC = users.create("C", datetime - 10, 3, 6L, null, null, new byte[]{(byte)5}, 1.3, null, true);
  90. userA.save();
  91. userB.save();
  92. userC.save();
  93. results = db.createQuery()
  94. .from(User.TBL)
  95. .fetch();
  96. assertEquals(
  97. Lists.newArrayList(userA.getId(), userB.getId(), userC.getId()),
  98. results.getLongs(User.ID)
  99. );
  100. assertEquals(
  101. Lists.newArrayList(userA.getId(), userB.getId(), userC.getId()),
  102. results.gets(User.ID)
  103. );
  104. assertEquals(
  105. Lists.newArrayList((int)userA.getId(), (int)userB.getId(), (int)userC.getId()),
  106. results.getIntsFromLongs(User.ID)
  107. );
  108. assertEquals(
  109. Lists.newArrayList(1, 2, 3),
  110. results.getInts(User.NUM_POSTS)
  111. );
  112. assertEquals(
  113. Lists.newArrayList(1, 2, 3),
  114. results.gets(User.NUM_POSTS)
  115. );
  116. assertEquals(
  117. Lists.newArrayList("A", "B", "C"),
  118. results.getStrings(User.HANDLE)
  119. );
  120. assertEquals(
  121. Lists.newArrayList("A", "B", "C"),
  122. results.gets(User.HANDLE)
  123. );
  124. List<byte[]> byteArrays = results.getByteArrays(User.SOME_BINARY);
  125. assertArrayEquals(new byte[]{(byte)3}, byteArrays.get(0));
  126. assertArrayEquals(new byte[]{(byte)4}, byteArrays.get(1));
  127. assertArrayEquals(new byte[]{(byte)5}, byteArrays.get(2));
  128. byteArrays = results.gets(User.SOME_BINARY);
  129. assertArrayEquals(new byte[]{(byte)3}, byteArrays.get(0));
  130. assertArrayEquals(new byte[]{(byte)4}, byteArrays.get(1));
  131. assertArrayEquals(new byte[]{(byte)5}, byteArrays.get(2));
  132. List<Double> doubles = results.getDoubles(User.SOME_FLOAT);
  133. assertEquals(1.1, doubles.get(0), DELTA);
  134. assertEquals(1.2, doubles.get(1), DELTA);
  135. assertEquals(1.3, doubles.get(2), DELTA);
  136. doubles = results.gets(User.SOME_FLOAT);
  137. assertEquals(1.1, doubles.get(0), DELTA);
  138. assertEquals(1.2, doubles.get(1), DELTA);
  139. assertEquals(1.3, doubles.get(2), DELTA);
  140. assertEquals(Lists.newArrayList(true, false, true), results.getBooleans(User.SOME_BOOLEAN));
  141. assertEquals(Lists.newArrayList(true, false, true), results.gets(User.SOME_BOOLEAN));
  142. assertEquals(
  143. Lists.newArrayList(null, null, null),
  144. results.getLongs(User.SOME_DATETIME)
  145. );
  146. assertEquals(
  147. Lists.newArrayList(null, null, null),
  148. results.gets(User.SOME_DATETIME)
  149. );
  150. assertEquals(
  151. Lists.newArrayList(null, null, null),
  152. results.getStrings(User.BIO)
  153. );
  154. assertEquals(
  155. Lists.newArrayList(null, null, null),
  156. results.gets(User.BIO)
  157. );
  158. assertEquals(
  159. Lists.newArrayList(null, null, null),
  160. results.getDoubles(User.SOME_DECIMAL)
  161. );
  162. assertEquals(
  163. Lists.newArrayList(null, null, null),
  164. results.gets(User.SOME_DECIMAL)
  165. );
  166. }
  167. @Test
  168. public void testModelAndAttributeFromRecord() throws Exception {
  169. userA = users.create("A", datetime, 1, date, datetime, "Assembly Coder", new byte[]{(byte)1, (byte)2, (byte)3}, 1.1, 1.01, true);
  170. post = posts.create("Post A from User A", date, userA.getIntId(), datetime);
  171. Record record = db.createQuery()
  172. .from(User.TBL)
  173. .innerJoin(Post.TBL).on(Post.USER_ID.equalTo(User.ID.as(Integer.class)))
  174. .orderBy(User.SOME_DATETIME, ASC)
  175. .fetch()
  176. .get(0);
  177. User.Attributes userAttrLhs = userA.getAttributes();
  178. User.Attributes userAttrRhs = record.getAttributes(User.TBL);
  179. assertEquals(userAttrLhs.getId(), userAttrRhs.getId());
  180. assertEquals(userAttrLhs.getHandle(), userAttrRhs.getHandle());
  181. assertEquals(userAttrLhs.getCreatedAtMillis(), userAttrRhs.getCreatedAtMillis());
  182. assertEquals(userAttrLhs.getSomeDate(), userAttrRhs.getSomeDate());
  183. assertEquals(userAttrLhs.getSomeDatetime(), userAttrRhs.getSomeDatetime());
  184. assertEquals(userAttrLhs.getBio(), userAttrRhs.getBio());
  185. assertArrayEquals(userAttrLhs.getSomeBinary(), userAttrRhs.getSomeBinary());
  186. assertEquals(userAttrLhs.getSomeFloat(), userAttrRhs.getSomeFloat(), DELTA);
  187. assertEquals(userAttrLhs.getSomeDecimal(), userAttrRhs.getSomeDecimal());
  188. assertEquals(userAttrLhs.isSomeBoolean(), userAttrRhs.isSomeBoolean());
  189. Post.Attributes postAttrLhs = post.getAttributes();
  190. Post.Attributes postAttrRhs = record.getAttributes(Post.TBL);
  191. assertEquals(postAttrLhs.getId(), postAttrRhs.getId());
  192. assertEquals(postAttrLhs.getTitle(), postAttrRhs.getTitle());
  193. assertEquals(postAttrLhs.getPostedAtMillis(), postAttrRhs.getPostedAtMillis());
  194. assertEquals(postAttrLhs.getUserId(), postAttrRhs.getUserId());
  195. assertEquals(postAttrLhs.getUpdatedAt(), postAttrRhs.getUpdatedAt());
  196. Comment.Attributes commentAttr = record.getAttributes(Comment.TBL);
  197. assertNull(commentAttr);
  198. User modelFromRecord = record.getModel(User.TBL, db.getDatabases());
  199. String newHandle = "new handle";
  200. modelFromRecord.setHandle(newHandle).save();
  201. assertEquals(users.find(modelFromRecord.getId()).getHandle(), newHandle);
  202. Comment comment = record.getModel(Comment.TBL, db.getDatabases());
  203. assertNull(comment);
  204. }
  205. }