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,36 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe 'Trello::Card#move_to_board' do
4
+ include IntegrationHelpers
5
+
6
+ before { setup_trello }
7
+
8
+ it 'can move a card to another board without specific the target list' do
9
+ VCR.use_cassette('can_move_a_card_to_another_board_without_specific_list') do
10
+ board = Trello::Board.find('5e94ee7357ac8a3edc2b2145')
11
+ card = Trello::Card.find('5e95d1b4f43f9a06497f17f7')
12
+ response = card.move_to_board(board)
13
+
14
+ expect(response.code).to eq(200)
15
+ body = JSON.parse(response.body)
16
+ expect(body['id']).to eq('5e95d1b4f43f9a06497f17f7')
17
+ expect(body['idBoard']).to eq('5e94ee7357ac8a3edc2b2145')
18
+ expect(body['idList']).not_to be_nil
19
+ end
20
+ end
21
+
22
+ it 'can move a card to another board with a specific target list' do
23
+ VCR.use_cassette('can_move_a_card_to_another_board_with_specific_list') do
24
+ board = Trello::Board.find('5e94f5ded016b22c2437c13c')
25
+ list = Trello::List.find('5e95d1b07f2ff83927319128')
26
+ card = Trello::Card.find('5e95d1b4f43f9a06497f17f7')
27
+ response = card.move_to_board(board, list)
28
+
29
+ expect(response.code).to eq(200)
30
+ body = JSON.parse(response.body)
31
+ expect(body['id']).to eq('5e95d1b4f43f9a06497f17f7')
32
+ expect(body['idBoard']).to eq('5e94f5ded016b22c2437c13c')
33
+ expect(body['idList']).to eq('5e95d1b07f2ff83927319128')
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe 'Trello::Card#move_to_list' do
4
+ include IntegrationHelpers
5
+
6
+ before { setup_trello }
7
+
8
+ it 'can move a card to another list' do
9
+ VCR.use_cassette('can_move_a_card_to_another_list') do
10
+ list = Trello::List.find('5e95d1b2342114318522f3f1')
11
+ card = Trello::Card.find('5e95d1b4f43f9a06497f17f7')
12
+ response = card.move_to_list(list)
13
+
14
+ expect(response.code).to eq(200)
15
+ body = JSON.parse(response.body)
16
+ expect(body['idList']).to eq('5e95d1b2342114318522f3f1')
17
+ expect(body['idList']).not_to eq(card.list_id)
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe 'Trello::Card#remove_member' do
4
+ include IntegrationHelpers
5
+
6
+ before { setup_trello }
7
+
8
+ it 'can remove a member to a card' do
9
+ VCR.use_cassette('can_remove_a_member_from_a_card') do
10
+ member = Trello::Member.new('id' => '5e679b808e6e8828784b30e1')
11
+ card = Trello::Card.find('5e95d1b4f43f9a06497f17f7')
12
+ response = card.remove_member(member)
13
+
14
+ expect(response.code).to eq(200)
15
+ body = JSON.parse(response.body)
16
+ expect(body).to be_a(Array)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,61 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe 'Trell::Card.create' do
4
+ include IntegrationHelpers
5
+
6
+ before { setup_trello }
7
+
8
+ it 'can success create the card' do
9
+ VCR.use_cassette('can_success_create_a_card') do
10
+ card = Trello::Card.new(
11
+ name: 'Test Trello::Card.create',
12
+ list_id: '5e93bac014d40e501ee46b8d',
13
+ desc: 'testing card create',
14
+ member_ids: '5e679b808e6e8828784b30e1',
15
+ card_labels: '5e93ba987669b2254983d69d,5e93ba987669b2254983d69e',
16
+ due: '2020-12-22T01:59:00.000Z',
17
+ due_complete: false,
18
+ pos: 'top',
19
+ source_card_id: '5e93ba665c58c44a46cb2ef9',
20
+ source_card_properties: 'comments'
21
+ )
22
+ card.save
23
+ expect(card).to be_a(Trello::Card)
24
+
25
+ expect(card.name).to eq('Test Trello::Card.create')
26
+ expect(card.list_id).to eq('5e93bac014d40e501ee46b8d')
27
+ expect(card.desc).to eq('testing card create')
28
+ expect(card.member_ids).to eq(['5e679b808e6e8828784b30e1'])
29
+ expect(card.labels.count).to eq(2)
30
+ expect(card.due).to eq(Time.new(2020, 12, 22, 1, 59, 0, '+00:00'))
31
+ expect(card.due_complete).to eq(false)
32
+ expect(card.pos).not_to be_nil
33
+ expect(card.source_card_id).to eq('5e93ba665c58c44a46cb2ef9')
34
+ expect(card.source_card_properties).to eq('comments')
35
+
36
+ expect(card.id).not_to be_nil
37
+ expect(card.short_id).not_to be_nil
38
+ expect(card.closed).not_to be_nil
39
+ expect(card.url).not_to be_nil
40
+ expect(card.short_url).not_to be_nil
41
+ expect(card.board_id).not_to be_nil
42
+ expect(card.last_activity_date).not_to be_nil
43
+ expect(card.card_labels).not_to be_nil
44
+ expect(card.badges).not_to be_nil
45
+ expect(card.card_members).to be_nil # default not return members
46
+ expect(card.cover_image_id).to be_nil # only exist when the care use a custom cover image
47
+ end
48
+ end
49
+
50
+ it 'can success update a card' do
51
+ VCR.use_cassette('can_success_upate_a_card') do
52
+ card = Trello::Card.find('5e946acb3cc40322434c214e')
53
+ expect(card.name).to eq('C2')
54
+ card.name = 'C2-changed'
55
+ card.save
56
+ expect(card.name).to eq('C2-changed')
57
+ end
58
+ end
59
+
60
+ end
61
+
@@ -0,0 +1,53 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe 'Trell::Card.update!' do
4
+ include IntegrationHelpers
5
+
6
+ before { setup_trello }
7
+
8
+ it 'can update! a card' do
9
+ VCR.use_cassette('can_success_update_bong_a_card') do
10
+ card = Trello::Card.find('5e94fd9443f25a7263b165d0')
11
+ expect(card.name).to eq('C1')
12
+ expect(card.desc).to eq('')
13
+ expect(card.member_ids).to eq([])
14
+ expect(card.card_labels).to eq([])
15
+ expect(card.due).to be_nil
16
+ expect(card.due_complete).to eq(false)
17
+ expect(card.list_id).to eq('5e94eafdf553d46ea525faa7')
18
+
19
+ card.name = 'Test Trello::Card.update!'
20
+ card.list_id = '5e94fa1248c5e41ad0464a7f'
21
+ card.desc = 'testing card update!'
22
+ card.member_ids = '5e679b808e6e8828784b30e1'
23
+ card.card_labels = '5e94eaf37669b225494161c7'
24
+ card.due = '2020-12-22T01:59:00.000Z'
25
+ card.due_complete = false
26
+ card.pos = 'top'
27
+
28
+ card.update!
29
+
30
+ expect(card.name).to eq('Test Trello::Card.update!')
31
+ expect(card.list_id).to eq('5e94fa1248c5e41ad0464a7f')
32
+ expect(card.desc).to eq('testing card update!')
33
+ expect(card.member_ids).to eq(['5e679b808e6e8828784b30e1'])
34
+ expect(card.card_labels.count).to eq(1)
35
+ expect(card.due).to eq(Time.new(2020, 12, 22, 1, 59, 0, '+00:00'))
36
+ expect(card.due_complete).to eq(false)
37
+ expect(card.pos).not_to be_nil
38
+
39
+ expect(card.id).not_to be_nil
40
+ expect(card.short_id).not_to be_nil
41
+ expect(card.closed).not_to be_nil
42
+ expect(card.url).not_to be_nil
43
+ expect(card.short_url).not_to be_nil
44
+ expect(card.board_id).not_to be_nil
45
+ expect(card.last_activity_date).not_to be_nil
46
+ expect(card.card_labels).not_to be_nil
47
+ expect(card.badges).not_to be_nil
48
+ expect(card.card_members).to be_nil # default not return members
49
+ expect(card.cover_image_id).to be_nil # only exist when the care use a custom cover image
50
+ end
51
+ end
52
+
53
+ end
@@ -0,0 +1,50 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe 'Trell::Card#upvote #remove_upvote' do
4
+ include IntegrationHelpers
5
+
6
+ before { setup_trello }
7
+
8
+ describe '#upvote' do
9
+ it 'can success upvote on a card' do
10
+ VCR.use_cassette('can_upvote_on_a_card') do
11
+ card = Trello::Card.find('5e95d1b4f43f9a06497f17f7')
12
+
13
+ expect(card.voters.count).to eq(0)
14
+ card.upvote
15
+ expect(card.voters.count).to eq(1)
16
+ end
17
+ end
18
+
19
+ it "won't raise error when already voted" do
20
+ VCR.use_cassette('revote_on_a_card') do
21
+ card = Trello::Card.find('5e95d1b4f43f9a06497f17f7')
22
+
23
+ expect(card.voters.count).to eq(1)
24
+ expect { card.upvote }.not_to raise_error(Trello::Error)
25
+ expect(card.voters.count).to eq(1)
26
+ end
27
+ end
28
+ end
29
+
30
+ describe '#remove_upvote' do
31
+ it 'can success remove an upvote on a card' do
32
+ VCR.use_cassette('can_remove_an_upvote_on_a_card') do
33
+ card = Trello::Card.find('5e95d1b4f43f9a06497f17f7')
34
+
35
+ expect(card.voters.count).to eq(1)
36
+ card.remove_upvote
37
+ expect(card.voters.count).to eq(0)
38
+ end
39
+ end
40
+
41
+ it "won't raise error when haven't voted" do
42
+ VCR.use_cassette('remove_upvote_on_a_card_when_have_not_voted') do
43
+ card = Trello::Card.find('5e95d1b4f43f9a06497f17f7')
44
+
45
+ expect(card.voters.count).to eq(0)
46
+ expect { card.remove_upvote }.not_to raise_error(Trello::Error)
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,47 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe 'CustomFieldItem API' do
4
+
5
+ before do
6
+ Trello.configure do |config|
7
+ config.developer_public_key = ENV['TRELLO_DEVELOPER_PUBLIC_KEY'] || 'developerpublickey'
8
+ config.member_token = ENV['TRELLO_MEMBER_TOKEN'] || 'membertoken'
9
+ end
10
+ end
11
+
12
+ describe '#save' do
13
+ context 'when id does not exists' do
14
+ let(:custom_field_item) {
15
+ Trello::CustomFieldItem.new(
16
+ model_id: '5e679be5d53dfa748f41d775',
17
+ custom_field_id: '5e68e8e87c16bf75894df21a',
18
+ )
19
+ }
20
+
21
+ it 'update the custom field' do
22
+ VCR.use_cassette('custom_field_item_save_1') do
23
+ custom_field_item.value = { text: 'cool' }
24
+ custom_field_item.save
25
+
26
+ expect(custom_field_item.id).not_to be_nil
27
+ end
28
+ end
29
+ end
30
+
31
+ context 'when id exists' do
32
+ let(:custom_field_item) {
33
+ card = Trello::Card.find('5e679be5d53dfa748f41d775')
34
+ card.custom_field_items.find { |item| item.id == '5e68e8f02f77a28502efd036' }
35
+ }
36
+
37
+ it 'update the custom field' do
38
+ VCR.use_cassette('custom_field_item_save_2') do
39
+ custom_field_item.value = { text: 'nice' }
40
+
41
+ expect { custom_field_item.save }.not_to raise_error
42
+ end
43
+ end
44
+ end
45
+ end
46
+
47
+ end
@@ -51,5 +51,25 @@ module Trello
51
51
  it { expect(item).not_to be_complete }
