ruby-trello 2.2.0 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (314) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +63 -10
  3. data/lib/trello/action.rb +31 -23
  4. data/lib/trello/association_builder/has_many.rb +17 -0
  5. data/lib/trello/association_builder/has_one.rb +16 -0
  6. data/lib/trello/association_fetcher/has_many/fetch.rb +47 -0
  7. data/lib/trello/association_fetcher/has_many/params.rb +56 -0
  8. data/lib/trello/association_fetcher/has_many.rb +26 -0
  9. data/lib/trello/association_fetcher/has_one/fetch.rb +49 -0
  10. data/lib/trello/association_fetcher/has_one/params.rb +36 -0
  11. data/lib/trello/association_fetcher/has_one.rb +25 -0
  12. data/lib/trello/association_infer_tool.rb +13 -0
  13. data/lib/trello/association_proxy.rb +1 -1
  14. data/lib/trello/attachment.rb +40 -27
  15. data/lib/trello/basic_data.rb +103 -49
  16. data/lib/trello/board.rb +88 -102
  17. data/lib/trello/card.rb +49 -198
  18. data/lib/trello/checklist.rb +17 -71
  19. data/lib/trello/comment.rb +39 -26
  20. data/lib/trello/cover_image.rb +20 -0
  21. data/lib/trello/custom_field.rb +31 -67
  22. data/lib/trello/custom_field_item.rb +37 -39
  23. data/lib/trello/custom_field_option.rb +40 -13
  24. data/lib/trello/item.rb +27 -16
  25. data/lib/trello/item_state.rb +7 -15
  26. data/lib/trello/json_utils.rb +1 -1
  27. data/lib/trello/label.rb +15 -85
  28. data/lib/trello/label_name.rb +22 -25
  29. data/lib/trello/list.rb +31 -44
  30. data/lib/trello/member.rb +77 -32
  31. data/lib/trello/notification.rb +27 -20
  32. data/lib/trello/organization.rb +53 -25
  33. data/lib/trello/plugin_datum.rb +11 -16
  34. data/lib/trello/schema/attribute/base.rb +79 -0
  35. data/lib/trello/schema/attribute/board_pref.rb +45 -0
  36. data/lib/trello/schema/attribute/custom_field_display.rb +45 -0
  37. data/lib/trello/schema/attribute/default.rb +45 -0
  38. data/lib/trello/schema/attribute_builder.rb +42 -0
  39. data/lib/trello/schema/attribute_registration.rb +47 -0
  40. data/lib/trello/schema/serializer/default.rb +17 -0
  41. data/lib/trello/schema/serializer/labels.rb +23 -0
  42. data/lib/trello/schema/serializer/time.rb +25 -0
  43. data/lib/trello/schema/serializer/webhooks.rb +25 -0
  44. data/lib/trello/schema.rb +31 -0
  45. data/lib/trello/token.rb +15 -12
  46. data/lib/trello/webhook.rb +18 -71
  47. data/lib/trello.rb +57 -39
  48. data/spec/action_spec.rb +2 -3
  49. data/spec/board_spec.rb +43 -103
  50. data/spec/card_spec.rb +143 -66
  51. data/spec/cassettes/action_find_with_id_and_get_all_fields.yml +104 -0
  52. data/spec/cassettes/board_find_with_id_and_get_all_fields.yml +96 -0
  53. data/spec/cassettes/board_find_with_id_and_get_specific_fields.yml +96 -0
  54. data/spec/cassettes/can_add_a_file_from_url_on_a_card.yml +189 -0
  55. data/spec/cassettes/can_add_a_file_on_a_card.yml +200 -0
  56. data/spec/cassettes/can_add_a_member_to_a_board.yml +191 -0
  57. data/spec/cassettes/can_add_a_member_to_a_card.yml +190 -0
  58. data/spec/cassettes/can_add_label_on_a_card.yml +281 -0
  59. data/spec/cassettes/can_arvhice_all_cards_of_list.yml +397 -0
  60. data/spec/cassettes/can_close_bong_a_card.yml +189 -0
  61. data/spec/cassettes/can_get_actions.yml +196 -0
  62. data/spec/cassettes/can_get_actions_of_board.yml +188 -0
  63. data/spec/cassettes/can_get_actions_of_list.yml +202 -0
  64. data/spec/cassettes/can_get_actions_of_members.yml +199 -0
  65. data/spec/cassettes/can_get_actions_of_organization.yml +201 -0
  66. data/spec/cassettes/can_get_attachments.yml +187 -0
  67. data/spec/cassettes/can_get_boards_of_custom_field.yml +198 -0
  68. data/spec/cassettes/can_get_boards_of_label.yml +197 -0
  69. data/spec/cassettes/can_get_boards_of_organization.yml +207 -0
  70. data/spec/cassettes/can_get_cards_of_board.yml +193 -0
  71. data/spec/cassettes/can_get_cards_of_list.yml +201 -0
  72. data/spec/cassettes/can_get_cards_of_member.yml +204 -0
  73. data/spec/cassettes/can_get_checklists_of_board.yml +187 -0
  74. data/spec/cassettes/can_get_comments.yml +193 -0
  75. data/spec/cassettes/can_get_comments_board.yml +109 -0
  76. data/spec/cassettes/can_get_comments_card.yml +111 -0
  77. data/spec/cassettes/can_get_comments_list.yml +109 -0
  78. data/spec/cassettes/can_get_custom_field_options_of_custom_field.yml +197 -0
  79. data/spec/cassettes/can_get_custom_fields_of_board.yml +187 -0
  80. data/spec/cassettes/can_get_label_names_of_board.yml +187 -0
  81. data/spec/cassettes/can_get_labels_of_board.yml +187 -0
  82. data/spec/cassettes/can_get_lists_of_board.yml +187 -0
  83. data/spec/cassettes/can_get_members_of_board.yml +188 -0
  84. data/spec/cassettes/can_get_members_of_organization.yml +200 -0
  85. data/spec/cassettes/can_get_notifications_of_member.yml +199 -0
  86. data/spec/cassettes/can_get_organization_of_board.yml +189 -0
  87. data/spec/cassettes/can_get_organizations_of_member.yml +203 -0
  88. data/spec/cassettes/can_get_plugin_data_of_board.yml +187 -0
  89. data/spec/cassettes/can_move_a_card_to_another_board_with_specific_list.yml +373 -0
  90. data/spec/cassettes/can_move_a_card_to_another_board_without_specific_list.yml +281 -0
  91. data/spec/cassettes/can_move_a_card_to_another_list.yml +281 -0
  92. data/spec/cassettes/can_move_all_cards_to_another_list.yml +886 -0
  93. data/spec/cassettes/can_remove_a_member_from_a_card.yml +185 -0
  94. data/spec/cassettes/can_remove_an_attachment_on_a_card.yml +277 -0
  95. data/spec/cassettes/can_remove_an_upvote_on_a_card.yml +465 -0
  96. data/spec/cassettes/can_remove_label_on_a_card.yml +279 -0
  97. data/spec/cassettes/can_success_add_comment_to_a_card.yml +196 -0
  98. data/spec/cassettes/can_success_copy_checklist_to_a_card.yml +281 -0
  99. data/spec/cassettes/can_success_copy_checklist_to_a_card_without_name_pos.yml +281 -0
  100. data/spec/cassettes/can_success_create_a_board.yml +98 -0
  101. data/spec/cassettes/can_success_create_a_board_with_full_parameters.yml +97 -0
  102. data/spec/cassettes/can_success_create_a_board_without_clone_from_other.yml +98 -0
  103. data/spec/cassettes/can_success_create_a_card.yml +99 -0
  104. data/spec/cassettes/can_success_create_a_card_when_due_is_datetime.yml +98 -0
  105. data/spec/cassettes/can_success_create_a_card_when_due_is_time.yml +98 -0
  106. data/spec/cassettes/can_success_create_a_checklist.yml +102 -0
  107. data/spec/cassettes/can_success_create_a_custom_field.yml +102 -0
  108. data/spec/cassettes/can_success_create_a_custom_field_option.yml +102 -0
  109. data/spec/cassettes/can_success_create_a_label.yml +102 -0
  110. data/spec/cassettes/can_success_create_a_list.yml +102 -0
  111. data/spec/cassettes/can_success_create_a_list_with_full_parameters.yml +102 -0
  112. data/spec/cassettes/can_success_create_a_organization.yml +104 -0
  113. data/spec/cassettes/can_success_create_a_webhook.yml +102 -0
  114. data/spec/cassettes/can_success_create_new_checklist_to_a_card.yml +189 -0
  115. data/spec/cassettes/can_success_delete_a_custom_field_option.yml +389 -0
  116. data/spec/cassettes/can_success_delete_card.yml +185 -0
  117. data/spec/cassettes/can_success_delete_checklist.yml +284 -0
  118. data/spec/cassettes/can_success_get_card_of_board_by_card_id.yml +188 -0
  119. data/spec/cassettes/can_success_remove_member_from_board.yml +186 -0
  120. data/spec/cassettes/can_success_return_all_boards_of_current_user.yml +195 -0
  121. data/spec/cassettes/can_success_upate_a_board.yml +191 -0
  122. data/spec/cassettes/can_success_upate_a_card.yml +189 -0
  123. data/spec/cassettes/can_success_upate_a_list.yml +296 -0
  124. data/spec/cassettes/can_success_update_bong_a_board.yml +283 -0
  125. data/spec/cassettes/can_success_update_bong_a_board_with_specific_fields.yml +284 -0
  126. data/spec/cassettes/can_success_update_bong_a_card.yml +191 -0
  127. data/spec/cassettes/can_success_update_bong_a_checklist_with_specific_fields.yml +296 -0
  128. data/spec/cassettes/can_success_update_bong_a_custom_field.yml +200 -0
  129. data/spec/cassettes/can_success_update_bong_a_label.yml +200 -0
  130. data/spec/cassettes/can_success_update_bong_a_list.yml +199 -0
  131. data/spec/cassettes/can_success_update_bong_a_list_with_specific_fields.yml +296 -0
  132. data/spec/cassettes/can_success_update_bong_a_organization.yml +203 -0
  133. data/spec/cassettes/can_success_update_bong_a_webhook.yml +296 -0
  134. data/spec/cassettes/can_upvote_on_a_card.yml +469 -0
  135. data/spec/cassettes/card_find_with_id_and_get_all_fields.yml +95 -0
  136. data/spec/cassettes/card_find_with_id_and_get_specific_fields.yml +96 -0
  137. data/spec/cassettes/checklist_can_add_an_item.yml +296 -0
  138. data/spec/cassettes/checklist_can_update_the_item_state.yml +296 -0
  139. data/spec/cassettes/checklist_find_with_id_and_get_all_fields.yml +100 -0
  140. data/spec/cassettes/comment_delete.yml +331 -0
  141. data/spec/cassettes/comment_find_with_id.yml +116 -0
  142. data/spec/cassettes/custom_field_find_with_id_and_get_all_fields.yml +100 -0
  143. data/spec/cassettes/custom_field_find_with_id_and_get_specific_fields.yml +100 -0
  144. data/spec/cassettes/custom_field_item_save_1.yml +97 -0
  145. data/spec/cassettes/custom_field_item_save_2.yml +281 -0
  146. data/spec/cassettes/custom_field_option_find_with_id.yml +100 -0
  147. data/spec/cassettes/get_board_of_card.yml +187 -0
  148. data/spec/cassettes/get_board_of_list.yml +197 -0
  149. data/spec/cassettes/get_boards_of_member.yml +207 -0
  150. data/spec/cassettes/get_check_item_states_of_card.yml +188 -0
  151. data/spec/cassettes/get_checklists_of_card.yml +187 -0
  152. data/spec/cassettes/get_cover_image_of_card.yml +187 -0
  153. data/spec/cassettes/get_custom_field_items_of_card.yml +187 -0
  154. data/spec/cassettes/get_list_of_card.yml +188 -0
  155. data/spec/cassettes/get_lists.yml +187 -0
  156. data/spec/cassettes/get_members_of_card.yml +189 -0
  157. data/spec/cassettes/get_plugin_data_of_card.yml +187 -0
  158. data/spec/cassettes/get_voters_of_card.yml +188 -0
  159. data/spec/cassettes/label_delete.yml +285 -0
  160. data/spec/cassettes/label_find_with_id.yml +100 -0
  161. data/spec/cassettes/list_find_with_id_and_get_all_fields.yml +100 -0
  162. data/spec/cassettes/list_find_with_id_and_get_specific_fields.yml +100 -0
  163. data/spec/cassettes/member_find_with_id_and_get_all_fields.yml +101 -0
  164. data/spec/cassettes/member_find_with_id_and_get_specific_fields.yml +100 -0
  165. data/spec/cassettes/notification_find_with_id.yml +103 -0
  166. data/spec/cassettes/organization_find_with_id_and_get_all_fields.yml +102 -0
  167. data/spec/cassettes/organization_find_with_id_and_get_specific_fields.yml +100 -0
  168. data/spec/cassettes/remove_upvote_on_a_card_when_have_not_voted.yml +366 -0
  169. data/spec/cassettes/revote_on_a_card.yml +464 -0
  170. data/spec/cassettes/token_find_with_token_string.yml +100 -0
  171. data/spec/cassettes/webhook_delete.yml +286 -0
  172. data/spec/cassettes/webhook_find_with_id.yml +100 -0
  173. data/spec/checklist_spec.rb +27 -43
  174. data/spec/custom_field_item_spec.rb +74 -0
  175. data/spec/custom_field_option_spec.rb +2 -2
  176. data/spec/custom_field_spec.rb +98 -10
  177. data/spec/integration/action/find_spec.rb +23 -0
  178. data/spec/integration/basic_data/many_spec.rb +127 -0
  179. data/spec/integration/basic_data/one_spec.rb +84 -0
  180. data/spec/integration/basic_data/schema_spec.rb +156 -0
  181. data/spec/integration/board/add_member_spec.rb +21 -0
  182. data/spec/integration/board/all_spec.rb +20 -0
  183. data/spec/integration/board/associations/actions_spec.rb +18 -0
  184. data/spec/integration/board/associations/cards_spec.rb +18 -0
  185. data/spec/integration/board/associations/checklists_spec.rb +18 -0
  186. data/spec/integration/board/associations/custom_fields_spec.rb +18 -0
  187. data/spec/integration/board/associations/label_names_spec.rb +17 -0
  188. data/spec/integration/board/associations/labels_spec.rb +18 -0
  189. data/spec/integration/board/associations/lists_spec.rb +18 -0
  190. data/spec/integration/board/associations/members_spec.rb +18 -0
  191. data/spec/integration/board/associations/organization_spec.rb +19 -0
  192. data/spec/integration/board/associations/plugin_data_spec.rb +18 -0
  193. data/spec/integration/board/create_spec.rb +95 -0
  194. data/spec/integration/board/find_card_spec.rb +18 -0
  195. data/spec/integration/board/find_spec.rb +42 -0
  196. data/spec/integration/board/remove_member_spec.rb +21 -0
  197. data/spec/integration/board/save_spec.rb +37 -0
  198. data/spec/integration/board/update!_spec.rb +62 -0
  199. data/spec/integration/board_lists_spec.rb +21 -0
  200. data/spec/integration/card/add_and_remove_attachment_spec.rb +45 -0
  201. data/spec/integration/card/add_and_remove_label_spec.rb +35 -0
  202. data/spec/integration/card/add_checklist_spec.rb +32 -0
  203. data/spec/integration/card/add_comment_spec.rb +19 -0
  204. data/spec/integration/card/add_memeber_spec.rb +19 -0
  205. data/spec/integration/card/associations/actions_spec.rb +17 -0
  206. data/spec/integration/card/associations/attachments_spec.rb +18 -0
  207. data/spec/integration/card/associations/board_spec.rb +17 -0
  208. data/spec/integration/card/associations/check_item_states_spec.rb +17 -0
  209. data/spec/integration/card/associations/checklists_spec.rb +18 -0
  210. data/spec/integration/card/associations/comments_spec.rb +19 -0
  211. data/spec/integration/card/associations/cover_image_spec.rb +18 -0
  212. data/spec/integration/card/associations/custom_field_items_spec.rb +18 -0
  213. data/spec/integration/card/associations/list_spec.rb +16 -0
  214. data/spec/integration/card/associations/members_spec.rb +18 -0
  215. data/spec/integration/card/associations/plugin_data_spec.rb +18 -0
  216. data/spec/integration/card/associations/voters_spec.rb +17 -0
  217. data/spec/integration/card/close!_spec.rb +16 -0
  218. data/spec/integration/card/create_new_check_list_spec.rb +19 -0
  219. data/spec/integration/card/create_spec.rb +84 -0
  220. data/spec/integration/card/delete_spec.rb +16 -0
  221. data/spec/integration/card/find_spec.rb +67 -0
  222. data/spec/integration/card/move_to_board_spec.rb +36 -0
  223. data/spec/integration/card/move_to_list_spec.rb +20 -0
  224. data/spec/integration/card/remove_member_spec.rb +19 -0
  225. data/spec/integration/card/save_spec.rb +61 -0
  226. data/spec/integration/card/update!_spec.rb +53 -0
  227. data/spec/integration/card/vote_spec.rb +50 -0
  228. data/spec/integration/checklist/add_item_spec.rb +20 -0
  229. data/spec/integration/checklist/create_spec.rb +23 -0
  230. data/spec/integration/checklist/delete_spec.rb +17 -0
  231. data/spec/integration/checklist/find_spec.rb +22 -0
  232. data/spec/integration/checklist/update!_spec.rb +21 -0
  233. data/spec/integration/checklist/update_item_state_spec.rb +20 -0
  234. data/spec/integration/comment/association/board_spec.rb +17 -0
  235. data/spec/integration/comment/association/card_spec.rb +17 -0
  236. data/spec/integration/comment/association/list_spec.rb +17 -0
  237. data/spec/integration/comment/delete_spec.rb +20 -0
  238. data/spec/integration/comment/find_spec.rb +17 -0
  239. data/spec/integration/custom_field/association/board_spec.rb +18 -0
  240. data/spec/integration/custom_field/association/custom_field_options_spec.rb +18 -0
  241. data/spec/integration/custom_field/create_spec.rb +29 -0
  242. data/spec/integration/custom_field/find_spec.rb +41 -0
  243. data/spec/integration/custom_field/update!_spec.rb +25 -0
  244. data/spec/integration/custom_field_item_spec.rb +47 -0
  245. data/spec/integration/custom_field_option/create_spec.rb +23 -0
  246. data/spec/integration/custom_field_option/delete_spec.rb +19 -0
  247. data/spec/integration/custom_field_option/find_spec.rb +21 -0
  248. data/spec/integration/label/association/board_spec.rb +18 -0
  249. data/spec/integration/label/create_spec.rb +23 -0
  250. data/spec/integration/label/delete_spec.rb +21 -0
  251. data/spec/integration/label/find_spec.rb +20 -0
  252. data/spec/integration/label/update!_spec.rb +25 -0
  253. data/spec/integration/list/archive_all_cards_spec.rb +20 -0
  254. data/spec/integration/list/associations/actions_spec.rb +18 -0
  255. data/spec/integration/list/associations/board_spec.rb +18 -0
  256. data/spec/integration/list/associations/cards_spec.rb +18 -0
  257. data/spec/integration/list/create_spec.rb +44 -0
  258. data/spec/integration/list/find_spec.rb +37 -0
  259. data/spec/integration/list/move_all_cards_spec.rb +31 -0
  260. data/spec/integration/list/save_spec.rb +40 -0
  261. data/spec/integration/list/update!_spec.rb +43 -0
  262. data/spec/integration/member/associations/actions_spec.rb +17 -0
  263. data/spec/integration/member/associations/boards_spec.rb +18 -0
  264. data/spec/integration/member/associations/cards_spec.rb +18 -0
  265. data/spec/integration/member/associations/notifications_spec.rb +18 -0
  266. data/spec/integration/member/associations/organizations_spec.rb +18 -0
  267. data/spec/integration/member/find_spec.rb +39 -0
  268. data/spec/integration/member/update!_spec.rb +18 -0
  269. data/spec/integration/notification/find_spec.rb +27 -0
  270. data/spec/integration/organization/associations/actions_spec.rb +18 -0
  271. data/spec/integration/organization/associations/boards_spec.rb +18 -0
  272. data/spec/integration/organization/associations/members_spec.rb +18 -0
  273. data/spec/integration/organization/create_spec.rb +23 -0
  274. data/spec/integration/organization/find_spec.rb +37 -0
  275. data/spec/integration/organization/update!_spec.rb +28 -0
  276. data/spec/integration/token/find_spec.rb +24 -0
  277. data/spec/integration/webhook/create_spec.rb +27 -0
  278. data/spec/integration/webhook/delete_spec.rb +21 -0
  279. data/spec/integration/webhook/find_spec.rb +22 -0
  280. data/spec/integration/webhook/update!_spec.rb +24 -0
  281. data/spec/item_spec.rb +2 -2
  282. data/spec/label_spec.rb +105 -28
  283. data/spec/list_spec.rb +32 -14
  284. data/spec/notification_spec.rb +3 -3
  285. data/spec/organization_spec.rb +6 -5
  286. data/spec/spec_helper.rb +70 -37
  287. data/spec/token_spec.rb +10 -11
  288. data/spec/unit/trello/association_builder/has_many_spec.rb +36 -0
  289. data/spec/unit/trello/association_builder/has_one_spec.rb +36 -0
  290. data/spec/unit/trello/association_fetcher/has_many/fetch_spec.rb +38 -0
  291. data/spec/unit/trello/association_fetcher/has_many/params_spec.rb +107 -0
  292. data/spec/unit/trello/association_fetcher/has_many_spec.rb +50 -0
  293. data/spec/unit/trello/association_fetcher/has_one/fetch_spec.rb +51 -0
  294. data/spec/unit/trello/association_fetcher/has_one/params_spec.rb +81 -0
  295. data/spec/unit/trello/association_fetcher/has_one_spec.rb +49 -0
  296. data/spec/unit/trello/association_infer_tool_spec.rb +41 -0
  297. data/spec/unit/trello/basic_data_spec.rb +113 -0
  298. data/spec/unit/trello/board/new_spec.rb +370 -0
  299. data/spec/unit/trello/board/save_spec.rb +49 -0
  300. data/spec/unit/trello/board/update_fields_spec.rb +129 -0
  301. data/spec/unit/trello/board/update_spec.rb +197 -0
  302. data/spec/unit/trello/card_spec.rb +103 -0
  303. data/spec/unit/trello/member/new_spec.rb +62 -0
  304. data/spec/unit/trello/member/update_fields_spec.rb +80 -0
  305. data/spec/unit/trello/schema/attribute/base_spec.rb +349 -0
  306. data/spec/unit/trello/schema/attribute/board_pref_spec.rb +208 -0
  307. data/spec/unit/trello/schema/attribute/default_spec.rb +236 -0
  308. data/spec/unit/trello/schema/attribute_builder_spec.rb +55 -0
  309. data/spec/unit/trello/schema/attribute_registration_spec.rb +59 -0
  310. data/spec/unit/trello/schema/serializer/default_spec.rb +19 -0
  311. data/spec/unit/trello/schema/serializer/time_spec.rb +39 -0
  312. data/spec/unit/trello/schema_spec.rb +25 -0
  313. data/spec/webhook_spec.rb +23 -7
  314. metadata +556 -33
