ruby-trello 2.3.1 → 3.2.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 (240) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +49 -23
  3. data/lib/trello/action.rb +27 -21
  4. data/lib/trello/attachment.rb +40 -27
  5. data/lib/trello/basic_data.rb +104 -9
  6. data/lib/trello/board.rb +88 -102
  7. data/lib/trello/card.rb +34 -235
  8. data/lib/trello/checklist.rb +17 -71
  9. data/lib/trello/client.rb +1 -1
  10. data/lib/trello/comment.rb +39 -26
  11. data/lib/trello/configuration.rb +8 -0
  12. data/lib/trello/cover_image.rb +20 -0
  13. data/lib/trello/custom_field.rb +31 -84
  14. data/lib/trello/custom_field_item.rb +36 -58
  15. data/lib/trello/custom_field_option.rb +40 -13
  16. data/lib/trello/item.rb +27 -16
  17. data/lib/trello/item_state.rb +7 -15
  18. data/lib/trello/json_utils.rb +11 -5
  19. data/lib/trello/label.rb +14 -101
  20. data/lib/trello/label_name.rb +22 -25
  21. data/lib/trello/list.rb +31 -44
  22. data/lib/trello/member.rb +77 -32
  23. data/lib/trello/net/faraday.rb +46 -0
  24. data/lib/trello/net/rest_client.rb +41 -0
  25. data/lib/trello/net.rb +1 -28
  26. data/lib/trello/notification.rb +27 -20
  27. data/lib/trello/organization.rb +53 -25
  28. data/lib/trello/plugin_datum.rb +11 -16
  29. data/lib/trello/schema/attribute/base.rb +79 -0
  30. data/lib/trello/schema/attribute/board_pref.rb +45 -0
  31. data/lib/trello/schema/attribute/custom_field_display.rb +45 -0
  32. data/lib/trello/schema/attribute/default.rb +45 -0
  33. data/lib/trello/schema/attribute_builder.rb +42 -0
  34. data/lib/trello/schema/attribute_registration.rb +47 -0
  35. data/lib/trello/schema/serializer/default.rb +17 -0
  36. data/lib/trello/schema/serializer/labels.rb +23 -0
  37. data/lib/trello/schema/serializer/time.rb +25 -0
  38. data/lib/trello/schema/serializer/webhooks.rb +25 -0
  39. data/lib/trello/schema.rb +31 -0
  40. data/lib/trello/token.rb +15 -12
  41. data/lib/trello/webhook.rb +18 -71
  42. data/lib/trello.rb +62 -7
  43. data/spec/action_spec.rb +1 -2
  44. data/spec/board_spec.rb +43 -103
  45. data/spec/card_spec.rb +51 -50
  46. data/spec/cassettes/action_find_with_id_and_get_all_fields.yml +104 -0
  47. data/spec/cassettes/board_find_with_id_and_get_all_fields.yml +96 -0
  48. data/spec/cassettes/board_find_with_id_and_get_specific_fields.yml +96 -0
  49. data/spec/cassettes/can_add_a_member_to_a_board.yml +191 -0
  50. data/spec/cassettes/can_arvhice_all_cards_of_list.yml +397 -0
  51. data/spec/cassettes/can_get_actions_of_board.yml +188 -0
  52. data/spec/cassettes/can_get_actions_of_list.yml +202 -0
  53. data/spec/cassettes/can_get_actions_of_members.yml +199 -0
  54. data/spec/cassettes/can_get_actions_of_organization.yml +201 -0
  55. data/spec/cassettes/can_get_boards_of_custom_field.yml +198 -0
  56. data/spec/cassettes/can_get_boards_of_label.yml +197 -0
  57. data/spec/cassettes/can_get_boards_of_organization.yml +207 -0
  58. data/spec/cassettes/can_get_cards_of_board.yml +193 -0
  59. data/spec/cassettes/can_get_cards_of_list.yml +201 -0
  60. data/spec/cassettes/can_get_cards_of_member.yml +204 -0
  61. data/spec/cassettes/can_get_checklists_of_board.yml +187 -0
  62. data/spec/cassettes/can_get_comments_board.yml +109 -0
  63. data/spec/cassettes/can_get_comments_card.yml +111 -0
  64. data/spec/cassettes/can_get_comments_list.yml +109 -0
  65. data/spec/cassettes/can_get_custom_field_options_of_custom_field.yml +197 -0
  66. data/spec/cassettes/can_get_custom_fields_of_board.yml +187 -0
  67. data/spec/cassettes/can_get_label_names_of_board.yml +187 -0
  68. data/spec/cassettes/can_get_labels_of_board.yml +187 -0
  69. data/spec/cassettes/can_get_lists_of_board.yml +187 -0
  70. data/spec/cassettes/can_get_members_of_board.yml +188 -0
  71. data/spec/cassettes/can_get_members_of_organization.yml +200 -0
  72. data/spec/cassettes/can_get_notifications_of_member.yml +199 -0
  73. data/spec/cassettes/can_get_organization_of_board.yml +189 -0
  74. data/spec/cassettes/can_get_organizations_of_member.yml +203 -0
  75. data/spec/cassettes/can_get_plugin_data_of_board.yml +187 -0
  76. data/spec/cassettes/can_move_all_cards_to_another_list.yml +886 -0
  77. data/spec/cassettes/can_success_create_a_board.yml +98 -0
  78. data/spec/cassettes/can_success_create_a_board_with_full_parameters.yml +97 -0
  79. data/spec/cassettes/can_success_create_a_board_without_clone_from_other.yml +98 -0
  80. data/spec/cassettes/can_success_create_a_card_when_due_is_datetime.yml +98 -0
  81. data/spec/cassettes/can_success_create_a_card_when_due_is_time.yml +98 -0
  82. data/spec/cassettes/can_success_create_a_checklist.yml +102 -0
  83. data/spec/cassettes/can_success_create_a_custom_field.yml +102 -0
  84. data/spec/cassettes/can_success_create_a_custom_field_option.yml +102 -0
  85. data/spec/cassettes/can_success_create_a_label.yml +102 -0
  86. data/spec/cassettes/can_success_create_a_list.yml +102 -0
  87. data/spec/cassettes/can_success_create_a_list_with_full_parameters.yml +102 -0
  88. data/spec/cassettes/can_success_create_a_organization.yml +104 -0
  89. data/spec/cassettes/can_success_create_a_webhook.yml +102 -0
  90. data/spec/cassettes/can_success_delete_a_custom_field_option.yml +389 -0
  91. data/spec/cassettes/can_success_delete_checklist.yml +284 -0
  92. data/spec/cassettes/can_success_get_card_of_board_by_card_id.yml +188 -0
  93. data/spec/cassettes/can_success_remove_member_from_board.yml +186 -0
  94. data/spec/cassettes/can_success_return_all_boards_of_current_user.yml +195 -0
  95. data/spec/cassettes/can_success_upate_a_board.yml +191 -0
  96. data/spec/cassettes/can_success_upate_a_list.yml +296 -0
  97. data/spec/cassettes/can_success_update_bong_a_board.yml +39 -39
  98. data/spec/cassettes/can_success_update_bong_a_board_with_specific_fields.yml +284 -0
  99. data/spec/cassettes/can_success_update_bong_a_checklist_with_specific_fields.yml +296 -0
  100. data/spec/cassettes/can_success_update_bong_a_custom_field.yml +200 -0
  101. data/spec/cassettes/can_success_update_bong_a_label.yml +200 -0
  102. data/spec/cassettes/can_success_update_bong_a_list.yml +199 -0
  103. data/spec/cassettes/can_success_update_bong_a_list_with_specific_fields.yml +296 -0
  104. data/spec/cassettes/can_success_update_bong_a_organization.yml +203 -0
  105. data/spec/cassettes/can_success_update_bong_a_webhook.yml +296 -0
  106. data/spec/cassettes/checklist_can_add_an_item.yml +296 -0
  107. data/spec/cassettes/checklist_can_update_the_item_state.yml +296 -0
  108. data/spec/cassettes/checklist_find_with_id_and_get_all_fields.yml +100 -0
  109. data/spec/cassettes/comment_delete.yml +331 -0
  110. data/spec/cassettes/comment_find_with_id.yml +116 -0
  111. data/spec/cassettes/custom_field_find_with_id_and_get_all_fields.yml +100 -0
  112. data/spec/cassettes/custom_field_find_with_id_and_get_specific_fields.yml +100 -0
  113. data/spec/cassettes/custom_field_item_save_1.yml +1 -1
  114. data/spec/cassettes/custom_field_item_save_2.yml +1 -1
  115. data/spec/cassettes/custom_field_option_find_with_id.yml +100 -0
  116. data/spec/cassettes/get_board_of_list.yml +197 -0
  117. data/spec/cassettes/get_boards_of_member.yml +207 -0
  118. data/spec/cassettes/label_delete.yml +285 -0
  119. data/spec/cassettes/label_find_with_id.yml +100 -0
  120. data/spec/cassettes/list_find_with_id_and_get_all_fields.yml +100 -0
  121. data/spec/cassettes/list_find_with_id_and_get_specific_fields.yml +100 -0
  122. data/spec/cassettes/member_find_with_id_and_get_all_fields.yml +101 -0
  123. data/spec/cassettes/member_find_with_id_and_get_specific_fields.yml +100 -0
  124. data/spec/cassettes/notification_find_with_id.yml +103 -0
  125. data/spec/cassettes/organization_find_with_id_and_get_all_fields.yml +102 -0
  126. data/spec/cassettes/organization_find_with_id_and_get_specific_fields.yml +100 -0
  127. data/spec/cassettes/token_find_with_token_string.yml +100 -0
  128. data/spec/cassettes/webhook_delete.yml +286 -0
  129. data/spec/cassettes/webhook_find_with_id.yml +100 -0
  130. data/spec/checklist_spec.rb +27 -43
  131. data/spec/client_spec.rb +57 -3
  132. data/spec/configuration_spec.rb +13 -0
  133. data/spec/custom_field_item_spec.rb +2 -2
  134. data/spec/custom_field_option_spec.rb +2 -2
  135. data/spec/custom_field_spec.rb +25 -13
  136. data/spec/integration/action/find_spec.rb +23 -0
  137. data/spec/integration/basic_data/many_spec.rb +4 -0
  138. data/spec/integration/basic_data/schema_spec.rb +156 -0
  139. data/spec/integration/board/add_member_spec.rb +20 -0
  140. data/spec/integration/board/all_spec.rb +20 -0
  141. data/spec/integration/board/associations/actions_spec.rb +18 -0
  142. data/spec/integration/board/associations/cards_spec.rb +18 -0
  143. data/spec/integration/board/associations/checklists_spec.rb +18 -0
  144. data/spec/integration/board/associations/custom_fields_spec.rb +18 -0
  145. data/spec/integration/board/associations/label_names_spec.rb +17 -0
  146. data/spec/integration/board/associations/labels_spec.rb +18 -0
  147. data/spec/integration/board/associations/lists_spec.rb +18 -0
  148. data/spec/integration/board/associations/members_spec.rb +18 -0
  149. data/spec/integration/board/associations/organization_spec.rb +19 -0
  150. data/spec/integration/board/associations/plugin_data_spec.rb +18 -0
  151. data/spec/integration/board/create_spec.rb +95 -0
  152. data/spec/integration/board/find_card_spec.rb +18 -0
  153. data/spec/integration/board/find_spec.rb +42 -0
  154. data/spec/integration/board/remove_member_spec.rb +21 -0
  155. data/spec/integration/board/save_spec.rb +37 -0
  156. data/spec/integration/board/update!_spec.rb +33 -2
  157. data/spec/integration/card/associations/plugin_data_spec.rb +1 -1
  158. data/spec/integration/card/create_spec.rb +36 -2
  159. data/spec/integration/card/delete_spec.rb +2 -2
  160. data/spec/integration/card/find_spec.rb +1 -1
  161. data/spec/integration/card/save_spec.rb +2 -2
  162. data/spec/integration/checklist/add_item_spec.rb +20 -0
  163. data/spec/integration/checklist/create_spec.rb +23 -0
  164. data/spec/integration/checklist/delete_spec.rb +17 -0
  165. data/spec/integration/checklist/find_spec.rb +22 -0
  166. data/spec/integration/checklist/update!_spec.rb +21 -0
  167. data/spec/integration/checklist/update_item_state_spec.rb +20 -0
  168. data/spec/integration/comment/association/board_spec.rb +17 -0
  169. data/spec/integration/comment/association/card_spec.rb +17 -0
  170. data/spec/integration/comment/association/list_spec.rb +17 -0
  171. data/spec/integration/comment/delete_spec.rb +20 -0
  172. data/spec/integration/comment/find_spec.rb +17 -0
  173. data/spec/integration/custom_field/association/board_spec.rb +18 -0
  174. data/spec/integration/custom_field/association/custom_field_options_spec.rb +18 -0
  175. data/spec/integration/custom_field/create_spec.rb +29 -0
  176. data/spec/integration/custom_field/find_spec.rb +41 -0
  177. data/spec/integration/custom_field/update!_spec.rb +25 -0
  178. data/spec/integration/custom_field_option/create_spec.rb +23 -0
  179. data/spec/integration/custom_field_option/delete_spec.rb +19 -0
  180. data/spec/integration/custom_field_option/find_spec.rb +21 -0
  181. data/spec/integration/integration_test.rb +3 -3
  182. data/spec/integration/label/association/board_spec.rb +18 -0
  183. data/spec/integration/label/create_spec.rb +23 -0
  184. data/spec/integration/label/delete_spec.rb +21 -0
  185. data/spec/integration/label/find_spec.rb +20 -0
  186. data/spec/integration/label/update!_spec.rb +25 -0
  187. data/spec/integration/list/archive_all_cards_spec.rb +20 -0
  188. data/spec/integration/list/associations/actions_spec.rb +18 -0
  189. data/spec/integration/list/associations/board_spec.rb +18 -0
  190. data/spec/integration/list/associations/cards_spec.rb +18 -0
  191. data/spec/integration/list/create_spec.rb +44 -0
  192. data/spec/integration/list/find_spec.rb +37 -0
  193. data/spec/integration/list/move_all_cards_spec.rb +31 -0
  194. data/spec/integration/list/save_spec.rb +40 -0
  195. data/spec/integration/list/update!_spec.rb +43 -0
  196. data/spec/integration/member/associations/actions_spec.rb +17 -0
  197. data/spec/integration/member/associations/boards_spec.rb +18 -0
  198. data/spec/integration/member/associations/cards_spec.rb +18 -0
  199. data/spec/integration/member/associations/notifications_spec.rb +18 -0
  200. data/spec/integration/member/associations/organizations_spec.rb +18 -0
  201. data/spec/integration/member/find_spec.rb +39 -0
  202. data/spec/integration/member/update!_spec.rb +18 -0
  203. data/spec/integration/notification/find_spec.rb +27 -0
  204. data/spec/integration/organization/associations/actions_spec.rb +18 -0
  205. data/spec/integration/organization/associations/boards_spec.rb +18 -0
  206. data/spec/integration/organization/associations/members_spec.rb +18 -0
  207. data/spec/integration/organization/create_spec.rb +23 -0
  208. data/spec/integration/organization/find_spec.rb +37 -0
  209. data/spec/integration/organization/update!_spec.rb +28 -0
  210. data/spec/integration/token/find_spec.rb +24 -0
  211. data/spec/integration/webhook/create_spec.rb +27 -0
  212. data/spec/integration/webhook/delete_spec.rb +21 -0
  213. data/spec/integration/webhook/find_spec.rb +22 -0
  214. data/spec/integration/webhook/update!_spec.rb +24 -0
  215. data/spec/item_spec.rb +2 -2
  216. data/spec/label_spec.rb +31 -33
  217. data/spec/list_spec.rb +32 -14
  218. data/spec/notification_spec.rb +3 -3
  219. data/spec/organization_spec.rb +6 -5
  220. data/spec/spec_helper.rb +31 -14
  221. data/spec/token_spec.rb +10 -11
  222. data/spec/unit/trello/basic_data_spec.rb +67 -8
  223. data/spec/unit/trello/board/new_spec.rb +370 -0
  224. data/spec/unit/trello/board/save_spec.rb +49 -0
  225. data/spec/unit/trello/board/update_fields_spec.rb +129 -0
  226. data/spec/unit/trello/board/update_spec.rb +197 -0
  227. data/spec/unit/trello/member/new_spec.rb +62 -0
  228. data/spec/unit/trello/member/update_fields_spec.rb +80 -0
  229. data/spec/unit/trello/schema/attribute/base_spec.rb +349 -0
  230. data/spec/unit/trello/schema/attribute/board_pref_spec.rb +208 -0
  231. data/spec/unit/trello/schema/attribute/default_spec.rb +236 -0
  232. data/spec/unit/trello/schema/attribute_builder_spec.rb +55 -0
  233. data/spec/unit/trello/schema/attribute_registration_spec.rb +59 -0
  234. data/spec/unit/trello/schema/serializer/default_spec.rb +19 -0
  235. data/spec/unit/trello/schema/serializer/time_spec.rb +39 -0
  236. data/spec/unit/trello/schema_spec.rb +25 -0
  237. data/spec/webhook_spec.rb +23 -7
  238. metadata +444 -102
  239. data/lib/trello/register_attributes.rb +0 -54
  240. data/spec/integration/basic_data/register_attributes_spec.rb +0 -75
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe 'Trello::Organization#members' do
4
+ include IntegrationHelpers
5
+
6
+ before { setup_trello }
7
+
8
+ it 'can get members' do
9
+ VCR.use_cassette('can_get_members_of_organization') do
10
+ organization = Trello::Organization.find('5e93ba154634282b6df23bcc')
11
+ members = organization.members
12
+
13
+ expect(members).to be_a(Array)
14
+ expect(members[0]).to be_a(Trello::Member)
15
+ end
16
+ end
17
+
18
+ end
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe 'Trello::Organization.create' do
4
+ include IntegrationHelpers
5
+
6
+ before { setup_trello }
7
+
8
+ it 'can success create the organization' do
9
+ VCR.use_cassette('can_success_create_a_organization') do
10
+ organization = Trello::Organization.create(
11
+ name: 'integrationtest98',
12
+ display_name: 'Integration Test 98',
13
+ description: 'This is a team for doing integration tests.'
14
+ )
15
+ expect(organization).to be_a(Trello::Organization)
16
+
17
+ expect(organization.id).not_to be_nil
18
+ expect(organization.name).to eq('integrationtest98')
19
+ expect(organization.display_name).to eq('Integration Test 98')
20
+ expect(organization.description).to eq('This is a team for doing integration tests.')
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,37 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe 'Trello::Organization#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('organization_find_with_id_and_get_all_fields') do
10
+ organization = Trello::Organization.find('5e93ba154634282b6df23bcc')
11
+ expect(organization).to be_a(Trello::Organization)
12
+
13
+ expect(organization.id).not_to be_nil
14
+ expect(organization.name).not_to be_nil
15
+ expect(organization.display_name).not_to be_nil
16
+ expect(organization.team_type).not_to be_nil
17
+ expect(organization.description).not_to be_nil
18
+ expect(organization.url).not_to be_nil
19
+ end
20
+ end
21
+
22
+ it 'find with id and get specific fields' do
23
+ VCR.use_cassette('organization_find_with_id_and_get_specific_fields') do
24
+ organization = Trello::Organization.find('5e93ba154634282b6df23bcc', fields: 'name,url')
25
+ expect(organization).to be_a(Trello::Organization)
26
+
27
+ expect(organization.id).not_to be_nil
28
+ expect(organization.name).not_to be_nil
29
+ expect(organization.url).not_to be_nil
30
+
31
+ expect(organization.display_name).to be_nil
32
+ expect(organization.team_type).to be_nil
33
+ expect(organization.description).to be_nil
34
+ end
35
+ end
36
+
37
+ end
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe 'Trell::Organization.update!' do
4
+ include IntegrationHelpers
5
+
6
+ before { setup_trello }
7
+
8
+ it 'can update! a organization' do
9
+ VCR.use_cassette('can_success_update_bong_a_organization') do
10
+ organization = Trello::Organization.find('5f60d9f72c17b23dbb2d9d79')
11
+
12
+ expect(organization.name).to eq('integrationtest98')
13
+ expect(organization.display_name).to eq('Integration Test 98')
14
+ expect(organization.description).to eq('This is a team for doing integration tests.')
15
+
16
+ organization.name = 'integrationtest99'
17
+ organization.display_name = 'Integration Test 99'
18
+ organization.description = 'This is a team for doing integration tests for 99'
19
+
20
+ organization.update!
21
+
22
+ expect(organization.name).to eq('integrationtest99')
23
+ expect(organization.display_name).to eq('Integration Test 99')
24
+ expect(organization.description).to eq('This is a team for doing integration tests for 99')
25
+ end
26
+ end
27
+
28
+ end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe 'Trello::Token#find' do
4
+ include IntegrationHelpers
5
+
6
+ before { setup_trello }
7
+
8
+ it 'find with token string' do
9
+ VCR.use_cassette('token_find_with_token_string') do
10
+ token = Trello::Token.find('MEMBER_TOKEN')
11
+ expect(token).to be_a(Trello::Token)
12
+
13
+ expect(token.id).not_to be_nil
14
+ expect(token.identifier).not_to be_nil
15
+ expect(token.member_id).not_to be_nil
16
+ expect(token.created_at).not_to be_nil
17
+ # expect(token.expires_at).not_to be_nil
18
+ expect(token.permissions).not_to be_nil
19
+ expect(token.webhooks).not_to be_nil
20
+ expect(token.webhooks[0]).to be_a(Trello::Webhook)
21
+ end
22
+ end
23
+
24
+ end
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe 'Trello::Webhook.create' do
4
+ include IntegrationHelpers
5
+
6
+ before { setup_trello }
7
+
8
+ it 'can success create the custom_field' do
9
+ VCR.use_cassette('can_success_create_a_webhook') do
10
+ webhook = Trello::Webhook.create(
11
+ description: 'test',
12
+ model_id: '5fa759f1564c6e5bb803c61e',
13
+ callback_url: 'https://example.com/webhook/trello_callbacks',
14
+ active: true
15
+ )
16
+ expect(webhook).to be_a(Trello::Webhook)
17
+
18
+ expect(webhook.id).not_to be_nil
19
+ expect(webhook.description).to eq('test')
20
+ expect(webhook.model_id).to eq('5fa759f1564c6e5bb803c61e')
21
+ expect(webhook.callback_url).to eq('https://example.com/webhook/trello_callbacks')
22
+ expect(webhook.active).to eq(true)
23
+ expect(webhook.consecutive_failures).to eq(0)
24
+ expect(webhook.first_consecutive_fail_date).to be_nil
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe 'Trello::Webhook#delete' do
4
+ include IntegrationHelpers
5
+
6
+ before { setup_trello }
7
+
8
+ it 'find with id' do
9
+ VCR.use_cassette('webhook_delete') do
10
+ webhook = Trello::Webhook.find('5fa8a1e0009b2a6a669e6efa')
11
+ expect(webhook).to be_a(Trello::Webhook)
12
+
13
+ webhook.delete
14
+
15
+ expect {
16
+ Trello::Webhook.find('5fa8a1e0009b2a6a669e6efa')
17
+ }.to raise_error Trello::Error, 'The requested resource was not found.'
18
+ end
19
+ end
20
+
21
+ end
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe 'Trello::Webhook#find' do
4
+ include IntegrationHelpers
5
+
6
+ before { setup_trello }
7
+
8
+ it 'find with id' do
9
+ VCR.use_cassette('webhook_find_with_id') do
10
+ webhook = Trello::Webhook.find('5fa8a1e0009b2a6a669e6efa')
11
+ expect(webhook).to be_a(Trello::Webhook)
12
+
13
+ expect(webhook.id).not_to be_nil
14
+ expect(webhook.description).not_to be_nil
15
+ expect(webhook.model_id).not_to be_nil
16
+ expect(webhook.callback_url).not_to be_nil
17
+ expect(webhook.active).not_to be_nil
18
+ expect(webhook.consecutive_failures).not_to be_nil
19
+ end
20
+ end
21
+
22
+ end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe 'Trell::Webhook.update!' do
4
+ include IntegrationHelpers
5
+
6
+ before { setup_trello }
7
+
8
+ it 'can update! a webhook' do
9
+ VCR.use_cassette('can_success_update_bong_a_webhook') do
10
+ webhook = Trello::Webhook.find('5fa8a1e0009b2a6a669e6efa')
11
+
12
+ expect(webhook.description).to eq('test')
13
+
14
+ webhook.description = 'Test - Changed'
15
+
16
+ webhook.update!
17
+
18
+ expect(webhook.description).to eq('Test - Changed')
19
+ webhook = Trello::Webhook.find('5fa8a1e0009b2a6a669e6efa')
20
+ expect(webhook.description).to eq('Test - Changed')
21
+ end
22
+ end
23
+
24
+ end
data/spec/item_spec.rb CHANGED
@@ -31,7 +31,7 @@ module Trello
31
31
  end