52
52
  end
53
53
  end
54
+
55
+ describe "#update_fields" do
56
+ it "does not set any fields when the fields argument is empty" do
57
+ expected = {
58
+ 'id' => 'id',
59
+ 'name' => 'name',
60
+ 'type' => 'type',
61
+ 'state' => 'state',
62
+ 'pos' => 'pos'
63
+ }
64
+
65
+ item = Item.new(expected)
66
+
67
+ item.update_fields({})
68
+
69
+ expected.each do |key, value|
70
+ expect(item.send(value)).to eq expected[key]
71
+ end
72
+ end
73
+ end
54
74
  end
55
75
  end
@@ -181,5 +181,104 @@ module Trello
181
181
  expect(label.board).to_not be_nil
182
182
  end
183
183
  end
184
+
185
+ describe "#update_fields" do
186
+ it "does not set any fields when the fields argument is empty" do
187
+ expected = {
188
+ 'id' => 'id',
189
+ 'name' => 'name',
190
+ 'color' => 'color',
191
+ 'idBoard' => 'board_id',
192
+ 'uses' => 'uses'
193
+ }
194
+
195
+ label = Label.new(expected)
196
+
197
+ label.update_fields({})
198
+
199
+ expected.each do |key, value|
200
+ expect(label.send(value)).to eq expected[key]
201
+ end
202
+ end
203
+ end
204
+
205
+ describe '#update_fields' do
206
+ let(:label_detail) {{
207
+ 'id' => 'id',
208
+ 'name' => 'name',
209
+ 'color' => 'color',
210
+ 'idBoard' => 'board_id',
211
+ 'uses' => 'uses'
212
+ }}
213
+ let(:label) { Label.new(label_detail) }
214
+
215
+ context 'when the fields argument is empty' do
216
+ let(:fields) { {} }
217
+
218
+ it 'card does not set any fields' do
219
+ label.update_fields(fields)
220
+
221
+ expect(label.id).to eq label_detail['id']
222
+ expect(label.name).to eq label_detail['name']
223
+ expect(label.color).to eq label_detail['color']
224
+ expect(label.board_id).to eq label_detail['idBoard']
225
+ expect(label.uses).to eq label_detail['uses']
226
+ end
227
+ end
228
+
229
+ context 'when the fields argument has at least one field' do
230
+ context 'and the field does changed' do
231
+ let(:fields) { { name: 'Awesome Name' } }
232
+
233
+ it 'label does set the changed fields' do
234
+ label.update_fields(fields)
235
+
236
+ expect(label.name).to eq('Awesome Name')
237
+ end
238
+
239
+ it 'label has been mark as changed' do
240
+ label.update_fields(fields)
241
+
242
+ expect(label.changed?).to be_truthy
243
+ end
244
+ end
245
+
246
+ context "and the field doesn't changed" do
247
+ let(:fields) { { name: label_detail['name'] } }
248
+
249
+ it "label attributes doesn't changed" do
250
+ label.update_fields(fields)
251
+
252
+ expect(label.name).to eq(label_detail['name'])
253
+ end
254
+
255
+ it "label hasn't been mark as changed", pending: true do
256
+ label.update_fields(fields)
257
+
258
+ expect(label.changed?).to be_falsy
259
+ end
260
+ end
261
+
262
+ context "and the field isn't a correct attributes of the label" do
263
+ let(:fields) { { abc: 'abc' } }
264
+
265
+ it "label attributes doesn't changed" do
266
+ label.update_fields(fields)
267
+
268
+ expect(label.id).to eq label_detail['id']
269
+ expect(label.name).to eq label_detail['name']
270
+ expect(label.color).to eq label_detail['color']
271
+ expect(label.board_id).to eq label_detail['idBoard']
272
+ expect(label.uses).to eq label_detail['uses']
273
+ end
274
+
275
+ it "label hasn't been mark as changed" do
276
+ label.update_fields(fields)
277
+
278
+ expect(label.changed?).to be_falsy
279
+ end
280
+ end
281
+ end
282
+ end
184
283
  end
185
284
  end
@@ -228,5 +228,26 @@ module Trello
228
228
  list.close!
229
229
  end
230
230
  end
231
+
232
+ describe "#update_fields" do
233
+ it "does not set any fields when the fields argument is empty" do
234
+ expected = {
235
+ 'id' => 'id',
236
+ 'name' => 'name',
237
+ 'closed' => 'closed',
238
+ 'idBoard' => 'board_id',
239
+ 'pos' => 'pos',
240
+ 'idListSource' => 'source_list_id'
241
+ }
242
+
243
+ label = List.new(expected)
244
+
245
+ label.update_fields({})
246
+
247
+ expected.each do |key, value|
248
+ expect(label.send(value)).to eq expected[key]
249
+ end
250
+ end
251
+ end
231
252
  end
232
253
  end