ruby-trello 2.3.1 → 3.0.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 (221) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +13 -2
  3. data/lib/trello.rb +13 -7
  4. data/lib/trello/action.rb +27 -21
  5. data/lib/trello/attachment.rb +40 -27
  6. data/lib/trello/basic_data.rb +104 -9
  7. data/lib/trello/board.rb +88 -102
  8. data/lib/trello/card.rb +34 -235
  9. data/lib/trello/checklist.rb +17 -71
  10. data/lib/trello/comment.rb +32 -22
  11. data/lib/trello/cover_image.rb +20 -0
  12. data/lib/trello/custom_field.rb +31 -84
  13. data/lib/trello/custom_field_item.rb +36 -58
  14. data/lib/trello/custom_field_option.rb +40 -13
  15. data/lib/trello/item.rb +27 -16
  16. data/lib/trello/item_state.rb +7 -15
  17. data/lib/trello/json_utils.rb +1 -1
  18. data/lib/trello/label.rb +14 -101
  19. data/lib/trello/label_name.rb +22 -25
  20. data/lib/trello/list.rb +31 -44
  21. data/lib/trello/member.rb +77 -32
  22. data/lib/trello/notification.rb +27 -20
  23. data/lib/trello/organization.rb +53 -25
  24. data/lib/trello/plugin_datum.rb +11 -16
  25. data/lib/trello/schema.rb +31 -0
  26. data/lib/trello/schema/attribute/base.rb +79 -0
  27. data/lib/trello/schema/attribute/board_pref.rb +45 -0
  28. data/lib/trello/schema/attribute/custom_field_display.rb +45 -0
  29. data/lib/trello/schema/attribute/default.rb +45 -0
  30. data/lib/trello/schema/attribute_builder.rb +42 -0
  31. data/lib/trello/schema/attribute_registration.rb +47 -0
  32. data/lib/trello/schema/serializer/default.rb +17 -0
  33. data/lib/trello/schema/serializer/labels.rb +23 -0
  34. data/lib/trello/schema/serializer/time.rb +25 -0
  35. data/lib/trello/schema/serializer/webhooks.rb +25 -0
  36. data/lib/trello/token.rb +15 -12
  37. data/lib/trello/webhook.rb +18 -71
  38. data/spec/action_spec.rb +1 -2
  39. data/spec/board_spec.rb +43 -103
  40. data/spec/card_spec.rb +51 -50
  41. data/spec/cassettes/action_find_with_id_and_get_all_fields.yml +104 -0
  42. data/spec/cassettes/board_find_with_id_and_get_all_fields.yml +96 -0
  43. data/spec/cassettes/board_find_with_id_and_get_specific_fields.yml +96 -0
  44. data/spec/cassettes/can_add_a_member_to_a_board.yml +191 -0
  45. data/spec/cassettes/can_arvhice_all_cards_of_list.yml +397 -0
  46. data/spec/cassettes/can_get_actions_of_board.yml +188 -0
  47. data/spec/cassettes/can_get_actions_of_list.yml +202 -0
  48. data/spec/cassettes/can_get_actions_of_members.yml +199 -0
  49. data/spec/cassettes/can_get_actions_of_organization.yml +201 -0
  50. data/spec/cassettes/can_get_boards_of_custom_field.yml +198 -0
  51. data/spec/cassettes/can_get_boards_of_label.yml +197 -0
  52. data/spec/cassettes/can_get_boards_of_organization.yml +207 -0
  53. data/spec/cassettes/can_get_cards_of_board.yml +193 -0
  54. data/spec/cassettes/can_get_cards_of_list.yml +201 -0
  55. data/spec/cassettes/can_get_cards_of_member.yml +204 -0
  56. data/spec/cassettes/can_get_checklists_of_board.yml +187 -0
  57. data/spec/cassettes/can_get_custom_field_options_of_custom_field.yml +197 -0
  58. data/spec/cassettes/can_get_custom_fields_of_board.yml +187 -0
  59. data/spec/cassettes/can_get_label_names_of_board.yml +187 -0
  60. data/spec/cassettes/can_get_labels_of_board.yml +187 -0
  61. data/spec/cassettes/can_get_lists_of_board.yml +187 -0
  62. data/spec/cassettes/can_get_members_of_board.yml +188 -0
  63. data/spec/cassettes/can_get_members_of_organization.yml +200 -0
  64. data/spec/cassettes/can_get_notifications_of_member.yml +199 -0
  65. data/spec/cassettes/can_get_organization_of_board.yml +189 -0
  66. data/spec/cassettes/can_get_organizations_of_member.yml +203 -0
  67. data/spec/cassettes/can_get_plugin_data_of_board.yml +187 -0
  68. data/spec/cassettes/can_move_all_cards_to_another_list.yml +886 -0
  69. data/spec/cassettes/can_success_create_a_board.yml +98 -0
  70. data/spec/cassettes/can_success_create_a_board_with_full_parameters.yml +97 -0
  71. data/spec/cassettes/can_success_create_a_board_without_clone_from_other.yml +98 -0
  72. data/spec/cassettes/can_success_create_a_card_when_due_is_datetime.yml +98 -0
  73. data/spec/cassettes/can_success_create_a_card_when_due_is_time.yml +98 -0
  74. data/spec/cassettes/can_success_create_a_checklist.yml +102 -0
  75. data/spec/cassettes/can_success_create_a_custom_field.yml +102 -0
  76. data/spec/cassettes/can_success_create_a_custom_field_option.yml +102 -0
  77. data/spec/cassettes/can_success_create_a_label.yml +102 -0
  78. data/spec/cassettes/can_success_create_a_list.yml +102 -0
  79. data/spec/cassettes/can_success_create_a_list_with_full_parameters.yml +102 -0
  80. data/spec/cassettes/can_success_create_a_organization.yml +104 -0
  81. data/spec/cassettes/can_success_create_a_webhook.yml +102 -0
  82. data/spec/cassettes/can_success_delete_a_custom_field_option.yml +389 -0
  83. data/spec/cassettes/can_success_delete_checklist.yml +284 -0
  84. data/spec/cassettes/can_success_get_card_of_board_by_card_id.yml +188 -0
  85. data/spec/cassettes/can_success_remove_member_from_board.yml +186 -0
  86. data/spec/cassettes/can_success_return_all_boards_of_current_user.yml +195 -0
  87. data/spec/cassettes/can_success_upate_a_board.yml +191 -0
  88. data/spec/cassettes/can_success_upate_a_list.yml +296 -0
  89. data/spec/cassettes/can_success_update_bong_a_board.yml +39 -39
  90. data/spec/cassettes/can_success_update_bong_a_board_with_specific_fields.yml +284 -0
  91. data/spec/cassettes/can_success_update_bong_a_checklist_with_specific_fields.yml +296 -0
  92. data/spec/cassettes/can_success_update_bong_a_custom_field.yml +200 -0
  93. data/spec/cassettes/can_success_update_bong_a_label.yml +200 -0
  94. data/spec/cassettes/can_success_update_bong_a_list.yml +199 -0
  95. data/spec/cassettes/can_success_update_bong_a_list_with_specific_fields.yml +296 -0
  96. data/spec/cassettes/can_success_update_bong_a_organization.yml +203 -0
  97. data/spec/cassettes/can_success_update_bong_a_webhook.yml +296 -0
  98. data/spec/cassettes/checklist_can_add_an_item.yml +296 -0
  99. data/spec/cassettes/checklist_can_update_the_item_state.yml +296 -0
  100. data/spec/cassettes/checklist_find_with_id_and_get_all_fields.yml +100 -0
  101. data/spec/cassettes/custom_field_find_with_id_and_get_all_fields.yml +100 -0
  102. data/spec/cassettes/custom_field_find_with_id_and_get_specific_fields.yml +100 -0
  103. data/spec/cassettes/custom_field_item_save_1.yml +1 -1
  104. data/spec/cassettes/custom_field_item_save_2.yml +1 -1
  105. data/spec/cassettes/custom_field_option_find_with_id.yml +100 -0
  106. data/spec/cassettes/get_board_of_list.yml +197 -0
  107. data/spec/cassettes/get_boards_of_member.yml +207 -0
  108. data/spec/cassettes/label_delete.yml +285 -0
  109. data/spec/cassettes/label_find_with_id.yml +100 -0
  110. data/spec/cassettes/list_find_with_id_and_get_all_fields.yml +100 -0
  111. data/spec/cassettes/list_find_with_id_and_get_specific_fields.yml +100 -0
  112. data/spec/cassettes/member_find_with_id_and_get_all_fields.yml +101 -0
  113. data/spec/cassettes/member_find_with_id_and_get_specific_fields.yml +100 -0
  114. data/spec/cassettes/notification_find_with_id.yml +103 -0
  115. data/spec/cassettes/organization_find_with_id_and_get_all_fields.yml +102 -0
  116. data/spec/cassettes/organization_find_with_id_and_get_specific_fields.yml +100 -0
  117. data/spec/cassettes/token_find_with_token_string.yml +100 -0
  118. data/spec/cassettes/webhook_delete.yml +286 -0
  119. data/spec/cassettes/webhook_find_with_id.yml +100 -0
  120. data/spec/checklist_spec.rb +27 -43
  121. data/spec/custom_field_item_spec.rb +2 -2
  122. data/spec/custom_field_option_spec.rb +2 -2
  123. data/spec/custom_field_spec.rb +25 -13
  124. data/spec/integration/action/find_spec.rb +23 -0
  125. data/spec/integration/basic_data/many_spec.rb +4 -0
  126. data/spec/integration/basic_data/schema_spec.rb +156 -0
  127. data/spec/integration/board/add_member_spec.rb +21 -0
  128. data/spec/integration/board/all_spec.rb +20 -0
  129. data/spec/integration/board/associations/actions_spec.rb +18 -0
  130. data/spec/integration/board/associations/cards_spec.rb +18 -0
  131. data/spec/integration/board/associations/checklists_spec.rb +18 -0
  132. data/spec/integration/board/associations/custom_fields_spec.rb +18 -0
  133. data/spec/integration/board/associations/label_names_spec.rb +17 -0
  134. data/spec/integration/board/associations/labels_spec.rb +18 -0
  135. data/spec/integration/board/associations/lists_spec.rb +18 -0
  136. data/spec/integration/board/associations/members_spec.rb +18 -0
  137. data/spec/integration/board/associations/organization_spec.rb +19 -0
  138. data/spec/integration/board/associations/plugin_data_spec.rb +18 -0
  139. data/spec/integration/board/create_spec.rb +95 -0
  140. data/spec/integration/board/find_card_spec.rb +18 -0
  141. data/spec/integration/board/find_spec.rb +42 -0
  142. data/spec/integration/board/remove_member_spec.rb +21 -0
  143. data/spec/integration/board/save_spec.rb +37 -0
  144. data/spec/integration/board/update!_spec.rb +33 -2
  145. data/spec/integration/card/associations/plugin_data_spec.rb +1 -1
  146. data/spec/integration/card/create_spec.rb +36 -2
  147. data/spec/integration/card/find_spec.rb +1 -1
  148. data/spec/integration/card/save_spec.rb +2 -2
  149. data/spec/integration/checklist/add_item_spec.rb +20 -0
  150. data/spec/integration/checklist/create_spec.rb +23 -0
  151. data/spec/integration/checklist/delete_spec.rb +17 -0
  152. data/spec/integration/checklist/find_spec.rb +22 -0
  153. data/spec/integration/checklist/update!_spec.rb +21 -0
  154. data/spec/integration/checklist/update_item_state_spec.rb +20 -0
  155. data/spec/integration/custom_field/association/board_spec.rb +18 -0
  156. data/spec/integration/custom_field/association/custom_field_options_spec.rb +18 -0
  157. data/spec/integration/custom_field/create_spec.rb +29 -0
  158. data/spec/integration/custom_field/find_spec.rb +41 -0
  159. data/spec/integration/custom_field/update!_spec.rb +25 -0
  160. data/spec/integration/custom_field_option/create_spec.rb +23 -0
  161. data/spec/integration/custom_field_option/delete_spec.rb +19 -0
  162. data/spec/integration/custom_field_option/find_spec.rb +21 -0
  163. data/spec/integration/label/association/board_spec.rb +18 -0
  164. data/spec/integration/label/create_spec.rb +23 -0
  165. data/spec/integration/label/delete_spec.rb +21 -0
  166. data/spec/integration/label/find_spec.rb +20 -0
  167. data/spec/integration/label/update!_spec.rb +25 -0
  168. data/spec/integration/list/archive_all_cards_spec.rb +20 -0
  169. data/spec/integration/list/associations/actions_spec.rb +18 -0
  170. data/spec/integration/list/associations/board_spec.rb +18 -0
  171. data/spec/integration/list/associations/cards_spec.rb +18 -0
  172. data/spec/integration/list/create_spec.rb +44 -0
  173. data/spec/integration/list/find_spec.rb +37 -0
  174. data/spec/integration/list/move_all_cards_spec.rb +31 -0
  175. data/spec/integration/list/save_spec.rb +40 -0
  176. data/spec/integration/list/update!_spec.rb +43 -0
  177. data/spec/integration/member/associations/actions_spec.rb +17 -0
  178. data/spec/integration/member/associations/boards_spec.rb +18 -0
  179. data/spec/integration/member/associations/cards_spec.rb +18 -0
  180. data/spec/integration/member/associations/notifications_spec.rb +18 -0
  181. data/spec/integration/member/associations/organizations_spec.rb +18 -0
  182. data/spec/integration/member/find_spec.rb +39 -0
  183. data/spec/integration/member/update!_spec.rb +18 -0
  184. data/spec/integration/notification/find_spec.rb +27 -0
  185. data/spec/integration/organization/associations/actions_spec.rb +18 -0
  186. data/spec/integration/organization/associations/boards_spec.rb +18 -0
  187. data/spec/integration/organization/associations/members_spec.rb +18 -0
  188. data/spec/integration/organization/create_spec.rb +23 -0
  189. data/spec/integration/organization/find_spec.rb +37 -0
  190. data/spec/integration/organization/update!_spec.rb +28 -0
  191. data/spec/integration/token/find_spec.rb +24 -0
  192. data/spec/integration/webhook/create_spec.rb +27 -0
  193. data/spec/integration/webhook/delete_spec.rb +21 -0
  194. data/spec/integration/webhook/find_spec.rb +22 -0
  195. data/spec/integration/webhook/update!_spec.rb +24 -0
  196. data/spec/item_spec.rb +2 -2
  197. data/spec/label_spec.rb +31 -33
  198. data/spec/list_spec.rb +32 -14
  199. data/spec/notification_spec.rb +3 -3
  200. data/spec/organization_spec.rb +6 -5
  201. data/spec/spec_helper.rb +22 -14
  202. data/spec/token_spec.rb +10 -11
  203. data/spec/unit/trello/basic_data_spec.rb +67 -8
  204. data/spec/unit/trello/board/new_spec.rb +370 -0
  205. data/spec/unit/trello/board/save_spec.rb +49 -0
  206. data/spec/unit/trello/board/update_fields_spec.rb +129 -0
  207. data/spec/unit/trello/board/update_spec.rb +197 -0
  208. data/spec/unit/trello/member/new_spec.rb +62 -0
  209. data/spec/unit/trello/member/update_fields_spec.rb +80 -0
  210. data/spec/unit/trello/schema/attribute/base_spec.rb +349 -0
  211. data/spec/unit/trello/schema/attribute/board_pref_spec.rb +208 -0
  212. data/spec/unit/trello/schema/attribute/default_spec.rb +236 -0
  213. data/spec/unit/trello/schema/attribute_builder_spec.rb +55 -0
  214. data/spec/unit/trello/schema/attribute_registration_spec.rb +59 -0
  215. data/spec/unit/trello/schema/serializer/default_spec.rb +19 -0
  216. data/spec/unit/trello/schema/serializer/time_spec.rb +39 -0
  217. data/spec/unit/trello/schema_spec.rb +25 -0
  218. data/spec/webhook_spec.rb +23 -7
  219. metadata +422 -102
  220. data/lib/trello/register_attributes.rb +0 -54
  221. data/spec/integration/basic_data/register_attributes_spec.rb +0 -75
