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
data/spec/card_spec.rb CHANGED
@@ -25,7 +25,7 @@ module Trello
25
25
  it "delegates to Trello.client#find" do
26
26
  expect(client)
27
27
  .to receive(:find)
28
- .with(:card, 'abcdef123456789123456789', {})
28
+ .with('card', 'abcdef123456789123456789', {})
29
29
 
30
30
  Card.find('abcdef123456789123456789')
31
31
  end
@@ -62,7 +62,8 @@ module Trello
62
62
  expect(card.url).to eq(card_details['url'])
63
63
  expect(card.short_url).to eq(card_details['shortUrl'])
64
64
  expect(card.pos).to eq(card_details['pos'])
65
- expect(card.last_activity_date).to eq(card_details['dateLastActivity'])
65
+ expect(card.last_activity_date).to be_a(Time)
66
+ expect(card.last_activity_date).to eq(Time.iso8601(card_details['dateLastActivity']))
66
67
  end
67
68
 
68
69
  it 'properly initializes all fields from options-like formatted hash' do
@@ -73,7 +74,7 @@ module Trello
73
74
  expect(card.desc).to eq(card_details[:desc])
74
75
  expect(card.member_ids).to eq(card_details[:member_ids])
75
76
  expect(card.card_labels).to eq(card_details[:card_labels])
76
- expect(card.due).to eq(card_details[:due])
77
+ expect(card.due).to eq(card_details[:due].to_time)
77
78
  expect(card.pos).to eq(card_details[:pos])
78
79
  expect(card.source_card_id).to eq(card_details[:source_card_id])
79
80
  expect(card.source_card_properties).to eq(card_details[:source_card_properties])
@@ -96,17 +97,18 @@ module Trello
96
97
  card_labels: "abcdef123456789123456789"
97
98
  }
98
99
 
99
- result = JSON.generate(cards_details.first.merge(payload.merge(idList: lists_details.first['id'])))
100
-
101
- expected_payload = {name: "Test Card", desc: nil, idList: "abcdef123456789123456789",
102
- idMembers: nil, idLabels: "abcdef123456789123456789", pos: nil, due: nil, dueComplete: false, idCardSource: nil, keepFromSource: 'all'}
100
+ expected_payload = {
101
+ 'name' => "Test Card",
102
+ 'idList' => "abcdef123456789123456789",
103
+ 'idLabels' => "abcdef123456789123456789",
104
+ }
103
105
 
104
106
  expect(client)
105
107
  .to receive(:post)
106
108
  .with("/cards", expected_payload)
107
- .and_return result
109
+ .and_return JSON.generate(cards_details.first.merge(payload.merge(idList: lists_details.first['id'])))
108
110
 
109
- card = Card.create(cards_details.first.merge(payload.merge(list_id: lists_details.first['id'])))
111
+ card = Card.create(payload.merge(list_id: lists_details.first['id']))
110
112
 
111
113
  expect(card).to be_a Card
112
114
  end
@@ -118,15 +120,17 @@ module Trello
118
120
 
119
121
  result = JSON.generate(cards_details.first.merge(payload.merge(idList: lists_details.first['id'])))
120
122
 
121
- expected_payload = {name: nil, desc: nil, idList: "abcdef123456789123456789",
122
- idMembers: nil, idLabels: nil, pos: nil, due: nil, dueComplete: false, idCardSource: cards_details.first['id'], keepFromSource: 'all'}
123
+ expected_payload = {
124
+ 'idList' => "abcdef123456789123456789",
125
+ 'idCardSource' => cards_details.first['id'],
126
+ }
123
127
 
124
128
  expect(client)
125
129
  .to receive(:post)
126
130
  .with("/cards", expected_payload)
127
131
  .and_return result
128
132
 
129
- card = Card.create(cards_details.first.merge(payload.merge(list_id: lists_details.first['id'])))
133
+ card = Card.create(payload.merge(list_id: lists_details.first['id']))
130
134
 
