ruby-trello 2.2.0 → 2.3.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 (113) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +49 -10
  3. data/lib/trello.rb +47 -35
  4. data/lib/trello/action.rb +4 -2
  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/basic_data.rb +7 -48
  16. data/lib/trello/board.rb +1 -1
  17. data/lib/trello/card.rb +88 -36
  18. data/lib/trello/custom_field.rb +26 -9
  19. data/lib/trello/custom_field_item.rb +32 -12
  20. data/lib/trello/label.rb +24 -7
  21. data/lib/trello/member.rb +1 -1
  22. data/lib/trello/register_attributes.rb +54 -0
  23. data/spec/action_spec.rb +1 -1
  24. data/spec/card_spec.rb +98 -22
  25. data/spec/cassettes/can_add_a_file_from_url_on_a_card.yml +189 -0
  26. data/spec/cassettes/can_add_a_file_on_a_card.yml +200 -0
  27. data/spec/cassettes/can_add_a_member_to_a_card.yml +190 -0
  28. data/spec/cassettes/can_add_label_on_a_card.yml +281 -0
  29. data/spec/cassettes/can_close_bong_a_card.yml +189 -0
  30. data/spec/cassettes/can_get_actions.yml +196 -0
  31. data/spec/cassettes/can_get_attachments.yml +187 -0
  32. data/spec/cassettes/can_get_comments.yml +193 -0
  33. data/spec/cassettes/can_move_a_card_to_another_board_with_specific_list.yml +373 -0
  34. data/spec/cassettes/can_move_a_card_to_another_board_without_specific_list.yml +281 -0
  35. data/spec/cassettes/can_move_a_card_to_another_list.yml +281 -0
  36. data/spec/cassettes/can_remove_a_member_from_a_card.yml +185 -0
  37. data/spec/cassettes/can_remove_an_attachment_on_a_card.yml +277 -0
  38. data/spec/cassettes/can_remove_an_upvote_on_a_card.yml +465 -0
  39. data/spec/cassettes/can_remove_label_on_a_card.yml +279 -0
  40. data/spec/cassettes/can_success_add_comment_to_a_card.yml +196 -0
  41. data/spec/cassettes/can_success_copy_checklist_to_a_card.yml +281 -0
  42. data/spec/cassettes/can_success_copy_checklist_to_a_card_without_name_pos.yml +281 -0
  43. data/spec/cassettes/can_success_create_a_card.yml +99 -0
  44. data/spec/cassettes/can_success_create_new_checklist_to_a_card.yml +189 -0
  45. data/spec/cassettes/can_success_delete_card.yml +185 -0
  46. data/spec/cassettes/can_success_upate_a_card.yml +189 -0
  47. data/spec/cassettes/can_success_update_bong_a_card.yml +191 -0
  48. data/spec/cassettes/can_upvote_on_a_card.yml +469 -0
  49. data/spec/cassettes/card_find_with_id_and_get_all_fields.yml +95 -0
  50. data/spec/cassettes/card_find_with_id_and_get_specific_fields.yml +96 -0
  51. data/spec/cassettes/custom_field_item_save_1.yml +97 -0
  52. data/spec/cassettes/custom_field_item_save_2.yml +281 -0
  53. data/spec/cassettes/get_board_of_card.yml +187 -0
  54. data/spec/cassettes/get_check_item_states_of_card.yml +188 -0
  55. data/spec/cassettes/get_checklists_of_card.yml +187 -0
  56. data/spec/cassettes/get_cover_image_of_card.yml +187 -0
  57. data/spec/cassettes/get_custom_field_items_of_card.yml +187 -0
  58. data/spec/cassettes/get_list_of_card.yml +188 -0
  59. data/spec/cassettes/get_lists.yml +187 -0
  60. data/spec/cassettes/get_members_of_card.yml +189 -0
  61. data/spec/cassettes/get_plugin_data_of_card.yml +187 -0
  62. data/spec/cassettes/get_voters_of_card.yml +188 -0
  63. data/spec/cassettes/remove_upvote_on_a_card_when_have_not_voted.yml +366 -0
  64. data/spec/cassettes/revote_on_a_card.yml +464 -0
  65. data/spec/custom_field_item_spec.rb +74 -0
  66. data/spec/custom_field_spec.rb +76 -0
  67. data/spec/integration/basic_data/many_spec.rb +123 -0
  68. data/spec/integration/basic_data/one_spec.rb +84 -0
  69. data/spec/integration/basic_data/register_attributes_spec.rb +75 -0
  70. data/spec/integration/board_lists_spec.rb +21 -0
  71. data/spec/integration/card/add_and_remove_attachment_spec.rb +45 -0
  72. data/spec/integration/card/add_and_remove_label_spec.rb +35 -0
  73. data/spec/integration/card/add_checklist_spec.rb +32 -0
  74. data/spec/integration/card/add_comment_spec.rb +19 -0
  75. data/spec/integration/card/add_memeber_spec.rb +19 -0
  76. data/spec/integration/card/associations/actions_spec.rb +17 -0
  77. data/spec/integration/card/associations/attachments_spec.rb +18 -0
  78. data/spec/integration/card/associations/board_spec.rb +17 -0
  79. data/spec/integration/card/associations/check_item_states_spec.rb +17 -0
  80. data/spec/integration/card/associations/checklists_spec.rb +18 -0
  81. data/spec/integration/card/associations/comments_spec.rb +19 -0
  82. data/spec/integration/card/associations/cover_image_spec.rb +18 -0
  83. data/spec/integration/card/associations/custom_field_items_spec.rb +18 -0
  84. data/spec/integration/card/associations/list_spec.rb +16 -0
  85. data/spec/integration/card/associations/members_spec.rb +18 -0
  86. data/spec/integration/card/associations/plugin_data_spec.rb +18 -0
  87. data/spec/integration/card/associations/voters_spec.rb +17 -0
  88. data/spec/integration/card/close!_spec.rb +16 -0
  89. data/spec/integration/card/create_new_check_list_spec.rb +19 -0
  90. data/spec/integration/card/create_spec.rb +50 -0
  91. data/spec/integration/card/delete_spec.rb +16 -0
  92. data/spec/integration/card/find_spec.rb +67 -0
  93. data/spec/integration/card/move_to_board_spec.rb +36 -0
  94. data/spec/integration/card/move_to_list_spec.rb +20 -0
  95. data/spec/integration/card/remove_member_spec.rb +19 -0
  96. data/spec/integration/card/save_spec.rb +61 -0
  97. data/spec/integration/card/update!_spec.rb +53 -0
  98. data/spec/integration/card/vote_spec.rb +50 -0
  99. data/spec/integration/custom_field_item_spec.rb +47 -0
  100. data/spec/label_spec.rb +79 -0
  101. data/spec/spec_helper.rb +48 -23
  102. data/spec/unit/trello/association_builder/has_many_spec.rb +36 -0
  103. data/spec/unit/trello/association_builder/has_one_spec.rb +36 -0
  104. data/spec/unit/trello/association_fetcher/has_many/fetch_spec.rb +38 -0
  105. data/spec/unit/trello/association_fetcher/has_many/params_spec.rb +107 -0
  106. data/spec/unit/trello/association_fetcher/has_many_spec.rb +50 -0
  107. data/spec/unit/trello/association_fetcher/has_one/fetch_spec.rb +51 -0
  108. data/spec/unit/trello/association_fetcher/has_one/params_spec.rb +81 -0
  109. data/spec/unit/trello/association_fetcher/has_one_spec.rb +49 -0
  110. data/spec/unit/trello/association_infer_tool_spec.rb +41 -0
  111. data/spec/unit/trello/basic_data_spec.rb +54 -0
  112. data/spec/unit/trello/card_spec.rb +103 -0
  113. metadata +185 -6