@@ -30,7 +30,7 @@ module Trello
30
30
  expect(custom_field.id).to eq(custom_field_details['id'])
31
31
  expect(custom_field.name).to eq(custom_field_details['name'])
32
32
  expect(custom_field.type).to eq(custom_field_details['type'])
33
- expect(custom_field.pos).to eq(custom_field_details['pos'])
33
+ expect(custom_field.position).to eq(custom_field_details['pos'])
34
34
  expect(custom_field.model_id).to eq(custom_field_details['idModel'])
35
35
  expect(custom_field.model_type).to eq(custom_field_details['modelType'])
36
36
  end
@@ -41,7 +41,7 @@ module Trello
41
41
  expect(custom_field.id).to eq(custom_field_details[:id])
42
42
  expect(custom_field.name).to eq(custom_field_details[:name])
43
43
  expect(custom_field.type).to eq(custom_field_details[:type])
44
- expect(custom_field.pos).to eq(custom_field_details[:pos])
44
+ expect(custom_field.position).to eq(custom_field_details[:pos])
45
45
  expect(custom_field.model_id).to eq(custom_field_details[:model_id])
46
46
  expect(custom_field.model_type).to eq(custom_field_details[:model_type])
47
47
  end
@@ -54,25 +54,36 @@ module Trello
54
54
  expect(custom_field.errors).to include(:id)