131
135
  expect(card).to be_a Card
132
136
  end
@@ -139,15 +143,18 @@ module Trello
139
143
 
140
144
  result = JSON.generate(cards_details.first.merge(payload.merge(idList: lists_details.first['id'])))
141
145
 
142
- expected_payload = {name: nil, desc: nil, idList: "abcdef123456789123456789",
143
- idMembers: nil, idLabels: nil, pos: nil, due: nil, dueComplete: false, idCardSource: cards_details.first['id'], keepFromSource: ['due', 'checklists']}
146
+ expected_payload = {
147
+ 'idList' => "abcdef123456789123456789",
148
+ 'idCardSource' => cards_details.first['id'],
149
+ 'keepFromSource' => ['due', 'checklists']
150
+ }
144
151
 
145
152
  expect(client)
146
153
  .to receive(:post)
147
154
  .with("/cards", expected_payload)
148
155
  .and_return result
149
156
 
150
- card = Card.create(cards_details.first.merge(payload.merge(list_id: lists_details.first['id'])))
157
+ card = Card.create(payload.merge(list_id: lists_details.first['id']))
151
158
 
152
159
  expect(card).to be_a Card
153
160
  end
@@ -160,15 +167,17 @@ module Trello
160
167
 
161
168
  result = JSON.generate(cards_details.first.merge(payload.merge(idList: lists_details.first['id'])))
162
169
 
163
- expected_payload = {name: nil, desc: nil, idList: "abcdef123456789123456789",
164
- idMembers: nil, idLabels: nil, pos: nil, due: nil, dueComplete: false, idCardSource: cards_details.first['id'], keepFromSource: nil}
170
+ expected_payload = {
171
+ 'idList' => "abcdef123456789123456789",
172
+ 'idCardSource' => cards_details.first['id'],
173
+ }
165
174
 
166
175
  expect(client)
167
176
  .to receive(:post)
168
177
  .with("/cards", expected_payload)
169
178
  .and_return result
170
179
 
171
- card = Card.create(cards_details.first.merge(payload.merge(list_id: lists_details.first['id'])))
180
+ card = Card.create(payload.merge(list_id: lists_details.first['id']))
172
181
 
173
182
  expect(card).to be_a Card
174
183
  end
@@ -180,13 +189,14 @@ module Trello
180
189
  expected_new_name = "xxx"
181
190
 
182
191
  payload = {
183
- name: expected_new_name,
192
+ 'name' => expected_new_name,
184
193
  }
185
194
 
186
195
  expect(client)
187
196
  .to receive(:put)
188
197
  .once
189
198
  .with("/cards/abcdef123456789123456789", payload)
199
+ .and_return(payload.to_json)
190
200
 
191
201
  card.name = expected_new_name
192
202
  card.save
@@ -196,10 +206,13 @@ module Trello
196
206
  expected_new_desc = "xxx"
197
207
 
198
208
  payload = {
199
- desc: expected_new_desc,
209
+ 'desc' => expected_new_desc,
200
210
  }
201
211
 
202
- expect(client).to receive(:put).once.with("/cards/abcdef123456789123456789", payload)
212
+ expect(client)
213
+ .to receive(:put).once
214
+ .with("/cards/abcdef123456789123456789", payload)
215
+ .and_return(payload.to_json)
203
216
 
204
217
  card.desc = expected_new_desc
205
218
  card.save
@@ -307,7 +320,7 @@ module Trello
307
320
  before do
308
321
  allow(client)
309
322
  .to receive(:get)
310
- .with("/attachments/abcdef123456789123456789", {})
323
+ .with("/cards/#{card.id}/attachments/abcdef123456789123456789", {})
311
324
  .and_return JSON.generate(attachments_details.first)
312
325
  end
313
326
 
@@ -354,17 +367,26 @@ module Trello
354
367
 