@@ -0,0 +1,16 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe 'Trello::Card#delete' do
4
+ include IntegrationHelpers
5
+
6
+ before { setup_trello }
7
+
8
+ it 'can success delete card' do
9
+ VCR.use_cassette('can_success_delete_card') do
10
+ card = Trello::Card.find('5e95b664ace3621af695aeb0')
11
+ respone = card.delete
12
+ expect(respone.code).to eq(200)
13
+ end
14
+ end
15
+
16
+ end
@@ -0,0 +1,67 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe 'Trello::Card#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('card_find_with_id_and_get_all_fields') do
10
+ card = Trello::Card.find('5e9310df53f23017628a8011')
11
+ expect(card).to be_a(Trello::Card)
12
+ expect(card.id).to eq('5e9310df53f23017628a8011')
13
+ expect(card.short_id).not_to be_nil
14
+ expect(card.name).not_to be_nil
15
+ expect(card.desc).not_to be_nil
16
+ expect(card.due).not_to be_nil
17
+ expect(card.due_complete).not_to be_nil
18
+ expect(card.closed).not_to be_nil
19
+ expect(card.url).not_to be_nil
20
+ expect(card.short_url).not_to be_nil
21
+ expect(card.board_id).not_to be_nil
22
+ expect(card.member_ids).not_to be_nil
23
+ expect(card.list_id).not_to be_nil
24
+ expect(card.pos).not_to be_nil
25
+ expect(card.last_activity_date).not_to be_nil
26
+ expect(card.labels).not_to be_nil
27
+ expect(card.card_labels).not_to be_nil
28
+ expect(card.cover_image_id).not_to be_nil # only exist when the care use a custom cover image
29
+ expect(card.badges).not_to be_nil
30
+
31
+ expect(card.card_members).to be_nil # default not return members
32
+ expect(card.source_card_id).to be_nil # it's params only work for create card
33
+ expect(card.source_card_properties).to be_nil # it's params only work for creae card
34
+ end
35
+ end
36
+
37
+ it 'find with id and get specific fields' do
38
+ VCR.use_cassette('card_find_with_id_and_get_specific_fields') do
39
+ card = Trello::Card.find('5e7233b06b440f2b93a57b58', fields: 'desc,pos', members: true)
40
+ expect(card).to be_a(Trello::Card)
41
+ expect(card.id).to eq('5e7233b06b440f2b93a57b58')
42
+
43
+ expect(card.desc).not_to be_nil
44
+ expect(card.pos).not_to be_nil
45
+ expect(card.card_members).not_to be_nil # default not return members
46
+
47
+ expect(card.name).to be_nil
48
+ expect(card.short_id).to be_nil
49
+ expect(card.url).to be_nil
50
+ expect(card.short_url).to be_nil
51
+ expect(card.due).to be_nil
52
+ expect(card.due_complete).to eq(false)
53
+ expect(card.closed).to be_nil
54
+ expect(card.board_id).to be_nil
55
+ expect(card.member_ids).to be_nil
56
+ expect(card.list_id).to be_nil
57
+ expect(card.last_activity_date).to be_nil
58
+ expect(card.labels).to eq([])
59
+ expect(card.card_labels).to be_nil
60
+ expect(card.cover_image_id).to be_nil # only exist when the care use a custom cover image
61
+ expect(card.badges).to be_nil
62
+ expect(card.source_card_id).to be_nil # it's params only work for create card
63
+ expect(card.source_card_properties).to be_nil # it's params only work for creae card
64
+ end
65
+ end
66
+
67
+ end
@@ -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
data/spec/label_spec.rb CHANGED
@@ -201,5 +201,84 @@ module Trello
201
201
  end
202
202
  end
203
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
204
283
  end
205
284
  end