trollolo 0.0.9 → 0.0.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +14 -0
  3. data/Gemfile +1 -1
  4. data/README.md +97 -0
  5. data/lib/card.rb +0 -14
  6. data/lib/cli.rb +66 -27
  7. data/lib/empty_column.rb +5 -0
  8. data/lib/scrum/backlog_mover.rb +47 -0
  9. data/lib/scrum/card_type_detection.rb +23 -0
  10. data/lib/scrum/creator.rb +30 -0
  11. data/lib/scrum/prioritizer.rb +24 -0
  12. data/lib/scrum/priority_name.rb +15 -0
  13. data/lib/scrum/scrum_boards.rb +11 -0
  14. data/lib/scrum/sprint_board.rb +82 -0
  15. data/lib/scrum/sprint_cleaner.rb +41 -0
  16. data/lib/scrum/sprint_planning_board.rb +26 -0
  17. data/lib/scrum.rb +13 -0
  18. data/lib/scrum_board.rb +17 -7
  19. data/lib/settings.rb +36 -12
  20. data/lib/trello_service.rb +22 -0
  21. data/lib/trello_wrapper.rb +9 -23
  22. data/lib/trollolo.rb +3 -2
  23. data/lib/version.rb +1 -1
  24. data/man/trollolo.1.md +22 -1
  25. data/spec/data/board.json +3 -4
  26. data/spec/data/full-board-with-accepted.json +1817 -0
  27. data/spec/data/full-board.json +3 -27
  28. data/spec/data/trollolorc +13 -0
  29. data/spec/data/trollolorc_with_board_aliases +9 -0
  30. data/spec/data/vcr/creator_custom_config.yml +824 -0
  31. data/spec/data/vcr/creator_default_config.yml +824 -0
  32. data/spec/data/vcr/move_backlog.yml +2375 -0
  33. data/spec/data/vcr/move_backlog_missing_backlog.yml +155 -0
  34. data/spec/data/vcr/move_backlog_missing_waterbed.yml +364 -0
  35. data/spec/data/vcr/prioritize_backlog_list.yml +2335 -0
  36. data/spec/data/vcr/prioritize_no_backlog_list.yml +190 -0
  37. data/spec/data/vcr/sprint_board.yml +624 -0
  38. data/spec/data/vcr/sprint_board_no_waterline.yml +556 -0
  39. data/spec/data/vcr/sprint_cleanup.yml +1239 -7500
  40. data/spec/data/vcr/sprint_planning_board.yml +239 -0
  41. data/spec/integration/create_burndown_spec.rb +1 -1
  42. data/spec/unit/card_spec.rb +0 -41
  43. data/spec/unit/cli_spec.rb +74 -1
  44. data/spec/unit/empty_column_spec.rb +9 -0
  45. data/spec/unit/scrum/backlog_mover_spec.rb +26 -0
  46. data/spec/unit/scrum/card_type_detection_spec.rb +35 -0
  47. data/spec/unit/scrum/creator_spec.rb +23 -0
  48. data/spec/unit/scrum/prioritizer_spec.rb +45 -0
  49. data/spec/unit/scrum/priority_name_spec.rb +35 -0
  50. data/spec/unit/scrum/sprint_board_spec.rb +22 -0
  51. data/spec/unit/scrum/sprint_cleaner_spec.rb +26 -0
  52. data/spec/unit/scrum/sprint_planning_board_spec.rb +14 -0
  53. data/spec/unit/scrum_board_spec.rb +90 -0
  54. data/spec/unit/settings_spec.rb +42 -6
  55. data/spec/unit/spec_helper.rb +3 -2
  56. data/spec/unit/support/update_webmock_data +3 -1
  57. data/spec/unit/support/vcr.rb +8 -8
  58. data/spec/unit/support/webmocks.rb +9 -0
  59. data/spec/unit/trello_wrapper_spec.rb +20 -0
  60. data/trollolo.gemspec +2 -1
  61. metadata +52 -9
  62. data/lib/prioritizer.rb +0 -34
  63. data/lib/sprint_cleanup.rb +0 -54
  64. data/spec/unit/prioritizer_spec.rb +0 -47
  65. data/spec/unit/sprint_cleanup_spec.rb +0 -18