355
368
  expect(client)
356
369
  .to receive(:put)
357
- .with("/card/abcdef123456789123456789/customField/abcdef123456789123456789/item", params)
370
+ .with("/cards/abcdef123456789123456789/customField/abcdef123456789123456789/item", params)
358
371
 
359
372
  card.custom_field_items.last.remove
360
373
  end
361
374
 
362
375
  it "updates a custom field value" do
363
- payload = { value: { text: 'Test Text' } }
376
+ payload = { 'value' => { 'text' => 'Test Text' } }
364
377
 
365
378
  expect(client)
366
379
  .to receive(:put)
367
- .with("/card/abcdef123456789123456789/customField/abcdef123456789123456789/item", payload)
380
+ .with("/cards/abcdef123456789123456789/customField/abcdef123456789123456789/item", payload)
381
+ .and_return(JSON.generate({
382
+ "id" => "5e68e885e4baf545ec8ce7ba",
383
+ "value" => {
384
+ "text" => "Test Text"
385
+ },
386
+ "idCustomField" => "abcdef123456789123456789",
387
+ "idModel" => "abcdef123456789123456789",
388
+ "modelType" => "card"
389
+ }))
368
390
 
369
391
  text_custom_field = card.custom_field_items.last
370
392
  text_custom_field.value = { text: 'Test Text' }
@@ -473,7 +495,7 @@ module Trello
473
495
  card.move_to_list_on_any_board(other_list.id)
474
496
  end
475
497
 
476
- it 'should not be moved if new board is identical with old board', focus: true do
498
+ it 'should not be moved if new board is identical with old board' do
477
499
  other_board = double(id: 'abcdef123456789123456789')
478
500
  expect(client).to_not receive(:put)
479
501
  card.move_to_board(other_board)
@@ -506,7 +528,7 @@ module Trello
506
528
 
507
529
  expect(client)
508
530
  .to receive(:post)
509
- .with("/cards/abcdef123456789123456789/members", payload)
531
+ .with("/cards/abcdef123456789123456789/idMembers", payload)
510
532
 
511
533
  card.add_member(new_member)
512
534
  end
@@ -516,7 +538,7 @@ module Trello
516
538
 
517
539
  expect(client)
518
540
  .to receive(:delete)
519
- .with("/cards/abcdef123456789123456789/members/#{existing_member.id}")
541
+ .with("/cards/abcdef123456789123456789/idMembers/#{existing_member.id}")
520
542
 
521
543
  card.remove_member(existing_member)
522
544
  end
@@ -622,12 +644,10 @@ module Trello
622
644
  expect(labels[0].id).to eq('abcdef123456789123456789')
623
645
  expect(labels[0].board_id).to eq('abcdef123456789123456789')
624
646
  expect(labels[0].name).to eq('iOS')
625
- expect(labels[0].uses).to eq(3)
626
647
  expect(labels[1].color).to eq('purple')
627
648
  expect(labels[1].id).to eq('bbcdef123456789123456789')
628
649
  expect(labels[1].board_id).to eq('abcdef123456789123456789')
629
650
  expect(labels[1].name).to eq('Issue or bug')
630
- expect(labels[1].uses).to eq(1)
631
651
  end
632
652
 
633
653
  it "includes label ids list" do
@@ -687,18 +707,18 @@ module Trello
687
707
 
688
708
  first_plugin = card.plugin_data.first
689
709
  expect(first_plugin.id).to eq plugin_data_details[0]["id"]
690
- expect(first_plugin.idPlugin).to eq plugin_data_details[0]["idPlugin"]
710
+ expect(first_plugin.plugin_id).to eq plugin_data_details[0]["idPlugin"]
691
711
  expect(first_plugin.scope).to eq plugin_data_details[0]["scope"]