32
32
 
33
33
  it 'knows its pos' do
34
- expect(item.pos).to eq details['pos']
34
+ expect(item.position).to eq details['pos']
35
35
  end
36
36
 
37
37
  describe '#complete?' do
@@ -59,7 +59,7 @@ module Trello
59
59
  'name' => 'name',
60
60
  'type' => 'type',
61
61
  'state' => 'state',
62
- 'pos' => 'pos'
62
+ 'pos' => 'position'
63
63
  }
64
64
 
65
65
  item = Item.new(expected)
data/spec/label_spec.rb CHANGED
@@ -20,7 +20,7 @@ module Trello
20
20
  it "delegates to Trello.client#find" do
21
21
  expect(client)
22
22
  .to receive(:find)
23
- .with(:label, 'abcdef123456789123456789', {})
23
+ .with('label', 'abcdef123456789123456789', {})
24
24
 
25
25
  Label.find('abcdef123456789123456789')
26
26
  end
@@ -43,7 +43,6 @@ module Trello
43
43
  expect(label.color).to eq details['color']
44
44
  expect(label.name).to eq details['name']
45
45
  expect(label.id).to eq details['id']
46
- expect(label.uses).to eq details['uses']
47
46
  expect(label.board_id).to eq details['idBoard']
48
47
  end