@@ -83,4 +83,94 @@ describe ScrumBoard do
83
83
  expect(scrum_board.done_column.name).to eq("Done (July 20th - August 3rd)")
84
84
  end
85
85
  end
86
+
87
+ describe "card counts" do
88
+ context "full board" do
89
+ let(:board) { ScrumBoard.new(JSON.parse(load_test_file("full-board.json")), dummy_settings) }
90
+
91
+ it "#done_cards" do
92
+ expect(board.done_cards.count).to eq(3)
93
+ expect(board.done_cards[0].name).to eq("Burndown chart")
94
+ expect(board.done_cards[1].name).to eq("Sprint 10")
95
+ expect(board.done_cards[2].name).to eq("(3) P3: Fill Done columns")
96
+ end
97
+
98
+ it "#extra_cards" do
99
+ expect(board.extra_cards.count).to eq(1)
100
+ expect(board.extra_cards[0].name).to eq("(8) P6: Celebrate testing board")
101
+ end
102
+
103
+ it "#extra_done_cards" do
104
+ expect(board.extra_done_cards.count).to eq(0)
105
+ end
106
+
107
+ it "#unplanned_cards" do
108
+ expect(board.unplanned_cards.count).to eq(2)
109
+ expect(board.unplanned_cards[0].name).to eq("(2) Some unplanned work")
110
+ expect(board.unplanned_cards[1].name).to eq("(1) Fix emergency")
111
+ end
112
+
113
+ it "#unplanned_done_cards" do
114
+ expect(board.unplanned_done_cards.count).to eq(1)
115
+ expect(board.unplanned_done_cards[0].name).to eq("(2) Some unplanned work")
116
+ end
117
+
118
+ it "#done_fast_lane_cards_count" do
119
+ expect(board.done_fast_lane_cards_count).to eq(0)
120
+ end
121
+
122
+ it "#scrum_cards" do
123
+ expect(board.scrum_cards.count).to eq(4)
124
+ expect(board.scrum_cards[0].name).to eq("Burndown chart")
125
+ expect(board.scrum_cards[1].name).to eq("Sprint 10")
126
+ expect(board.scrum_cards[2].name).to eq("(3) P3: Fill Done columns")
127
+ expect(board.scrum_cards[3].name).to eq("(2) Some unplanned work")
128
+ end
129
+ end
130
+
131
+ context "full board with 'Accepted' column" do
132
+ let(:board) { ScrumBoard.new(JSON.parse(load_test_file("full-board-with-accepted.json")), dummy_settings) }
133
+
134
+ it "#done_cards" do
135
+ expect(board.done_cards.count).to eq(4)
136
+ expect(board.done_cards[0].name).to eq("Burndown chart")
137
+ expect(board.done_cards[1].name).to eq("Sprint 10")
138
+ expect(board.done_cards[2].name).to eq("(2) P7: Add Accepted column")
139
+ expect(board.done_cards[3].name).to eq("(3) P3: Fill Done columns")
140
+ end
141
+
142
+ it "#extra_cards" do
143
+ expect(board.extra_cards.count).to eq(1)
144
+ expect(board.extra_cards[0].name).to eq("(8) P6: Celebrate testing board")
145
+ end
146
+
147
+ it "#extra_done_cards" do
148
+ expect(board.extra_done_cards.count).to eq(0)
149
+ end
150
+
151
+ it "#unplanned_cards" do
152
+ expect(board.unplanned_cards.count).to eq(2)
153
+ expect(board.unplanned_cards[0].name).to eq("(2) Some unplanned work")
154
+ expect(board.unplanned_cards[1].name).to eq("(1) Fix emergency")
155
+ end
156
+
157
+ it "#unplanned_done_cards" do
158
+ expect(board.unplanned_done_cards.count).to eq(1)
159
+ expect(board.unplanned_done_cards[0].name).to eq("(2) Some unplanned work")
160
+ end
161
+
162
+ it "#done_fast_lane_cards_count" do
163
+ expect(board.done_fast_lane_cards_count).to eq(0)
164
+ end
165
+
166
+ it "#scrum_cards" do
167
+ expect(board.scrum_cards.count).to eq(5)
168
+ expect(board.scrum_cards[0].name).to eq("Burndown chart")
169
+ expect(board.scrum_cards[1].name).to eq("Sprint 10")
170
+ expect(board.scrum_cards[2].name).to eq("(2) Some unplanned work")
171
+ expect(board.scrum_cards[3].name).to eq("(2) P7: Add Accepted column")
172
+ expect(board.scrum_cards[4].name).to eq("(3) P3: Fill Done columns")
173
+ end
174
+ end
175
+ end
86
176
  end