692
- expect(first_plugin.idModel).to eq plugin_data_details[0]["idModel"]
693
- expect(first_plugin.value).to eq JSON.parse plugin_data_details[0]["value"]
712
+ expect(first_plugin.model_id).to eq plugin_data_details[0]["idModel"]
713
+ expect(first_plugin.value).to eq plugin_data_details[0]["value"]
694
714
  expect(first_plugin.access).to eq plugin_data_details[0]["access"]
695
715
 
696
716
  second_plugin = card.plugin_data[1]
697
717
  expect(second_plugin.id).to eq plugin_data_details[1]["id"]
698
- expect(second_plugin.idPlugin).to eq plugin_data_details[1]["idPlugin"]
718
+ expect(second_plugin.plugin_id).to eq plugin_data_details[1]["idPlugin"]
699
719
  expect(second_plugin.scope).to eq plugin_data_details[1]["scope"]
700
- expect(second_plugin.idModel).to eq plugin_data_details[1]["idModel"]
701
- expect(second_plugin.value).to eq JSON.parse plugin_data_details[1]["value"]
720
+ expect(second_plugin.model_id).to eq plugin_data_details[1]["idModel"]
721
+ expect(second_plugin.value).to eq plugin_data_details[1]["value"]
702
722
  expect(second_plugin.access).to eq plugin_data_details[1]["access"]
703
723
 
704
724
  end
@@ -782,12 +802,13 @@ module Trello
782
802
 
783
803
  describe "#close!" do
784
804
  it "updates the close attribute to true and saves the list" do
785
- payload = { closed: true }
805
+ payload = { 'closed' => true }
786
806
 
787
807
  expect(client)
788
808
  .to receive(:put)
789
809
  .once
790
810
  .with("/cards/abcdef123456789123456789", payload)
811
+ .and_return(payload.to_json)
791
812
 
792
813
  card.close!
793
814
  end
@@ -798,57 +819,113 @@ module Trello
798
819
  due_date = Time.now
799
820
 
800
821
  payload = {
801
- due: due_date,
822
+ 'due' => due_date.strftime('%FT%T.%LZ'),
802
823
  }
803
824
 
804
825
  expect(client)
805
826
  .to receive(:put)
806
827
  .once
807
828
  .with("/cards/abcdef123456789123456789", payload)
829
+ .and_return(payload.to_json)
808
830
 
809
831
  card.due = due_date
810
832
  card.save
811
833
 
812
834
  expect(card.due).to_not be_nil
835
+ end
836
+ end
813
837
 
814
- payload = {
815
- dueComplete: true
816
- }
838
+ describe '#update_fields' do
839
+ context 'when the fields argument is empty' do
840
+ let(:fields) { {} }
817
841
 
818
- expect(client)
819
- .to receive(:put)
820
- .once
821
- .with("/cards/abcdef123456789123456789", payload)
842
+ it 'card does not set any fields' do
843
+ expected = cards_details.first
822
844
 
823
- card.due_complete = true
824
- card.save
845
+ card = Card.new(expected)
846
+ card.client = client
847
+
848
+ card.update_fields(fields)
849
+
850
+ expected.each do |key, value|
851
+ if card.respond_to?(key) && key != 'labels'
852
+ expect(card.send(key)).to eq value
853
+ end
825
854
 
826
- expect(card.due_complete).to be true
855
+ expect(card.labels).to eq expected['labels'].map { |lbl| Trello::Label.new(lbl) }
856
+ expect(card.short_id).to eq expected['idShort']
857
+ expect(card.short_url).to eq expected['shortUrl']
858
+ expect(card.board_id).to eq expected['idBoard']
859
+ expect(card.member_ids).to eq expected['idMembers']
860
+ expect(card.cover_image_id).to eq expected['idAttachmentCover']
861
+ expect(card.list_id).to eq expected['idList']
862
+ expect(card.card_labels).to eq expected['idLabels']
863
+ end
864
+ end
827
865
  end
828
- end
829
866
 