49
48
 
@@ -71,14 +70,16 @@ module Trello
71
70
 
72
71
  result = JSON.generate(cards_details.first.merge(payload.merge(idBoard: boards_details.first['id'])))
73
72
 
74
- expected_payload = {name: "Test Label", color: nil, idBoard: "abcdef123456789123456789" }
73
+ expected_payload = {'name' => 'Test Label', 'color' => 'yellow', 'idBoard' => 'abcdef123456789123456789' }
75
74
 
76
- expect(client)
75
+ expect(Label.client)
77
76
  .to receive(:post)
78
- .with("/labels", expected_payload)
77
+ .with('/labels', expected_payload)
79
78
  .and_return result
80
79
 
81
- label = Label.create(label_details.first.merge(payload.merge(board_id: boards_details.first['id'])))
80
+ params = label_details.first.merge(payload.merge(board_id: boards_details.first['id']))
81
+ params.delete('id')
82
+ label = Label.create params
82
83
 
83
84
  expect(label).to be_a Label
84
85
  end
@@ -89,13 +90,19 @@ module Trello
89
90
  expected_new_name = "xxx"
90
91
 
91
92
  payload = {
92
- name: expected_new_name,
93
+ 'name' => expected_new_name,
93
94
  }
94
95
 
95
96
  expect(client)
