git-pivotal-tracker-centro 1.0.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +6 -0
- data/.rspec +2 -0
- data/.rvmrc +1 -0
- data/.travis.yml +3 -0
- data/CHANGELOG +54 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +82 -0
- data/LICENSE +21 -0
- data/Rakefile +49 -0
- data/VERSION +1 -0
- data/bin/git-finish +7 -0
- data/bin/git-info +7 -0
- data/bin/git-start +8 -0
- data/features/finish.feature +88 -0
- data/features/info.feature +99 -0
- data/features/start.feature +113 -0
- data/features/step_definitions/steps.rb +119 -0
- data/features/support/dsl/assertions.rb +11 -0
- data/features/support/dsl/data.rb +11 -0
- data/features/support/dsl/pivotal.rb +77 -0
- data/features/support/env.rb +6 -0
- data/features/support/git-pivotal.rb +68 -0
- data/features/test_repo/origin.git/COMMIT_EDITMSG +1 -0
- data/features/test_repo/origin.git/HEAD +1 -0
- data/features/test_repo/origin.git/config +8 -0
- data/features/test_repo/origin.git/description +1 -0
- data/features/test_repo/origin.git/hooks/applypatch-msg.sample +15 -0
- data/features/test_repo/origin.git/hooks/commit-msg.sample +24 -0
- data/features/test_repo/origin.git/hooks/post-commit.sample +8 -0
- data/features/test_repo/origin.git/hooks/post-receive.sample +15 -0
- data/features/test_repo/origin.git/hooks/post-update.sample +8 -0
- data/features/test_repo/origin.git/hooks/pre-applypatch.sample +14 -0
- data/features/test_repo/origin.git/hooks/pre-commit.sample +46 -0
- data/features/test_repo/origin.git/hooks/pre-rebase.sample +169 -0
- data/features/test_repo/origin.git/hooks/prepare-commit-msg.sample +36 -0
- data/features/test_repo/origin.git/hooks/update.sample +128 -0
- data/features/test_repo/origin.git/index +0 -0
- data/features/test_repo/origin.git/info/exclude +6 -0
- data/features/test_repo/origin.git/logs/HEAD +1 -0
- data/features/test_repo/origin.git/logs/refs/heads/master +1 -0
- data/features/test_repo/origin.git/objects/0c/6f7b1384910d1a2f137590095f008a06c7e00c +0 -0
- data/features/test_repo/origin.git/objects/10/ecf2b7ce989f01f3f7266e712b48d9275f2635 +0 -0
- data/features/test_repo/origin.git/objects/a5/71d56305df09fb060f6ccb730b46080d305beb +0 -0
- data/features/test_repo/origin.git/refs/heads/master +1 -0
- data/features/test_repo/readme +1 -0
- data/git-pivotal-tracker-centro.gemspec +29 -0
- data/lib/commands/base.rb +120 -0
- data/lib/commands/bug.rb +19 -0
- data/lib/commands/card.rb +32 -0
- data/lib/commands/chore.rb +19 -0
- data/lib/commands/feature.rb +19 -0
- data/lib/commands/finish.rb +67 -0
- data/lib/commands/info.rb +58 -0
- data/lib/commands/map.rb +10 -0
- data/lib/commands/pick.rb +94 -0
- data/lib/commands/start.rb +39 -0
- data/lib/git-pivotal-tracker.rb +11 -0
- data/readme.markdown +106 -0
- data/spec/commands/base_spec.rb +137 -0
- data/spec/commands/bug_spec.rb +24 -0
- data/spec/commands/chore_spec.rb +24 -0
- data/spec/commands/feature_spec.rb +24 -0
- data/spec/commands/finish_spec.rb +134 -0
- data/spec/commands/map_spec.rb +14 -0
- data/spec/commands/start_spec.rb +28 -0
- data/spec/factories.rb +13 -0
- data/spec/factory.rb +26 -0
- data/spec/spec_helper.rb +24 -0
- metadata +291 -0
data/.gitignore
ADDED
data/.rspec
ADDED
data/.rvmrc
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
rvm use 1.9.3
|
data/.travis.yml
ADDED
data/CHANGELOG
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
v 0.9.2
|
2
|
+
- verbose is now the default, you can turn it off in your git configuration (pivotal.verbose) or via the --no-verbose command line option
|
3
|
+
|
4
|
+
v 0.9.1
|
5
|
+
- updating git-accept to work with cards that already accepted in Pivotal
|
6
|
+
|
7
|
+
v 0.9.0
|
8
|
+
- first release of new command set: accept, block, finish, info, start, unblock
|
9
|
+
|
10
|
+
v 0.8.1
|
11
|
+
- Improve error reporting when interacting with PivotalTracker
|
12
|
+
- Add SSL project support [bunnymatic (Mr Rogers)]
|
13
|
+
- Improve method of collecting story ID from branch name
|
14
|
+
|
15
|
+
v 0.8.0
|
16
|
+
- Drop home-rolled PivotalTracker API for pivotal-tracker gem
|
17
|
+
- Add Gemfile for easier development
|
18
|
+
- Add better test suite with Cucumber and Aruba
|
19
|
+
- Add option for appending the branch name (rather than prepending) [Addy
|
20
|
+
Naik]
|
21
|
+
- Add new `git info` command [Addy Naik]
|
22
|
+
|
23
|
+
v 0.2.3
|
24
|
+
- Allow the developer to specify the integration branch for git finish [Graeme Mathieson]
|
25
|
+
- Fixed bug which prevented chores from finishing successfully [Joshua Vial]
|
26
|
+
- Added option to allow only pickup items already assigned to you [Mark Butcher]
|
27
|
+
- Fix RestClient version issues
|
28
|
+
|
29
|
+
v 0.2.2
|
30
|
+
- Added git chore command
|
31
|
+
|
32
|
+
v 0.2.1
|
33
|
+
- Remove &:to_s shortcut for MRI 1.8.6 compatibility
|
34
|
+
- Updated to handle RestClient 1.4
|
35
|
+
|
36
|
+
v 0.2.0
|
37
|
+
- Added git feature and git bug commands
|
38
|
+
- Deprecated git feature
|
39
|
+
- Improved XPath reliability for Pivotal API requests [Sam Stokes]
|
40
|
+
|
41
|
+
v 0.1.3
|
42
|
+
- Fixed bug preventing command line args from being properly interpretted
|
43
|
+
|
44
|
+
v 0.1.2
|
45
|
+
- Fixed bug introduced in v 0.1.1 which prevented git pick from completing
|
46
|
+
|
47
|
+
v 0.1.1
|
48
|
+
- Updated git pick to tell Pivotal who owns the picked feature
|
49
|
+
- Improved Pivotal Tracker framework write ability
|
50
|
+
|
51
|
+
v 0.1.0
|
52
|
+
- Initial release
|
53
|
+
- Basic framework for reading from Pivotal Tracker
|
54
|
+
- git pick utility
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
git-pivotal-tracker-centro (1.0.0.rc1)
|
5
|
+
pivotal-tracker
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: http://rubygems.org/
|
9
|
+
specs:
|
10
|
+
aruba (0.4.11)
|
11
|
+
childprocess (>= 0.2.3)
|
12
|
+
cucumber (>= 1.1.1)
|
13
|
+
ffi (>= 1.0.11)
|
14
|
+
rspec (>= 2.7.0)
|
15
|
+
builder (3.0.0)
|
16
|
+
childprocess (0.3.1)
|
17
|
+
ffi (~> 1.0.6)
|
18
|
+
coderay (1.0.5)
|
19
|
+
cucumber (1.1.9)
|
20
|
+
builder (>= 2.1.2)
|
21
|
+
diff-lcs (>= 1.1.2)
|
22
|
+
gherkin (~> 2.9.0)
|
23
|
+
json (>= 1.4.6)
|
24
|
+
term-ansicolor (>= 1.0.6)
|
25
|
+
diff-lcs (1.1.3)
|
26
|
+
ffi (1.0.11)
|
27
|
+
gherkin (2.9.3)
|
28
|
+
json (>= 1.4.6)
|
29
|
+
happymapper (0.4.0)
|
30
|
+
libxml-ruby (~> 2.0)
|
31
|
+
json (1.6.6)
|
32
|
+
libxml-ruby (2.3.3)
|
33
|
+
metaclass (0.0.1)
|
34
|
+
method_source (0.7.1)
|
35
|
+
mime-types (1.19)
|
36
|
+
mocha (0.10.5)
|
37
|
+
metaclass (~> 0.0.1)
|
38
|
+
multi_json (1.2.0)
|
39
|
+
nokogiri (1.5.5)
|
40
|
+
pivotal-tracker (0.5.8)
|
41
|
+
builder
|
42
|
+
builder
|
43
|
+
happymapper (>= 0.3.2)
|
44
|
+
happymapper (>= 0.3.2)
|
45
|
+
nokogiri (>= 1.4.3)
|
46
|
+
nokogiri (~> 1.4)
|
47
|
+
rest-client (~> 1.6.0)
|
48
|
+
rest-client (~> 1.6.0)
|
49
|
+
pry (0.9.8.4)
|
50
|
+
coderay (~> 1.0.5)
|
51
|
+
method_source (~> 0.7.1)
|
52
|
+
slop (>= 2.4.4, < 3)
|
53
|
+
rake (0.9.2.2)
|
54
|
+
rest-client (1.6.7)
|
55
|
+
mime-types (>= 1.16)
|
56
|
+
rspec (2.9.0)
|
57
|
+
rspec-core (~> 2.9.0)
|
58
|
+
rspec-expectations (~> 2.9.0)
|
59
|
+
rspec-mocks (~> 2.9.0)
|
60
|
+
rspec-core (2.9.0)
|
61
|
+
rspec-expectations (2.9.0)
|
62
|
+
diff-lcs (~> 1.1.3)
|
63
|
+
rspec-mocks (2.9.0)
|
64
|
+
simplecov (0.6.1)
|
65
|
+
multi_json (~> 1.0)
|
66
|
+
simplecov-html (~> 0.5.3)
|
67
|
+
simplecov-html (0.5.3)
|
68
|
+
slop (2.4.4)
|
69
|
+
term-ansicolor (1.0.7)
|
70
|
+
|
71
|
+
PLATFORMS
|
72
|
+
ruby
|
73
|
+
|
74
|
+
DEPENDENCIES
|
75
|
+
aruba
|
76
|
+
cucumber
|
77
|
+
git-pivotal-tracker-centro!
|
78
|
+
mocha
|
79
|
+
pry
|
80
|
+
rake
|
81
|
+
rspec
|
82
|
+
simplecov
|
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License
|
2
|
+
|
3
|
+
Copyright (c) 2012 John Wood
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/Rakefile
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
|
4
|
+
# Set up a test Pivotal project for the Cucumber tests to use
|
5
|
+
ENV['PIVOTAL_API_KEY'] = "81f09c932c8bfd2b028ec5e52ec7cf47" # your API key
|
6
|
+
ENV['PIVOTAL_TEST_PROJECT'] = "681077" # your test project ID (123456)
|
7
|
+
ENV['PIVOTAL_USER'] = "John Wood" # Your user name (Joe Smith)
|
8
|
+
|
9
|
+
$LOAD_PATH.unshift('lib')
|
10
|
+
|
11
|
+
task :default => [:spec, :features]
|
12
|
+
|
13
|
+
task :spec do
|
14
|
+
begin
|
15
|
+
require 'rspec/core/rake_task'
|
16
|
+
RSpec::Core::RakeTask.new do |t|
|
17
|
+
t.rspec_opts = ['--color']
|
18
|
+
end
|
19
|
+
rescue LoadError => e
|
20
|
+
puts "RSpec not installed"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
task :features do
|
25
|
+
begin
|
26
|
+
require 'cucumber/rake/task'
|
27
|
+
|
28
|
+
if [ENV['PIVOTAL_API_KEY'], ENV['PIVOTAL_TEST_PROJECT'], ENV['PIVOTAL_USER']].any? { |x| x.nil? || x.empty? }
|
29
|
+
raise "ERROR: API key, test project, and user must be set in the Rakefile for the Cucumber tests to run"
|
30
|
+
end
|
31
|
+
|
32
|
+
Cucumber::Rake::Task.new(:features) do |t|
|
33
|
+
t.cucumber_opts = "features --format pretty"
|
34
|
+
end
|
35
|
+
rescue LoadError => e
|
36
|
+
puts "Cucumber not installed"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
task :install do
|
41
|
+
puts "Uninstalling..."
|
42
|
+
system "gem uninstall -x git-pivotal-tracker-centro"
|
43
|
+
|
44
|
+
puts "Building..."
|
45
|
+
system "gem build git-pivotal-tracker-centro.gemspec"
|
46
|
+
|
47
|
+
puts "Installing..."
|
48
|
+
system "gem install git-pivotal-tracker-centro-#{IO.read("VERSION")}"
|
49
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
1.0.0.rc1
|
data/bin/git-finish
ADDED
data/bin/git-info
ADDED
data/bin/git-start
ADDED
@@ -0,0 +1,88 @@
|
|
1
|
+
Feature: git finish
|
2
|
+
|
3
|
+
In order to finish the card for the current topic branch you can issue the following
|
4
|
+
commands:
|
5
|
+
|
6
|
+
git finish
|
7
|
+
git finish <options>
|
8
|
+
|
9
|
+
Supported options:
|
10
|
+
-k <api_key> - specify the Pivotal API key to use. Overrides configuration.
|
11
|
+
-p <project_id> - specify the Pivotal project id to use. Overrides configuration.
|
12
|
+
|
13
|
+
This will do the following:
|
14
|
+
* switch to the master branch
|
15
|
+
* delete the local branch
|
16
|
+
* delete the remote branch
|
17
|
+
* mark the card as finished in Pivotal
|
18
|
+
|
19
|
+
Background:
|
20
|
+
Given I have a started Pivotal Tracker feature
|
21
|
+
And I am on the "CURRENT_CARD-feature" branch
|
22
|
+
|
23
|
+
Scenario: Executing with no settings
|
24
|
+
When I run `git-finish --force`
|
25
|
+
Then the output should contain each line:
|
26
|
+
"""
|
27
|
+
Pivotal Tracker API Token and Project ID are required
|
28
|
+
"""
|
29
|
+
And the exit status should be 1
|
30
|
+
|
31
|
+
Scenario: Executing with inline settings
|
32
|
+
When I run `git-finish -k PIVOTAL_API_KEY -p PIVOTAL_TEST_PROJECT --force`
|
33
|
+
Then the output should contain each line:
|
34
|
+
"""
|
35
|
+
Switching to master
|
36
|
+
Destroying local branch
|
37
|
+
Destroying remote branch
|
38
|
+
Marking Story CURRENT_CARD as finished...
|
39
|
+
"""
|
40
|
+
And I should be on the "master" branch
|
41
|
+
|
42
|
+
Scenario: Executing with git configuration
|
43
|
+
Given a file named ".gitconfig" with:
|
44
|
+
"""
|
45
|
+
[pivotal]
|
46
|
+
api-token = PIVOTAL_API_KEY
|
47
|
+
full-name = PIVOTAL_USER
|
48
|
+
project-id = PIVOTAL_TEST_PROJECT
|
49
|
+
"""
|
50
|
+
When I run `git-finish -k PIVOTAL_API_KEY -p PIVOTAL_TEST_PROJECT --force`
|
51
|
+
Then the output should contain each line:
|
52
|
+
"""
|
53
|
+
Switching to master
|
54
|
+
Destroying local branch
|
55
|
+
Destroying remote branch
|
56
|
+
Marking Story CURRENT_CARD as finished...
|
57
|
+
"""
|
58
|
+
And I should be on the "master" branch
|
59
|
+
|
60
|
+
Scenario: Executing from a misnamed branch
|
61
|
+
Given I am on the "missing-an-id" branch
|
62
|
+
When I run `git-finish -k PIVOTAL_API_KEY -p PIVOTAL_TEST_PROJECT --force`
|
63
|
+
Then the output should contain each line:
|
64
|
+
"""
|
65
|
+
Branch name must contain a Pivotal Tracker story id
|
66
|
+
"""
|
67
|
+
And the exit status should be 1
|
68
|
+
|
69
|
+
Scenario: Closing chore stories
|
70
|
+
Given I have a started Pivotal Tracker chore
|
71
|
+
And I am on the "CURRENT_CARD-chore" branch
|
72
|
+
And a file named ".gitconfig" with:
|
73
|
+
"""
|
74
|
+
[pivotal]
|
75
|
+
api-token = PIVOTAL_API_KEY
|
76
|
+
full-name = PIVOTAL_USER
|
77
|
+
project-id = PIVOTAL_TEST_PROJECT
|
78
|
+
"""
|
79
|
+
When I run `git-finish -k PIVOTAL_API_KEY -p PIVOTAL_TEST_PROJECT --force`
|
80
|
+
Then the output should contain each line:
|
81
|
+
"""
|
82
|
+
Switching to master
|
83
|
+
Destroying local branch
|
84
|
+
Destroying remote branch
|
85
|
+
Marking Story CURRENT_CARD as finished...
|
86
|
+
"""
|
87
|
+
And I should be on the "master" branch
|
88
|
+
|
@@ -0,0 +1,99 @@
|
|
1
|
+
Feature: git info
|
2
|
+
|
3
|
+
In order to get information about a specific card you can issue one of the following
|
4
|
+
commands:
|
5
|
+
|
6
|
+
git info
|
7
|
+
git info <options>
|
8
|
+
git info <card_id>
|
9
|
+
git info <card_id> <options>
|
10
|
+
|
11
|
+
Supported options:
|
12
|
+
--comments - displays comments for the card
|
13
|
+
-k <api_key> - specify the Pivotal API key to use. Overrides configuration.
|
14
|
+
-p <project_id> - specify the Pivotal project id to use. Overrides configuration.
|
15
|
+
-D - do not prompt for user input, use recommended values by default.
|
16
|
+
|
17
|
+
Background:
|
18
|
+
Given I have a Pivotal Tracker feature named "Test Story" with description "This is the description!"
|
19
|
+
And I am on the "CURRENT_CARD-feature" branch
|
20
|
+
|
21
|
+
Scenario: Executing with no settings
|
22
|
+
When I run `git-info`
|
23
|
+
Then the output should contain each line:
|
24
|
+
"""
|
25
|
+
Pivotal Tracker API Token and Project ID are required
|
26
|
+
"""
|
27
|
+
And the exit status should be 1
|
28
|
+
|
29
|
+
Scenario: Grabbing info about current topic branch
|
30
|
+
Given I have configured the Git repos for Pivotal
|
31
|
+
When I run `git-info`
|
32
|
+
Then the output should contain each line:
|
33
|
+
"""
|
34
|
+
Story: Test Story
|
35
|
+
URL: http://www.pivotaltracker.com/story/show/CURRENT_CARD
|
36
|
+
State: not accepted
|
37
|
+
Description:
|
38
|
+
This is the description!
|
39
|
+
"""
|
40
|
+
|
41
|
+
Scenario: Supplying Pivotal configuration via command line arguments
|
42
|
+
When I run `git-info -k PIVOTAL_API_KEY -p PIVOTAL_TEST_PROJECT -n "PIVOTAL_USER" -D`
|
43
|
+
Then the output should contain each line:
|
44
|
+
"""
|
45
|
+
Story: Test Story
|
46
|
+
URL: http://www.pivotaltracker.com/story/show/CURRENT_CARD
|
47
|
+
State: not accepted
|
48
|
+
Description:
|
49
|
+
This is the description!
|
50
|
+
"""
|
51
|
+
|
52
|
+
Scenario: Grabbing info about a specific card in question topic branch
|
53
|
+
Given I have a Pivotal Tracker chore named "Test Chore" with description "The chore description!"
|
54
|
+
And I have configured the Git repos for Pivotal
|
55
|
+
When I run `git-info CURRENT_CARD`
|
56
|
+
Then the output should contain each line:
|
57
|
+
"""
|
58
|
+
Story: Test Chore
|
59
|
+
URL: http://www.pivotaltracker.com/story/show/CURRENT_CARD
|
60
|
+
State: not accepted
|
61
|
+
Description:
|
62
|
+
The chore description!
|
63
|
+
"""
|
64
|
+
|
65
|
+
Scenario: Grabbing info when the card has labels
|
66
|
+
Given I have a Pivotal Tracker chore named "Test Chore" with description "The chore description!"
|
67
|
+
And the chore is labeled "foo, bar, baz"
|
68
|
+
And I have configured the Git repos for Pivotal
|
69
|
+
When I run `git-info CURRENT_CARD`
|
70
|
+
Then the output should contain each line:
|
71
|
+
"""
|
72
|
+
Story: Test Chore
|
73
|
+
URL: http://www.pivotaltracker.com/story/show/CURRENT_CARD
|
74
|
+
Labels: bar, baz, foo
|
75
|
+
State: not accepted
|
76
|
+
Description:
|
77
|
+
The chore description!
|
78
|
+
"""
|
79
|
+
|
80
|
+
Scenario: Requesting comments on a card using --comments
|
81
|
+
Given I have a Pivotal Tracker chore named "Test Chore" with description "The chore description!"
|
82
|
+
And the "PIVOTAL_USER" commented on the card "Well, this looks mighty fine!"
|
83
|
+
And I have configured the Git repos for Pivotal
|
84
|
+
When I run `git-info CURRENT_CARD --comments`
|
85
|
+
Then the output should contain "Comments:"
|
86
|
+
And the output should contain "Well, this looks mighty fine!"
|
87
|
+
And the output should contain "PIVOTAL_USER"
|
88
|
+
|
89
|
+
Scenario: Grabbing info when not on a topic branch and not supplying a card id
|
90
|
+
Given I have configured the Git repos for Pivotal
|
91
|
+
And I am on the "foo" branch
|
92
|
+
Then I should be on the "foo" branch
|
93
|
+
When I run `git-info`
|
94
|
+
Then the output should contain each line:
|
95
|
+
"""
|
96
|
+
No story id was supplied and you aren't on a topic branch!
|
97
|
+
"""
|
98
|
+
|
99
|
+
|
@@ -0,0 +1,113 @@
|
|
1
|
+
Feature: git start
|
2
|
+
|
3
|
+
In order to start the next available card in the project you can issue the following
|
4
|
+
commands:
|
5
|
+
|
6
|
+
git start <options>
|
7
|
+
git start <card_type> <options>
|
8
|
+
|
9
|
+
Supported options:
|
10
|
+
-k <api_key> - specify the Pivotal API key to use. Overrides configuration.
|
11
|
+
-p <project_id> - specify the Pivotal project id to use. Overrides configuration.
|
12
|
+
-D - do not prompt for user input, use recommended values by default.
|
13
|
+
|
14
|
+
This will check out a topic branch for the card and place you on it.
|
15
|
+
|
16
|
+
Scenario Outline: Executing with no settings
|
17
|
+
When I run `<command>`
|
18
|
+
Then the output should contain each line:
|
19
|
+
"""
|
20
|
+
Pivotal Tracker API Token and Project ID are required
|
21
|
+
"""
|
22
|
+
And the exit status should be 1
|
23
|
+
|
24
|
+
Examples:
|
25
|
+
| command |
|
26
|
+
| git-start bug |
|
27
|
+
| git-start chore |
|
28
|
+
| git-start feature |
|
29
|
+
|
30
|
+
Scenario: Starting the next feature when it is unestimated
|
31
|
+
Given I have an unestimated Pivotal Tracker feature
|
32
|
+
And I have configured the Git repos for Pivotal
|
33
|
+
When I run `git-start feature -D --force`
|
34
|
+
Then the output should contain each line:
|
35
|
+
"""
|
36
|
+
Stories in the started state must be estimated.
|
37
|
+
"""
|
38
|
+
And the exit status should be 1
|
39
|
+
|
40
|
+
# Assumption: that chores can be started without being estimated in Pivotal
|
41
|
+
Scenario: Starting the next chore when it is unestimated
|
42
|
+
Given I have an unestimated Pivotal Tracker chore
|
43
|
+
And I have configured the Git repos for Pivotal
|
44
|
+
When I run `git-start chore -D --force`
|
45
|
+
Then the output should contain "Switched to a new branch 'CURRENT_CARD-a-chore'"
|
46
|
+
And I should be on the "CURRENT_CARD-a-chore" branch
|
47
|
+
And card CURRENT_CARD is marked is started in Pivotal Tracker
|
48
|
+
|
49
|
+
# Assumption: that estimating bugs in Pivotal is turned off
|
50
|
+
Scenario: Starting the next bug when it is unestimated
|
51
|
+
Given I have an unestimated Pivotal Tracker bug
|
52
|
+
And I have configured the Git repos for Pivotal
|
53
|
+
When I run `git-start bug -D --force`
|
54
|
+
Then the output should contain "Switched to a new branch 'CURRENT_CARD-a-bug'"
|
55
|
+
And I should be on the "CURRENT_CARD-a-bug" branch
|
56
|
+
And card CURRENT_CARD is marked is started in Pivotal Tracker
|
57
|
+
|
58
|
+
Scenario Outline: Starting the next estimated card interactively (without -D option)
|
59
|
+
Given I have a Pivotal Tracker <card_type>
|
60
|
+
And I have configured the Git repos for Pivotal
|
61
|
+
When I run `git-start <card_type> --force` interactively
|
62
|
+
And I type "a_purple_<card_type>"
|
63
|
+
Then the output should contain "Switched to a new branch 'a_purple_<card_type>'"
|
64
|
+
And I should be on the "a_purple_<card_type>" branch
|
65
|
+
And card CURRENT_CARD is marked is started in Pivotal Tracker
|
66
|
+
|
67
|
+
Examples:
|
68
|
+
| card_type |
|
69
|
+
| bug |
|
70
|
+
| chore |
|
71
|
+
| feature |
|
72
|
+
|
73
|
+
Scenario Outline: Starting the next estimated card using configured defaults (with -D option)
|
74
|
+
Given I have a Pivotal Tracker <card_type>
|
75
|
+
And I have configured the Git repos for Pivotal
|
76
|
+
When I run `git-start <card_type> -D --force`
|
77
|
+
Then the output should contain "Switched to a new branch 'CURRENT_CARD-a-<card_type>'"
|
78
|
+
And I should be on the "CURRENT_CARD-a-<card_type>" branch
|
79
|
+
And card CURRENT_CARD is marked is started in Pivotal Tracker
|
80
|
+
|
81
|
+
Examples:
|
82
|
+
| card_type | branch_suffix |
|
83
|
+
| bug | fix |
|
84
|
+
| chore | |
|
85
|
+
| feature | |
|
86
|
+
|
87
|
+
Scenario Outline: Starting a specific card
|
88
|
+
Given I have a Pivotal Tracker <card_type>
|
89
|
+
And I have configured the Git repos for Pivotal
|
90
|
+
When I run `git-start CURRENT_CARD -D --force`
|
91
|
+
Then the output should contain "Switched to a new branch 'CURRENT_CARD-a-<card_type>'"
|
92
|
+
And I should be on the "CURRENT_CARD-a-<card_type>" branch
|
93
|
+
And card CURRENT_CARD is marked is started in Pivotal Tracker
|
94
|
+
|
95
|
+
Examples:
|
96
|
+
| card_type | branch_suffix |
|
97
|
+
| bug | fix |
|
98
|
+
| chore | |
|
99
|
+
| feature | |
|
100
|
+
|
101
|
+
Scenario Outline: Supplying Pivotal configuration via command line arguments
|
102
|
+
Given I have a Pivotal Tracker <card_type>
|
103
|
+
And I have configured the Git repos for Pivotal with bogus information
|
104
|
+
When I run `git-start <card_type> -k PIVOTAL_API_KEY -p PIVOTAL_TEST_PROJECT -n "PIVOTAL_USER" -D --force`
|
105
|
+
Then the output should contain "Switched to a new branch 'CURRENT_CARD-a-<card_type>'"
|
106
|
+
And I should be on the "CURRENT_CARD-a-<card_type>" branch
|
107
|
+
And card CURRENT_CARD is marked is started in Pivotal Tracker
|
108
|
+
|
109
|
+
Examples:
|
110
|
+
| card_type | branch_suffix |
|
111
|
+
| bug | fix |
|
112
|
+
| chore | |
|
113
|
+
| feature | |
|
@@ -0,0 +1,119 @@
|
|
1
|
+
STORY_TYPE = /feature|bug|chore|release/
|
2
|
+
STORY_STATE = /unscheduled|unstarted|started|finished|delivered|accepted|rejected/
|
3
|
+
|
4
|
+
Transform /PIVOTAL|CURRENT/ do |placeholder|
|
5
|
+
placeholder.
|
6
|
+
gsub("PIVOTAL_API_KEY", ENV['PIVOTAL_API_KEY']).
|
7
|
+
gsub("PIVOTAL_TEST_PROJECT", ENV['PIVOTAL_TEST_PROJECT']).
|
8
|
+
gsub("PIVOTAL_USER", ENV['PIVOTAL_USER']).
|
9
|
+
gsub("CURRENT_CARD", current_card.id.to_s)
|
10
|
+
end
|
11
|
+
|
12
|
+
Given "I debug" do
|
13
|
+
require 'pry'
|
14
|
+
binding.pry
|
15
|
+
end
|
16
|
+
|
17
|
+
Given /^I have configured the Git repos for Pivotal$/ do
|
18
|
+
step %|a file named ".gitconfig" with:|, <<-EOT.gsub!(/^\s+\S/, '')
|
19
|
+
|[pivotal]
|
20
|
+
| api-token = PIVOTAL_API_KEY
|
21
|
+
| full-name = PIVOTAL_USER
|
22
|
+
| project-id = PIVOTAL_TEST_PROJECT
|
23
|
+
| verbose = false
|
24
|
+
EOT
|
25
|
+
end
|
26
|
+
|
27
|
+
Given /^I have configured the Git repos for Pivotal with bogus information$/ do
|
28
|
+
step %|a file named ".gitconfig" with:|, <<-EOT.gsub!(/^\s+\S/, '')
|
29
|
+
|[pivotal]
|
30
|
+
| api-token = badtoken
|
31
|
+
| full-name = Bad Joe
|
32
|
+
| project-id = something
|
33
|
+
| remote = origin
|
34
|
+
| verbose = false
|
35
|
+
EOT
|
36
|
+
end
|
37
|
+
|
38
|
+
Given /^the "([^"]+)" commented on the card "([^"]+)"$/ do |author, text|
|
39
|
+
comment_on_story :author => author, :text => text
|
40
|
+
end
|
41
|
+
|
42
|
+
Given /^the (#{STORY_TYPE}|card) is labeled "([^"]+)"$/ do |type, labels|
|
43
|
+
update_test_story :labels => labels
|
44
|
+
end
|
45
|
+
|
46
|
+
Given /^I have a(?:n)? (#{STORY_STATE})?\s?Pivotal Tracker (#{STORY_TYPE})$/ do |status, type|
|
47
|
+
options = {}
|
48
|
+
options[:current_state] = status if status
|
49
|
+
create_test_story type, options
|
50
|
+
end
|
51
|
+
|
52
|
+
Given /^I have a(?:n)? unestimated \s?Pivotal Tracker (#{STORY_TYPE})$/ do |type|
|
53
|
+
options = { :estimate => -1 }
|
54
|
+
create_test_story type, options
|
55
|
+
end
|
56
|
+
|
57
|
+
Given /^I have a(?:n)? (#{STORY_STATE})?\s?Pivotal Tracker (#{STORY_TYPE}) named "([^"]+)" with description "([^"]+)"$/ do |status, type, name, description|
|
58
|
+
options = { :name => name, :description => description }
|
59
|
+
options[:current_state] = status if status
|
60
|
+
create_test_story type, options
|
61
|
+
end
|
62
|
+
|
63
|
+
Given /the card is a (#{STORY_TYPE})/ do |type|
|
64
|
+
update_test_story :story_type => type
|
65
|
+
end
|
66
|
+
|
67
|
+
Given /the (#{STORY_TYPE}) is unestimated/ do |type|
|
68
|
+
update_test_story :estimate => -1
|
69
|
+
end
|
70
|
+
|
71
|
+
Given /the (#{STORY_TYPE}) is (#{STORY_STATE})/ do |type, state|
|
72
|
+
update_test_story :current_state => state
|
73
|
+
end
|
74
|
+
|
75
|
+
Given /^I am on the "([^"]*)" branch$/ do |branch|
|
76
|
+
`git checkout -b #{branch} > /dev/null 2>&1`
|
77
|
+
end
|
78
|
+
|
79
|
+
Given /^I have a "([^"]*)" branch$/ do |branch|
|
80
|
+
`git branch #{branch} > /dev/null 2>&1`
|
81
|
+
end
|
82
|
+
|
83
|
+
When /^the current card is refreshed$/ do
|
84
|
+
refresh_current_card!
|
85
|
+
end
|
86
|
+
|
87
|
+
Then /^the card CURRENT_CARD should (not )?have the "([^"]*)" label$/ do |negate, label|
|
88
|
+
if negate
|
89
|
+
current_card.labels.to_s.should_not include(label)
|
90
|
+
else
|
91
|
+
current_card.labels.to_s.should include(label)
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
Then /^the card CURRENT_CARD should have the comment by "([^"]*)":$/ do |author, str|
|
96
|
+
current_card.notes.all.last.tap do |note|
|
97
|
+
note.author.should eq(author)
|
98
|
+
note.text.should include(str)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
Then /^the card CURRENT_CARD should not have the comment:$/ do |str|
|
103
|
+
current_card.notes.all.detect{ |n| n.text.include?(str) }.should be_nil
|
104
|
+
end
|
105
|
+
|
106
|
+
|
107
|
+
Then /^I should be on the "([^"]*)" branch$/ do |branch|
|
108
|
+
current_branch.should == branch
|
109
|
+
end
|
110
|
+
|
111
|
+
Then /^card (CURRENT_\w+) is marked is started in Pivotal Tracker$/ do |card_id|
|
112
|
+
assert_card_is_started(card_id)
|
113
|
+
end
|
114
|
+
|
115
|
+
Then /^the output should contain each line:$/ do |str|
|
116
|
+
str.split("\n").each do |line|
|
117
|
+
assert_partial_output(line, all_output)
|
118
|
+
end
|
119
|
+
end
|