55
55
  expect(custom_field.errors).to include(:model_id)
56
56
  expect(custom_field.errors).to include(:model_type)
57
- expect(custom_field.errors).to include(:pos)
57
+ expect(custom_field.errors).to include(:position)
58
58
  expect(custom_field.errors).to include(:type)
59
59
  end
60
60
 
61
61
  it 'creates a new record and saves it on Trello', refactor: true do
62
62
  test_payload = {
63
- name: 'Test Custom Field'
63
+ name: 'Test Custom Field',
64
+ type: 'checkbox',
65
+ model_id: 'abc123',
66
+ model_type: 'board',
67
+ position: 123,
68
+ filed_group: nil
64
69
  }
65
70
 
66
- result = JSON.generate(custom_fields_details.first.merge(test_payload))
67
- expected_payload = {name: 'Test Custom Field', type: 'checkbox', idModel: 'abc123',
68
- modelType: 'board', pos: 123, fieldGroup: nil}
71
+ result = JSON.generate(test_payload)
72
+
73
+ expected_payload = {
74
+ 'name' => 'Test Custom Field',
75
+ 'pos' => 123,
76
+ 'idModel' => 'abc123',
77
+ 'modelType' => 'board',
78
+ 'type' => 'checkbox'
79
+ }
69
80
 