@@ -3,25 +3,61 @@ require_relative 'spec_helper'
3
3
  describe Settings do
4
4
 
5
5
  include GivenFilesystemSpecHelpers
6
-
6
+
7
7
  context "given config file" do
8
8
  before(:each) do
9
9
  @settings = Settings.new( File.expand_path('../../data/trollolorc',__FILE__) )
10
10
  end
11
-
11
+
12
12
  it "is not verbose by default" do
13
13
  expect(@settings.verbose).to be false
14
14
  end
15
-
15
+
16
16
  it "reads config file" do
17
17
  expect(@settings.developer_public_key).to eq "mykey"
18
18
  expect(@settings.member_token).to eq "mytoken"
19
19
  end
20
+
21
+ context "#scrum" do
22
+ context "when setting is missing" do
23
+ before do
24
+ @settings = Settings.new( File.expand_path('../../data/trollolorc_with_board_aliases',__FILE__) )
25
+ end
26
+ it "returns default settings" do
27
+ expect(@settings.scrum["board_names"]).to eq({"planning"=>"Planning Board", "sprint"=>"Sprint Board"})
28
+ end
29
+ end
30
+
31
+ context "when setting does exist" do
32
+ it "returns name" do
33
+ expect(@settings.scrum["board_names"]["sprint"]).to eq("Sprint Board")
34
+ expect(@settings.scrum.board_names["planning"]).to eq("Planning Board")
35
+ end
36
+ end
37
+ end
38
+
39
+ context "#board_aliases" do
40
+ context "when aliases do not exist" do
41
+ it "returns an empty Hash" do
42
+ expect(@settings.board_aliases).to eq({})
43
+ end
44
+ end
45
+
46
+ context "when mapping exists" do
47
+ before do
48
+ @settings = Settings.new( File.expand_path('../../data/trollolorc_with_board_aliases',__FILE__) )
49
+ end
50
+
51
+ it "returns the mapping" do
52
+ expect(@settings.board_aliases).to eq({"MyTrelloBoard" => "53186e8391ef8671265eba9d"})
53
+ end
54
+ end
55
+ end
20
56
  end
21
-
57
+
22
58
  context "non-existent config file" do
23
59
  use_given_filesystem
24
-
60
+
25
61
  before(:each) do
26
62
  @config_file = given_dummy_file
27
63
  @settings = Settings.new(@config_file)
@@ -31,7 +67,7 @@ describe Settings do
31
67
  @settings.developer_public_key = "mypublickey"
32
68
  @settings.member_token = "mymembertoken"
33
69
  @settings.save_config
34
-
70
+
35
71
  expect(File.read(@config_file)).to eq "---\ndeveloper_public_key: mypublickey\nmember_token: mymembertoken\n"
36
72
  end
37
73
  end
