ruby-trello 2.3.1 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +49 -23
- data/lib/trello/action.rb +27 -21
- data/lib/trello/attachment.rb +40 -27
- data/lib/trello/basic_data.rb +104 -9
- data/lib/trello/board.rb +88 -102
- data/lib/trello/card.rb +34 -235
- data/lib/trello/checklist.rb +17 -71
- data/lib/trello/client.rb +1 -1
- data/lib/trello/comment.rb +39 -26
- data/lib/trello/configuration.rb +8 -0
- data/lib/trello/cover_image.rb +20 -0
- data/lib/trello/custom_field.rb +31 -84
- data/lib/trello/custom_field_item.rb +36 -58
- data/lib/trello/custom_field_option.rb +40 -13
- data/lib/trello/item.rb +27 -16
- data/lib/trello/item_state.rb +7 -15
- data/lib/trello/json_utils.rb +11 -5
- data/lib/trello/label.rb +14 -101
- data/lib/trello/label_name.rb +22 -25
- data/lib/trello/list.rb +31 -44
- data/lib/trello/member.rb +77 -32
- data/lib/trello/net/faraday.rb +46 -0
- data/lib/trello/net/rest_client.rb +41 -0
- data/lib/trello/net.rb +1 -28
- data/lib/trello/notification.rb +27 -20
- data/lib/trello/organization.rb +53 -25
- data/lib/trello/plugin_datum.rb +11 -16
- data/lib/trello/schema/attribute/base.rb +79 -0
- data/lib/trello/schema/attribute/board_pref.rb +45 -0
- data/lib/trello/schema/attribute/custom_field_display.rb +45 -0
- data/lib/trello/schema/attribute/default.rb +45 -0
- data/lib/trello/schema/attribute_builder.rb +42 -0
- data/lib/trello/schema/attribute_registration.rb +47 -0
- data/lib/trello/schema/serializer/default.rb +17 -0
- data/lib/trello/schema/serializer/labels.rb +23 -0
- data/lib/trello/schema/serializer/time.rb +25 -0
- data/lib/trello/schema/serializer/webhooks.rb +25 -0
- data/lib/trello/schema.rb +31 -0
- data/lib/trello/token.rb +15 -12
- data/lib/trello/webhook.rb +18 -71
- data/lib/trello.rb +62 -7
- data/spec/action_spec.rb +1 -2
- data/spec/board_spec.rb +43 -103
- data/spec/card_spec.rb +51 -50
- data/spec/cassettes/action_find_with_id_and_get_all_fields.yml +104 -0
- data/spec/cassettes/board_find_with_id_and_get_all_fields.yml +96 -0
- data/spec/cassettes/board_find_with_id_and_get_specific_fields.yml +96 -0
- data/spec/cassettes/can_add_a_member_to_a_board.yml +191 -0
- data/spec/cassettes/can_arvhice_all_cards_of_list.yml +397 -0
- data/spec/cassettes/can_get_actions_of_board.yml +188 -0
- data/spec/cassettes/can_get_actions_of_list.yml +202 -0
- data/spec/cassettes/can_get_actions_of_members.yml +199 -0
- data/spec/cassettes/can_get_actions_of_organization.yml +201 -0
- data/spec/cassettes/can_get_boards_of_custom_field.yml +198 -0
- data/spec/cassettes/can_get_boards_of_label.yml +197 -0
- data/spec/cassettes/can_get_boards_of_organization.yml +207 -0
- data/spec/cassettes/can_get_cards_of_board.yml +193 -0
- data/spec/cassettes/can_get_cards_of_list.yml +201 -0
- data/spec/cassettes/can_get_cards_of_member.yml +204 -0
- data/spec/cassettes/can_get_checklists_of_board.yml +187 -0
- data/spec/cassettes/can_get_comments_board.yml +109 -0
- data/spec/cassettes/can_get_comments_card.yml +111 -0
- data/spec/cassettes/can_get_comments_list.yml +109 -0
- data/spec/cassettes/can_get_custom_field_options_of_custom_field.yml +197 -0
- data/spec/cassettes/can_get_custom_fields_of_board.yml +187 -0
- data/spec/cassettes/can_get_label_names_of_board.yml +187 -0
- data/spec/cassettes/can_get_labels_of_board.yml +187 -0
- data/spec/cassettes/can_get_lists_of_board.yml +187 -0
- data/spec/cassettes/can_get_members_of_board.yml +188 -0
- data/spec/cassettes/can_get_members_of_organization.yml +200 -0
- data/spec/cassettes/can_get_notifications_of_member.yml +199 -0
- data/spec/cassettes/can_get_organization_of_board.yml +189 -0
- data/spec/cassettes/can_get_organizations_of_member.yml +203 -0
- data/spec/cassettes/can_get_plugin_data_of_board.yml +187 -0
- data/spec/cassettes/can_move_all_cards_to_another_list.yml +886 -0
- data/spec/cassettes/can_success_create_a_board.yml +98 -0
- data/spec/cassettes/can_success_create_a_board_with_full_parameters.yml +97 -0
- data/spec/cassettes/can_success_create_a_board_without_clone_from_other.yml +98 -0
- data/spec/cassettes/can_success_create_a_card_when_due_is_datetime.yml +98 -0
- data/spec/cassettes/can_success_create_a_card_when_due_is_time.yml +98 -0
- data/spec/cassettes/can_success_create_a_checklist.yml +102 -0
- data/spec/cassettes/can_success_create_a_custom_field.yml +102 -0
- data/spec/cassettes/can_success_create_a_custom_field_option.yml +102 -0
- data/spec/cassettes/can_success_create_a_label.yml +102 -0
- data/spec/cassettes/can_success_create_a_list.yml +102 -0
- data/spec/cassettes/can_success_create_a_list_with_full_parameters.yml +102 -0
- data/spec/cassettes/can_success_create_a_organization.yml +104 -0
- data/spec/cassettes/can_success_create_a_webhook.yml +102 -0
- data/spec/cassettes/can_success_delete_a_custom_field_option.yml +389 -0
- data/spec/cassettes/can_success_delete_checklist.yml +284 -0
- data/spec/cassettes/can_success_get_card_of_board_by_card_id.yml +188 -0
- data/spec/cassettes/can_success_remove_member_from_board.yml +186 -0
- data/spec/cassettes/can_success_return_all_boards_of_current_user.yml +195 -0
- data/spec/cassettes/can_success_upate_a_board.yml +191 -0
- data/spec/cassettes/can_success_upate_a_list.yml +296 -0
- data/spec/cassettes/can_success_update_bong_a_board.yml +39 -39
- data/spec/cassettes/can_success_update_bong_a_board_with_specific_fields.yml +284 -0
- data/spec/cassettes/can_success_update_bong_a_checklist_with_specific_fields.yml +296 -0
- data/spec/cassettes/can_success_update_bong_a_custom_field.yml +200 -0
- data/spec/cassettes/can_success_update_bong_a_label.yml +200 -0
- data/spec/cassettes/can_success_update_bong_a_list.yml +199 -0
- data/spec/cassettes/can_success_update_bong_a_list_with_specific_fields.yml +296 -0
- data/spec/cassettes/can_success_update_bong_a_organization.yml +203 -0
- data/spec/cassettes/can_success_update_bong_a_webhook.yml +296 -0
- data/spec/cassettes/checklist_can_add_an_item.yml +296 -0
- data/spec/cassettes/checklist_can_update_the_item_state.yml +296 -0
- data/spec/cassettes/checklist_find_with_id_and_get_all_fields.yml +100 -0
- data/spec/cassettes/comment_delete.yml +331 -0
- data/spec/cassettes/comment_find_with_id.yml +116 -0
- data/spec/cassettes/custom_field_find_with_id_and_get_all_fields.yml +100 -0
- data/spec/cassettes/custom_field_find_with_id_and_get_specific_fields.yml +100 -0
- data/spec/cassettes/custom_field_item_save_1.yml +1 -1
- data/spec/cassettes/custom_field_item_save_2.yml +1 -1
- data/spec/cassettes/custom_field_option_find_with_id.yml +100 -0
- data/spec/cassettes/get_board_of_list.yml +197 -0
- data/spec/cassettes/get_boards_of_member.yml +207 -0
- data/spec/cassettes/label_delete.yml +285 -0
- data/spec/cassettes/label_find_with_id.yml +100 -0
- data/spec/cassettes/list_find_with_id_and_get_all_fields.yml +100 -0
- data/spec/cassettes/list_find_with_id_and_get_specific_fields.yml +100 -0
- data/spec/cassettes/member_find_with_id_and_get_all_fields.yml +101 -0
- data/spec/cassettes/member_find_with_id_and_get_specific_fields.yml +100 -0
- data/spec/cassettes/notification_find_with_id.yml +103 -0
- data/spec/cassettes/organization_find_with_id_and_get_all_fields.yml +102 -0
- data/spec/cassettes/organization_find_with_id_and_get_specific_fields.yml +100 -0
- data/spec/cassettes/token_find_with_token_string.yml +100 -0
- data/spec/cassettes/webhook_delete.yml +286 -0
- data/spec/cassettes/webhook_find_with_id.yml +100 -0
- data/spec/checklist_spec.rb +27 -43
- data/spec/client_spec.rb +57 -3
- data/spec/configuration_spec.rb +13 -0
- data/spec/custom_field_item_spec.rb +2 -2
- data/spec/custom_field_option_spec.rb +2 -2
- data/spec/custom_field_spec.rb +25 -13
- data/spec/integration/action/find_spec.rb +23 -0
- data/spec/integration/basic_data/many_spec.rb +4 -0
- data/spec/integration/basic_data/schema_spec.rb +156 -0
- data/spec/integration/board/add_member_spec.rb +20 -0
- data/spec/integration/board/all_spec.rb +20 -0
- data/spec/integration/board/associations/actions_spec.rb +18 -0
- data/spec/integration/board/associations/cards_spec.rb +18 -0
- data/spec/integration/board/associations/checklists_spec.rb +18 -0
- data/spec/integration/board/associations/custom_fields_spec.rb +18 -0
- data/spec/integration/board/associations/label_names_spec.rb +17 -0
- data/spec/integration/board/associations/labels_spec.rb +18 -0
- data/spec/integration/board/associations/lists_spec.rb +18 -0
- data/spec/integration/board/associations/members_spec.rb +18 -0
- data/spec/integration/board/associations/organization_spec.rb +19 -0
- data/spec/integration/board/associations/plugin_data_spec.rb +18 -0
- data/spec/integration/board/create_spec.rb +95 -0
- data/spec/integration/board/find_card_spec.rb +18 -0
- data/spec/integration/board/find_spec.rb +42 -0
- data/spec/integration/board/remove_member_spec.rb +21 -0
- data/spec/integration/board/save_spec.rb +37 -0
- data/spec/integration/board/update!_spec.rb +33 -2
- data/spec/integration/card/associations/plugin_data_spec.rb +1 -1
- data/spec/integration/card/create_spec.rb +36 -2
- data/spec/integration/card/delete_spec.rb +2 -2
- data/spec/integration/card/find_spec.rb +1 -1
- data/spec/integration/card/save_spec.rb +2 -2
- data/spec/integration/checklist/add_item_spec.rb +20 -0
- data/spec/integration/checklist/create_spec.rb +23 -0
- data/spec/integration/checklist/delete_spec.rb +17 -0
- data/spec/integration/checklist/find_spec.rb +22 -0
- data/spec/integration/checklist/update!_spec.rb +21 -0
- data/spec/integration/checklist/update_item_state_spec.rb +20 -0
- data/spec/integration/comment/association/board_spec.rb +17 -0
- data/spec/integration/comment/association/card_spec.rb +17 -0
- data/spec/integration/comment/association/list_spec.rb +17 -0
- data/spec/integration/comment/delete_spec.rb +20 -0
- data/spec/integration/comment/find_spec.rb +17 -0
- data/spec/integration/custom_field/association/board_spec.rb +18 -0
- data/spec/integration/custom_field/association/custom_field_options_spec.rb +18 -0
- data/spec/integration/custom_field/create_spec.rb +29 -0
- data/spec/integration/custom_field/find_spec.rb +41 -0
- data/spec/integration/custom_field/update!_spec.rb +25 -0
- data/spec/integration/custom_field_option/create_spec.rb +23 -0
- data/spec/integration/custom_field_option/delete_spec.rb +19 -0
- data/spec/integration/custom_field_option/find_spec.rb +21 -0
- data/spec/integration/integration_test.rb +3 -3
- data/spec/integration/label/association/board_spec.rb +18 -0
- data/spec/integration/label/create_spec.rb +23 -0
- data/spec/integration/label/delete_spec.rb +21 -0
- data/spec/integration/label/find_spec.rb +20 -0
- data/spec/integration/label/update!_spec.rb +25 -0
- data/spec/integration/list/archive_all_cards_spec.rb +20 -0
- data/spec/integration/list/associations/actions_spec.rb +18 -0
- data/spec/integration/list/associations/board_spec.rb +18 -0
- data/spec/integration/list/associations/cards_spec.rb +18 -0
- data/spec/integration/list/create_spec.rb +44 -0
- data/spec/integration/list/find_spec.rb +37 -0
- data/spec/integration/list/move_all_cards_spec.rb +31 -0
- data/spec/integration/list/save_spec.rb +40 -0
- data/spec/integration/list/update!_spec.rb +43 -0
- data/spec/integration/member/associations/actions_spec.rb +17 -0
- data/spec/integration/member/associations/boards_spec.rb +18 -0
- data/spec/integration/member/associations/cards_spec.rb +18 -0
- data/spec/integration/member/associations/notifications_spec.rb +18 -0
- data/spec/integration/member/associations/organizations_spec.rb +18 -0
- data/spec/integration/member/find_spec.rb +39 -0
- data/spec/integration/member/update!_spec.rb +18 -0
- data/spec/integration/notification/find_spec.rb +27 -0
- data/spec/integration/organization/associations/actions_spec.rb +18 -0
- data/spec/integration/organization/associations/boards_spec.rb +18 -0
- data/spec/integration/organization/associations/members_spec.rb +18 -0
- data/spec/integration/organization/create_spec.rb +23 -0
- data/spec/integration/organization/find_spec.rb +37 -0
- data/spec/integration/organization/update!_spec.rb +28 -0
- data/spec/integration/token/find_spec.rb +24 -0
- data/spec/integration/webhook/create_spec.rb +27 -0
- data/spec/integration/webhook/delete_spec.rb +21 -0
- data/spec/integration/webhook/find_spec.rb +22 -0
- data/spec/integration/webhook/update!_spec.rb +24 -0
- data/spec/item_spec.rb +2 -2
- data/spec/label_spec.rb +31 -33
- data/spec/list_spec.rb +32 -14
- data/spec/notification_spec.rb +3 -3
- data/spec/organization_spec.rb +6 -5
- data/spec/spec_helper.rb +31 -14
- data/spec/token_spec.rb +10 -11
- data/spec/unit/trello/basic_data_spec.rb +67 -8
- data/spec/unit/trello/board/new_spec.rb +370 -0
- data/spec/unit/trello/board/save_spec.rb +49 -0
- data/spec/unit/trello/board/update_fields_spec.rb +129 -0
- data/spec/unit/trello/board/update_spec.rb +197 -0
- data/spec/unit/trello/member/new_spec.rb +62 -0
- data/spec/unit/trello/member/update_fields_spec.rb +80 -0
- data/spec/unit/trello/schema/attribute/base_spec.rb +349 -0
- data/spec/unit/trello/schema/attribute/board_pref_spec.rb +208 -0
- data/spec/unit/trello/schema/attribute/default_spec.rb +236 -0
- data/spec/unit/trello/schema/attribute_builder_spec.rb +55 -0
- data/spec/unit/trello/schema/attribute_registration_spec.rb +59 -0
- data/spec/unit/trello/schema/serializer/default_spec.rb +19 -0
- data/spec/unit/trello/schema/serializer/time_spec.rb +39 -0
- data/spec/unit/trello/schema_spec.rb +25 -0
- data/spec/webhook_spec.rb +23 -7
- metadata +444 -102
- data/lib/trello/register_attributes.rb +0 -54
- data/spec/integration/basic_data/register_attributes_spec.rb +0 -75
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe 'Trello::Organization#members' do
|
4
|
+
include IntegrationHelpers
|
5
|
+
|
6
|
+
before { setup_trello }
|
7
|
+
|
8
|
+
it 'can get members' do
|
9
|
+
VCR.use_cassette('can_get_members_of_organization') do
|
10
|
+
organization = Trello::Organization.find('5e93ba154634282b6df23bcc')
|
11
|
+
members = organization.members
|
12
|
+
|
13
|
+
expect(members).to be_a(Array)
|
14
|
+
expect(members[0]).to be_a(Trello::Member)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe 'Trello::Organization.create' do
|
4
|
+
include IntegrationHelpers
|
5
|
+
|
6
|
+
before { setup_trello }
|
7
|
+
|
8
|
+
it 'can success create the organization' do
|
9
|
+
VCR.use_cassette('can_success_create_a_organization') do
|
10
|
+
organization = Trello::Organization.create(
|
11
|
+
name: 'integrationtest98',
|
12
|
+
display_name: 'Integration Test 98',
|
13
|
+
description: 'This is a team for doing integration tests.'
|
14
|
+
)
|
15
|
+
expect(organization).to be_a(Trello::Organization)
|
16
|
+
|
17
|
+
expect(organization.id).not_to be_nil
|
18
|
+
expect(organization.name).to eq('integrationtest98')
|
19
|
+
expect(organization.display_name).to eq('Integration Test 98')
|
20
|
+
expect(organization.description).to eq('This is a team for doing integration tests.')
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe 'Trello::Organization#find' do
|
4
|
+
include IntegrationHelpers
|
5
|
+
|
6
|
+
before { setup_trello }
|
7
|
+
|
8
|
+
it 'find with id and get all fields' do
|
9
|
+
VCR.use_cassette('organization_find_with_id_and_get_all_fields') do
|
10
|
+
organization = Trello::Organization.find('5e93ba154634282b6df23bcc')
|
11
|
+
expect(organization).to be_a(Trello::Organization)
|
12
|
+
|
13
|
+
expect(organization.id).not_to be_nil
|
14
|
+
expect(organization.name).not_to be_nil
|
15
|
+
expect(organization.display_name).not_to be_nil
|
16
|
+
expect(organization.team_type).not_to be_nil
|
17
|
+
expect(organization.description).not_to be_nil
|
18
|
+
expect(organization.url).not_to be_nil
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'find with id and get specific fields' do
|
23
|
+
VCR.use_cassette('organization_find_with_id_and_get_specific_fields') do
|
24
|
+
organization = Trello::Organization.find('5e93ba154634282b6df23bcc', fields: 'name,url')
|
25
|
+
expect(organization).to be_a(Trello::Organization)
|
26
|
+
|
27
|
+
expect(organization.id).not_to be_nil
|
28
|
+
expect(organization.name).not_to be_nil
|
29
|
+
expect(organization.url).not_to be_nil
|
30
|
+
|
31
|
+
expect(organization.display_name).to be_nil
|
32
|
+
expect(organization.team_type).to be_nil
|
33
|
+
expect(organization.description).to be_nil
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe 'Trell::Organization.update!' do
|
4
|
+
include IntegrationHelpers
|
5
|
+
|
6
|
+
before { setup_trello }
|
7
|
+
|
8
|
+
it 'can update! a organization' do
|
9
|
+
VCR.use_cassette('can_success_update_bong_a_organization') do
|
10
|
+
organization = Trello::Organization.find('5f60d9f72c17b23dbb2d9d79')
|
11
|
+
|
12
|
+
expect(organization.name).to eq('integrationtest98')
|
13
|
+
expect(organization.display_name).to eq('Integration Test 98')
|
14
|
+
expect(organization.description).to eq('This is a team for doing integration tests.')
|
15
|
+
|
16
|
+
organization.name = 'integrationtest99'
|
17
|
+
organization.display_name = 'Integration Test 99'
|
18
|
+
organization.description = 'This is a team for doing integration tests for 99'
|
19
|
+
|
20
|
+
organization.update!
|
21
|
+
|
22
|
+
expect(organization.name).to eq('integrationtest99')
|
23
|
+
expect(organization.display_name).to eq('Integration Test 99')
|
24
|
+
expect(organization.description).to eq('This is a team for doing integration tests for 99')
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe 'Trello::Token#find' do
|
4
|
+
include IntegrationHelpers
|
5
|
+
|
6
|
+
before { setup_trello }
|
7
|
+
|
8
|
+
it 'find with token string' do
|
9
|
+
VCR.use_cassette('token_find_with_token_string') do
|
10
|
+
token = Trello::Token.find('MEMBER_TOKEN')
|
11
|
+
expect(token).to be_a(Trello::Token)
|
12
|
+
|
13
|
+
expect(token.id).not_to be_nil
|
14
|
+
expect(token.identifier).not_to be_nil
|
15
|
+
expect(token.member_id).not_to be_nil
|
16
|
+
expect(token.created_at).not_to be_nil
|
17
|
+
# expect(token.expires_at).not_to be_nil
|
18
|
+
expect(token.permissions).not_to be_nil
|
19
|
+
expect(token.webhooks).not_to be_nil
|
20
|
+
expect(token.webhooks[0]).to be_a(Trello::Webhook)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe 'Trello::Webhook.create' do
|
4
|
+
include IntegrationHelpers
|
5
|
+
|
6
|
+
before { setup_trello }
|
7
|
+
|
8
|
+
it 'can success create the custom_field' do
|
9
|
+
VCR.use_cassette('can_success_create_a_webhook') do
|
10
|
+
webhook = Trello::Webhook.create(
|
11
|
+
description: 'test',
|
12
|
+
model_id: '5fa759f1564c6e5bb803c61e',
|
13
|
+
callback_url: 'https://example.com/webhook/trello_callbacks',
|
14
|
+
active: true
|
15
|
+
)
|
16
|
+
expect(webhook).to be_a(Trello::Webhook)
|
17
|
+
|
18
|
+
expect(webhook.id).not_to be_nil
|
19
|
+
expect(webhook.description).to eq('test')
|
20
|
+
expect(webhook.model_id).to eq('5fa759f1564c6e5bb803c61e')
|
21
|
+
expect(webhook.callback_url).to eq('https://example.com/webhook/trello_callbacks')
|
22
|
+
expect(webhook.active).to eq(true)
|
23
|
+
expect(webhook.consecutive_failures).to eq(0)
|
24
|
+
expect(webhook.first_consecutive_fail_date).to be_nil
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe 'Trello::Webhook#delete' do
|
4
|
+
include IntegrationHelpers
|
5
|
+
|
6
|
+
before { setup_trello }
|
7
|
+
|
8
|
+
it 'find with id' do
|
9
|
+
VCR.use_cassette('webhook_delete') do
|
10
|
+
webhook = Trello::Webhook.find('5fa8a1e0009b2a6a669e6efa')
|
11
|
+
expect(webhook).to be_a(Trello::Webhook)
|
12
|
+
|
13
|
+
webhook.delete
|
14
|
+
|
15
|
+
expect {
|
16
|
+
Trello::Webhook.find('5fa8a1e0009b2a6a669e6efa')
|
17
|
+
}.to raise_error Trello::Error, 'The requested resource was not found.'
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe 'Trello::Webhook#find' do
|
4
|
+
include IntegrationHelpers
|
5
|
+
|
6
|
+
before { setup_trello }
|
7
|
+
|
8
|
+
it 'find with id' do
|
9
|
+
VCR.use_cassette('webhook_find_with_id') do
|
10
|
+
webhook = Trello::Webhook.find('5fa8a1e0009b2a6a669e6efa')
|
11
|
+
expect(webhook).to be_a(Trello::Webhook)
|
12
|
+
|
13
|
+
expect(webhook.id).not_to be_nil
|
14
|
+
expect(webhook.description).not_to be_nil
|
15
|
+
expect(webhook.model_id).not_to be_nil
|
16
|
+
expect(webhook.callback_url).not_to be_nil
|
17
|
+
expect(webhook.active).not_to be_nil
|
18
|
+
expect(webhook.consecutive_failures).not_to be_nil
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe 'Trell::Webhook.update!' do
|
4
|
+
include IntegrationHelpers
|
5
|
+
|
6
|
+
before { setup_trello }
|
7
|
+
|
8
|
+
it 'can update! a webhook' do
|
9
|
+
VCR.use_cassette('can_success_update_bong_a_webhook') do
|
10
|
+
webhook = Trello::Webhook.find('5fa8a1e0009b2a6a669e6efa')
|
11
|
+
|
12
|
+
expect(webhook.description).to eq('test')
|
13
|
+
|
14
|
+
webhook.description = 'Test - Changed'
|
15
|
+
|
16
|
+
webhook.update!
|
17
|
+
|
18
|
+
expect(webhook.description).to eq('Test - Changed')
|
19
|
+
webhook = Trello::Webhook.find('5fa8a1e0009b2a6a669e6efa')
|
20
|
+
expect(webhook.description).to eq('Test - Changed')
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
data/spec/item_spec.rb
CHANGED
@@ -31,7 +31,7 @@ module Trello
|
|
31
31
|
end
|
32
32
|
|
33
33
|
it 'knows its pos' do
|
34
|
-
expect(item.
|
34
|
+
expect(item.position).to eq details['pos']
|
35
35
|
end
|
36
36
|
|
37
37
|
describe '#complete?' do
|
@@ -59,7 +59,7 @@ module Trello
|
|
59
59
|
'name' => 'name',
|
60
60
|
'type' => 'type',
|
61
61
|
'state' => 'state',
|
62
|
-
'pos' => '
|
62
|
+
'pos' => 'position'
|
63
63
|
}
|
64
64
|
|
65
65
|
item = Item.new(expected)
|
data/spec/label_spec.rb
CHANGED
@@ -20,7 +20,7 @@ module Trello
|
|
20
20
|
it "delegates to Trello.client#find" do
|
21
21
|
expect(client)
|
22
22
|
.to receive(:find)
|
23
|
-
.with(
|
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
|
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(
|
77
|
+
.with('/labels', expected_payload)
|
79
78
|
.and_return result
|
80
79
|
|
81
|
-
|
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
|
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
|
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
|
125
|
-
.and_return
|
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"
|
254
|
+
it "label hasn't been mark as changed" do
|
256
255
|
label.update_fields(fields)
|
257
256
|
|
258
257
|
expect(label.changed?).to be_falsy
|
@@ -269,7 +268,6 @@ module Trello
|
|
269
268
|
expect(label.name).to eq label_detail['name']
|
270
269
|
expect(label.color).to eq label_detail['color']
|
271
270
|
expect(label.board_id).to eq label_detail['idBoard']
|
272
|
-
expect(label.uses).to eq label_detail['uses']
|
273
271
|
end
|
274
272
|
|
275
273
|
it "label hasn't been mark as changed" do
|
data/spec/list_spec.rb
CHANGED
@@ -84,11 +84,10 @@ module Trello
|
|
84
84
|
result = JSON.generate(payload)
|
85
85
|
|
86
86
|
expected_payload = {
|
87
|
-
name
|
88
|
-
|
89
|
-
idBoard
|
90
|
-
|
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
|
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
|
-
|
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
|
-
|
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
|
data/spec/notification_spec.rb
CHANGED
@@ -82,7 +82,7 @@ module Trello
|
|
82
82
|
.with("/members/#{user_details['id']}", {})
|
83
83
|
.and_return user_payload
|
84
84
|
|
85
|
-
expect(notification.
|
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.
|
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' => '
|
130
|
+
'idMemberCreator' => 'creator_id'
|
131
131
|
}
|
132
132
|
|
133
133
|
notification = Notification.new(expected)
|
data/spec/organization_spec.rb
CHANGED
@@ -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
|
-
'
|
56
|
-
'
|
57
|
-
'
|
56
|
+
'logoUrl' => 'logo_url',
|
57
|
+
'products' => 'products',
|
58
|
+
'powerUps' => 'power_ups'
|
58
59
|
}
|
59
60
|
|
60
61
|
organization = Organization.new(expected)
|
data/spec/spec_helper.rb
CHANGED
@@ -8,6 +8,7 @@ require 'vcr'
|
|
8
8
|
require 'pry-byebug' if RUBY_ENGINE != 'jruby'
|
9
9
|
|
10
10
|
VCR.configure do |config|
|
11
|
+
config.default_cassette_options = { match_requests_on: %i[uri method body] }
|
11
12
|
config.cassette_library_dir = 'spec/cassettes'
|
12
13
|
config.hook_into :webmock
|
13
14
|
|
@@ -58,6 +59,14 @@ RSpec.configure do |rspec|
|
|
58
59
|
rspec.color = true
|
59
60
|
end
|
60
61
|
|
62
|
+
Trello::HTTP_CLIENTS.each do |key, _client|
|
63
|
+
RSpec.shared_context "using #{key}" do
|
64
|
+
before do
|
65
|
+
Trello.http_client = key
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
61
70
|
RSpec::Expectations.configuration.on_potential_false_positives = :nothing
|
62
71
|
|
63
72
|
module IntegrationHelpers
|
@@ -65,10 +74,31 @@ module IntegrationHelpers
|
|
65
74
|
Trello.configure do |config|
|
66
75
|
config.developer_public_key = ENV['TRELLO_DEVELOPER_PUBLIC_KEY'] || 'developerpublickey'
|
67
76
|
config.member_token = ENV['TRELLO_MEMBER_TOKEN'] || 'membertoken'
|
77
|
+
config.http_client = ENV['HTTP_CLIENT_GEM'] || 'rest-client'
|
68
78
|
end
|
69
79
|
end
|
70
80
|
end
|
71
81
|
|
82
|
+
RSpec::Matchers.define :match_hash_with_indifferent_access do |expected|
|
83
|
+
match do |actual|
|
84
|
+
actual.with_indifferent_access == expected.with_indifferent_access
|
85
|
+
end
|
86
|
+
|
87
|
+
failure_message do |actual|
|
88
|
+
<<~EOF
|
89
|
+
expected: #{expected}
|
90
|
+
got: #{actual}
|
91
|
+
EOF
|
92
|
+
end
|
93
|
+
|
94
|
+
failure_message_when_negated do |actual|
|
95
|
+
<<~EOF
|
96
|
+
expected: value != #{expected}
|
97
|
+
got: #{actual}
|
98
|
+
EOF
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
72
102
|
module Helpers
|
73
103
|
def user_details
|
74
104
|
{
|
@@ -344,20 +374,7 @@ module Helpers
|
|
344
374
|
{
|
345
375
|
'id' => '4ee7e59ae582acdec8000291',
|
346
376
|
'name' => 'publicorg',
|
347
|
-
'desc' => 'This is a test organization'
|
348
|
-
'members' => [{
|
349
|
-
'id' => '4ee7df3ce582acdec80000b2',
|
350
|
-
'username' => 'alicetester',
|
351
|
-
'fullName' => 'Alice Tester'
|
352
|
-
}, {
|
353
|
-
'id' => '4ee7df74e582acdec80000b6',
|
354
|
-
'username' => 'davidtester',
|
355
|
-
'fullName' => 'David Tester'
|
356
|
-
}, {
|
357
|
-
'id' => '4ee7e2e1e582acdec8000112',
|
358
|
-
'username' => 'edtester',
|
359
|
-
'fullName' => 'Ed Tester'
|
360
|
-
}]
|
377
|
+
'desc' => 'This is a test organization'
|
361
378
|
}
|
362
379
|
end
|
363
380
|
|
data/spec/token_spec.rb
CHANGED
@@ -69,20 +69,19 @@ module Trello
|
|
69
69
|
|
70
70
|
describe "#update_fields" do
|
71
71
|
it "does not set any fields when the fields argument is empty" do
|
72
|
-
|
73
|
-
'id' => '
|
74
|
-
'idMember' => '
|
75
|
-
'permissions' =>
|
76
|
-
'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
|
-
|
84
|
-
|
85
|
-
|
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
|