70
81
  expect(client)
71
82
  .to receive(:post)
72
83
  .with('/customFields', expected_payload)
73
84
  .and_return result
74
85
 
75
- custom_field = CustomField.create(custom_fields_details[1].merge(test_payload))
86
+ custom_field = CustomField.create(test_payload)
76
87
  expect(custom_field).to be_a CustomField
77
88
  end
78
89
  end
@@ -102,11 +113,12 @@ module Trello
102
113
  it 'correctly updates custom field name' do
103
114
  expected_new_name = 'Test Name'
104
115
 
105
- payload = { name: expected_new_name }
116
+ payload = { 'name' => expected_new_name }
106
117
 
107
118
  expect(client)
108
119
  .to receive(:put).once
109
120
  .with('/customFields/abcdef123456789123456789', payload)
121
+ .and_return(JSON.generate(payload))
110
122
 
111
123
  custom_field.name = expected_new_name
112
124
  custom_field.save
@@ -135,7 +147,7 @@ module Trello
135
147
  end
136
148
 
137
149
  it 'gets its position' do
138
- expect(custom_field.pos).to_not be_nil
150
+ expect(custom_field.position).to_not be_nil
139
151
  end
140
152
  end
141
153
 
@@ -181,5 +193,81 @@ module Trello
181
193
  custom_field.delete