96
97
  .to receive(:put)
97
98
  .once
98
99
  .with("/labels/abcdef123456789123456789", payload)
100
+ .and_return({
101
+ "id" => "abcdef123456789123456789",
102
+ "idBoard" => "5e70f5bed3f34a49e2f11409",
103
+ "name" => "xxx",
104
+ "color" => "purple"
105
+ }.to_json)
99
106
 
100
107
  label.name = expected_new_name
101
108
  label.save
@@ -105,13 +112,19 @@ module Trello
105
112
  expected_new_color = "purple"
106
113
 
107
114
  payload = {
108
- color: expected_new_color,
115
+ 'color' => expected_new_color
109
116
  }
110
117
 
111
118
  expect(client)
112
119
  .to receive(:put)
113
120
  .once
114
121
  .with("/labels/abcdef123456789123456789", payload)
122
+ .and_return({
123
+ "id" => "abcdef123456789123456789",
124
+ "idBoard" => "5e70f5bed3f34a49e2f11409",
125
+ "name" => "",
126
+ "color" => "purple"
127
+ }.to_json)
115
128
 
116
129
  label.color = expected_new_color
117
130
  label.save
@@ -121,26 +134,19 @@ module Trello
121
134
  %w(green yellow orange red purple blue sky lime pink black).each do |color|