@@ -1,9 +1,10 @@
1
- require "codeclimate-test-reporter"
2
- CodeClimate::TestReporter.start
1
+ require "simplecov"
2
+ SimpleCov.start
3
3
  require_relative '../../lib/trollolo'
4
4
  require 'given_filesystem/spec_helpers'
5
5
  require 'webmock/rspec'
6
6
  require 'byebug'
7
+ require 'pry'
7
8
  WebMock.disable_net_connect!(:allow => "codeclimate.com")
8
9
 
9
10
  bin_path = File.expand_path( "../../../bin/", __FILE__ )
@@ -13,7 +13,9 @@ def scrub_file(file)
13
13
  json = JSON.parse(File.read(file))
14
14
  if json.is_a?(Hash) and json.has_key?("cards")
15
15
  json["cards"].each do |card|
16
- card["email"] = "trello@example.com"
16
+ if card.has_key?("email")
17
+ card["email"] = "trello@example.com"
18
+ end
17
19
  end
18
20
  end
19
21
  File.open(file, "w") do |f|
@@ -4,26 +4,26 @@ VCR.configure do |config|
4
4
  config.hook_into :webmock
5
5
  end
6
6
 
7
- # example needs to use real_settings if vcr_rerecord: true is used
7
+ # example needs to use real_settings if vcr_record: true is used
8
8
  def real_settings
9
9
  config_path = ENV["TROLLOLO_CONFIG_PATH"] || File.expand_path("~/.trollolorc")
10
10
  Settings.new(config_path)
11
11
  end
12
12
 
13
- def real_settings_needed?(example, subject)
14
- example.metadata[:vcr_rerecord] && subject.instance_variable_get(:@settings).developer_public_key == 'mykey'
13
+ def real_settings_needed?(example)
14
+ example.metadata[:vcr_record] && Trello.configuration.developer_public_key == 'mykey'
15
15
  end
16
16
 
17
17
  def cassette_path(cassette)
18
18
  File.join(VCR.configuration.cassette_library_dir, cassette + '.yml')
19
19
  end
20
20
 
21
- def vcr_rerecord?(example)
22
- example.metadata[:vcr_rerecord] && File.readable?(cassette_path(example.metadata[:vcr]))
21
+ def vcr_record?(example)
22
+ example.metadata[:vcr_record]
23
23
  end
24
24
 
25
25
  def vcr_record_mode(example)
26
- return :all if vcr_rerecord?(example)
26
+ return :all if vcr_record?(example)
27
27
  :none
28
28
  end
29
29
 
@@ -40,11 +40,11 @@ end
40
40
  RSpec.configure do |c|
41
41
  c.around do |example|
42
42
  if cassette = example.metadata[:vcr]
43
- fail "you need to use real_settings to re-record vcr data" if real_settings_needed?(example, subject)
43
+ fail "you need to use real_settings to re-record vcr data" if real_settings_needed?(example)
44
44
  VCR.use_cassette(cassette, record: vcr_record_mode(example)) do
45
45
  example.run
46
46
  end
47
- vcr_replace_tokens(cassette_path(cassette)) if vcr_rerecord?(example)
47
+ vcr_replace_tokens(cassette_path(cassette)) if vcr_record?(example)
48
48
  else
49
49
  example.run
50
50
  end
@@ -19,6 +19,15 @@ def webmock_mapping
19
19
  "card_checklists" => "all"
20
20
  },
21
21
  file: 'full-board.json'
22
+ },
23
+ {
24
+ path: 'boards/P4kJA4bE',
25
+ parameters: {
26
+ "cards" => "open",
27
+ "lists" => "open",
28
+ "card_checklists" => "all"
29
+ },
30
+ file: 'full-board-with-accepted.json'
22
31
  }
23
32
  ]
24
33
  end
@@ -47,6 +47,26 @@ describe TrelloWrapper do
47
47
  end
48
48
  end
49
49
 