182
194
  end
183
195
  end
196
+
197
+ describe '#update_fields' do
198
+ let(:custom_field_detail) { custom_fields_details.first }
199
+ let(:custom_field) { CustomField.new(custom_field_detail) }
200
+
201
+ context 'when the fields argument is empty' do
202
+ let(:fields) { {} }
203
+
204
+ it 'custom field does not set any fields' do
205
+ custom_field.update_fields(fields)
206
+
207
+ expect(custom_field.id).to eq custom_field_detail['id']
208
+ expect(custom_field.model_id).to eq custom_field_detail['idModel']
209
+ expect(custom_field.model_type).to eq custom_field_detail['modelType']
210
+ expect(custom_field.name).to eq custom_field_detail['name']
211
+ expect(custom_field.position).to eq custom_field_detail['pos']
212
+ expect(custom_field.type).to eq custom_field_detail['type']
213
+ end
214
+ end
215
+
216
+ context 'when the fields argument has at least one field' do
217
+ context 'and the field does changed' do
218
+ let(:fields) { { name: 'Awesome Name' } }
219
+
220
+ it 'custom field does set the changed fields' do
221
+ custom_field.update_fields(fields)
222
+
223
+ expect(custom_field.name).to eq('Awesome Name')
224
+ end
225
+
226
+ it 'custom field has been mark as changed' do
227
+ custom_field.update_fields(fields)
228
+
229
+ expect(custom_field.changed?).to be_truthy
230
+ end
231
+ end
232
+
233
+ context "and the field doesn't changed" do
234
+ let(:fields) { { name: custom_field_detail['name'] } }
235
+
236
+ it "custom field attributes doesn't changed" do
237
+ custom_field.update_fields(fields)
238
+
239
+ expect(custom_field.name).to eq(custom_field_detail['name'])
240
+ end
241
+
242
+ it "custom field hasn't been mark as changed" do
243
+ custom_field.update_fields(fields)
244
+
245
+ expect(custom_field.changed?).to be_falsy
246
+ end
247
+ end
248
+
249
+ context "and the field isn't a correct attributes of the card" do
250
+ let(:fields) { { abc: 'abc' } }
251
+
252
+ it "custom field attributes doesn't changed" do
253
+ custom_field.update_fields(fields)
254
+
255
+ expect(custom_field.id).to eq custom_field_detail['id']
256
+ expect(custom_field.model_id).to eq custom_field_detail['idModel']
257
+ expect(custom_field.model_type).to eq custom_field_detail['modelType']
258
+ expect(custom_field.name).to eq custom_field_detail['name']
259
+ expect(custom_field.position).to eq custom_field_detail['pos']
260
+ expect(custom_field.type).to eq custom_field_detail['type']
261
+ end
262
+
263
+ it "custom field hasn't been mark as changed" do
264
+ custom_field.update_fields(fields)
265
+
266
+ expect(custom_field.changed?).to be_falsy
267
+ end
268
+ end
269
+ end
270
+ end
271
+
184
272
  end