830
- describe "#update_fields" do
831
- it "does not set any fields when the fields argument is empty" do
832
- expected = cards_details.first
867
+ context 'when the fields argument has at least one field' do
868
+ let(:expected) { cards_details.first }
869
+ let(:card) {
870
+ card = Card.new(expected)
871
+ card.client = client
872
+ card
873
+ }
874
+
875
+ context 'and the field does changed' do
876
+ let(:fields) { { desc: 'Awesome things have changed.' } }
877
+
878
+ it 'card does set the changed fields' do
879
+ card.update_fields(fields)
880
+
881
+ expect(card.desc).to eq('Awesome things have changed.')
882
+ end
883
+
884
+ it 'card has been mark as changed' do
885
+ card.update_fields(fields)
886
+
887
+ expect(card.changed?).to be_truthy
888
+ end
889
+ end
890
+
891
+ context "and the field doesn't changed" do
892
+ let(:fields) { { desc: expected['desc'] } }
893
+
894
+ it "card attributes doesn't changed" do
895
+ card.update_fields(fields)
896
+
897
+ expect(card.desc).to eq(expected['desc'])
898
+ end
833
899
 
834
- card = Card.new(expected)
835
- card.client = client
900
+ it "card hasn't been mark as changed" do
901
+ card.update_fields(fields)
836
902
 
837
- card.update_fields({})
903
+ expect(card.changed?).to be_falsy
904
+ end
905
+ end
838
906
 
839
- expected.each do |key, value|
840
- if card.respond_to?(key) && key != 'labels'
841
- expect(card.send(key)).to eq value
907
+ context "and the field isn't a correct attributes of the card" do
908
+ let(:fields) { { abc: 'abc' } }
909
+
910
+ it "card attributes doesn't changed" do
911
+ card.update_fields(fields)
912
+
913
+ expect(card.labels).to eq expected['labels'].map { |lbl| Trello::Label.new(lbl) }
914
+ expect(card.short_id).to eq expected['idShort']
915
+ expect(card.short_url).to eq expected['shortUrl']
916
+ expect(card.board_id).to eq expected['idBoard']
917
+ expect(card.member_ids).to eq expected['idMembers']
918
+ expect(card.cover_image_id).to eq expected['idAttachmentCover']
919
+ expect(card.list_id).to eq expected['idList']
920
+ expect(card.card_labels).to eq expected['idLabels']
921
+ expect(card.desc).to eq expected['desc']
842
922
  end
843
923
 
844
- expect(card.labels).to eq expected['labels'].map { |lbl| Trello::Label.new(lbl) }
845
- expect(card.short_id).to eq expected['idShort']
846
- expect(card.short_url).to eq expected['shortUrl']
847
- expect(card.board_id).to eq expected['idBoard']
848
- expect(card.member_ids).to eq expected['idMembers']
849
- expect(card.cover_image_id).to eq expected['idAttachmentCover']
850
- expect(card.list_id).to eq expected['idList']
851
- expect(card.card_labels).to eq expected['idLabels']
924
+ it "card hasn't been mark as changed" do
925
+ card.update_fields(fields)
926
+
927
+ expect(card.changed?).to be_falsy
928
+ end
852
929
  end
853
930
  end
854
931
  end