122
135
  allow(client)
123
136
  .to receive(:put)
124
- .with("/labels/abcdef123456789123456789", {color: color})
125
- .and_return "not important"
137
+ .with("/labels/abcdef123456789123456789", {'color' => color})
138
+ .and_return({
139
+ "id" => "abcdef123456789123456789",
140
+ "idBoard" => "5e70f5bed3f34a49e2f11409",
141
+ "name" => "",
142
+ "color" => color
143
+ }.to_json)
126
144
 
127
145
  label.color = color
128
146
  label.save
129
147
  expect(label.errors).to be_empty
130
148
  end
131
149
  end
132
-
133
- it "throws an error when trying to update a label with an unknown colour" do
134
- allow(client)
135
- .to receive(:put)
136
- .with("/labels/abcdef123456789123456789", {})
137
- .and_return "not important"
138
-
139
- label.color = 'mauve'
140
- label.save
141
-
142
- expect(label.errors.full_messages.to_sentence).to eq("Label color 'mauve' does not exist")
143
- end
144
150
  end
145
151
 
146
152
  context "deleting" do
@@ -162,10 +168,6 @@ module Trello
162
168
  expect(label.name).to_not be_nil
163
169
  end
164
170
 
165
- it "gets its usage" do
166
- expect(label.uses).to_not be_nil
167
- end
168
-
169
171
  it "gets its color" do