185
273
  end
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe 'Trello::Action#find' do
4
+ include IntegrationHelpers
5
+
6
+ before { setup_trello }
7
+
8
+ it 'find with id and get all fields' do
9
+ VCR.use_cassette('action_find_with_id_and_get_all_fields') do
10
+ action = Trello::Action.find('5f60f07958388d26dc063c30')
11
+ expect(action).to be_a(Trello::Action)
12
+
13
+ expect(action.id).to eq('5f60f07958388d26dc063c30')
14
+ expect(action.creator_id).not_to be_nil
15
+ expect(action.data).not_to be_nil
16
+ expect(action.type).not_to be_nil
17
+ expect(action.date).not_to be_nil
18
+ expect(action.limits).not_to be_nil
19
+ expect(action.display).not_to be_nil
20
+ end
21
+ end
22
+
23
+ end
@@ -0,0 +1,127 @@
1
+ require 'spec_helper'
2
+
3
+ module Trello
4
+ describe BasicData do
5
+ describe '.many' do
6
+ let(:client_double) { double('client') }
7
+ let(:cards) { double('cards') }
8
+
9
+ around do |example|
10
+ class FakeCard < BasicData
11
+ end
12
+ class FakeBoard < BasicData
13
+ schema do
14
+ attribute :id
15
+ end
16
+
17
+ def update_fields(fields)
18
+ attributes[:id] = fields[:id]
19
+ end
20
+ end
21
+
22
+ example.run
23
+
24
+ Trello.send(:remove_const, 'FakeBoard')
25
+ Trello.send(:remove_const, 'FakeCard')
26
+ end
27
+
28
+ def mock_client_and_association(klass:, resource:, id:, path:, params:)
29
+ resources = double('resources')
30
+ allow(FakeBoard).to receive(:client).and_return(client_double)
31
+ allow_any_instance_of(FakeBoard).to receive(:client).and_return(client_double)
32
+ allow(client_double).to receive(:find_many).with(klass, "/#{resource}/#{id}/#{path}", params).and_return(resources)
33
+ allow(MultiAssociation).to receive(:new).with(FakeBoard, resources).and_return(double('association', proxy: cards))
34
+ end
35
+
36
+ context 'when only pass in the name' do
37
+ before do
38
+ FakeBoard.class_eval { many :fake_cards }
39
+
40
+ mock_client_and_association(
41
+ klass: Trello::FakeCard,
42
+ resource: 'fakeboards',
43
+ id: 1,
44
+ path: 'fake_cards',
45
+ params: {}
46
+ )
47
+ end
48
+
49
+ it 'can get cards from client' do
50
+ expect(FakeBoard.new(id: 1).fake_cards).to eq(cards)
51
+ end
52
+ end
53
+
54
+ context 'when pass in name with in:' do
55
+ before do
56
+ FakeBoard.class_eval { many :fake_cards, in: 'boards' }
57
+
58
+ mock_client_and_association(
59
+ klass: Trello::FakeCard,
60
+ resource: 'boards',
61
+ id: 1,
62
+ path: 'fake_cards',
63
+ params: {}
64
+ )
65
+ end
66
+
67
+ it 'can get cards from client' do
68
+ expect(FakeBoard.new(id: 1).fake_cards).to eq(cards)
69
+ end
70
+ end
71
+
72
+ context 'when pass in name with via:' do
73
+ before do
74
+ FakeBoard.class_eval { many :fake_cards, via: Card }
75
+
76
+ mock_client_and_association(
77
+ klass: Trello::Card,
78
+ resource: 'fakeboards',
79
+ id: 1,
80
+ path: 'fake_cards',
81
+ params: {}
82
+ )
83
+ end
84
+
85
+ it 'can get cards from client' do
86
+ expect(FakeBoard.new(id: 1).fake_cards).to eq(cards)
87
+ end
88
+ end
89
+
90
+ context 'when pass in name with path:' do
91
+ before do
92
+ FakeBoard.class_eval { many :fake_cards, path: 'test' }
93
+
94
+ mock_client_and_association(
95
+ klass: Trello::FakeCard,
96
+ resource: 'fakeboards',
97
+ id: 1,
98
+ path: 'test',
99
+ params: {}
100
+ )
101
+ end
102
+
103
+ it 'can get cards from client' do
104
+ expect(FakeBoard.new(id: 1).fake_cards).to eq(cards)
105
+ end
106
+ end
107
+
108
+ context 'when pass in name with other params' do
109
+ before do
110
+ FakeBoard.class_eval { many :fake_cards, test: 'test' }
111
+
112
+ mock_client_and_association(
113
+ klass: Trello::FakeCard,
114
+ resource: 'fakeboards',
115
+ id: 1,
116
+ path: 'fake_cards',
117
+ params: {test: 'test'}
118
+ )
119
+ end
120
+
121
+ it 'can get cards from client' do
122
+ expect(FakeBoard.new(id: 1).fake_cards).to eq(cards)
123
+ end
124
+ end
125
+ end
126
+ end
127
+ end
@@ -0,0 +1,84 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe 'Trello::BasicData.one' do
4
+
5
+ let(:client_double) { double('client') }
6
+ let(:organization) { double('organization') }
7
+
8
+ around do |example|
9
+ module Trello
10
+ class FakeOrganization < BasicData
11
+ end
12
+ class FakeBoard < BasicData
13
+ def update_fields(fields)
14
+ attributes[:id] = fields[:id]
15
+ end
16
+ end
17
+ end
18
+
19
+ example.run
20
+
21
+ Trello.send(:remove_const, 'FakeBoard')
22
+ Trello.send(:remove_const, 'FakeOrganization')
23
+ end
24
+
25
+ def mock_client_and_association(klass: Trello::FakeOrganization, id: 1, path: nil, id_field: :id)
26
+ association_restful_name = path
27
+ allow(Trello::FakeBoard).to receive(:client).and_return(client_double)
28
+ allow_any_instance_of(Trello::FakeBoard).to receive(:client).and_return(client_double)
29
+ allow_any_instance_of(Trello::FakeBoard).to receive(id_field).and_return(id)
30
+ if association_restful_name
31
+ allow(client_double).to receive(:find).with(association_restful_name, id).and_return(organization)
32
+ else
33
+ allow(klass).to receive(:find).with(id).and_return(organization)
34
+ end
35
+ end
36
+
37
+ context 'when only pass in the name' do
38
+ before do
39
+ Trello::FakeBoard.class_eval { one :fake_organization }
40
+
41
+ mock_client_and_association
42
+ end
43
+
44
+ it 'can get the association from client' do
45
+ expect(Trello::FakeBoard.new(id: 1).fake_organization).to eq(organization)
46
+ end
47
+ end
48
+
49
+ context 'when pass in name with path' do
50
+ before do
51
+ Trello::FakeBoard.class_eval { one :fake_organization, path: 'organizations' }
52
+
53
+ mock_client_and_association(path: 'organizations')
54
+ end
55
+
56
+ it 'can get the association from client' do
57
+ expect(Trello::FakeBoard.new(id: 1).fake_organization).to eq(organization)
58
+ end
59
+ end
60
+
61
+ context 'when pass in name with via' do
62
+ before do
63
+ Trello::FakeBoard.class_eval { one :fake_organization, via: Trello::FakeOrganization }
64
+
65
+ mock_client_and_association
66
+ end
67
+
68
+ it 'can get the association from client' do
69
+ expect(Trello::FakeBoard.new(id: 1).fake_organization).to eq(organization)
70
+ end
71
+ end
72
+
73
+ context 'when pass in name with using' do
74
+ before do
75
+ Trello::FakeBoard.class_eval { one :fake_organization, using: :test_id }
76
+
77
+ mock_client_and_association(id_field: :test_id)
78
+ end
79
+
80
+ it 'can get the association from client' do
81
+ expect(Trello::FakeBoard.new(id: 1).fake_organization).to eq(organization)
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,156 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe 'BasicData#schema' do
4
+
5
+ around do |example|
6
+ module Trello
7
+ class FakeBoard < BasicData
8
+ schema do
9
+ attribute :id, readonly: true, primary_key: true
10
+ attribute :name
11
+ attribute :description, remote_key: :desc
12
+ attribute :last_activity_date, readonly: true, remote_key: :dateLastActivity, serializer: 'Time'
13
+ attribute :keep_cards_from_source, create_only: true, remote_key: :keepFromSource
14
+ attribute :subscribed, update_only: true, default: true
15
+ attribute :visibility_level, remote_key: 'permissionLevel', class_name: 'BoardPref'
16
+ end
17
+ end
18
+ end
19
+
20
+ example.run
21
+
22
+ Trello.send(:remove_const, 'FakeBoard')
23
+ end
24
+
25
+ let(:attributes) { FakeBoard.schema.attrs }
26
+ let(:stringify_init_params) {{
27
+ 'id' => 99,
28
+ 'name' => 'Test Board',
29
+ 'desc' => 'board desc ...',
30
+ 'dateLastActivity' => '2020-02-20 00:00:00',
31
+ 'keepFromSource' => true,
32
+ 'subscribed' => true
33
+ }}
34
+
35
+ let(:symbolize_init_params) {{
36
+ id: 99,
37
+ name: 'Test Board',
38
+ description: 'board desc ...',
39
+ last_activity_date: Time.new(2020, 2, 20),
40
+ keep_cards_from_source: true,
41
+ subscribed: true
42
+ }}
43
+
44
+ it 'will create 6 attributes' do
45
+ expect(attributes.count).to eq(7)
46
+ end
47
+
48
+ it 'can success parse readonly primary key :id' do
49
+ attribute = attributes[:id]
50
+ expect(attribute.name).to eq(:id)
51
+ expect(attribute.primary_key?).to eq(true)
52
+ expect(attribute.readonly?).to eq(true)
53
+ expect(attribute.remote_key).to eq('id')
54
+ expect(attribute.for_action?(:create)).to eq(false)
55
+ expect(attribute.for_action?(:update)).to eq(true)
56
+ expect(attribute.default).to eq(nil)
57
+ expect(attribute.build_attributes({id: 1, name: 'Test'}, {})).to match_hash_with_indifferent_access({id: 1})
58
+ expect(attribute.build_attributes({'id' => 1, 'name' => 'Text'}, {})).to match_hash_with_indifferent_access({id: 1})
59
+ expect(attribute.build_payload_for_create({ id: 1, name: 'Text' }, {})).to eq({})
60
+ expect(attribute.build_payload_for_update({ id: 1, name: 'Text' }, {})).to eq({ 'id' => 1 })
61
+ end
62
+
63
+ it 'can succes parse attribute :name with default setting' do
64
+ attribute = attributes[:name]
65
+ expect(attribute.name).to eq(:name)
66
+ expect(attribute.primary_key?).to eq(false)
67
+ expect(attribute.readonly?).to eq(false)
68
+ expect(attribute.remote_key).to eq('name')
69
+ expect(attribute.for_action?(:create)).to eq(true)
70
+ expect(attribute.for_action?(:update)).to eq(true)
71
+ expect(attribute.default).to eq(nil)
72
+ expect(attribute.build_attributes({id: 1, name: 'Test'}, {})).to match_hash_with_indifferent_access({name: 'Test'})
73
+ expect(attribute.build_attributes({'id' => 1, 'name' => 'Text'}, {})).to match_hash_with_indifferent_access({name: 'Text'})
74
+ expect(attribute.build_payload_for_create({ id: 1, name: 'Text' }, {})).to eq({ 'name' => 'Text' })
75
+ expect(attribute.build_payload_for_update({ id: 1, name: 'Text' }, {})).to eq({ 'name' => 'Text' })
76
+ end
77
+
78
+ it 'can succes parse attribute :description with diferent remote_key' do
79
+ attribute = attributes[:description]
80
+ expect(attribute.name).to eq(:description)
81
+ expect(attribute.primary_key?).to eq(false)
82
+ expect(attribute.readonly?).to eq(false)
83
+ expect(attribute.remote_key).to eq('desc')
84
+ expect(attribute.for_action?(:create)).to eq(true)
85
+ expect(attribute.for_action?(:update)).to eq(true)
86
+ expect(attribute.default).to eq(nil)
87
+ expect(attribute.build_attributes({id: 1, description: '...'}, {})).to match_hash_with_indifferent_access({description: '...'})
88
+ expect(attribute.build_attributes({'id' => 1, 'desc' => '...'}, {})).to match_hash_with_indifferent_access({description: '...'})
89
+ expect(attribute.build_payload_for_create({ id: 1, description: '...' }, {})).to eq({ 'desc' => '...' })
90
+ expect(attribute.build_payload_for_update({ id: 1, description: '...' }, {})).to eq({ 'desc' => '...' })
91
+ end
92
+
93
+ it 'can success parse attribute :keep_cards_from_source with create_only and remote_key' do
94
+ attribute = attributes[:keep_cards_from_source]
95
+ expect(attribute.name).to eq(:keep_cards_from_source)
96
+ expect(attribute.primary_key?).to eq(false)
97
+ expect(attribute.readonly?).to eq(false)
98
+ expect(attribute.remote_key).to eq('keepFromSource')
99
+ expect(attribute.for_action?(:create)).to eq(true)
100
+ expect(attribute.for_action?(:update)).to eq(false)
101
+ expect(attribute.default).to eq(nil)
102
+ expect(attribute.build_attributes({id: 1, keep_cards_from_source: true}, {})).to match_hash_with_indifferent_access({keep_cards_from_source: true})
103
+ expect(attribute.build_attributes({'id' => 1, 'keepFromSource' => true}, {})).to match_hash_with_indifferent_access({keep_cards_from_source: true})
104
+ expect(attribute.build_payload_for_create({ id: 1, keep_cards_from_source: true }, {})).to eq({ 'keepFromSource' => true })
105
+ expect(attribute.build_payload_for_update({ id: 1, keep_cards_from_source: true }, {})).to eq({})
106
+ end
107
+
108
+ it 'can succes parse attribute :subscribed with update only' do
109
+ attribute = attributes[:subscribed]
110
+ expect(attribute.name).to eq(:subscribed)
111
+ expect(attribute.primary_key?).to eq(false)
112
+ expect(attribute.readonly?).to eq(false)
113
+ expect(attribute.remote_key).to eq('subscribed')
114
+ expect(attribute.for_action?(:create)).to eq(false)
115
+ expect(attribute.for_action?(:update)).to eq(true)
116
+ expect(attribute.default).to eq(true)
117
+ expect(attribute.build_attributes({id: 1, subscribed: true}, {})).to match_hash_with_indifferent_access({subscribed: true})
118
+ expect(attribute.build_attributes({id: 1}, {})).to match_hash_with_indifferent_access({subscribed: true})
119
+ expect(attribute.build_attributes({'id' => 1, 'subscribed' => true}, {})).to match_hash_with_indifferent_access({subscribed: true})
120
+ expect(attribute.build_payload_for_create({ id: 1, subscribed: true }, {})).to eq({})
121
+ expect(attribute.build_payload_for_update({ id: 1, subscribed: true }, {})).to eq({ 'subscribed' => true })
122
+ end
123
+
124
+ it 'can success parse attribute :last_activity_date with specific serializer' do
125
+ attribute = attributes[:last_activity_date]
126
+ expect(attribute.name).to eq(:last_activity_date)
127
+ expect(attribute.primary_key?).to eq(false)
128
+ expect(attribute.readonly?).to eq(true)
129
+ expect(attribute.remote_key).to eq('dateLastActivity')
130
+ expect(attribute.for_action?(:create)).to eq(false)
131
+ expect(attribute.for_action?(:update)).to eq(false)
132
+ expect(attribute.default).to eq(nil)
133
+ expect(attribute.build_attributes({id: 1, last_activity_date: Time.new(2020, 1, 1)}, {})).to match_hash_with_indifferent_access({last_activity_date: Time.new(2020, 1, 1)})
134
+ expect(attribute.build_attributes({id: 1}, {})).to match_hash_with_indifferent_access({last_activity_date: nil})
135
+ expect(attribute.build_attributes({'id' => 1, 'dateLastActivity' => Time.new(2020, 1, 1)}, {})).to match_hash_with_indifferent_access({last_activity_date: Time.new(2020, 1, 1)})
136
+ expect(attribute.build_payload_for_create({ id: 1, last_activity_date: Time.new(2020, 1, 1) }, {})).to eq({})
137
+ expect(attribute.build_payload_for_update({ id: 1, last_activity_date: Time.new(2020, 1, 1) }, {})).to eq({})
138
+ end
139
+
140
+ it 'can success parse attribute :visibility_level with specific class_name' do
141
+ attribute = attributes[:visibility_level]
142
+ expect(attribute.name).to eq(:visibility_level)
143
+ expect(attribute.primary_key?).to eq(false)
144
+ expect(attribute.readonly?).to eq(false)
145
+ expect(attribute.remote_key).to eq('permissionLevel')
146
+ expect(attribute.for_action?(:create)).to eq(true)
147
+ expect(attribute.for_action?(:update)).to eq(true)
148
+ expect(attribute.default).to eq(nil)
149
+ expect(attribute.build_attributes({id: 1, visibility_level: 'org'}, {})).to match_hash_with_indifferent_access({visibility_level: 'org'})
150
+ expect(attribute.build_attributes({id: 1}, {})).to match_hash_with_indifferent_access({visibility_level: nil})
151
+ expect(attribute.build_attributes({'id' => 1, 'prefs' => { 'permissionLevel' => 'org' }}, {})).to match_hash_with_indifferent_access({visibility_level: 'org'})
152
+ expect(attribute.build_payload_for_create({ id: 1, visibility_level: 'org' }, {})).to eq({ 'prefs_permissionLevel' => 'org' })
153
+ expect(attribute.build_payload_for_update({ id: 1, visibility_level: 'org' }, {})).to eq({ 'prefs/permissionLevel' => 'org' })
154
+ end
155
+
156
+ end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe 'Trello::Board#add_member' do
4
+ include IntegrationHelpers
5
+
6
+ before { setup_trello }
7
+
8
+ it 'can add a member to a board' do
9
+ VCR.use_cassette('can_add_a_member_to_a_board') do
10
+ member = Trello::Member.new('id' => 'wokenqingtian')
11
+ card = Trello::Board.find('5e93ba98614ac22d22f085c4')
12
+ response = card.add_member(member)
13
+
14
+ expect(response.code).to eq(200)
15
+ body = JSON.parse(response.body)
16
+ expect(body['id']).to eq('5e93ba98614ac22d22f085c4')
17
+ expect(body['members'][0]['username']).to eq('wokenqingtian')
18
+ end
19
+ end
20
+
21
+ end
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe 'Trello::Board.all' do
4
+ include IntegrationHelpers
5
+
6
+ before { setup_trello }
7
+
8
+ it 'can success return all boards for the current user' do
9
+ VCR.use_cassette('can_success_return_all_boards_of_current_user') do
10
+ boards = Trello::Board.all
11
+ expect(boards.count).to be > 1
12
+ expect(boards[0].name).to eq('IT 1')
13
+ expect(boards[1].name).to eq('IT 2')
14
+ expect(boards[2].name).to eq('IT 3')
15
+ expect(boards[3].name).to eq('IT 4')
16
+ expect(boards[4].name).to eq('IT 5')
17
+ end
18
+ end
19
+
20
+ end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe 'Trello::Board#actions' do
4
+ include IntegrationHelpers
5
+
6
+ before { setup_trello }
7
+
8
+ it 'can get actions' do
9
+ VCR.use_cassette('can_get_actions_of_board') do
10
+ board = Trello::Board.find('5e93ba98614ac22d22f085c4')
11
+ actions = board.actions
12
+
13
+ expect(actions).to be_a(Array)
14
+ expect(actions[0]).to be_a(Trello::Action)
15
+ end
16
+ end
17
+
18
+ end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe 'Trello::Board#cards' do
4
+ include IntegrationHelpers
5
+
6
+ before { setup_trello }
7
+
8
+ it 'can get cards' do
9
+ VCR.use_cassette('can_get_cards_of_board') do
10
+ board = Trello::Board.find('5e93ba98614ac22d22f085c4')
11
+ cards = board.cards
12
+
13
+ expect(cards).to be_a(Array)
14
+ expect(cards[0]).to be_a(Trello::Card)
15
+ end
16
+ end
17
+
18
+ end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe 'Trello::Board#checklists' do
4
+ include IntegrationHelpers
5
+
6
+ before { setup_trello }
7
+
8
+ it 'can get checklists' do
9
+ VCR.use_cassette('can_get_checklists_of_board') do
10
+ board = Trello::Board.find('5e93ba98614ac22d22f085c4')
11
+ checklists = board.checklists
12
+
13
+ expect(checklists).to be_a(Array)
14
+ expect(checklists[0]).to be_a(Trello::Checklist)
15
+ end
16
+ end
17
+
18
+ end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe 'Trello::Board#custom_fields' do
4
+ include IntegrationHelpers
5
+
6
+ before { setup_trello }
7
+
8
+ it 'can get custom fields' do
9
+ VCR.use_cassette('can_get_custom_fields_of_board') do
10
+ board = Trello::Board.find('5e93ba98614ac22d22f085c4')
11
+ custom_fields = board.custom_fields
12
+
13
+ expect(custom_fields).to be_a(Array)
14
+ expect(custom_fields[0]).to be_a(Trello::CustomField)
15
+ end
16
+ end
17
+
18
+ end