@@ -0,0 +1,104 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api.trello.com/1/actions/5f60f07958388d26dc063c30?key=DEVELOPER_PUBLIC_KEY&token=MEMBER_TOKEN
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept:
11
+ - "*/*"
12
+ User-Agent:
13
+ - rest-client/2.1.0 (linux-gnu x86_64) ruby/2.6.6p146
14
+ Accept-Encoding:
15
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
16
+ Host:
17
+ - api.trello.com
18
+ response:
19
+ status:
20
+ code: 200
21
+ message: OK
22
+ headers:
23
+ X-Dns-Prefetch-Control:
24
+ - 'off'
25
+ X-Frame-Options:
26
+ - DENY
27
+ X-Download-Options:
28
+ - noopen
29
+ X-Permitted-Cross-Domain-Policies:
30
+ - none
31
+ Referrer-Policy:
32
+ - strict-origin-when-cross-origin
33
+ Surrogate-Control:
34
+ - no-store
35
+ Cache-Control:
36
+ - max-age=0, must-revalidate, no-cache, no-store
37
+ Pragma:
38
+ - no-cache
39
+ Expires:
40
+ - Thu, 01 Jan 1970 00:00:00
41
+ X-Trello-Version:
42
+ - 1.2239.2
43
+ X-Trello-Environment:
44
+ - Production
45
+ Set-Cookie:
46
+ - dsc=set_cookie_dsc; Path=/; Expires=Thu, 01 Oct 2020 14:31:36 GMT; Secure
47
+ Access-Control-Allow-Origin:
48
+ - "*"
49
+ Access-Control-Allow-Methods:
50
+ - GET, PUT, POST, DELETE
51
+ Access-Control-Allow-Headers:
52
+ - Authorization, Accept, Content-Type
53
+ Access-Control-Expose-Headers:
54
+ - x-rate-limit-api-key-interval-ms, x-rate-limit-api-key-max, x-rate-limit-api-key-remaining,
55
+ x-rate-limit-api-token-interval-ms, x-rate-limit-api-token-max, x-rate-limit-api-token-remaining
56
+ X-Rate-Limit-Api-Token-Interval-Ms:
57
+ - '10000'
58
+ X-Rate-Limit-Api-Token-Max:
59
+ - '100'
60
+ X-Rate-Limit-Api-Token-Remaining:
61
+ - '99'
62
+ X-Rate-Limit-Api-Key-Interval-Ms:
63
+ - '10000'
64
+ X-Rate-Limit-Api-Key-Max:
65
+ - '300'
66
+ X-Rate-Limit-Api-Key-Remaining:
67
+ - '299'
68
+ X-Rate-Limit-Member-Interval-Ms:
69
+ - '10000'
70
+ X-Rate-Limit-Member-Max:
71
+ - '200'
72
+ X-Rate-Limit-Member-Remaining:
73
+ - '199'
74
+ X-Server-Time:
75
+ - '1601303496725'
76
+ Content-Type:
77
+ - application/json; charset=utf-8
78
+ Date:
79
+ - Mon, 28 Sep 2020 14:31:36 GMT
80
+ X-Envoy-Upstream-Service-Time:
81
+ - '159'
82
+ Expect-Ct:
83
+ - report-uri="https://web-security-reports.services.atlassian.com/expect-ct-report/trello-edge",
84
+ max-age=86400
85
+ Strict-Transport-Security:
86
+ - max-age=63072000; preload
87
+ X-Content-Type-Options:
88
+ - nosniff
89
+ X-Xss-Protection:
90
+ - 1; mode=block
91
+ Server:
92
+ - globaledge-envoy
93
+ Transfer-Encoding:
94
+ - chunked
95
+ body:
96
+ encoding: ASCII-8BIT
97
+ string: '{"id":"5f60f07958388d26dc063c30","idMemberCreator":"5e679b808e6e8828784b30e1","data":{"board":{"id":"5e93ba98614ac22d22f085c4","name":"IT
98
+ 2","shortLink":"y1TF9GTa"},"customField":{"id":"5f60f07958388d26dc063c2d","name":"Test"}},"type":"createCustomField","date":"2020-09-15T16:48:57.454Z","limits":{},"appCreator":null,"display":{"translationKey":"action_create_custom_field","entities":{"board":{"type":"board","id":"5e93ba98614ac22d22f085c4","text":"IT
99
+ 2","shortLink":"y1TF9GTa"},"customField":{"type":"customField","id":"5f60f07958388d26dc063c2d","text":"Test"},"memberCreator":{"type":"member","id":"5e679b808e6e8828784b30e1","username":"hoppertest","text":"Hopper
100
+ Test"}}},"memberCreator":{"id":"5e679b808e6e8828784b30e1","username":"hoppertest","activityBlocked":false,"avatarHash":null,"avatarUrl":null,"fullName":"Hopper
101
+ Test","idMemberReferrer":null,"initials":"HT","nonPublic":{},"nonPublicAvailable":true}}'
102
+ http_version: null
103
+ recorded_at: Mon, 28 Sep 2020 14:31:36 GMT
104
+ recorded_with: VCR 5.1.0
@@ -0,0 +1,96 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api.trello.com/1/boards/5e93ba403f1ab3603ba81a09?key=DEVELOPER_PUBLIC_KEY&token=MEMBER_TOKEN
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept:
11
+ - "*/*"
12
+ User-Agent:
13
+ - rest-client/2.1.0 (linux-gnu x86_64) ruby/2.6.6p146
14
+ Accept-Encoding:
15
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
16
+ Host:
17
+ - api.trello.com
18
+ response:
19
+ status:
20
+ code: 200
21
+ message: OK
22
+ headers:
23
+ X-Dns-Prefetch-Control:
24
+ - 'off'
25
+ X-Frame-Options:
26
+ - DENY
27
+ Strict-Transport-Security:
28
+ - max-age=15552000; includeSubDomains
29
+ X-Download-Options:
30
+ - noopen
31
+ X-Content-Type-Options:
32
+ - nosniff
33
+ Referrer-Policy:
34
+ - strict-origin-when-cross-origin
35
+ X-Xss-Protection:
36
+ - 1; mode=block
37
+ Surrogate-Control:
38
+ - no-store
39
+ X-Trello-Version:
40
+ - 1.2092.0
41
+ X-Trello-Environment:
42
+ - Production
43
+ Access-Control-Allow-Origin:
44
+ - "*"
45
+ Access-Control-Allow-Methods:
46
+ - GET, PUT, POST, DELETE
47
+ Access-Control-Allow-Headers:
48
+ - Authorization, Accept, Content-Type
49
+ Access-Control-Expose-Headers:
50
+ - x-rate-limit-api-key-interval-ms, x-rate-limit-api-key-max, x-rate-limit-api-key-remaining,
51
+ x-rate-limit-api-token-interval-ms, x-rate-limit-api-token-max, x-rate-limit-api-token-remaining
52
+ X-Rate-Limit-Api-Key-Interval-Ms:
53
+ - '10000'
54
+ X-Rate-Limit-Api-Key-Max:
55
+ - '300'
56
+ X-Rate-Limit-Api-Key-Remaining:
57
+ - '299'
58
+ X-Rate-Limit-Api-Token-Interval-Ms:
59
+ - '10000'
60
+ X-Rate-Limit-Api-Token-Max:
61
+ - '100'
62
+ X-Rate-Limit-Api-Token-Remaining:
63
+ - '99'
64
+ X-Rate-Limit-Member-Interval-Ms:
65
+ - '10000'
66
+ X-Rate-Limit-Member-Max:
67
+ - '200'
68
+ X-Rate-Limit-Member-Remaining:
69
+ - '199'
70
+ X-Server-Time:
71
+ - '1589709349364'
72
+ Content-Type:
73
+ - application/json; charset=utf-8
74
+ Vary:
75
+ - Accept-Encoding
76
+ Expires:
77
+ - Sun, 17 May 2020 09:55:49 GMT
78
+ Cache-Control:
79
+ - max-age=0, no-cache, no-store
80
+ Pragma:
81
+ - no-cache
82
+ Date:
83
+ - Sun, 17 May 2020 09:55:49 GMT
84
+ Content-Length:
85
+ - '2644'
86
+ Connection:
87
+ - keep-alive
88
+ Set-Cookie:
89
+ - dsc=set_cookie_dsc; Path=/; Expires=Wed, 20 May 2020 09:55:49 GMT; Secure
90
+ body:
91
+ encoding: UTF-8
92
+ string: '{"id":"5e93ba403f1ab3603ba81a09","name":"IT 1","desc":"This is a test
93
+ board called IT 1","descData":{"emoji":{}},"closed":false,"idOrganization":"5e93ba154634282b6df23bcc","idEnterprise":null,"pinned":false,"url":"https://trello.com/b/0zx7ive1/it-1","shortUrl":"https://trello.com/b/0zx7ive1","labelNames":{"green":"","yellow":"","orange":"","red":"","purple":"","blue":"","sky":"","lime":"","pink":"","black":""},"prefs":{"permissionLevel":"org","hideVotes":false,"voting":"disabled","comments":"members","invitations":"members","selfJoin":true,"cardCovers":true,"isTemplate":false,"cardAging":"regular","calendarFeedEnabled":false,"background":"5e92397e6ab226460dadee8e","backgroundImage":"https://trello-backgrounds.s3.amazonaws.com/SharedBackground/original/c7d6b0f6d7ea90a4629be964056c1e3e/photo-1586596436497-8d6f8d1d921f","backgroundImageScaled":[{"width":67,"height":100,"url":"https://trello-backgrounds.s3.amazonaws.com/SharedBackground/67x100/44097ec60dd1549b6b98bf64d0e86eae/photo-1586596436497-8d6f8d1d921f.jpg"},{"width":128,"height":192,"url":"https://trello-backgrounds.s3.amazonaws.com/SharedBackground/128x192/44097ec60dd1549b6b98bf64d0e86eae/photo-1586596436497-8d6f8d1d921f.jpg"},{"width":320,"height":480,"url":"https://trello-backgrounds.s3.amazonaws.com/SharedBackground/320x480/44097ec60dd1549b6b98bf64d0e86eae/photo-1586596436497-8d6f8d1d921f.jpg"},{"width":640,"height":960,"url":"https://trello-backgrounds.s3.amazonaws.com/SharedBackground/640x960/44097ec60dd1549b6b98bf64d0e86eae/photo-1586596436497-8d6f8d1d921f.jpg"},{"width":683,"height":1024,"url":"https://trello-backgrounds.s3.amazonaws.com/SharedBackground/683x1024/44097ec60dd1549b6b98bf64d0e86eae/photo-1586596436497-8d6f8d1d921f.jpg"},{"width":853,"height":1280,"url":"https://trello-backgrounds.s3.amazonaws.com/SharedBackground/853x1280/44097ec60dd1549b6b98bf64d0e86eae/photo-1586596436497-8d6f8d1d921f.jpg"},{"width":1280,"height":1920,"url":"https://trello-backgrounds.s3.amazonaws.com/SharedBackground/1280x1920/44097ec60dd1549b6b98bf64d0e86eae/photo-1586596436497-8d6f8d1d921f.jpg"},{"width":1066,"height":1600,"url":"https://trello-backgrounds.s3.amazonaws.com/SharedBackground/1066x1600/44097ec60dd1549b6b98bf64d0e86eae/photo-1586596436497-8d6f8d1d921f.jpg"},{"width":1365,"height":2048,"url":"https://trello-backgrounds.s3.amazonaws.com/SharedBackground/original/c7d6b0f6d7ea90a4629be964056c1e3e/photo-1586596436497-8d6f8d1d921f"}],"backgroundTile":false,"backgroundBrightness":"dark","backgroundBottomColor":"#842fbb","backgroundTopColor":"#c04e37","canBePublic":true,"canBeEnterprise":true,"canBeOrg":true,"canBePrivate":true,"canInvite":true}}'
94
+ http_version: null
95
+ recorded_at: Sun, 17 May 2020 09:55:49 GMT
96
+ recorded_with: VCR 5.1.0