ruby-trello 2.0.0 → 2.3.1

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 (142) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +106 -17
  3. data/lib/trello.rb +47 -34
  4. data/lib/trello/action.rb +10 -8
  5. data/lib/trello/association_builder/has_many.rb +17 -0
  6. data/lib/trello/association_builder/has_one.rb +16 -0
  7. data/lib/trello/association_fetcher/has_many.rb +26 -0
  8. data/lib/trello/association_fetcher/has_many/fetch.rb +47 -0
  9. data/lib/trello/association_fetcher/has_many/params.rb +56 -0
  10. data/lib/trello/association_fetcher/has_one.rb +25 -0
  11. data/lib/trello/association_fetcher/has_one/fetch.rb +49 -0
  12. data/lib/trello/association_fetcher/has_one/params.rb +36 -0
  13. data/lib/trello/association_infer_tool.rb +13 -0
  14. data/lib/trello/association_proxy.rb +1 -1
  15. data/lib/trello/attachment.rb +13 -10
  16. data/lib/trello/basic_data.rb +16 -49
  17. data/lib/trello/board.rb +17 -3
  18. data/lib/trello/card.rb +103 -38
  19. data/lib/trello/checklist.rb +14 -13
  20. data/lib/trello/client.rb +1 -1
  21. data/lib/trello/comment.rb +4 -4
  22. data/lib/trello/custom_field.rb +131 -0
  23. data/lib/trello/custom_field_item.rb +98 -0
  24. data/lib/trello/custom_field_option.rb +22 -0
  25. data/lib/trello/error.rb +12 -0
  26. data/lib/trello/item.rb +7 -7
  27. data/lib/trello/item_state.rb +3 -3
  28. data/lib/trello/label.rb +30 -12
  29. data/lib/trello/label_name.rb +10 -10
  30. data/lib/trello/list.rb +6 -6
  31. data/lib/trello/member.rb +10 -9
  32. data/lib/trello/notification.rb +6 -6
  33. data/lib/trello/organization.rb +11 -11
  34. data/lib/trello/plugin_datum.rb +6 -6
  35. data/lib/trello/register_attributes.rb +54 -0
  36. data/lib/trello/token.rb +6 -5
  37. data/lib/trello/webhook.rb +5 -5
  38. data/spec/action_spec.rb +22 -1
  39. data/spec/basic_data_spec.rb +58 -0
  40. data/spec/board_spec.rb +28 -2
  41. data/spec/card_spec.rb +183 -8
  42. data/spec/cassettes/can_add_a_file_from_url_on_a_card.yml +189 -0
  43. data/spec/cassettes/can_add_a_file_on_a_card.yml +200 -0
  44. data/spec/cassettes/can_add_a_member_to_a_card.yml +190 -0
  45. data/spec/cassettes/can_add_label_on_a_card.yml +281 -0
  46. data/spec/cassettes/can_close_bong_a_card.yml +189 -0
  47. data/spec/cassettes/can_get_actions.yml +196 -0
  48. data/spec/cassettes/can_get_attachments.yml +187 -0
  49. data/spec/cassettes/can_get_comments.yml +193 -0
  50. data/spec/cassettes/can_move_a_card_to_another_board_with_specific_list.yml +373 -0
  51. data/spec/cassettes/can_move_a_card_to_another_board_without_specific_list.yml +281 -0
  52. data/spec/cassettes/can_move_a_card_to_another_list.yml +281 -0
  53. data/spec/cassettes/can_remove_a_member_from_a_card.yml +185 -0
  54. data/spec/cassettes/can_remove_an_attachment_on_a_card.yml +277 -0
  55. data/spec/cassettes/can_remove_an_upvote_on_a_card.yml +465 -0
  56. data/spec/cassettes/can_remove_label_on_a_card.yml +279 -0
  57. data/spec/cassettes/can_success_add_comment_to_a_card.yml +196 -0
  58. data/spec/cassettes/can_success_copy_checklist_to_a_card.yml +281 -0
  59. data/spec/cassettes/can_success_copy_checklist_to_a_card_without_name_pos.yml +281 -0
  60. data/spec/cassettes/can_success_create_a_card.yml +99 -0
  61. data/spec/cassettes/can_success_create_new_checklist_to_a_card.yml +189 -0
  62. data/spec/cassettes/can_success_delete_card.yml +185 -0
  63. data/spec/cassettes/can_success_upate_a_card.yml +189 -0
  64. data/spec/cassettes/can_success_update_bong_a_board.yml +283 -0
  65. data/spec/cassettes/can_success_update_bong_a_card.yml +191 -0
  66. data/spec/cassettes/can_upvote_on_a_card.yml +469 -0
  67. data/spec/cassettes/card_find_with_id_and_get_all_fields.yml +95 -0
  68. data/spec/cassettes/card_find_with_id_and_get_specific_fields.yml +96 -0
  69. data/spec/cassettes/custom_field_item_save_1.yml +97 -0
  70. data/spec/cassettes/custom_field_item_save_2.yml +281 -0
  71. data/spec/cassettes/get_board_of_card.yml +187 -0
  72. data/spec/cassettes/get_check_item_states_of_card.yml +188 -0
  73. data/spec/cassettes/get_checklists_of_card.yml +187 -0
  74. data/spec/cassettes/get_cover_image_of_card.yml +187 -0
  75. data/spec/cassettes/get_custom_field_items_of_card.yml +187 -0
  76. data/spec/cassettes/get_list_of_card.yml +188 -0
  77. data/spec/cassettes/get_lists.yml +187 -0
  78. data/spec/cassettes/get_members_of_card.yml +189 -0
  79. data/spec/cassettes/get_plugin_data_of_card.yml +187 -0
  80. data/spec/cassettes/get_voters_of_card.yml +188 -0
  81. data/spec/cassettes/remove_upvote_on_a_card_when_have_not_voted.yml +366 -0
  82. data/spec/cassettes/revote_on_a_card.yml +464 -0
  83. data/spec/checklist_spec.rb +39 -3
  84. data/spec/client_spec.rb +5 -1
  85. data/spec/custom_field_item_spec.rb +192 -0
  86. data/spec/custom_field_option_spec.rb +49 -0
  87. data/spec/custom_field_spec.rb +261 -0
  88. data/spec/integration/basic_data/many_spec.rb +123 -0
  89. data/spec/integration/basic_data/one_spec.rb +84 -0
  90. data/spec/integration/basic_data/register_attributes_spec.rb +75 -0
  91. data/spec/integration/board/update!_spec.rb +31 -0
  92. data/spec/integration/board_lists_spec.rb +21 -0
  93. data/spec/integration/card/add_and_remove_attachment_spec.rb +45 -0
  94. data/spec/integration/card/add_and_remove_label_spec.rb +35 -0
  95. data/spec/integration/card/add_checklist_spec.rb +32 -0
  96. data/spec/integration/card/add_comment_spec.rb +19 -0
  97. data/spec/integration/card/add_memeber_spec.rb +19 -0
  98. data/spec/integration/card/associations/actions_spec.rb +17 -0
  99. data/spec/integration/card/associations/attachments_spec.rb +18 -0
  100. data/spec/integration/card/associations/board_spec.rb +17 -0
  101. data/spec/integration/card/associations/check_item_states_spec.rb +17 -0
  102. data/spec/integration/card/associations/checklists_spec.rb +18 -0
  103. data/spec/integration/card/associations/comments_spec.rb +19 -0
  104. data/spec/integration/card/associations/cover_image_spec.rb +18 -0
  105. data/spec/integration/card/associations/custom_field_items_spec.rb +18 -0
  106. data/spec/integration/card/associations/list_spec.rb +16 -0
  107. data/spec/integration/card/associations/members_spec.rb +18 -0
  108. data/spec/integration/card/associations/plugin_data_spec.rb +18 -0
  109. data/spec/integration/card/associations/voters_spec.rb +17 -0
  110. data/spec/integration/card/close!_spec.rb +16 -0
  111. data/spec/integration/card/create_new_check_list_spec.rb +19 -0
  112. data/spec/integration/card/create_spec.rb +50 -0
  113. data/spec/integration/card/delete_spec.rb +16 -0
  114. data/spec/integration/card/find_spec.rb +67 -0
  115. data/spec/integration/card/move_to_board_spec.rb +36 -0
  116. data/spec/integration/card/move_to_list_spec.rb +20 -0
  117. data/spec/integration/card/remove_member_spec.rb +19 -0
  118. data/spec/integration/card/save_spec.rb +61 -0
  119. data/spec/integration/card/update!_spec.rb +53 -0
  120. data/spec/integration/card/vote_spec.rb +50 -0
  121. data/spec/integration/custom_field_item_spec.rb +47 -0
  122. data/spec/item_spec.rb +20 -0
  123. data/spec/label_spec.rb +99 -0
  124. data/spec/list_spec.rb +21 -0
  125. data/spec/member_spec.rb +23 -0
  126. data/spec/notification_spec.rb +21 -0
  127. data/spec/organization_spec.rb +26 -0
  128. data/spec/spec_helper.rb +96 -23
  129. data/spec/token_spec.rb +19 -0
  130. data/spec/unit/trello/association_builder/has_many_spec.rb +36 -0
  131. data/spec/unit/trello/association_builder/has_one_spec.rb +36 -0
  132. data/spec/unit/trello/association_fetcher/has_many/fetch_spec.rb +38 -0
  133. data/spec/unit/trello/association_fetcher/has_many/params_spec.rb +107 -0
  134. data/spec/unit/trello/association_fetcher/has_many_spec.rb +50 -0
  135. data/spec/unit/trello/association_fetcher/has_one/fetch_spec.rb +51 -0
  136. data/spec/unit/trello/association_fetcher/has_one/params_spec.rb +81 -0
  137. data/spec/unit/trello/association_fetcher/has_one_spec.rb +49 -0
  138. data/spec/unit/trello/association_infer_tool_spec.rb +41 -0
  139. data/spec/unit/trello/basic_data_spec.rb +54 -0
  140. data/spec/unit/trello/card_spec.rb +103 -0
  141. data/spec/webhook_spec.rb +20 -0
  142. metadata +224 -30
