/tests/phpunit/testcases/messages/template.php

https://github.com/boonebgorges/BuddyPress · PHP · 362 lines · 239 code · 60 blank · 63 comment · 0 complexity · 675e1c697c998b86d734fbab7ed28876 MD5 · raw file

  1. <?php
  2. /**
  3. * @group messages
  4. * @group template
  5. */
  6. class BP_Tests_Messages_Template extends BP_UnitTestCase {
  7. /**
  8. * @group bp_has_message_threads
  9. */
  10. public function test_has_message_threads() {
  11. $u1 = self::factory()->user->create();
  12. $u2 = self::factory()->user->create();
  13. // create initial thread
  14. $message_1 = self::factory()->message->create_and_get( array(
  15. 'sender_id' => $u1,
  16. 'recipients' => array( $u2 ),
  17. ) );
  18. // create some replies to thread
  19. $message_2 = self::factory()->message->create_and_get( array(
  20. 'thread_id' => $message_1->thread_id,
  21. 'sender_id' => $u2,
  22. 'recipients' => array( $u1 ),
  23. ) );
  24. $message_3 = self::factory()->message->create_and_get( array(
  25. 'thread_id' => $message_1->thread_id,
  26. 'sender_id' => $u2,
  27. 'recipients' => array( $u1 ),
  28. ) );
  29. $messages_template = new BP_Messages_Box_Template( array( 'user_id' => $u1 ) );
  30. $this->assertEquals( 1, $messages_template->thread_count );
  31. $this->assertSame( array( $message_1->thread_id ), wp_list_pluck( $messages_template->threads, 'thread_id' ) );
  32. }
  33. /**
  34. * @group bp_has_message_threads
  35. *
  36. * @expectedDeprecated BP_Messages_Box_Template::__construct
  37. */
  38. public function test_has_message_threads_old_args() {
  39. $u1 = self::factory()->user->create();
  40. $u2 = self::factory()->user->create();
  41. // create initial thread
  42. $message_1 = self::factory()->message->create_and_get( array(
  43. 'sender_id' => $u1,
  44. 'recipients' => array( $u2 ),
  45. ) );
  46. // create some replies to thread
  47. $message_2 = self::factory()->message->create_and_get( array(
  48. 'thread_id' => $message_1->thread_id,
  49. 'sender_id' => $u2,
  50. 'recipients' => array( $u1 ),
  51. ) );
  52. $message_3 = self::factory()->message->create_and_get( array(
  53. 'thread_id' => $message_1->thread_id,
  54. 'sender_id' => $u2,
  55. 'recipients' => array( $u1 ),
  56. ) );
  57. $messages_template = new BP_Messages_Box_Template( $u1 );
  58. $this->assertEquals( 1, $messages_template->thread_count );
  59. $this->assertSame( array( $message_1->thread_id ), wp_list_pluck( $messages_template->threads, 'thread_id' ) );
  60. }
  61. /**
  62. * @group bp_has_message_threads
  63. * @group meta_query
  64. */
  65. public function test_thread_has_messages_meta_query() {
  66. $u1 = self::factory()->user->create();
  67. $u2 = self::factory()->user->create();
  68. // create some threads
  69. $message_1 = self::factory()->message->create_and_get( array(
  70. 'sender_id' => $u1,
  71. 'recipients' => array( $u2 ),
  72. 'subject' => 'This is a knive',
  73. ) );
  74. $message_2 = self::factory()->message->create_and_get( array(
  75. 'sender_id' => $u1,
  76. 'recipients' => array( $u2 ),
  77. 'subject' => 'Oy',
  78. ) );
  79. // misc threads
  80. self::factory()->message->create_many( 3, array(
  81. 'sender_id' => $u1,
  82. 'recipients' => array( $u2 ),
  83. ) );
  84. $t1 = $message_1->thread_id;
  85. $t2 = $message_2->thread_id;
  86. // create some replies for thread 1
  87. $message_3 = self::factory()->message->create_and_get( array(
  88. 'thread_id' => $t1,
  89. 'sender_id' => $u2,
  90. 'recipients' => array( $u1 ),
  91. 'content' => "That's a spoon",
  92. ) );
  93. $message_4 = self::factory()->message->create_and_get( array(
  94. 'thread_id' => $t1,
  95. 'sender_id' => $u1,
  96. 'recipients' => array( $u2 ),
  97. 'content' => "I see you've played knivey-spooney before.",
  98. ) );
  99. $message_5 = self::factory()->message->create_and_get( array(
  100. 'thread_id' => $t1,
  101. 'sender_id' => $u2,
  102. 'recipients' => array( $u1 ),
  103. 'content' => '*crickets*',
  104. ) );
  105. // create some replies for thread 2
  106. $message_6 = self::factory()->message->create_and_get( array(
  107. 'thread_id' => $t2,
  108. 'sender_id' => $u2,
  109. 'recipients' => array( $u1 ),
  110. 'content' => "Oy yourself.",
  111. ) );
  112. // belong to $t1
  113. $m1 = $message_1->id;
  114. $m3 = $message_3->id;
  115. $m4 = $message_4->id;
  116. $m5 = $message_5->id;
  117. // belong to $t2
  118. $m2 = $message_2->id;
  119. $m6 = $message_6->id;
  120. // add meta for some of the messages
  121. bp_messages_update_meta( $m1, 'utensil', 'knive' );
  122. bp_messages_update_meta( $m1, 'is_knive', 'yes' );
  123. bp_messages_update_meta( $m1, "starred_by_user_{$u2}", true );
  124. bp_messages_update_meta( $m2, 'utensil', 'spoon' );
  125. bp_messages_update_meta( $m2, 'is_knive', 'no' );
  126. bp_messages_update_meta( $m2, 'is_spoon', 'yes' );
  127. bp_messages_update_meta( $m3, "starred_by_user_{$u2}", true );
  128. bp_messages_update_meta( $m6, "starred_by_user_{$u2}", true );
  129. // now, do the message thread loop query
  130. global $messages_template;
  131. bp_has_message_threads( array(
  132. 'user_id' => $u2,
  133. 'meta_query' => array(
  134. array(
  135. 'key' => "starred_by_user_{$u2}"
  136. ),
  137. )
  138. ) );
  139. $this->assertEquals( 2, $messages_template->thread_count );
  140. $this->assertEqualSets( array( $t1, $t2 ), wp_list_pluck( $messages_template->threads, 'thread_id' ) );
  141. }
  142. /**
  143. * @group bp_has_message_threads
  144. * @group meta_query
  145. */
  146. public function test_thread_has_messages_meta_query_multiple_clauses_relation_and() {
  147. $u1 = self::factory()->user->create();
  148. $u2 = self::factory()->user->create();
  149. // create some threads
  150. $message_1 = self::factory()->message->create_and_get( array(
  151. 'sender_id' => $u1,
  152. 'recipients' => array( $u2 ),
  153. 'subject' => 'This is a knive',
  154. ) );
  155. $message_2 = self::factory()->message->create_and_get( array(
  156. 'sender_id' => $u1,
  157. 'recipients' => array( $u2 ),
  158. 'subject' => 'Oy',
  159. ) );
  160. // misc threads
  161. self::factory()->message->create_many( 3, array(
  162. 'sender_id' => $u1,
  163. 'recipients' => array( $u2 ),
  164. ) );
  165. $t1 = $message_1->thread_id;
  166. $t2 = $message_2->thread_id;
  167. // create some replies for thread 1
  168. $message_3 = self::factory()->message->create_and_get( array(
  169. 'thread_id' => $t1,
  170. 'sender_id' => $u2,
  171. 'recipients' => array( $u1 ),
  172. 'content' => "That's a spoon",
  173. ) );
  174. $message_4 = self::factory()->message->create_and_get( array(
  175. 'thread_id' => $t1,
  176. 'sender_id' => $u1,
  177. 'recipients' => array( $u2 ),
  178. 'content' => "I see you've played knivey-spooney before.",
  179. ) );
  180. $message_5 = self::factory()->message->create_and_get( array(
  181. 'thread_id' => $t1,
  182. 'sender_id' => $u2,
  183. 'recipients' => array( $u1 ),
  184. 'content' => '*crickets*',
  185. ) );
  186. // create some replies for thread 2
  187. $message_6 = self::factory()->message->create_and_get( array(
  188. 'thread_id' => $t2,
  189. 'sender_id' => $u2,
  190. 'recipients' => array( $u1 ),
  191. 'content' => "Oy yourself.",
  192. ) );
  193. // belong to $t1
  194. $m1 = $message_1->id;
  195. $m3 = $message_3->id;
  196. $m4 = $message_4->id;
  197. $m5 = $message_5->id;
  198. // belong to $t2
  199. $m2 = $message_2->id;
  200. $m6 = $message_6->id;
  201. // add meta for some of the messages
  202. bp_messages_update_meta( $m1, 'utensil', 'knive' );
  203. bp_messages_update_meta( $m1, 'is_knive', 'yes' );
  204. bp_messages_update_meta( $m1, "starred_by_user_{$u2}", true );
  205. bp_messages_update_meta( $m2, 'utensil', 'spoon' );
  206. bp_messages_update_meta( $m2, 'is_knive', 'no' );
  207. bp_messages_update_meta( $m2, 'is_spoon', 'yes' );
  208. bp_messages_update_meta( $m3, "starred_by_user_{$u2}", true );
  209. bp_messages_update_meta( $m6, "starred_by_user_{$u2}", true );
  210. // now, do the message thread loop query
  211. global $messages_template;
  212. bp_has_message_threads( array(
  213. 'user_id' => $u2,
  214. 'meta_query' => array(
  215. 'relation' => 'AND',
  216. array(
  217. 'key' => "starred_by_user_{$u2}"
  218. ),
  219. array(
  220. 'key' => 'utensil',
  221. 'value' => 'knive',
  222. ),
  223. )
  224. ) );
  225. $this->assertEquals( 1, $messages_template->thread_count );
  226. $this->assertEqualSets( array( $t1 ), wp_list_pluck( $messages_template->threads, 'thread_id' ) );
  227. }
  228. /**
  229. * @group bp_has_message_threads
  230. */
  231. public function test_has_message_threads_anonymous_user_should_not_see_threads() {
  232. $u1 = self::factory()->user->create();
  233. $u2 = self::factory()->user->create();
  234. // create initial thread
  235. self::factory()->message->create( array(
  236. 'sender_id' => $u1,
  237. 'recipients' => array( $u2 ),
  238. ) );
  239. // set user to anonymous
  240. $old_current_user = get_current_user_id();
  241. $this->set_current_user( 0 );
  242. // now, do the message thread query
  243. global $messages_template;
  244. bp_has_message_threads();
  245. // assert!
  246. $this->assertEquals( 0, $messages_template->thread_count );
  247. $this->assertEmpty( $messages_template->threads );
  248. $this->set_current_user( $old_current_user );
  249. }
  250. /**
  251. * @group pagination
  252. * @group BP_Messages_Box_Template
  253. */
  254. public function test_bp_messages_template_should_give_precedence_to_mpage_URL_param() {
  255. $request = $_REQUEST;
  256. $_REQUEST['mpage'] = '5';
  257. $at = new BP_Messages_Box_Template( array(
  258. 'page' => 8,
  259. ) );
  260. $this->assertEquals( 5, $at->pag_page );
  261. $_REQUEST = $request;
  262. }
  263. /**
  264. * @group pagination
  265. * @group BP_Messages_Box_Template
  266. */
  267. public function test_bp_messages_template_should_reset_0_pag_page_URL_param_to_default_pag_page_value() {
  268. $request = $_REQUEST;
  269. $_REQUEST['mpage'] = '0';
  270. $at = new BP_Messages_Box_Template( array(
  271. 'page' => 8,
  272. ) );
  273. $this->assertEquals( 8, $at->pag_page );
  274. $_REQUEST = $request;
  275. }
  276. /**
  277. * @group pagination
  278. * @group BP_Messages_Box_Template
  279. */
  280. public function test_bp_messages_template_should_give_precedence_to_num_URL_param() {
  281. $request = $_REQUEST;
  282. $_REQUEST['num'] = '14';
  283. $at = new BP_Messages_Box_Template( array(
  284. 'per_page' => 13,
  285. ) );
  286. $this->assertEquals( 14, $at->pag_num );
  287. $_REQUEST = $request;
  288. }
  289. /**
  290. * @group pagination
  291. * @group BP_Messages_Box_Template
  292. */
  293. public function test_bp_messages_template_should_reset_0_pag_num_URL_param_to_default_pag_num_value() {
  294. $request = $_REQUEST;
  295. $_REQUEST['num'] = '0';
  296. $at = new BP_Messages_Box_Template( array(
  297. 'per_page' => 13,
  298. ) );
  299. $this->assertEquals( 13, $at->pag_num );
  300. $_REQUEST = $request;
  301. }
  302. }