50
+ describe '#backup' do
51
+ it 'raises an error for empty board id' do
52
+ expect { subject.backup("") }.to raise_error(TrolloloError)
53
+ end
54
+
55
+ it 'raises an error for nil board id' do
56
+ expect { subject.backup(nil) }.to raise_error(TrolloloError)
57
+ end
58
+ end
59
+
60
+ describe '#retrieve_board_data' do
61
+ it 'raises error when board id is empty' do
62
+ expect { subject.retrieve_board_data('') }.to raise_error(TrolloloError)
63
+ end
64
+
65
+ it 'raises error when board id is nil' do
66
+ expect { subject.retrieve_board_data(nil) }.to raise_error(TrolloloError)
67
+ end
68
+ end
69
+
50
70
  describe '#add_attachment' do
51
71
  use_given_filesystem
52
72
 
data/trollolo.gemspec CHANGED
@@ -17,7 +17,8 @@ Gem::Specification.new do |s|
17
17
  s.rubyforge_project = 'trollolo'
18
18
 
19
19
  s.add_dependency 'thor', '~> 0.19'
20
- s.add_dependency 'ruby-trello', '~> 1.1'
20
+ s.add_dependency 'ruby-trello', '~> 1.5.0'
21
+ s.add_dependency 'activesupport', '~> 4'
21
22
 
22
23
  s.files = `git ls-files`.split("\n")
23
24
  s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trollolo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.0.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cornelius Schumacher
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-07-19 00:00:00.000000000 Z
11
+ date: 2017-05-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -30,14 +30,28 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.1'
33
+ version: 1.5.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '1.1'
40
+ version: 1.5.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: activesupport
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '4'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '4'
41
55
  description: Trollolo is a command line tool to access Trello and support tasks like
42
56
  generation of burndown charts.
43
57
  email:
@@ -66,10 +80,20 @@ files:
66
80
  - lib/checklist.rb
67
81
  - lib/cli.rb
68
82
  - lib/column.rb
69
- - lib/prioritizer.rb
83
+ - lib/empty_column.rb
84
+ - lib/scrum.rb
85
+ - lib/scrum/backlog_mover.rb
86
+ - lib/scrum/card_type_detection.rb
87
+ - lib/scrum/creator.rb
88
+ - lib/scrum/prioritizer.rb
89
+ - lib/scrum/priority_name.rb
90
+ - lib/scrum/scrum_boards.rb
91
+ - lib/scrum/sprint_board.rb
92
+ - lib/scrum/sprint_cleaner.rb
93
+ - lib/scrum/sprint_planning_board.rb
70
94
  - lib/scrum_board.rb
71
95
  - lib/settings.rb
72
- - lib/sprint_cleanup.rb
96
+ - lib/trello_service.rb
73
97
  - lib/trello_wrapper.rb
74
98
  - lib/trollolo.rb
75
99
  - lib/version.rb
@@ -107,10 +131,22 @@ files:
107
131
  - spec/data/create_burndown_helper/burndown-data-35.yaml
108
132
  - spec/data/create_burndown_helper/burndown-data-42.yaml
109
133
  - spec/data/create_burndown_helper/burndown-data-56.yaml
134
+ - spec/data/full-board-with-accepted.json
110
135
  - spec/data/full-board.json
111
136
  - spec/data/lists.json
112
137
  - spec/data/trollolorc
138
+ - spec/data/trollolorc_with_board_aliases
139
+ - spec/data/vcr/creator_custom_config.yml
140
+ - spec/data/vcr/creator_default_config.yml
141
+ - spec/data/vcr/move_backlog.yml
142
+ - spec/data/vcr/move_backlog_missing_backlog.yml
143
+ - spec/data/vcr/move_backlog_missing_waterbed.yml
144
+ - spec/data/vcr/prioritize_backlog_list.yml
145
+ - spec/data/vcr/prioritize_no_backlog_list.yml
146
+ - spec/data/vcr/sprint_board.yml
147
+ - spec/data/vcr/sprint_board_no_waterline.yml
113
148
  - spec/data/vcr/sprint_cleanup.yml