170
172
  expect(label.color).to_not be_nil
171
173
  end
@@ -188,8 +190,7 @@ module Trello
188
190
  'id' => 'id',
189
191
  'name' => 'name',
190
192
  'color' => 'color',
191
- 'idBoard' => 'board_id',
192
- 'uses' => 'uses'
193
+ 'idBoard' => 'board_id'
193
194
  }
194
195
 
195
196
  label = Label.new(expected)
@@ -207,8 +208,7 @@ module Trello
207
208
  'id' => 'id',
208
209
  'name' => 'name',
209
210
  'color' => 'color',
210
- 'idBoard' => 'board_id',
211
- 'uses' => 'uses'
211
+ 'idBoard' => 'board_id'
212
212
  }}
213
213
  let(:label) { Label.new(label_detail) }
214
214
 
@@ -222,7 +222,6 @@ module Trello
222
222
  expect(label.name).to eq label_detail['name']
223
223
  expect(label.color).to eq label_detail['color']
224
224
  expect(label.board_id).to eq label_detail['idBoard']
225
- expect(label.uses).to eq label_detail['uses']
226
225
  end
227
226
  end
228
227
 
@@ -252,7 +251,7 @@ module Trello
252
251
  expect(label.name).to eq(label_detail['name'])
253
252
  end