@@ -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
@@ -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)
@@ -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
 
@@ -69,6 +70,26 @@ module IntegrationHelpers
69
70
  end
70
71
  end
71
72
 
73
+ RSpec::Matchers.define :match_hash_with_indifferent_access do |expected|
74
+ match do |actual|
75
+ actual.with_indifferent_access == expected.with_indifferent_access
76
+ end
77
+
78
+ failure_message do |actual|
79
+ <<~EOF
80
+ expected: #{expected}
81
+ got: #{actual}
82
+ EOF
83
+ end
84
+
85
+ failure_message_when_negated do |actual|
86
+ <<~EOF
87
+ expected: value != #{expected}
88
+ got: #{actual}
89
+ EOF
90
+ end
91
+ end
92
+
72
93
  module Helpers
73
94
  def user_details
74
95
  {
@@ -344,20 +365,7 @@ module Helpers
344
365
  {
345
366
  'id' => '4ee7e59ae582acdec8000291',
346
367
  '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
- }]
368
+ 'desc' => 'This is a test organization'
361
369
  }
362
370
  end
363
371
 
@@ -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
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  RSpec.describe Trello::BasicData do
4
4
 
5
- describe '.register_attributes' do
5
+ describe '.schema' do
6
6
  around do |example|
7
7
  module Trello