149
+ - spec/data/vcr/sprint_planning_board.yml
114
150
  - spec/integration/command_line_spec.rb
115
151
  - spec/integration/create_burndown_spec.rb
116
152
  - spec/integration/integration_spec_helper.rb
@@ -123,12 +159,19 @@ files:
123
159
  - spec/unit/burndown_data_spec.rb
124
160
  - spec/unit/card_spec.rb
125
161
  - spec/unit/cli_spec.rb
126
- - spec/unit/prioritizer_spec.rb
162
+ - spec/unit/empty_column_spec.rb
127
163
  - spec/unit/retrieve_data_spec.rb
164
+ - spec/unit/scrum/backlog_mover_spec.rb
165
+ - spec/unit/scrum/card_type_detection_spec.rb
166
+ - spec/unit/scrum/creator_spec.rb
167
+ - spec/unit/scrum/prioritizer_spec.rb
168
+ - spec/unit/scrum/priority_name_spec.rb
169
+ - spec/unit/scrum/sprint_board_spec.rb
170
+ - spec/unit/scrum/sprint_cleaner_spec.rb
171
+ - spec/unit/scrum/sprint_planning_board_spec.rb
128
172
  - spec/unit/scrum_board_spec.rb
129
173
  - spec/unit/settings_spec.rb
130
174
  - spec/unit/spec_helper.rb
131
- - spec/unit/sprint_cleanup_spec.rb
132
175
  - spec/unit/support/test_data_operations.rb
133
176
  - spec/unit/support/update_webmock_data
134
177
  - spec/unit/support/vcr.rb
@@ -156,7 +199,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
156
199
  version: 1.3.6
157
200
  requirements: []
158
201
  rubyforge_project: trollolo
159
- rubygems_version: 2.4.5.1
202
+ rubygems_version: 2.5.1
160
203
  signing_key:
161
204
  specification_version: 4
162
205
  summary: Trello command line client