254
253
 
255
- it "label hasn't been mark as changed", pending: true do
254
+ it "label hasn't been mark as changed" do
256
255
  label.update_fields(fields)
257
256
 
258
257
  expect(label.changed?).to be_falsy
@@ -269,7 +268,6 @@ module Trello
269
268
  expect(label.name).to eq label_detail['name']
270
269
  expect(label.color).to eq label_detail['color']
271
270
  expect(label.board_id).to eq label_detail['idBoard']
272
- expect(label.uses).to eq label_detail['uses']
273
271
  end
274
272
 
275
273
  it "label hasn't been mark as changed" do
data/spec/list_spec.rb CHANGED
@@ -84,11 +84,10 @@ module Trello
84
84
  result = JSON.generate(payload)
85
85
 
86
86
  expected_payload = {
87
- name: 'Test List',
88
- closed: false,
89
- idBoard: 'abcdef123456789123456789',
90
- pos: 42,
91
- idListSource: 'abcdef123456789'
87
+ 'name' => 'Test List',
88
+ 'pos' => 42,
89
+ 'idBoard' => 'abcdef123456789123456789',
90
+ 'idListSource' => 'abcdef123456789'
92
91
  }
93
92
 
94
93
  expect(client)
@@ -105,15 +104,14 @@ module Trello
105
104
  expected_new_name = 'xxx'
106
105
 
107
106
  payload = {
108
- name: expected_new_name,
109
- closed: false,
110
- pos: list.pos
107
+ 'name' => expected_new_name
111
108
  }
112
109
 
113
110
  expect(client)
114
111
  .to receive(:put)
115
112
  .once
116
113
  .with('/lists/abcdef123456789123456789', payload)
114
+ .and_return({}.to_s)
117
115
 
118
116
  list.name = expected_new_name
119
117
  list.save
@@ -122,15 +120,14 @@ module Trello
122
120
  it 'updates position' do
123
121
  new_position = 42
124
122
  payload = {
125
- name: list.name,
126
- closed: list.closed,
127
- pos: new_position
123
+ 'pos' => new_position
128
124
  }
129
125
 
130
126
  expect(client)
131
127
  .to receive(:put)
132
128
  .once
133
129
  .with('/lists/abcdef123456789123456789', payload)
130
+ .and_return({}.to_s)
134
131
 
135
132
  list.pos = new_position
136
133
  list.save
@@ -220,10 +217,9 @@ module Trello
220
217
  .to receive(:put)
221
218
  .once
222
219
  .with('/lists/abcdef123456789123456789', {
223
- name: list.name,
224
- closed: true,
225
- pos: list.pos
220
+ 'closed' => true
226
221
  })
222
+ .and_return({}.to_s)
227
223
 
228
224
  list.close!
229
225
  end
@@ -249,5 +245,27 @@ module Trello
249
245
  end
250
246
  end
251
247
  end
248
+
249
+ describe '#move_to_board' do
250
+ let(:board) { Trello::Board.new(id: 'someid') }
251
+ context 'given the destination board parameter is a Trello::Board instance' do
252
+ it 'moves to the destination board' do
253
+ expect(client)
254
+ .to receive(:put)
255
+ .with("/lists/#{list.id}/idBoard", value: 'someid')
256
+
257
+ list.move_to_board(board)
258
+ end
259
+ end
260
+ context 'given the destination board parameter is an id string' do
261
+ it 'moves to the destination board' do
262
+ expect(client)
263
+ .to receive(:put)
264
+ .with("/lists/#{list.id}/idBoard", value: 'someid')
265
+
266
+ list.move_to_board(board.id)
267
+ end
268
+ end
269
+ end
252
270
  end
253
271
  end
@@ -82,7 +82,7 @@ module Trello
82
82
  .with("/members/#{user_details['id']}", {})
83
83
  .and_return user_payload
84
84
 
85
- expect(notification.member_creator.id).to eq user_details['id']
85
+ expect(notification.creator.id).to eq user_details['id']
86
86
  end
87
87
  end
88
88
 
@@ -115,7 +115,7 @@ module Trello
115
115
  end
116
116
 
117
117
  it "gets the member creator id" do
118
- expect(notification.member_creator_id).to eq notification_details['idMemberCreator']
118
+ expect(notification.creator_id).to eq notification_details['idMemberCreator']
119
119
  end
120
120
  end
121
121
 
@@ -127,7 +127,7 @@ module Trello
127
127
  'type' => 'type',
