ruby-trello 1.2.1 → 1.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.
- checksums.yaml +4 -4
- data/README.md +6 -5
- data/lib/trello/board.rb +6 -8
- data/lib/trello/card.rb +14 -28
- data/lib/trello/checklist.rb +14 -0
- data/lib/trello/item.rb +4 -0
- data/lib/trello/label.rb +3 -3
- data/lib/trello/list.rb +13 -3
- data/lib/trello/organization.rb +14 -7
- data/spec/action_spec.rb +67 -31
- data/spec/array_spec.rb +1 -1
- data/spec/association_spec.rb +11 -7
- data/spec/basic_auth_policy_spec.rb +4 -4
- data/spec/board_spec.rb +169 -92
- data/spec/card_spec.rb +232 -119
- data/spec/checklist_spec.rb +109 -16
- data/spec/client_spec.rb +83 -45
- data/spec/configuration_spec.rb +24 -43
- data/spec/hash_spec.rb +5 -1
- data/spec/item_spec.rb +27 -9
- data/spec/label_spec.rb +52 -27
- data/spec/list_spec.rb +86 -29
- data/spec/member_spec.rb +62 -40
- data/spec/notification_spec.rb +57 -22
- data/spec/oauth_policy_spec.rb +45 -24
- data/spec/organization_spec.rb +16 -8
- data/spec/spec_helper.rb +28 -3
- data/spec/string_spec.rb +11 -8
- data/spec/token_spec.rb +31 -11
- data/spec/trello_spec.rb +20 -23
- data/spec/webhook_spec.rb +24 -9
- metadata +4 -6
- data/spec/item_state_spec.rb +0 -0
data/spec/hash_spec.rb
CHANGED
@@ -5,7 +5,11 @@ describe Hash, '#jsoned_into' do
|
|
5
5
|
include Helpers
|
6
6
|
|
7
7
|
it "should convert a single parsed json into card" do
|
8
|
-
Trello::Card
|
8
|
+
expect(Trello::Card)
|
9
|
+
.to receive(:new)
|
10
|
+
.once
|
11
|
+
.with(cards_details.first)
|
12
|
+
|
9
13
|
cards_details.first.jsoned_into(Trello::Card)
|
10
14
|
end
|
11
15
|
end
|
data/spec/item_spec.rb
CHANGED
@@ -2,36 +2,54 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
module Trello
|
4
4
|
describe Item do
|
5
|
-
|
6
|
-
|
5
|
+
let(:details) {
|
6
|
+
{
|
7
7
|
'id' => 'abcdef123456789123456789',
|
8
8
|
'name' => 'test item',
|
9
9
|
'type' => 'check',
|
10
10
|
'state' => 'complete',
|
11
11
|
'pos' => 0
|
12
12
|
}
|
13
|
+
}
|
13
14
|
|
14
|
-
|
15
|
-
end
|
15
|
+
let(:item) { Item.new(details) }
|
16
16
|
|
17
17
|
it 'gets its id' do
|
18
|
-
|
18
|
+
expect(item.id).to eq details['id']
|
19
19
|
end
|
20
20
|
|
21
21
|
it 'gets its name' do
|
22
|
-
|
22
|
+
expect(item.name).to eq details['name']
|
23
23
|
end
|
24
24
|
|
25
25
|
it 'knows its type' do
|
26
|
-
|
26
|
+
expect(item.type).to eq details['type']
|
27
27
|
end
|
28
28
|
|
29
29
|
it 'knows its state' do
|
30
|
-
|
30
|
+
expect(item.state).to eq details['state']
|
31
31
|
end
|
32
32
|
|
33
33
|
it 'knows its pos' do
|
34
|
-
|
34
|
+
expect(item.pos).to eq details['pos']
|
35
|
+
end
|
36
|
+
|
37
|
+
describe '#complete?' do
|
38
|
+
before do
|
39
|
+
allow(item)
|
40
|
+
.to receive(:state)
|
41
|
+
.and_return state
|
42
|
+
end
|
43
|
+
|
44
|
+
context 'when complete' do
|
45
|
+
let(:state) { 'complete' }
|
46
|
+
it { expect(item).to be_complete }
|
47
|
+
end
|
48
|
+
|
49
|
+
context 'when complete' do
|
50
|
+
let(:state) { 'incomplete' }
|
51
|
+
it { expect(item).not_to be_complete }
|
52
|
+
end
|
35
53
|
end
|
36
54
|
end
|
37
55
|
end
|
data/spec/label_spec.rb
CHANGED
@@ -7,21 +7,26 @@ module Trello
|
|
7
7
|
let(:label) { client.find(:label, 'abcdef123456789123456789') }
|
8
8
|
let(:client) { Client.new }
|
9
9
|
|
10
|
-
before
|
11
|
-
client
|
12
|
-
|
10
|
+
before do
|
11
|
+
allow(client)
|
12
|
+
.to receive(:get)
|
13
|
+
.with("/labels/abcdef123456789123456789", {})
|
14
|
+
.and_return JSON.generate(label_details.first)
|
13
15
|
end
|
14
16
|
|
15
17
|
context "finding" do
|
16
18
|
let(:client) { Trello.client }
|
17
19
|
|
18
20
|
it "delegates to Trello.client#find" do
|
19
|
-
client
|
21
|
+
expect(client)
|
22
|
+
.to receive(:find)
|
23
|
+
.with(:label, 'abcdef123456789123456789', {})
|
24
|
+
|
20
25
|
Label.find('abcdef123456789123456789')
|
21
26
|
end
|
22
27
|
|
23
28
|
it "is equivalent to client#find" do
|
24
|
-
Label.find('abcdef123456789123456789').
|
29
|
+
expect(Label.find('abcdef123456789123456789')).to eq(label)
|
25
30
|
end
|
26
31
|
end
|
27
32
|
|
@@ -29,18 +34,15 @@ module Trello
|
|
29
34
|
let(:client) { Trello.client }
|
30
35
|
|
31
36
|
it "creates a new record" do
|
32
|
-
|
33
|
-
label.should be_valid
|
37
|
+
expect(Label.new(label_details.first)).to be_valid
|
34
38
|
end
|
35
39
|
|
36
40
|
it 'must not be valid if not given a name' do
|
37
|
-
|
38
|
-
label.should_not be_valid
|
41
|
+
expect(Label.new('idBoard' => lists_details.first['board_id'])).to_not be_valid
|
39
42
|
end
|
40
43
|
|
41
44
|
it 'must not be valid if not given a board id' do
|
42
|
-
|
43
|
-
label.should_not be_valid
|
45
|
+
expect(Label.new('name' => lists_details.first['name'])).to_not be_valid
|
44
46
|
end
|
45
47
|
|
46
48
|
it 'creates a new record and saves it on Trello', refactor: true do
|
@@ -53,11 +55,14 @@ module Trello
|
|
53
55
|
|
54
56
|
expected_payload = {name: "Test Label", color: nil, idBoard: "abcdef123456789123456789" }
|
55
57
|
|
56
|
-
client
|
58
|
+
expect(client)
|
59
|
+
.to receive(:post)
|
60
|
+
.with("/labels", expected_payload)
|
61
|
+
.and_return result
|
57
62
|
|
58
63
|
label = Label.create(label_details.first.merge(payload.merge(board_id: boards_details.first['id'])))
|
59
64
|
|
60
|
-
label.
|
65
|
+
expect(label).to be_a Label
|
61
66
|
end
|
62
67
|
end
|
63
68
|
|
@@ -69,7 +74,10 @@ module Trello
|
|
69
74
|
name: expected_new_name,
|
70
75
|
}
|
71
76
|
|
72
|
-
client
|
77
|
+
expect(client)
|
78
|
+
.to receive(:put)
|
79
|
+
.once
|
80
|
+
.with("/labels/abcdef123456789123456789", payload)
|
73
81
|
|
74
82
|
label.name = expected_new_name
|
75
83
|
label.save
|
@@ -82,7 +90,10 @@ module Trello
|
|
82
90
|
color: expected_new_color,
|
83
91
|
}
|
84
92
|
|
85
|
-
client
|
93
|
+
expect(client)
|
94
|
+
.to receive(:put)
|
95
|
+
.once
|
96
|
+
.with("/labels/abcdef123456789123456789", payload)
|
86
97
|
|
87
98
|
label.color = expected_new_color
|
88
99
|
label.save
|
@@ -90,8 +101,11 @@ module Trello
|
|
90
101
|
|
91
102
|
it "can update with any valid color" do
|
92
103
|
%w(green yellow orange red purple blue sky lime pink black).each do |color|
|
93
|
-
client
|
94
|
-
|
104
|
+
allow(client)
|
105
|
+
.to receive(:put)
|
106
|
+
.with("/labels/abcdef123456789123456789", {color: color})
|
107
|
+
.and_return "not important"
|
108
|
+
|
95
109
|
label.color = color
|
96
110
|
label.save
|
97
111
|
expect(label.errors).to be_empty
|
@@ -99,44 +113,55 @@ module Trello
|
|
99
113
|
end
|
100
114
|
|
101
115
|
it "throws an error when trying to update a label with an unknown colour" do
|
102
|
-
client
|
103
|
-
|
116
|
+
allow(client)
|
117
|
+
.to receive(:put)
|
118
|
+
.with("/labels/abcdef123456789123456789", {})
|
119
|
+
.and_return "not important"
|
120
|
+
|
104
121
|
label.color = 'mauve'
|
105
122
|
label.save
|
123
|
+
|
106
124
|
expect(label.errors.full_messages.to_sentence).to eq("Label color 'mauve' does not exist")
|
107
125
|
end
|
108
126
|
end
|
109
127
|
|
110
128
|
context "deleting" do
|
111
129
|
it "deletes the label" do
|
112
|
-
client
|
130
|
+
expect(client)
|
131
|
+
.to receive(:delete)
|
132
|
+
.with("/labels/#{label.id}")
|
133
|
+
|
113
134
|
label.delete
|
114
135
|
end
|
115
136
|
end
|
116
137
|
|
117
138
|
context "fields" do
|
118
139
|
it "gets its id" do
|
119
|
-
label.id.
|
140
|
+
expect(label.id).to_not be_nil
|
120
141
|
end
|
121
142
|
|
122
143
|
it "gets its name" do
|
123
|
-
label.name.
|
144
|
+
expect(label.name).to_not be_nil
|
124
145
|
end
|
125
146
|
|
126
147
|
it "gets its usage" do
|
127
|
-
label.uses.
|
148
|
+
expect(label.uses).to_not be_nil
|
128
149
|
end
|
129
150
|
|
130
151
|
it "gets its color" do
|
131
|
-
label.color.
|
152
|
+
expect(label.color).to_not be_nil
|
132
153
|
end
|
133
154
|
end
|
134
155
|
|
135
156
|
context "boards" do
|
136
157
|
it "has a board" do
|
137
|
-
client
|
138
|
-
|
158
|
+
expect(client)
|
159
|
+
.to receive(:get)
|
160
|
+
.with("/boards/abcdef123456789123456789", {})
|
161
|
+
.and_return JSON.generate(boards_details.first)
|
162
|
+
|
163
|
+
expect(label.board).to_not be_nil
|
139
164
|
end
|
140
165
|
end
|
141
166
|
end
|
142
|
-
end
|
167
|
+
end
|
data/spec/list_spec.rb
CHANGED
@@ -8,20 +8,30 @@ module Trello
|
|
8
8
|
let(:client) { Client.new }
|
9
9
|
|
10
10
|
before(:each) do
|
11
|
-
client
|
12
|
-
|
11
|
+
allow(client)
|
12
|
+
.to receive(:get)
|
13
|
+
.with('/lists/abcdef123456789123456789', {})
|
14
|
+
.and_return JSON.generate(lists_details.first)
|
15
|
+
|
16
|
+
allow(client)
|
17
|
+
.to receive(:get)
|
18
|
+
.with('/boards/abcdef123456789123456789', {})
|
19
|
+
.and_return JSON.generate(boards_details.first)
|
13
20
|
end
|
14
21
|
|
15
22
|
context 'finding' do
|
16
23
|
let(:client) { Trello.client }
|
17
24
|
|
18
25
|
it 'delegates to client#find' do
|
19
|
-
client
|
26
|
+
expect(client)
|
27
|
+
.to receive(:find)
|
28
|
+
.with(:list, 'abcdef123456789123456789', {})
|
29
|
+
|
20
30
|
List.find('abcdef123456789123456789')
|
21
31
|
end
|
22
32
|
|
23
33
|
it 'is equivalent to client#find' do
|
24
|
-
List.find('abcdef123456789123456789').
|
34
|
+
expect(List.find('abcdef123456789123456789')).to eq(list)
|
25
35
|
end
|
26
36
|
end
|
27
37
|
|
@@ -30,34 +40,36 @@ module Trello
|
|
30
40
|
|
31
41
|
it 'creates a new record' do
|
32
42
|
list = List.new(lists_details.first)
|
33
|
-
list.
|
43
|
+
expect(list).to be_valid
|
34
44
|
end
|
35
45
|
|
36
46
|
it 'must not be valid if not given a name' do
|
37
47
|
list = List.new(lists_details.first.except('name'))
|
38
|
-
list.
|
48
|
+
expect(list).to_not be_valid
|
39
49
|
end
|
40
50
|
|
41
51
|
it 'must not be valid if not given a list id' do
|
42
52
|
list = List.new(lists_details.first.except('id'))
|
43
|
-
list.
|
53
|
+
expect(list).to_not be_valid
|
44
54
|
end
|
45
55
|
|
46
56
|
it 'creates a new record and saves it on Trello', refactor: true do
|
47
57
|
payload = {
|
48
58
|
name: 'Test List',
|
49
|
-
board_id: 'abcdef123456789123456789'
|
59
|
+
board_id: 'abcdef123456789123456789',
|
60
|
+
pos: 42
|
50
61
|
}
|
51
62
|
|
52
63
|
result = JSON.generate(payload)
|
53
64
|
|
54
|
-
expected_payload = {name: 'Test List', closed: false, idBoard: 'abcdef123456789123456789'}
|
65
|
+
expected_payload = {name: 'Test List', closed: false, idBoard: 'abcdef123456789123456789', pos: 42}
|
55
66
|
|
56
|
-
client
|
67
|
+
expect(client)
|
68
|
+
.to receive(:post)
|
69
|
+
.with('/lists', expected_payload).and_return result
|
57
70
|
|
58
71
|
list = List.create(payload)
|
59
|
-
|
60
|
-
list.class.should be List
|
72
|
+
expect(list).to be_a List
|
61
73
|
end
|
62
74
|
end
|
63
75
|
|
@@ -67,70 +79,115 @@ module Trello
|
|
67
79
|
|
68
80
|
payload = {
|
69
81
|
name: expected_new_name,
|
70
|
-
closed: false
|
82
|
+
closed: false,
|
83
|
+
pos: list.pos
|
71
84
|
}
|
72
85
|
|
73
|
-
client
|
86
|
+
expect(client)
|
87
|
+
.to receive(:put)
|
88
|
+
.once
|
89
|
+
.with('/lists/abcdef123456789123456789', payload)
|
90
|
+
|
74
91
|
list.name = expected_new_name
|
75
92
|
list.save
|
76
93
|
end
|
94
|
+
|
95
|
+
it 'updates position' do
|
96
|
+
new_position = 42
|
97
|
+
payload = {
|
98
|
+
name: list.name,
|
99
|
+
closed: list.closed,
|
100
|
+
pos: new_position
|
101
|
+
}
|
102
|
+
|
103
|
+
expect(client)
|
104
|
+
.to receive(:put)
|
105
|
+
.once
|
106
|
+
.with('/lists/abcdef123456789123456789', payload)
|
107
|
+
|
108
|
+
list.pos = new_position
|
109
|
+
list.save
|
110
|
+
end
|
77
111
|
end
|
78
112
|
|
79
113
|
context 'fields' do
|
80
114
|
it 'gets its id' do
|
81
|
-
list.id.
|
115
|
+
expect(list.id).to eq lists_details.first['id']
|
82
116
|
end
|
83
117
|
|
84
118
|
it 'gets its name' do
|
85
|
-
list.name.
|
119
|
+
expect(list.name).to eq lists_details.first['name']
|
86
120
|
end
|
87
121
|
|
88
122
|
it 'knows if it is open or closed' do
|
89
|
-
list.closed.
|
123
|
+
expect(list.closed).to eq lists_details.first['closed']
|
90
124
|
end
|
91
125
|
|
92
126
|
it 'has a board' do
|
93
|
-
list.board.
|
127
|
+
expect(list.board).to eq Board.new(boards_details.first)
|
94
128
|
end
|
95
129
|
|
96
130
|
it 'gets its position' do
|
97
|
-
list.pos.
|
131
|
+
expect(list.pos).to eq lists_details.first['pos']
|
98
132
|
end
|
99
133
|
end
|
100
134
|
|
101
135
|
context 'actions' do
|
102
136
|
it 'has a list of actions' do
|
103
|
-
client
|
104
|
-
|
137
|
+
allow(client)
|
138
|
+
.to receive(:get)
|
139
|
+
.with('/lists/abcdef123456789123456789/actions', { filter: :all })
|
140
|
+
.and_return actions_payload
|
141
|
+
|
142
|
+
expect(list.actions.count).to be > 0
|
105
143
|
end
|
106
144
|
end
|
107
145
|
|
108
146
|
context 'cards' do
|
109
147
|
it 'has a list of cards' do
|
110
|
-
client
|
111
|
-
|
148
|
+
allow(client)
|
149
|
+
.to receive(:get)
|
150
|
+
.with('/lists/abcdef123456789123456789/cards', { filter: :open })
|
151
|
+
.and_return cards_payload
|
152
|
+
|
153
|
+
expect(list.cards.count).to be > 0
|
154
|
+
end
|
155
|
+
|
156
|
+
it 'moves cards to another list' do
|
157
|
+
other_list = List.new(lists_details.first.merge(id: 'otherListID', cards: []))
|
158
|
+
|
159
|
+
allow(client)
|
160
|
+
.to receive(:post)
|
161
|
+
.with('/lists/abcdef123456789123456789/moveAllCards', { idBoard: other_list.board_id, idList: other_list.id })
|
162
|
+
.and_return cards_payload
|
163
|
+
|
164
|
+
expect(list.move_all_cards(other_list)).to eq cards_payload
|
112
165
|
end
|
113
166
|
end
|
114
167
|
|
115
168
|
describe '#closed?' do
|
116
169
|
it 'returns the closed attribute' do
|
117
|
-
expect(list
|
170
|
+
expect(list).to_not be_closed
|
118
171
|
end
|
119
172
|
end
|
120
173
|
|
121
174
|
describe '#close' do
|
122
175
|
it 'updates the close attribute to true' do
|
123
176
|
list.close
|
124
|
-
expect(list
|
177
|
+
expect(list).to be_closed
|
125
178
|
end
|
126
179
|
end
|
127
180
|
|
128
181
|
describe '#close!' do
|
129
182
|
it 'updates the close attribute to true and saves the list' do
|
130
|
-
client
|
131
|
-
|
132
|
-
|
133
|
-
|
183
|
+
expect(client)
|
184
|
+
.to receive(:put)
|
185
|
+
.once
|
186
|
+
.with('/lists/abcdef123456789123456789', {
|
187
|
+
name: list.name,
|
188
|
+
closed: true,
|
189
|
+
pos: list.pos
|
190
|
+
})
|
134
191
|
|
135
192
|
list.close!
|
136
193
|
end
|