/wheels/tests/model/associations/hasMany.cfc

http://cfwheels.googlecode.com/ · ColdFusion CFScript · 209 lines · 191 code · 18 blank · 0 comment · 2 complexity · e945df2bf031642f85f3895fff68bb32 MD5 · raw file

  1. <cfcomponent extends="wheelsMapping.Test">
  2. <cffunction name="test_getting_children">
  3. <cfset loc.author = model("author").findOne(order="id")>
  4. <cfset loc.dynamicResult = loc.author.posts()>
  5. <cfset loc.coreResult = model("post").findAll(where="authorId=#loc.author.id#")>
  6. <cfset assert("loc.dynamicResult['title'][1] IS loc.coreResult['title'][1]")>
  7. </cffunction>
  8. <cffunction name="test_getting_children_with_include">
  9. <cfset loc.author = model("author").findOne(order="id", include="posts")>
  10. <cfset assert("IsObject(loc.author) && ArrayLen(loc.author.posts) eq 3")>
  11. <cfset loc.author = model("author").findOne(order="id", include="posts", returnAs="query")>
  12. <cfset assert("loc.author.recordcount eq 3")>
  13. </cffunction>
  14. <cffunction name="test_counting_children">
  15. <cfset loc.author = model("author").findOne(order="id")>
  16. <cfset loc.dynamicResult = loc.author.postCount()>
  17. <cfset loc.coreResult = model("post").count(where="authorId=#loc.author.id#")>
  18. <cfset assert("loc.dynamicResult IS loc.coreResult")>
  19. </cffunction>
  20. <cffunction name="test_checking_if_children_exist">
  21. <cfset loc.author = model("author").findOne(order="id")>
  22. <cfset loc.dynamicResult = loc.author.hasPosts()>
  23. <cfset loc.coreResult = model("post").exists(where="authorId=#loc.author.id#")>
  24. <cfset assert("loc.dynamicResult IS loc.coreResult")>
  25. </cffunction>
  26. <cffunction name="test_getting_one_child">
  27. <cfset loc.author = model("author").findOne(order="id")>
  28. <cfset loc.dynamicResult = loc.author.findOnePost()>
  29. <cfset loc.coreResult = model("post").findOne(where="authorId=#loc.author.id#")>
  30. <cfset assert("loc.dynamicResult.title IS loc.coreResult.title")>
  31. </cffunction>
  32. <cffunction name="test_adding_child_by_setting_foreign_key">
  33. <cfset loc.author = model("author").findOne(order="id")>
  34. <cfset loc.post = model("post").findOne(order="id DESC")>
  35. <cftransaction>
  36. <cfset loc.author.addPost(post=loc.post, transaction="none")>
  37. <!--- we need to test if authorId is set on the loc.post object as well and not just in the database! --->
  38. <cfset loc.post.reload()>
  39. <cftransaction action="rollback" />
  40. </cftransaction>
  41. <cfset assert("loc.author.id IS loc.post.authorId")>
  42. <cfset loc.post.reload()>
  43. <cftransaction>
  44. <cfset loc.author.addPost(key=loc.post.id, transaction="none")>
  45. <cfset loc.post.reload()>
  46. <cftransaction action="rollback" />
  47. </cftransaction>
  48. <cfset assert("loc.author.id IS loc.post.authorId")>
  49. <cfset loc.post.reload()>
  50. <cftransaction>
  51. <cfset model("post").updateByKey(key=loc.post.id, authorId=loc.author.id, transaction="none")>
  52. <cfset loc.post.reload()>
  53. <cftransaction action="rollback" />
  54. </cftransaction>
  55. <cfset assert("loc.author.id IS loc.post.authorId")>
  56. </cffunction>
  57. <cffunction name="test_removing_child_by_nullifying_foreign_key">
  58. <cfset loc.author = model("author").findOne(order="id")>
  59. <cfset loc.post = model("post").findOne(order="id DESC")>
  60. <cftransaction>
  61. <cfset loc.author.removePost(post=loc.post, transaction="none")>
  62. <!--- we need to test if authorId is set to blank on the loc.post object as well and not just in the database! --->
  63. <cfset loc.post.reload()>
  64. <cftransaction action="rollback" />
  65. </cftransaction>
  66. <cfset assert("loc.post.authorId IS ''")>
  67. <cfset loc.post.reload()>
  68. <cftransaction>
  69. <cfset loc.author.removePost(key=loc.post.id, transaction="none")>
  70. <cfset loc.post.reload()>
  71. <cftransaction action="rollback" />
  72. </cftransaction>
  73. <cfset assert("loc.post.authorId IS ''")>
  74. <cfset loc.post.reload()>
  75. <cftransaction>
  76. <cfset model("post").updateByKey(key=loc.post.id, authorId="", transaction="none")>
  77. <cfset loc.post.reload()>
  78. <cftransaction action="rollback" />
  79. </cftransaction>
  80. <cfset assert("loc.post.authorId IS ''")>
  81. </cffunction>
  82. <cffunction name="test_deleting_child">
  83. <cfset loc.author = model("author").findOne(order="id")>
  84. <cfset loc.post = model("post").findOne(order="id DESC")>
  85. <cftransaction>
  86. <cfset loc.author.deletePost(post=loc.post, transaction="none")>
  87. <!--- should we also set loc.post to false here? --->
  88. <cfset assert("NOT model('post').exists(loc.post.id)")>
  89. <cftransaction action="rollback" />
  90. </cftransaction>
  91. <cftransaction>
  92. <cfset loc.author.deletePost(key=loc.post.id, transaction="none")>
  93. <cfset assert("NOT model('post').exists(loc.post.id)")>
  94. <cftransaction action="rollback" />
  95. </cftransaction>
  96. <cftransaction>
  97. <cfset model("post").deleteByKey(key=loc.post.id, transaction="none")>
  98. <cfset assert("NOT model('post').exists(loc.post.id)")>
  99. <cftransaction action="rollback" />
  100. </cftransaction>
  101. </cffunction>
  102. <cffunction name="test_removing_all_children_by_nullifying_foreign_keys">
  103. <cfset loc.author = model("author").findOne(order="id")>
  104. <cftransaction>
  105. <cfset loc.author.removeAllPosts(transaction="none")>
  106. <cfset loc.dynamicResult = loc.author.postCount()>
  107. <cfset loc.remainingCount = model("post").count()>
  108. <cftransaction action="rollback" />
  109. </cftransaction>
  110. <cftransaction>
  111. <cfset model("post").updateAll(authorId="", where="authorId=#loc.author.id#", transaction="none")>
  112. <cfset loc.coreResult = loc.author.postCount()>
  113. <cftransaction action="rollback" />
  114. </cftransaction>
  115. <cfset assert("loc.dynamicResult IS 0 AND loc.coreResult IS 0 AND loc.remainingCount IS 4")>
  116. </cffunction>
  117. <cffunction name="test_deleting_all_children">
  118. <cfset loc.author = model("author").findOne(order="id")>
  119. <cftransaction>
  120. <cfset loc.author.deleteAllPosts(transaction="none")>
  121. <cfset loc.dynamicResult = loc.author.postCount()>
  122. <cfset loc.remainingCount = model("post").count()>
  123. <cftransaction action="rollback" />
  124. </cftransaction>
  125. <cftransaction>
  126. <cfset model("post").deleteAll(where="authorId=#loc.author.id#", transaction="none")>
  127. <cfset loc.coreResult = loc.author.postCount()>
  128. <cftransaction action="rollback" />
  129. </cftransaction>
  130. <cfset assert("loc.dynamicResult IS 0 AND loc.coreResult IS 0 AND loc.remainingCount IS 1")>
  131. </cffunction>
  132. <cffunction name="test_creating_new_child">
  133. <cfset loc.author = model("author").findOne(order="id")>
  134. <cfset loc.newPost = loc.author.newPost(title="New Title")>
  135. <cfset loc.dynamicResult = loc.newPost.authorId>
  136. <cfset loc.newPost = model("post").new(authorId=loc.author.id, title="New Title")>
  137. <cfset loc.coreResult = loc.newPost.authorId>
  138. <cfset assert("loc.dynamicResult IS loc.coreResult")>
  139. </cffunction>
  140. <cffunction name="test_creating_new_child_and_saving_it">
  141. <cfset loc.author = model("author").findOne(order="id")>
  142. <cftransaction>
  143. <cfset loc.newPost = loc.author.createPost(title="New Title", body="New Body", transaction="none")>
  144. <cfset loc.dynamicResult = loc.newPost.authorId>
  145. <cftransaction action="rollback" />
  146. </cftransaction>
  147. <cftransaction>
  148. <cfset loc.newPost = model("post").create(authorId=loc.author.id, title="New Title", body="New Body", transaction="none")>
  149. <cfset loc.coreResult = loc.newPost.authorId>
  150. <cftransaction action="rollback" />
  151. </cftransaction>
  152. <cfset assert("loc.dynamicResult IS loc.coreResult")>
  153. </cffunction>
  154. <cffunction name="test_dependency_delete">
  155. <cftransaction>
  156. <cfset loc.postWithAuthor = model("post").findOne(order="id")>
  157. <cfset loc.author = model("author").findByKey(key=loc.postWithAuthor.authorId)>
  158. <cfset loc.author.hasMany(name="posts", dependent="delete")>
  159. <cfset loc.author.delete()>
  160. <cfset loc.posts = model("post").findAll(where="authorId=#loc.author.id#")>
  161. <cftransaction action="rollback" />
  162. </cftransaction>
  163. <cfset assert("loc.posts.recordcount eq 0")>
  164. </cffunction>
  165. <cffunction name="test_dependency_deleteAll">
  166. <cftransaction>
  167. <cfset loc.postWithAuthor = model("post").findOne(order="id")>
  168. <cfset loc.author = model("author").findByKey(key=loc.postWithAuthor.authorId)>
  169. <cfset loc.author.hasMany(name="posts", dependent="deleteAll")>
  170. <cfset loc.author.delete()>
  171. <cfset loc.posts = model("post").findAll(where="authorId=#loc.author.id#")>
  172. <cftransaction action="rollback" />
  173. </cftransaction>
  174. <cfset assert("loc.posts.recordcount eq 0")>
  175. </cffunction>
  176. <cffunction name="test_dependency_removeAll">
  177. <cftransaction>
  178. <cfset loc.postWithAuthor = model("post").findOne(order="id")>
  179. <cfset loc.author = model("author").findByKey(key=loc.postWithAuthor.authorId)>
  180. <cfset loc.author.hasMany(name="posts", dependent="removeAll")>
  181. <cfset loc.author.delete()>
  182. <cfset loc.posts = model("post").findAll(where="authorId=#loc.author.id#")>
  183. <cftransaction action="rollback" />
  184. </cftransaction>
  185. <cfset assert("loc.posts.recordcount eq 0")>
  186. </cffunction>
  187. <cffunction name="test_getting_children_with_join_key">
  188. <cfset loc.obj = model("user").findOne(order="id", include="authors")>
  189. <cfset assert('loc.obj.firstName eq loc.obj.authors[1].firstName')>
  190. </cffunction>
  191. </cfcomponent>