troo 0.0.9 → 0.0.10
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/.gitignore +2 -2
- data/Gemfile.lock +40 -32
- data/Guardfile +9 -1
- data/README.md +15 -10
- data/bin/troo +22 -2
- data/config/en.yml +11 -1
- data/config/help +16 -0
- data/{.trooconf.example → config/trooconf.yml} +4 -2
- data/features/add/card.feature +1 -1
- data/features/add/comment.feature +1 -1
- data/features/add/list.feature +1 -1
- data/features/default/board.feature +1 -1
- data/features/default/card.feature +1 -1
- data/features/default/list.feature +1 -1
- data/features/move/card.feature +5 -5
- data/features/refresh/board.feature +1 -1
- data/features/refresh/card.feature +1 -1
- data/features/refresh/list.feature +1 -1
- data/features/show/board.feature +11 -3
- data/features/show/boards.feature +1 -0
- data/features/show/card.feature +7 -7
- data/features/show/comment.feature +15 -6
- data/features/show/list.feature +3 -1
- data/features/status.feature +2 -2
- data/features/step_definitions/fabrication_steps.rb +11 -11
- data/features/step_definitions/troo_steps.rb +1 -1
- data/features/support/cassettes/200_board_by_id.yml +56 -0
- data/features/support/cassettes/200_card_by_id.yml +77 -0
- data/features/support/cassettes/200_create_board.yml +186 -0
- data/features/support/cassettes/200_create_card.yml +86 -0
- data/features/support/cassettes/200_create_comment.yml +73 -0
- data/features/support/cassettes/200_create_list.yml +53 -0
- data/{test/cassettes/list_by_id.yml → features/support/cassettes/200_list_by_id.yml} +6 -6
- data/features/support/cassettes/200_move_card_200_board.yml +86 -0
- data/features/support/cassettes/200_move_card_200_list.yml +86 -0
- data/features/support/cassettes/200_move_card_400_list.yml +46 -0
- data/{test/cassettes/lists_by_board_id.yml → features/support/cassettes/400_board_by_id.yml} +10 -10
- data/features/support/cassettes/400_card_by_id.yml +46 -0
- data/features/support/cassettes/400_create_card.yml +46 -0
- data/features/support/cassettes/400_create_comment.yml +46 -0
- data/features/support/cassettes/400_create_list.yml +46 -0
- data/features/support/cassettes/400_list_by_id.yml +46 -0
- data/features/support/cassettes/400_move_card_200_list.yml +46 -0
- data/features/support/cassettes/400_move_card_400_board.yml +46 -0
- data/features/support/cassettes/boards_all.yml +286 -0
- data/features/support/env.rb +1 -2
- data/lib/troo/cli/commands/refresh/all.rb +2 -0
- data/lib/troo/cli/main.rb +2 -23
- data/lib/troo/configuration.rb +5 -0
- data/lib/troo/database.rb +29 -0
- data/lib/troo/decorators/resource.rb +24 -10
- data/lib/troo/helpers/model_helpers.rb +3 -2
- data/lib/troo/models/board.rb +1 -1
- data/lib/troo/models/card.rb +1 -1
- data/lib/troo/models/comment.rb +0 -4
- data/lib/troo/models/list.rb +1 -1
- data/lib/troo/presentation/formatter.rb +99 -4
- data/lib/troo/presentation/template.rb +8 -9
- data/lib/troo/presenters/board.rb +24 -26
- data/lib/troo/presenters/card.rb +3 -1
- data/lib/troo/presenters/list.rb +30 -17
- data/lib/troo/presenters/resource.rb +90 -0
- data/lib/troo/retrieval/local.rb +5 -1
- data/lib/troo/troo.rb +2 -0
- data/lib/troo/version.rb +1 -1
- data/lib/troo.rb +7 -4
- data/test/cassettes/create_board.yml +15 -9
- data/test/cassettes/create_card.yml +10 -10
- data/test/cassettes/create_comment.yml +9 -9
- data/test/cassettes/create_list.yml +5 -5
- data/test/cassettes/move_card_board.yml +11 -11
- data/test/cassettes/move_card_list.yml +11 -11
- data/test/lib/troo/api/endpoints_test.rb +2 -2
- data/test/lib/troo/cli/commands/add_test.rb +2 -2
- data/test/lib/troo/cli/commands/refresh/all_test.rb +4 -9
- data/test/lib/troo/cli/main_test.rb +0 -25
- data/test/lib/troo/configuration_test.rb +18 -13
- data/test/lib/troo/decorators/member_test.rb +0 -27
- data/test/lib/troo/decorators/resource_test.rb +0 -32
- data/test/lib/troo/helpers/model_helpers_test.rb +15 -3
- data/test/lib/troo/models/board_test.rb +45 -1
- data/test/lib/troo/models/card_test.rb +60 -6
- data/test/lib/troo/models/comment_test.rb +44 -4
- data/test/lib/troo/models/database_test.rb +19 -0
- data/test/lib/troo/models/list_test.rb +46 -2
- data/test/lib/troo/models/member_test.rb +51 -1
- data/test/lib/troo/presentation/formatter_test.rb +54 -2
- data/test/lib/troo/presentation/template_test.rb +4 -4
- data/test/lib/troo/presenters/board_test.rb +4 -3
- data/test/lib/troo/presenters/list_test.rb +3 -3
- data/test/lib/troo/presenters/member_test.rb +1 -1
- data/test/lib/troo/presenters/resource_test.rb +79 -0
- data/test/lib/troo/remote/board_test.rb +5 -8
- data/test/lib/troo/remote/card_test.rb +7 -11
- data/test/lib/troo/remote/comment_test.rb +10 -14
- data/test/lib/troo/remote/list_test.rb +5 -9
- data/test/lib/troo/remote/member_test.rb +5 -9
- data/test/lib/troo/remote/persistence/card_test.rb +1 -1
- data/test/lib/troo/remote/persistence/comment_test.rb +1 -1
- data/test/lib/troo/remote/persistence/list_test.rb +1 -1
- data/test/lib/troo/remote/persistence/move_card_test.rb +3 -3
- data/test/lib/troo/retrieval/local_test.rb +13 -1
- data/test/lib/troo/retrieval/remote_test.rb +1 -1
- data/test/support/fabrication.rb +12 -12
- data/test/support/fake_trello/fake_response.rb +18 -1
- data/test/support/fake_trello/server.rb +2 -0
- data/test/support/remotes/all_boards.json +103 -4
- data/test/support/remotes/{board.json → all_boards_200.json} +13 -13
- data/test/support/remotes/board_200.json +140 -0
- data/test/support/remotes/board_by_id.json +9 -9
- data/test/support/remotes/board_by_id_200.json +75 -0
- data/test/support/remotes/card.json +4 -4
- data/test/support/remotes/card_200.json +40 -0
- data/test/support/remotes/card_by_card_id.json +64 -64
- data/test/support/remotes/card_by_card_id_200.json +302 -0
- data/test/support/remotes/comment.json +6 -6
- data/test/support/remotes/comment_200.json +27 -0
- data/test/support/remotes/create_board.json +1 -1
- data/test/support/remotes/create_board_200.json +38 -0
- data/test/support/remotes/list.json +2 -2
- data/test/support/remotes/list_200.json +7 -0
- data/test/support/remotes/member.json +4 -4
- data/test/support/remotes/member_200.json +50 -0
- data/test/test_helper.rb +9 -2
- data/troo.gemspec +4 -3
- metadata +92 -41
- data/test/cassettes/board_by_id.yml +0 -50
- data/test/cassettes/boards_all.yml +0 -50
- data/test/cassettes/card_by_id.yml +0 -49
- data/test/cassettes/cards_by_board_id.yml +0 -49
- data/test/cassettes/cards_by_list_id.yml +0 -49
- data/test/cassettes/comments_by_board_id.yml +0 -49
- data/test/cassettes/comments_by_card_id.yml +0 -49
- data/test/cassettes/member_by_id.yml +0 -48
- data/test/cassettes/members_by_board_id.yml +0 -48
- data/test/lib/troo/decorators/card_test.rb +0 -113
@@ -12,11 +12,11 @@ module Troo
|
|
12
12
|
let(:resource) { stub('resource', external_id: '200') }
|
13
13
|
|
14
14
|
before do
|
15
|
-
|
15
|
+
%w{Board Card List}.each do |type|
|
16
16
|
Object.const_get("Troo::#{type}").stubs(:retrieve)
|
17
17
|
.returns(resource)
|
18
18
|
end
|
19
|
-
|
19
|
+
%w{Board Card List Comment}.each do |type|
|
20
20
|
Object.const_get("Troo::Remote::Persistence::#{type}")
|
21
21
|
.stubs(:with).returns(outcome)
|
22
22
|
end
|
@@ -3,18 +3,13 @@ require_relative '../../../../../test_helper'
|
|
3
3
|
module Troo
|
4
4
|
module Commands
|
5
5
|
describe RefreshAll do
|
6
|
-
def load_mock_trello_response
|
7
|
-
json = File.read('./test/support/remotes/board.json')
|
8
|
-
hash = Yajl::Parser.parse(json)
|
9
|
-
Troo::Remote::Board.new(hash)
|
10
|
-
end
|
11
6
|
let(:described_class) { RefreshAll }
|
12
|
-
let(:resource)
|
13
|
-
|
14
|
-
before do
|
15
|
-
Retrieval::Remote.stubs(:fetch).returns(resource)
|
7
|
+
let(:resource) do
|
8
|
+
[mock_trello_response('board_200.json', Troo::Remote::Board)]
|
16
9
|
end
|
17
10
|
|
11
|
+
before { Retrieval::Remote.stubs(:fetch).returns(resource) }
|
12
|
+
|
18
13
|
describe '.dispatch' do
|
19
14
|
subject { described_class.dispatch }
|
20
15
|
|
@@ -5,31 +5,6 @@ module Troo
|
|
5
5
|
describe Main do
|
6
6
|
let(:described_class) { Main }
|
7
7
|
|
8
|
-
describe '#init' do
|
9
|
-
let(:exists) { false }
|
10
|
-
|
11
|
-
before do
|
12
|
-
File.stubs(:exist?).returns(exists)
|
13
|
-
FileUtils.stubs(:cp)
|
14
|
-
end
|
15
|
-
|
16
|
-
subject { capture_io { described_class.new.init }.join }
|
17
|
-
|
18
|
-
context 'when a configuration file exists' do
|
19
|
-
let(:exists) { true }
|
20
|
-
|
21
|
-
it 'returns the output of the command' do
|
22
|
-
subject.must_match(/already exists/)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
context 'when a configuration file does not exist' do
|
27
|
-
it 'returns the output of the command' do
|
28
|
-
subject.must_match(/does not exist/)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
8
|
describe '#status' do
|
34
9
|
before { Commands::Status.stubs(:dispatch) }
|
35
10
|
|
@@ -4,39 +4,44 @@ module Troo
|
|
4
4
|
describe Configuration do
|
5
5
|
let(:described_class) { Configuration }
|
6
6
|
|
7
|
-
subject { described_class.load('
|
7
|
+
subject { described_class.load('config/trooconf.yml', :test) }
|
8
8
|
|
9
|
-
context '
|
10
|
-
it '
|
11
|
-
subject.
|
9
|
+
context 'configures' do
|
10
|
+
it 'the name of the configuration' do
|
11
|
+
subject.name.must_equal('My Example Test Configuration')
|
12
12
|
end
|
13
13
|
|
14
|
-
it '
|
14
|
+
it 'the API url' do
|
15
|
+
subject.api_url.must_equal('https://api.trello.com/1')
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'the API key' do
|
15
19
|
subject.api_key.must_equal('some_key')
|
16
20
|
end
|
17
21
|
|
18
|
-
it '
|
22
|
+
it 'the API token' do
|
19
23
|
subject.api_token.must_equal('some_secret')
|
20
24
|
end
|
21
25
|
|
22
|
-
it '
|
26
|
+
it 'the API OAuth token' do
|
23
27
|
subject.api_oauth_token.must_equal('some_oauth_token')
|
24
28
|
end
|
25
29
|
|
26
|
-
it '
|
27
|
-
subject.api_oauth_token_secret
|
30
|
+
it 'the API OAuth token secret' do
|
31
|
+
subject.api_oauth_token_secret
|
32
|
+
.must_equal('some_oauth_token_secret')
|
28
33
|
end
|
29
34
|
|
30
|
-
it '
|
35
|
+
it 'the database to use' do
|
31
36
|
subject.database.must_equal(2)
|
32
37
|
end
|
33
38
|
|
34
|
-
it '
|
39
|
+
it 'communication with the Trello API' do
|
35
40
|
subject.allow_remote.must_equal(true)
|
36
41
|
end
|
37
42
|
|
38
|
-
it '
|
39
|
-
subject.logs.must_equal(
|
43
|
+
it 'log output' do
|
44
|
+
subject.logs.must_equal(true)
|
40
45
|
end
|
41
46
|
end
|
42
47
|
end
|
@@ -3,33 +3,6 @@ require_relative '../../../test_helper'
|
|
3
3
|
module Troo
|
4
4
|
module Decorators
|
5
5
|
describe Member do
|
6
|
-
let(:described_class) { Member }
|
7
|
-
let(:options) { {} }
|
8
|
-
let(:member) { Fabricate.build(:member) }
|
9
|
-
|
10
|
-
# describe '#username' do
|
11
|
-
# subject { described_class.new(member).username }
|
12
|
-
|
13
|
-
# it "returns the member's username" do
|
14
|
-
# subject.must_equal("@#{member.username}")
|
15
|
-
# end
|
16
|
-
# end
|
17
|
-
|
18
|
-
# describe '#name' do
|
19
|
-
# subject { described_class.new(member).name }
|
20
|
-
|
21
|
-
# it "returns the member's full name" do
|
22
|
-
# subject.must_equal(member.full_name)
|
23
|
-
# end
|
24
|
-
# end
|
25
|
-
|
26
|
-
# describe '#initials' do
|
27
|
-
# subject { described_class.new(member).initials }
|
28
|
-
|
29
|
-
# it "returns the member's initials" do
|
30
|
-
# subject.must_equal(member.initials)
|
31
|
-
# end
|
32
|
-
# end
|
33
6
|
end
|
34
7
|
end
|
35
8
|
end
|
@@ -87,38 +87,6 @@ module Troo
|
|
87
87
|
end
|
88
88
|
end
|
89
89
|
|
90
|
-
describe '#board' do
|
91
|
-
subject { described_instance.board }
|
92
|
-
|
93
|
-
it 'returns the board details' do
|
94
|
-
skip
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
describe '#list' do
|
99
|
-
subject { described_instance.list }
|
100
|
-
|
101
|
-
it 'returns the list details' do
|
102
|
-
skip
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
|
-
describe '#lists' do
|
107
|
-
subject { described_instance.lists }
|
108
|
-
|
109
|
-
it 'returns the lists details' do
|
110
|
-
skip
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
describe '#cards' do
|
115
|
-
subject { described_instance.cards }
|
116
|
-
|
117
|
-
it 'returns the cards details' do
|
118
|
-
skip
|
119
|
-
end
|
120
|
-
end
|
121
|
-
|
122
90
|
describe '#as_view' do
|
123
91
|
before { Template.stubs(:parse).returns('some output') }
|
124
92
|
|
@@ -99,10 +99,22 @@ module Troo
|
|
99
99
|
end
|
100
100
|
|
101
101
|
describe '.count' do
|
102
|
-
|
102
|
+
let(:criteria) { {} }
|
103
103
|
|
104
|
-
|
105
|
-
|
104
|
+
subject { described_class.count(criteria) }
|
105
|
+
|
106
|
+
context 'when no criteria is specified' do
|
107
|
+
it 'returns the number of this model persisted' do
|
108
|
+
subject.must_equal(2)
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
context 'when criteria is specified' do
|
113
|
+
let(:criteria) { { name: 'My Dumber Model' } }
|
114
|
+
|
115
|
+
it 'returns the number of this model persisted' do
|
116
|
+
subject.must_equal(1)
|
117
|
+
end
|
106
118
|
end
|
107
119
|
end
|
108
120
|
|
@@ -25,7 +25,23 @@ module Troo
|
|
25
25
|
end
|
26
26
|
|
27
27
|
it 'should have an external_id attribute' do
|
28
|
-
subject.external_id.must_equal '
|
28
|
+
subject.external_id.must_equal '20010'
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe '.remote' do
|
33
|
+
subject { described_class.remote }
|
34
|
+
|
35
|
+
it 'returns the remote class for this model' do
|
36
|
+
subject.must_equal(Remote::Board)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe '.type' do
|
41
|
+
subject { described_class.type }
|
42
|
+
|
43
|
+
it 'returns the type of model' do
|
44
|
+
subject.must_equal(:board)
|
29
45
|
end
|
30
46
|
end
|
31
47
|
|
@@ -45,5 +61,33 @@ module Troo
|
|
45
61
|
subject.cards.size.must_equal 1
|
46
62
|
end
|
47
63
|
end
|
64
|
+
|
65
|
+
describe '#decorator' do
|
66
|
+
let(:options) { {} }
|
67
|
+
|
68
|
+
subject { described_class.new.decorator(options) }
|
69
|
+
|
70
|
+
it 'returns a new instance of the decorator for this model' do
|
71
|
+
subject.must_be_instance_of(Decorators::Resource)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
describe '#presenter' do
|
76
|
+
let(:options) { {} }
|
77
|
+
|
78
|
+
subject { described_class.new.presenter(options) }
|
79
|
+
|
80
|
+
it 'returns a new instance of the presenter for this model' do
|
81
|
+
subject.must_be_instance_of(Presenters::Board)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
describe '#type' do
|
86
|
+
subject { described_class.new.type }
|
87
|
+
|
88
|
+
it 'returns the type of the model instance' do
|
89
|
+
subject.must_equal(:board)
|
90
|
+
end
|
91
|
+
end
|
48
92
|
end
|
49
93
|
end
|
@@ -29,12 +29,12 @@ module Troo
|
|
29
29
|
context 'and the attribute is an array' do
|
30
30
|
it 'returns the attribute' do
|
31
31
|
subject.external_member_ids
|
32
|
-
.must_equal(['
|
32
|
+
.must_equal(['20050'])
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
36
36
|
context 'and the attribute is a string' do
|
37
|
-
let(:member_ids) { "[\"
|
37
|
+
let(:member_ids) { "[\"20050\"]" }
|
38
38
|
let(:described_instance) do
|
39
39
|
Fabricate.build(:card,
|
40
40
|
external_member_ids: member_ids)
|
@@ -42,7 +42,7 @@ module Troo
|
|
42
42
|
|
43
43
|
it 'converts to an array and returns the attribute' do
|
44
44
|
subject.external_member_ids
|
45
|
-
.must_equal(['
|
45
|
+
.must_equal(['20050'])
|
46
46
|
end
|
47
47
|
end
|
48
48
|
end
|
@@ -77,15 +77,31 @@ module Troo
|
|
77
77
|
|
78
78
|
it 'should have an external_board_id attribute' do
|
79
79
|
subject.external_board_id
|
80
|
-
.must_equal '
|
80
|
+
.must_equal '20010'
|
81
81
|
end
|
82
82
|
|
83
83
|
it 'should have an external_list_id attribute' do
|
84
|
-
subject.external_list_id.must_equal '
|
84
|
+
subject.external_list_id.must_equal '20040'
|
85
85
|
end
|
86
86
|
|
87
87
|
it 'should have an external_id attribute' do
|
88
|
-
subject.external_id.must_equal '
|
88
|
+
subject.external_id.must_equal '20020'
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
describe '.remote' do
|
93
|
+
subject { described_class.remote }
|
94
|
+
|
95
|
+
it 'returns the remote class for this model' do
|
96
|
+
subject.must_equal(Remote::Card)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
describe '.type' do
|
101
|
+
subject { described_class.type }
|
102
|
+
|
103
|
+
it 'returns the type of model' do
|
104
|
+
subject.must_equal(:card)
|
89
105
|
end
|
90
106
|
end
|
91
107
|
|
@@ -129,5 +145,43 @@ module Troo
|
|
129
145
|
end
|
130
146
|
end
|
131
147
|
end
|
148
|
+
|
149
|
+
describe '#decorator' do
|
150
|
+
let(:options) { {} }
|
151
|
+
|
152
|
+
subject { described_class.new.decorator(options) }
|
153
|
+
|
154
|
+
it 'returns a new instance of the decorator for this model' do
|
155
|
+
subject.must_be_instance_of(Decorators::Resource)
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
describe '#presenter' do
|
160
|
+
let(:options) { {} }
|
161
|
+
|
162
|
+
subject { described_class.new.presenter(options) }
|
163
|
+
|
164
|
+
it 'returns a new instance of the presenter for this model' do
|
165
|
+
subject.must_be_instance_of(Presenters::Card)
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
describe '#comment_presenter' do
|
170
|
+
let(:options) { {} }
|
171
|
+
|
172
|
+
subject { described_class.new.comment_presenter(options) }
|
173
|
+
|
174
|
+
it 'returns a new instance of the comment presenter' do
|
175
|
+
subject.must_be_instance_of(Presenters::Comment)
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
describe '#type' do
|
180
|
+
subject { described_class.new.type }
|
181
|
+
|
182
|
+
it 'returns the type of the model instance' do
|
183
|
+
subject.must_equal(:card)
|
184
|
+
end
|
185
|
+
end
|
132
186
|
end
|
133
187
|
end
|
@@ -17,19 +17,19 @@ module Troo
|
|
17
17
|
end
|
18
18
|
|
19
19
|
it 'should have an external_board_id attribute' do
|
20
|
-
subject.external_board_id.must_equal '
|
20
|
+
subject.external_board_id.must_equal '20010'
|
21
21
|
end
|
22
22
|
|
23
23
|
it 'should have an external_card_id attribute' do
|
24
|
-
subject.external_card_id.must_equal '
|
24
|
+
subject.external_card_id.must_equal '20020'
|
25
25
|
end
|
26
26
|
|
27
27
|
it 'should have an external_id attribute' do
|
28
|
-
subject.external_id.must_equal '
|
28
|
+
subject.external_id.must_equal '20030'
|
29
29
|
end
|
30
30
|
|
31
31
|
it 'should have a external_member_id attribute' do
|
32
|
-
subject.external_member_id.must_equal '
|
32
|
+
subject.external_member_id.must_equal '20050'
|
33
33
|
end
|
34
34
|
|
35
35
|
it 'should always respond false to default?' do
|
@@ -37,6 +37,22 @@ module Troo
|
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
40
|
+
describe '.remote' do
|
41
|
+
subject { described_class.remote }
|
42
|
+
|
43
|
+
it 'returns the remote class for this model' do
|
44
|
+
subject.must_equal(Remote::Comment)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe '.type' do
|
49
|
+
subject { described_class.type }
|
50
|
+
|
51
|
+
it 'returns the type of model' do
|
52
|
+
subject.must_equal(:comments)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
40
56
|
context 'associations' do
|
41
57
|
before do
|
42
58
|
@board = Fabricate(:board)
|
@@ -58,5 +74,29 @@ module Troo
|
|
58
74
|
subject.member.must_equal @member
|
59
75
|
end
|
60
76
|
end
|
77
|
+
|
78
|
+
describe '#decorator' do
|
79
|
+
let(:options) { {} }
|
80
|
+
|
81
|
+
subject { described_class.new.decorator(options) }
|
82
|
+
|
83
|
+
it 'returns a new instance of the decorator for this model' do
|
84
|
+
subject.must_be_instance_of(Decorators::Resource)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
describe '#default?' do
|
89
|
+
subject { described_class.new.default? }
|
90
|
+
|
91
|
+
it { subject.must_equal false }
|
92
|
+
end
|
93
|
+
|
94
|
+
describe '#type' do
|
95
|
+
subject { described_class.new.type }
|
96
|
+
|
97
|
+
it 'returns the type of the model instance' do
|
98
|
+
subject.must_equal(:comments)
|
99
|
+
end
|
100
|
+
end
|
61
101
|
end
|
62
102
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require_relative '../../../test_helper'
|
2
|
+
|
3
|
+
module Troo
|
4
|
+
describe Database do
|
5
|
+
let(:described_class) { Database }
|
6
|
+
let(:configuration) { stub(database: '1') }
|
7
|
+
let(:options) { {} }
|
8
|
+
|
9
|
+
before { Ohm.stubs(:connect) }
|
10
|
+
|
11
|
+
describe '#connect' do
|
12
|
+
subject { described_class.connect(configuration, options) }
|
13
|
+
|
14
|
+
it 'connects to the persistence layer' do
|
15
|
+
subject.must_equal(nil)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -25,11 +25,27 @@ module Troo
|
|
25
25
|
end
|
26
26
|
|
27
27
|
it 'should have a external_board_id attribute' do
|
28
|
-
subject.external_board_id.must_equal '
|
28
|
+
subject.external_board_id.must_equal '20010'
|
29
29
|
end
|
30
30
|
|
31
31
|
it 'should have an external_id attribute' do
|
32
|
-
subject.external_id.must_equal '
|
32
|
+
subject.external_id.must_equal '20040'
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe '.remote' do
|
37
|
+
subject { described_class.remote }
|
38
|
+
|
39
|
+
it 'returns the remote class for this model' do
|
40
|
+
subject.must_equal(Remote::List)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe '.type' do
|
45
|
+
subject { described_class.type }
|
46
|
+
|
47
|
+
it 'returns the type of model' do
|
48
|
+
subject.must_equal(:list)
|
33
49
|
end
|
34
50
|
end
|
35
51
|
|
@@ -49,5 +65,33 @@ module Troo
|
|
49
65
|
subject.cards.size.must_equal 1
|
50
66
|
end
|
51
67
|
end
|
68
|
+
|
69
|
+
describe '#decorator' do
|
70
|
+
let(:options) { {} }
|
71
|
+
|
72
|
+
subject { described_class.new.decorator(options) }
|
73
|
+
|
74
|
+
it 'returns a new instance of the decorator for this model' do
|
75
|
+
subject.must_be_instance_of(Decorators::Resource)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
describe '#presenter' do
|
80
|
+
let(:options) { {} }
|
81
|
+
|
82
|
+
subject { described_class.new.presenter(options) }
|
83
|
+
|
84
|
+
it 'returns a new instance of the presenter for this model' do
|
85
|
+
subject.must_be_instance_of(Presenters::List)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
describe '#type' do
|
90
|
+
subject { described_class.new.type }
|
91
|
+
|
92
|
+
it 'returns the type of the model instance' do
|
93
|
+
subject.must_equal(:list)
|
94
|
+
end
|
95
|
+
end
|
52
96
|
end
|
53
97
|
end
|
@@ -37,12 +37,62 @@ module Troo
|
|
37
37
|
end
|
38
38
|
|
39
39
|
it 'should have an external_id attribute' do
|
40
|
-
subject.external_id.must_equal '
|
40
|
+
subject.external_id.must_equal '20050'
|
41
41
|
end
|
42
42
|
|
43
43
|
it 'should always respond false to default?' do
|
44
44
|
subject.default?.must_equal false
|
45
45
|
end
|
46
46
|
end
|
47
|
+
|
48
|
+
describe '.remote' do
|
49
|
+
subject { described_class.remote }
|
50
|
+
|
51
|
+
it 'returns the remote class for this model' do
|
52
|
+
subject.must_equal(Remote::Member)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
describe '.type' do
|
57
|
+
subject { described_class.type }
|
58
|
+
|
59
|
+
it 'returns the type of model' do
|
60
|
+
subject.must_equal(:member)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe '#decorator' do
|
65
|
+
let(:options) { {} }
|
66
|
+
|
67
|
+
subject { described_class.new.decorator(options) }
|
68
|
+
|
69
|
+
it 'returns a new instance of the decorator for this model' do
|
70
|
+
subject.must_be_instance_of(Decorators::Member)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
describe '#presenter' do
|
75
|
+
let(:options) { {} }
|
76
|
+
|
77
|
+
subject { described_class.new.presenter(options) }
|
78
|
+
|
79
|
+
it 'returns a new instance of the presenter for this model' do
|
80
|
+
subject.must_be_instance_of(Presenters::Member)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
describe '#default?' do
|
85
|
+
subject { described_class.new.default? }
|
86
|
+
|
87
|
+
it { subject.must_equal false }
|
88
|
+
end
|
89
|
+
|
90
|
+
describe '#type' do
|
91
|
+
subject { described_class.new.type }
|
92
|
+
|
93
|
+
it 'returns the type of the model instance' do
|
94
|
+
subject.must_equal(:member)
|
95
|
+
end
|
96
|
+
end
|
47
97
|
end
|
48
98
|
end
|
@@ -19,8 +19,60 @@ module Troo
|
|
19
19
|
end
|
20
20
|
|
21
21
|
module Troo
|
22
|
-
describe
|
23
|
-
let(:described_class) {
|
22
|
+
describe Wordwrap do
|
23
|
+
let(:described_class) { Wordwrap }
|
24
|
+
let(:value) do
|
25
|
+
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. ' \
|
26
|
+
"Curabitur aliquet turpis id dui condimentum elementum.\n" \
|
27
|
+
'Pellentesque blandit vulputate imperdiet. Quisque ut arcu ' \
|
28
|
+
"dolor. Morbi nec vulputate purus.\n\nQuisque porta feugiat " \
|
29
|
+
'egestas. Aenean ac ipsum varius, lobortis lacus at, mattis ' \
|
30
|
+
"est.\nQuisque viverra facilisis tortor, id convallis metus " \
|
31
|
+
'laoreet quis. Curabitur auctor nunc blandit enim volutpat ' \
|
32
|
+
'hendrerit. Phasellus accumsan tempor iaculis. Ut in semper ' \
|
33
|
+
"massa. Cras quis viverra elit.\n\nInteger vitae mattis est. " \
|
34
|
+
'Cras id nisl porttitor lectus placerat gravida sit amet ' \
|
35
|
+
"quis diam.\n\nDonec mollis, nisi sit amet congue sagittis, " \
|
36
|
+
'sapien magna rhoncus justo, vel molestie metus sapien eget ' \
|
37
|
+
"libero.\n\n\n"
|
38
|
+
end
|
39
|
+
let(:options) { {} }
|
40
|
+
|
41
|
+
describe '#wordwrap' do
|
42
|
+
let(:formatted_value) do
|
43
|
+
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. " \
|
44
|
+
"Curabitur\naliquet turpis id dui condimentum elementum.\n" \
|
45
|
+
"Pellentesque blandit vulputate imperdiet. Quisque ut arcu " \
|
46
|
+
"dolor.\nMorbi nec vulputate purus.\n\nQuisque porta " \
|
47
|
+
"feugiat egestas. Aenean ac ipsum varius, lobortis\nlacus " \
|
48
|
+
"at, mattis est.\nQuisque viverra facilisis tortor, id " \
|
49
|
+
"convallis metus laoreet quis.\nCurabitur auctor nunc " \
|
50
|
+
"blandit enim volutpat hendrerit. Phasellus\naccumsan " \
|
51
|
+
"tempor iaculis. Ut in semper massa. Cras quis viverra " \
|
52
|
+
"elit.\n\nInteger vitae mattis est. Cras id nisl porttitor " \
|
53
|
+
"lectus placerat\ngravida sit amet quis diam.\n\nDonec " \
|
54
|
+
"mollis, nisi sit amet congue sagittis, sapien magna " \
|
55
|
+
"rhoncus\njusto, vel molestie metus sapien eget libero."
|
56
|
+
end
|
57
|
+
|
58
|
+
subject { described_class.this(value, options) }
|
59
|
+
|
60
|
+
it 'returns formatted text' do
|
61
|
+
subject.must_equal(formatted_value)
|
62
|
+
end
|
63
|
+
|
64
|
+
context 'when the content should be pruned' do
|
65
|
+
let(:options) { { width: 70, prune: true } }
|
66
|
+
let(:formatted_value) do
|
67
|
+
'Lorem ipsum dolor sit amet, consectetur adipiscing elit.' \
|
68
|
+
" Curabitur a...\e[0m"
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'returns formatted text' do
|
72
|
+
subject.must_equal(formatted_value)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
24
76
|
end
|
25
77
|
end
|
26
78
|
|