data/lib/prioritizer.rb DELETED
@@ -1,34 +0,0 @@
1
- class Prioritizer
2
-
3
- def initialize(settings)
4
- @settings = settings
5
- end
6
-
7
- def prioritize(board_id, list_name)
8
- list = find_list(board_id, list_name)
9
- fail "list not found on board" unless list
10
- update_priorities(list)
11
- end
12
-
13
- private
14
-
15
- def trello
16
- @trello ||= TrelloWrapper.new(@settings)
17
- end
18
-
19
- def update_priorities(list)
20
- n = 1
21
- list.cards.each do |card|
22
- next if card.name =~ /waterline/i
23
- card.priority = n
24
- trello.set_name(card.id, card.name)
25
- puts %(set priority to #{n} for "#{card.name}")
26
- n += 1
27
- end
28
- end
29
-
30
- def find_list(board_id, list_name)
31
- board = trello.board(board_id)
32
- board.columns.find { |list| list.name == list_name }
33
- end
34
- end
@@ -1,54 +0,0 @@
1
- class SprintCleanup
2
- SOURCE_LISTS = ["Sprint Backlog", "Doing"]
3
- TARGET_LIST = "Ready"
4
-
5
- def initialize(settings)
6
- @settings = settings
7
- init_trello
8
- end
9
-
10
- def cleanup(board_id, target_board_id)
11
- @board = Trello::Board.find(board_id)
12
- @target_board = Trello::Board.find(target_board_id)
13
-
14
- SOURCE_LISTS.each do |list_name|
15
- move_cards(@board.lists.find { |l| l.name == list_name })
16
- end
17
- end
18
-
19
- private
20
-
21
- def init_trello
22
- Trello.configure do |config|
23
- config.developer_public_key = @settings.developer_public_key
24
- config.member_token = @settings.member_token
25
- end
26
- end
27
-
28
- def target_list
29
- @target_list ||= @target_board.lists.find { |l| l.name == TARGET_LIST }
30
- end
31
-
32
- def sticky?(card)
33
- card.labels.any? { |l| l.name == "Sticky" }
34
- end
35
-
36
- def waterline_label(card)
37
- card.labels.find { |label| label.name =~ /waterline/i }
38
- end
39
-
40
- def remove_waterline_label(card)
41
- label = waterline_label(card)
42
- card.remove_label(label) if label
43
- end
44
-
45
- def move_cards(source_list)
46
- source_list.cards.each do |card|
47
- next if sticky?(card)
48
- puts %(moving card "#{card.name}" to list "#{target_list.name}")
49
- card.members.each { |member| card.remove_member(member) }
50
- remove_waterline_label(card)
51
- card.move_to_board(@target_board, target_list)
52
- end
53
- end
54
- end
@@ -1,47 +0,0 @@
1
- require_relative "spec_helper"
2
- require 'pry'
3
-
4
- describe Prioritizer do
5
- it "creates new prioritizer" do
6
- prioritizer = Prioritizer.new(dummy_settings)
7
- expect(prioritizer).to be
8
- end
9
-
10
- context "default" do
11
- subject { described_class.new(dummy_settings) }
12
-
13
- before(:each) do
14
- full_board_mock
15
- end
16
-
17
- it "raises an exception if list is not on board" do
18
- expect {
19
- subject.prioritize("53186e8391ef8671265eba9d", "Backlog")
20
- }.to raise_error("list not found on board")
21
- end
22
-
23
- it "raises an exception if list is not on board" do
24
- RSpec::Expectations.configuration.on_potential_false_positives = :nothing
25
- expect {
26
- subject.prioritize("53186e8391ef8671265eba9d", "Sprint Backlog")
27
- }.not_to raise_error("list not found on board")
28
- end
29
-
30
- it "adds priority text to card titles" do
31
- [
32
- "5319bf244cc53afd5afd991f/name?key=mykey&token=mytoken&value=P1:%20Sprint%203",
33
- "5319c16d9d04708d450d65f1/name?key=mykey&token=mytoken&value=(3)%20P2:%20Fill%20Backlog%20column",
34
- "5319c57ff6be845f428aa7a3/name?key=mykey&token=mytoken&value=(5)%20P3:%20Read%20data%20from%20Trollolo",
35
- "5319c5961e530fd26f83999d/name?key=mykey&token=mytoken&value=(3)%20P4:%20Save%20read%20data%20as%20reference%20data",
36
- "5319c5a8743488047e13fcbc/name?key=mykey&token=mytoken&value=(8)%20P5:%20Celebrate%20testing%20board",
37
- ].each { |value|
38
- stub_request(:put, "https://api.trello.com/1/cards/#{value}")
39
- }
40
-
41
- expect(STDOUT).to receive(:puts).exactly(5).times
42
- expect {
43
- subject.prioritize("53186e8391ef8671265eba9d", "Sprint Backlog")
44
- }.not_to raise_error
45
- end
46
- end
47
- end
@@ -1,18 +0,0 @@
1
- require_relative "spec_helper"
2
- require 'pry'
3
-
4
- describe SprintCleanup do
5
- it "creates new sprint cleanup" do
6
- sprint_cleanup = SprintCleanup.new(dummy_settings)
7
- expect(sprint_cleanup).to be
8
- end
9
-
10
- context "default" do
11
- subject { described_class.new(dummy_settings) }
12
-
13
- it "moves remaining cards to target board", vcr: "sprint_cleanup", vcr_rerecord: false do
14
- expect(STDOUT).to receive(:puts).exactly(5).times
15
- expect(subject.cleanup("GVMQz9dx", "neUHHzDo")).to be
16
- end
17
- end
18
- end