8
8
  class FakeCard < BasicData
@@ -14,14 +14,73 @@ RSpec.describe Trello::BasicData do
14
14
  Trello.send(:remove_const, 'FakeCard')
15
15
  end
16
16
 
17
- it 'call execute on RegisterAttributes' do
18
- expect(Trello::RegisterAttributes)
19
- .to receive(:execute)
20
- .with(Trello::FakeCard, [:id, :name, :desc], [:id, :name])
17
+ before { allow(Trello::FakeCard).to receive(:register_attrs) }
18
+
19
+ it 'call instance_eval on a schema instance' do
20
+ expect_any_instance_of(Trello::Schema).to receive(:instance_eval)
21
+
22
+ Trello::FakeCard.class_eval do
23
+ schema do
24
+ 'PlaceHolder'
25
+ end
26
+ end
27
+ end
28
+
29
+ it 'call register_attrs on model' do
30
+ allow_any_instance_of(Trello::Schema).to receive(:instance_eval)
31
+ expect(Trello::FakeCard).to receive(:register_attrs)
21
32
 
22
33
  Trello::FakeCard.class_eval do
23
- register_attributes :id, :name, :desc, readonly: [:id, :name]
34
+ schema do
35
+ 'PlaceHolder'
36
+ end
37
+ end
38
+ end
39
+
40
+ it 'return the @schema if it exist' do
41
+ Trello::FakeCard.class_eval do
42
+ schema do
43
+ 'PlaceHolder'
44
+ end
24
45
  end