@@ -0,0 +1,50 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Trello::AssociationFetcher::HasMany do
4
+
5
+ describe '#new' do
6
+ let(:board) { instance_double(Trello::Board) }
7
+ let(:has_many) {
8
+ Trello::AssociationFetcher::HasMany.new(board, 'cards', {filter: :all})
9
+ }
10
+
11
+ it 'has model_class attribute' do
12
+ expect(has_many.model).to eq(board)
13
+ end
14
+
15
+ it 'has name attribute' do
16
+ expect(has_many.name).to eq('cards')
17
+ end
18
+
19
+ it 'has options attribute' do
20
+ expect(has_many.options).to eq({filter: :all})
21
+ end
22
+ end
23
+
24
+ describe '.fetch' do
25
+ let(:board) { instance_double(Trello::Board) }
26
+ let(:params) { instance_double(Trello::AssociationFetcher::HasMany::Params) }
27
+ let(:fetch_result) { double('fetch result') }
28
+ let(:has_many_fetcher) {
29
+ Trello::AssociationFetcher::HasMany.new(board, 'cards', {filter: :all})
30
+ }
31
+
32
+ it 'return the result from HasMany::Fetch and HasMany::Params' do
33
+ expect(Trello::AssociationFetcher::HasMany::Params)
34
+ .to receive(:new)
35
+ .with(
36
+ association_owner: board,
37
+ association_name: 'cards',
38
+ association_options: { filter: :all },
39
+ filter: { a: 1 }
40
+ ).and_return(params)
41
+ expect(Trello::AssociationFetcher::HasMany::Fetch)
42
+ .to receive(:execute)
43
+ .with(params)
44
+ .and_return(fetch_result)
45
+
46
+ expect(has_many_fetcher.fetch(a: 1)).to eq(fetch_result)
47
+ end
48
+ end
49
+
50
+ end
@@ -0,0 +1,51 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Trello::AssociationFetcher::HasOne::Fetch do
4
+
5
+ describe '.execute' do
6
+ let(:client) { instance_double(Trello::Client) }
7
+ let(:association_owner) { double('association_owner', client: client) }
8
+ let(:association_restful_id) { 1 }
9
+ let(:association_class) { double('association_class') }
10
+ let(:result) { double('result') }
11
+
12
+ let(:params) { instance_double('params',
13
+ association_owner: association_owner,
14
+ association_restful_name: association_restful_name,
15
+ association_restful_id: association_restful_id,
16
+ association_class: association_class
17
+ )}
18
+
19
+ context 'when association_restful_name exists' do
20
+ let(:association_restful_name) { 'organizations' }
21
+
22
+ before do
23
+ allow(Trello).to receive(:client).and_return(client)
24
+ allow(client)
25
+ .to receive(:find)
26
+ .with(association_restful_name, association_restful_id)
27
+ .and_return(result)
28
+ end
29
+
30
+ it 'return the result from Trello.client' do
31
+ expect(Trello::AssociationFetcher::HasOne::Fetch.execute(params)).to eq(result)
32
+ end
33
+ end
34
+
35
+ context 'when association_restful_name does not exist' do
36
+ let(:association_restful_name) { nil }
37
+
38
+ before do
39
+ allow(association_class)
40
+ .to receive(:find)
41
+ .with(association_restful_id)
42
+ .and_return(result)
43
+ end
44
+
45
+ it 'return the result from association_class' do
46
+ expect(Trello::AssociationFetcher::HasOne::Fetch.execute(params)).to eq(result)
47
+ end
48
+ end
49
+ end
50
+
51
+ end
@@ -0,0 +1,81 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Trello::AssociationFetcher::HasOne::Params do
4
+
5
+ let(:params) { Trello::AssociationFetcher::HasOne::Params.new(
6
+ association_owner: association_owner,
7
+ association_name: association_name,
8
+ association_options: association_options,
9
+ )}
10
+
11
+ let(:association_owner) { double('owner', id: 1, organization_id: 9) }
12
+ let(:association_name) { 'organization' }
13
+ let(:association_options) { { using: :organization_id } }
14
+
15
+ describe 'association_class' do
16
+ context 'when explicit set :via in association_options' do
17
+ let(:association_options) { { via: Trello::Organization } }
18
+
19
+ it 'return the value under the :via key' do
20
+ expect(params.association_class).to eq(Trello::Organization)
21
+ end
22
+ end
23
+
24
+ context 'when does not set :via in association_options' do
25
+ before do
26
+ allow(Trello::AssociationInferTool)
27
+ .to receive(:infer_class_on_name)
28
+ .with(association_name)
29
+ .and_return(Trello::Organization)
30
+ end
31
+
32
+ it 'return association_class use AssociationInferTool' do
33
+ expect(params.association_class).to eq(Trello::Organization)
34
+ end
35
+ end
36
+ end
37
+
38
+ describe 'association_owner' do
39
+ it 'return association_owner directly' do
40
+ expect(params.association_owner).to eq(association_owner)
41
+ end
42
+ end
43
+
44
+ describe 'association_restful_name' do
45
+ context 'when explicit set :path in association_options' do
46
+ let(:association_options) { { path: :organizations } }
47
+
48
+ it 'return :path directly' do
49
+ expect(params.association_restful_name).to eq(:organizations)
50
+ end
51
+ end
52
+
53
+ context 'when does not set :path in association_options' do
54
+ let(:association_options) { {} }
55
+
56
+ it 'return nil' do
57
+ expect(params.association_restful_name).to eq(nil)
58
+ end
59
+ end
60
+ end
61
+
62
+ describe 'association_restful_id' do
63
+ context 'when explicit set :using in association_options' do
64
+ let(:association_options) { { using: :organization_id } }
65
+
66
+ it 'return the result from association_owner.<using> directly' do
67
+ expect(params.association_restful_id).to eq(9)
68
+ end
69
+ end
70
+
71
+ context 'when does not set :using in association_options' do
72
+ let(:association_options) { {} }
73
+
74
+ it 'return the result from association_owner.id directly' do
75
+ expect(params.association_restful_id).to eq(1)
76
+ end
77
+ end
78
+ end
79
+
80
+
81
+ end
@@ -0,0 +1,49 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Trello::AssociationFetcher::HasOne do
4
+
5
+ describe '#new' do
6
+ let(:board) { instance_double(Trello::Board) }
7
+ let(:has_one) {
8
+ Trello::AssociationFetcher::HasOne.new(board, 'organization', { using: :test_id })
9
+ }
10
+
11
+ it 'has model attribute' do
12
+ expect(has_one.model).to eq(board)
13
+ end
14
+
15
+ it 'has name attribute' do
16
+ expect(has_one.name).to eq('organization')
17
+ end
18
+
19
+ it 'has options attribute' do
20
+ expect(has_one.options).to eq({ using: :test_id })
21
+ end
22
+ end
23
+
24
+ describe '.fetch' do
25
+ let(:board) { instance_double(Trello::Board) }
26
+ let(:params) { instance_double(Trello::AssociationFetcher::HasOne::Params) }
27
+ let(:fetch_result) { double('fetch result') }
28
+ let(:has_one_fetcher) {
29
+ Trello::AssociationFetcher::HasOne.new(board, 'organization', { using: :test_id })
30
+ }
31
+
32
+ it 'return result from HasOne::Fetch and HasOne::Params' do
33
+ expect(Trello::AssociationFetcher::HasOne::Params)
34
+ .to receive(:new)
35
+ .with(
36
+ association_owner: board,
37
+ association_name: 'organization',
38
+ association_options: { using: :test_id }
39
+ ).and_return(params)
40
+ expect(Trello::AssociationFetcher::HasOne::Fetch)
41
+ .to receive(:execute)
42
+ .with(params)
43
+ .and_return(fetch_result)
44
+
45
+ expect(has_one_fetcher.fetch).to eq(fetch_result)
46
+ end
47
+ end
48
+
49
+ end
@@ -0,0 +1,41 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Trello::AssociationInferTool do
4
+
5
+ describe '.infer_restful_resource_on_class' do
6
+ let(:infer) { lambda { |klass|
7
+ Trello::AssociationInferTool.infer_restful_resource_on_class(klass)
8
+ } }
9
+
10
+ it 'can infer boards on Trello::Board' do
11
+ expect(infer.call(Trello::Board)).to eq('boards')
12
+ end
13
+
14
+ it 'can infer cards on Trello::Card' do
15
+ expect(infer.call(Trello::Card)).to eq('cards')
16
+ end
17
+
18
+ it 'can infer members on Trello::Member' do
19
+ expect(infer.call(Trello::Member)).to eq('members')
20
+ end
21
+ end
22
+
23
+ describe '.infer_class_on_name' do
24
+ let(:infer) { lambda { |association_name|
25
+ Trello::AssociationInferTool.infer_class_on_name(association_name)
26
+ } }
27
+
28
+ it 'can infer Trello::Board on boards' do
29
+ expect(infer.call('boards')).to eq(Trello::Board)
30
+ end
31
+
32
+ it 'can infer Trello::Card on cards' do
33
+ expect(infer.call('cards')).to eq(Trello::Card)
34
+ end
35
+
36
+ it 'can infer Trello::Member on members' do
37
+ expect(infer.call('members')).to eq(Trello::Member)
38
+ end
39
+ end
40
+
41
+ end
@@ -0,0 +1,54 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Trello::BasicData do
4
+
5
+ describe '.register_attributes' do
6
+ around do |example|
7
+ module Trello
8
+ class FakeCard < BasicData
9
+ end
10
+ end
11
+
12
+ example.run
13
+
14
+ Trello.send(:remove_const, 'FakeCard')
15
+ end
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])
21
+
22
+ Trello::FakeCard.class_eval do
23
+ register_attributes :id, :name, :desc, readonly: [:id, :name]
24
+ end
25
+ end
26
+ end
27
+
28
+ describe '.many' do
29
+ let(:association_name) { 'cards' }
30
+ let(:association_options) { { test: 'test' } }
31
+
32
+ it 'call build on AssociationBuilder::HasMany' do
33
+ expect(AssociationBuilder::HasMany)
34
+ .to receive(:build)
35
+ .with(Trello::BasicData, association_name, association_options)
36
+
37
+ Trello::BasicData.many(association_name, association_options)
38
+ end
39
+ end
40
+
41
+ describe '.one' do
42
+ let(:association_name) { 'card' }
43
+ let(:association_options) { { path: 'test' } }
44
+
45
+ it 'call build on AssociationBuilder::HasOne' do
46
+ expect(AssociationBuilder::HasOne)
47
+ .to receive(:build)
48
+ .with(Trello::BasicData, association_name, association_options)
49
+
50
+ Trello::BasicData.one(association_name, association_options)
51
+ end
52
+ end
53
+
54
+ end
@@ -0,0 +1,103 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Trello::Card do
4
+
5
+ describe '.path_name' do
6
+ specify { expect(Trello::Card.path_name).to eq('card') }
7
+ end
8
+
9
+ describe '#closed?' do
10
+ specify { expect(Trello::Card.new('closed' => true).closed?).to eq(true) }
11
+ specify { expect(Trello::Card.new('closed' => false).closed?).to eq(false) }
12
+ end
13
+
14
+ describe '#close' do
15
+ let(:card) { Trello::Card.new('closed' => false) }
16
+
17
+ it 'can mark card as closed' do
18
+ card.close
19
+ expect(card.closed).to eq(true)
20
+ end
21
+ end
22
+
23
+ describe 'close!' do
24
+ let(:card) { Trello::Card.new('closed' => false) }
25
+
26
+ it 'will call save' do
27
+ expect(card).to receive(:save)
28
+ card.close!
29
+ end
30
+ end
31
+
32
+ describe 'valid?' do
33
+ let(:card) { Trello::Card.new('name' => name, 'idList' => list_id) }
34
+
35
+ context 'when name is nil' do
36
+ let(:name) { nil }
37
+ let(:list_id) { 1 }
38
+
39
+ specify { expect(card.valid?).to eq(false) }
40
+ end
41
+
42
+ context 'when list_id is nil' do
43
+ let(:name) { 'Card Name' }
44
+ let(:list_id) { nil }
45
+
46
+ specify { expect(card.valid?).to eq(false) }
47
+ end
48
+
49
+ context "when name and list_id both aren't nil" do
50
+ let(:name) { 'Card' }
51
+ let(:list_id) { 1 }
52
+
53
+ specify { expect(card.valid?).to eq(true) }
54
+ end
55
+ end
56
+
57
+ describe '#move_to_list_on_any_board' do
58
+ let(:card) { Trello::Card.new(board_id: 'board-aaa') }
59
+ let(:move_to_list_on_any_board) { card.move_to_list_on_any_board('listid') }
60
+
61
+ let(:board) { Trello::Board.new(id: 'board-aaa') }
62
+ let(:target_list) { Trello::List.new(board_id: target_board_id) }
63
+
64
+ before do
65
+ allow(Trello::List).to receive(:find).with('listid').and_return(target_list)
66
+ allow(card).to receive(:board).and_return(board)
67
+ end
68
+
69
+ context 'when target list is in the same board' do
70
+ let(:target_board_id) { 'board-aaa' }
71
+
72
+ it 'call #move_to_list on card' do
73
+ expect(card).to receive(:move_to_list).with('listid')
74
+
75
+ move_to_list_on_any_board
76
+ end
77
+ end
78
+
79
+ context 'when target list is in a different board' do
80
+ let(:target_board_id) { 'board-bbb' }
81
+ let(:target_board) { Trello::Board.new(id: 'board-bbb') }
82
+
83
+ before { allow(Trello::Board).to receive(:find).with('board-bbb').and_return(target_board) }
84
+
85
+ it 'call #move_to_board on card' do
86
+ expect(card).to receive(:move_to_board).with(target_board, target_list)
87
+
88
+ move_to_list_on_any_board
89
+ end
90
+ end
91
+ end
92
+
93
+ describe '#created_at' do
94
+ it 'can get created_at from card id' do
95
+ card = Trello::Card.new('id' => '5e95d1b4f43f9a06497f17f7')
96
+ expect(card.created_at).to eq(Time.new(2020, 4, 14, 15, 7, 32, '+00:00'))
97
+
98
+ card = Trello::Card.new('id' => '5e94ee7df8784d61ee48319e')
99
+ expect(card.created_at).to eq(Time.new(2020, 4, 13, 22, 58, 05, '+00:00'))
100
+ end
101
+ end
102
+
103
+ end
@@ -106,5 +106,25 @@ module Trello
106
106
  expect(webhook).to be_activated
107
107
  end
108
108
  end
109
+
110
+ describe "#update_fields" do
111
+ it "does not set any fields when the fields argument is empty" do
112
+ expected = {
113
+ 'id' => 'id',
114
+ 'description' => 'description',
115
+ 'idModel' => 'id_model',
116
+ 'callbackURL' => 'callback_url',
117
+ 'active' => 'active'
118
+ }
119
+
120
+ webhook = Webhook.new(expected)
121
+
122
+ webhook.update_fields({})
123
+
124
+ expected.each do |key, value|
125
+ expect(webhook.send(value)).to eq expected[key]
126
+ end
127
+ end
128
+ end
109
129
  end
110
130
  end