128
128
  'date' => 'date',
129
129
  'data' => 'data',
130
- 'idMemberCreator' => 'member_creator_id'
130
+ 'idMemberCreator' => 'creator_id'
131
131
  }
132
132
 
133
133
  notification = Notification.new(expected)
@@ -47,14 +47,15 @@ module Trello
47
47
  'id' => 'id',
48
48
  'name' => 'name',
49
49
  'displayName' => 'display_name',
50
+ 'descData' => 'desc_data',
51
+ 'website' => 'website',
52
+ 'teamType' => 'team_type',
50
53
  'desc' => 'description',
51
54
  'url' => 'url',
52
- 'invited' => 'invited',
53
- 'website' => 'website',
54
55
  'logoHash' => 'logo_hash',
55
- 'billableMemberCount' => 'billable_member_count',
56
- 'activeBillableMemberCount' => 'active_billable_member_count',
57
- 'memberships' => 'memberships'
56
+ 'logoUrl' => 'logo_url',
57
+ 'products' => 'products',
58
+ 'powerUps' => 'power_ups'
58
59
  }
59
60
 
60
61
  organization = Organization.new(expected)
data/spec/spec_helper.rb CHANGED
@@ -8,6 +8,7 @@ require 'vcr'
8
8
  require 'pry-byebug' if RUBY_ENGINE != 'jruby'
9
9
 
10
10
  VCR.configure do |config|
11
+ config.default_cassette_options = { match_requests_on: %i[uri method body] }
11
12
  config.cassette_library_dir = 'spec/cassettes'
12
13
  config.hook_into :webmock
13
14
 
@@ -58,6 +59,14 @@ RSpec.configure do |rspec|
58
59
  rspec.color = true
59
60
  end
60
61
 
62
+ Trello::HTTP_CLIENTS.each do |key, _client|
63
+ RSpec.shared_context "using #{key}" do
64
+ before do
65
+ Trello.http_client = key
66
+ end
67
+ end
68
+ end
69
+
61
70
  RSpec::Expectations.configuration.on_potential_false_positives = :nothing
62
71
 
63
72
  module IntegrationHelpers
@@ -65,10 +74,31 @@ module IntegrationHelpers
65
74
  Trello.configure do |config|
66
75
  config.developer_public_key = ENV['TRELLO_DEVELOPER_PUBLIC_KEY'] || 'developerpublickey'
67
76
  config.member_token = ENV['TRELLO_MEMBER_TOKEN'] || 'membertoken'
77
+ config.http_client = ENV['HTTP_CLIENT_GEM'] || 'rest-client'
68
78
  end
69
79
  end
70
80
  end
71
81
 
82
+ RSpec::Matchers.define :match_hash_with_indifferent_access do |expected|
83
+ match do |actual|
84
+ actual.with_indifferent_access == expected.with_indifferent_access
85
+ end
86
+
87
+ failure_message do |actual|
88
+ <<~EOF
89
+ expected: #{expected}
90
+ got: #{actual}
91
+ EOF
92
+ end
93
+
94
+ failure_message_when_negated do |actual|
95
+ <<~EOF
96
+ expected: value != #{expected}
97
+ got: #{actual}
98
+ EOF
99
+ end
100
+ end
101
+
72
102
  module Helpers
73
103
  def user_details
74
104
  {
@@ -344,20 +374,7 @@ module Helpers
344
374
  {
345
375
  'id' => '4ee7e59ae582acdec8000291',
346
376
  'name' => 'publicorg',
347
- 'desc' => 'This is a test organization',
348
- 'members' => [{
349
- 'id' => '4ee7df3ce582acdec80000b2',
350
- 'username' => 'alicetester',
351
- 'fullName' => 'Alice Tester'
352
- }, {
353
- 'id' => '4ee7df74e582acdec80000b6',
354
- 'username' => 'davidtester',
355
- 'fullName' => 'David Tester'
356
- }, {
357
- 'id' => '4ee7e2e1e582acdec8000112',
358
- 'username' => 'edtester',
359
- 'fullName' => 'Ed Tester'
360
- }]
377
+ 'desc' => 'This is a test organization'
361
378
  }
362
379
  end
363
380
 
data/spec/token_spec.rb CHANGED
@@ -69,20 +69,19 @@ module Trello
69
69
 
70
70
  describe "#update_fields" do
71
71
  it "does not set any fields when the fields argument is empty" do
72
- expected = {
73
- 'id' => 'id',
74
- 'idMember' => 'member_id',
75
- 'permissions' => 'permissions',
76
- 'webhooks' => 'webhooks'
77
- }
78
-
79
- token = Token.new(expected)
72
+ token = Token.new({
73
+ 'id' => 'aaa',
74
+ 'idMember' => 'ccc',
75
+ 'permissions' => {},
76
+ 'webhooks' => []
77
+ })
80
78
 
81
79
  token.update_fields({})
82
80
 
83
- expected.each do |key, value|
84
- expect(token.send(value)).to eq expected[key]
85
- end
81
+ expect(token.id).to eq('aaa')
82
+ expect(token.member_id).to eq('ccc')
83
+ expect(token.permissions).to eq({})
84
+ expect(token.webhooks).to eq([])
86
85
  end
87
86
  end
88
87
  end