46
+
47
+ expect(Trello::Schema).not_to receive(:new)
48
+ expect(Trello::FakeCard.schema).to be_a(Trello::Schema)
49
+ end
50
+ end
51
+
52
+ describe '.register_attrs' do
53
+ around do |example|
54
+ module Trello
55
+ class FakeCard < BasicData
56
+ end
57
+ end
58
+
59
+ example.run
60
+
61
+ Trello.send(:remove_const, 'FakeCard')
62
+ end
63
+
64
+ let(:attribute_1) { double('attribute 1') }
65
+ let(:attribute_2) { double('attribute 2') }
66
+ let(:attribute_3) { double('attribute 3') }
67
+
68
+ let(:schema) { double('Trello::Schema',
69
+ attrs: {
70
+ name: attribute_1,
71
+ desc: attribute_2,
72
+ url: attribute_3
73
+ }
74
+ ) }
75
+
76
+ before { allow(Trello::FakeCard).to receive(:schema).and_return(schema) }
77
+
78
+ it 'will call register on each attributes' do
79
+ expect(attribute_1).to receive(:register).with(Trello::FakeCard)
80
+ expect(attribute_2).to receive(:register).with(Trello::FakeCard)
81
+ expect(attribute_3).to receive(:register).with(Trello::FakeCard)
82
+
83
+ Trello::FakeCard.register_attrs
25
84
  end
26
85
  end
27
86
 
@@ -30,7 +89,7 @@ RSpec.describe Trello::BasicData do
30
89
  let(:association_options) { { test: 'test' } }
31
90
 
32
91
  it 'call build on AssociationBuilder::HasMany' do
33
- expect(AssociationBuilder::HasMany)
92
+ expect(Trello::AssociationBuilder::HasMany)
34
93
  .to receive(:build)
35
94
  .with(Trello::BasicData, association_name, association_options)
36
95
 
@@ -43,7 +102,7 @@ RSpec.describe Trello::BasicData do
43
102
  let(:association_options) { { path: 'test' } }
44
103
 
45
104
  it 'call build on AssociationBuilder::HasOne' do
46
- expect(AssociationBuilder::HasOne)
105
+ expect(Trello::AssociationBuilder::HasOne)
47
106
  .to receive(:build)
48
107
  .with(Trello::BasicData, association_name, association_options)
49
108