crab 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. data/README.md +12 -12
  2. data/bin/crab-help +9 -13
  3. data/bin/crab-iteration +18 -0
  4. data/bin/crab-iteration-help +11 -0
  5. data/bin/crab-login +2 -2
  6. data/bin/crab-logout +18 -0
  7. data/bin/crab-project +1 -1
  8. data/bin/{crab-tc → crab-release} +4 -4
  9. data/bin/crab-release-help +11 -0
  10. data/bin/crab-story +18 -0
  11. data/bin/{crab-add → crab-story-add} +2 -2
  12. data/bin/{crab-change → crab-story-change} +4 -4
  13. data/bin/{crab-new → crab-story-create} +2 -2
  14. data/bin/{crab-remove → crab-story-del} +3 -3
  15. data/bin/{crab-delete → crab-story-delete} +3 -3
  16. data/bin/{crab-find → crab-story-find} +2 -2
  17. data/bin/crab-story-help +11 -0
  18. data/bin/{crab-ls → crab-story-list} +2 -2
  19. data/bin/{crab-list → crab-story-ls} +2 -2
  20. data/bin/{crab-move → crab-story-move} +2 -2
  21. data/bin/{crab-mv → crab-story-mv} +2 -2
  22. data/bin/{crab-create → crab-story-new} +2 -2
  23. data/bin/{crab-pull → crab-story-pull} +2 -2
  24. data/bin/{crab-rename → crab-story-ren} +2 -2
  25. data/bin/crab-story-rename +27 -0
  26. data/bin/{crab-rm → crab-story-rm} +3 -3
  27. data/bin/{crab-show → crab-story-show} +2 -2
  28. data/bin/{crab-up → crab-story-up} +4 -4
  29. data/bin/{crab-update → crab-story-update} +4 -4
  30. data/bin/crab-testcase +1 -1
  31. data/bin/crab-testcase-add +5 -1
  32. data/bin/crab-testcase-change +18 -0
  33. data/bin/crab-testcase-create +5 -1
  34. data/bin/crab-testcase-del +18 -0
  35. data/bin/crab-testcase-delete +5 -1
  36. data/bin/crab-testcase-find +10 -0
  37. data/bin/crab-testcase-help +11 -5
  38. data/bin/crab-testcase-list +1 -1
  39. data/bin/crab-testcase-ls +6 -21
  40. data/bin/crab-testcase-new +5 -1
  41. data/bin/crab-testcase-rm +5 -1
  42. data/bin/crab-testcase-show +1 -1
  43. data/bin/crab-testcase-up +18 -0
  44. data/bin/crab-testcase-update +5 -1
  45. data/features/find-text-in-stories.feature +3 -3
  46. data/features/login-and-out-of-rally.feature +1 -2
  47. data/features/move-in-rally.feature +2 -2
  48. data/features/pull-from-rally-into-cucumber.feature +4 -4
  49. data/features/show-from-rally.feature +3 -3
  50. data/features/steps/rally_steps.rb +45 -59
  51. data/features/subcommand-help.feature +28 -89
  52. data/features/update-story-in-rally.feature +8 -8
  53. data/lib/crab/rally.rb +4 -4
  54. data/lib/crab/version.rb +1 -1
  55. metadata +62 -42
  56. data/bin/crab-del +0 -21
@@ -3,15 +3,15 @@ require 'crab'
3
3
 
4
4
  opts = Trollop::options do
5
5
  banner <<-BANNER
6
- crab delete: delete an existing story in Rally
6
+ crab story delete: delete an existing story in Rally
7
7
 
8
- Usage: crab delete story [options]
8
+ Usage: crab story delete <id> [options*]
9
9
  BANNER
10
10
  opt :dry, "Dry-run (don't change anything)", :short => "-D", :default => false
11
11
  end
12
12
 
13
13
  id = ARGV.join(" ")
14
- Trollop::die "Story ID must be specified" if story_id.blank?
14
+ Trollop::die "Story ID must be specified" if id.blank?
15
15
 
16
16
  Crab::Rally.new(opts[:dry]) do |rally|
17
17
  story = rally.find_story_with_id id
@@ -3,9 +3,9 @@ require 'crab'
3
3
 
4
4
  opts = Trollop::options do
5
5
  banner <<-BANNER
6
- crab show: displays a story in Rally as a Cucumber feature
6
+ crab story show: displays a story in Rally as a Cucumber feature
7
7
 
8
- Usage: crab show story"
8
+ Usage: crab story show <id> [options*]"
9
9
  BANNER
10
10
  opt :language, "Language to display Cucumber features in (ISO code)", :default => "en", :short => "-l"
11
11
  opt :dry, "Dry-run (don't change anything)", :short => "-D", :default => false
@@ -5,9 +5,9 @@ include Crab::Utilities
5
5
 
6
6
  cmd_opts = Trollop::options do
7
7
  banner <<-BANNER
8
- crab update: update a story in Rally
8
+ crab story update: update a story in Rally
9
9
 
10
- Usage: crab update story [options]
10
+ Usage: crab story update <id> [options*]
11
11
  BANNER
12
12
  opt :name, "Name (title)", :type => String, :short => "-n"
13
13
  opt :state, "State (one of: #{Crab::Story::VALID_STATES.join(" ")})", :type => String, :short => "-t"
@@ -40,12 +40,12 @@ Crab::Rally.new(opts[:dry]) do |rally|
40
40
  story = rally.find_story_with_id ARGV.first
41
41
 
42
42
  if cmd_opts[:iteration_given]
43
- opts[:iteration] = rally.find_iteration_by_name cmd_opts[:iteration]
43
+ opts[:iteration] = rally.find_iteration_by_name cmd_opts[:iteration], story.project
44
44
  Trollop::die "Unknown iteration \"#{cmd_opts[:iteration]}\"" if opts[:iteration].nil?
45
45
  end
46
46
 
47
47
  if cmd_opts[:release_given]
48
- opts[:release] = rally.find_release_by_name cmd_opts[:release]
48
+ opts[:release] = rally.find_release_by_name cmd_opts[:release], story.project
49
49
  Trollop::die "Unknown release \"#{cmd_opts[:release]}\"" if opts[:release].nil?
50
50
  end
51
51
 
@@ -5,9 +5,9 @@ include Crab::Utilities
5
5
 
6
6
  cmd_opts = Trollop::options do
7
7
  banner <<-BANNER
8
- crab update: update a story in Rally
8
+ crab story update: update a story in Rally
9
9
 
10
- Usage: crab update story [options]
10
+ Usage: crab story update <id> [options*]
11
11
  BANNER
12
12
  opt :name, "Name (title)", :type => String, :short => "-n"
13
13
  opt :state, "State (one of: #{Crab::Story::VALID_STATES.join(" ")})", :type => String, :short => "-t"
@@ -40,12 +40,12 @@ Crab::Rally.new(opts[:dry]) do |rally|
40
40
  story = rally.find_story_with_id ARGV.first
41
41
 
42
42
  if cmd_opts[:iteration_given]
43
- opts[:iteration] = rally.find_iteration_by_name cmd_opts[:iteration]
43
+ opts[:iteration] = rally.find_iteration_by_name cmd_opts[:iteration], story.project
44
44
  Trollop::die "Unknown iteration \"#{cmd_opts[:iteration]}\"" if opts[:iteration].nil?
45
45
  end
46
46
 
47
47
  if cmd_opts[:release_given]
48
- opts[:release] = rally.find_release_by_name cmd_opts[:release]
48
+ opts[:release] = rally.find_release_by_name cmd_opts[:release], story.project
49
49
  Trollop::die "Unknown release \"#{cmd_opts[:release]}\"" if opts[:release].nil?
50
50
  end
51
51
 
@@ -11,7 +11,7 @@ end
11
11
 
12
12
  unless system("crab-testcase-#{cmd}", *ARGV)
13
13
  if $?.exitstatus == 127 # bash 'command not found'
14
- $stderr.puts "Unknown subcommand \"template #{cmd}\""
14
+ $stderr.puts "Unknown subcommand \"testcase #{cmd}\""
15
15
  system "crab-testcase-help"
16
16
  exit 127
17
17
  end
@@ -3,7 +3,11 @@ require 'crab'
3
3
 
4
4
  include Crab::Utilities
5
5
 
6
- opts = add_or_update_options "crab testcase add: add a test case to a story in Rally"
6
+ opts = add_or_update_options <<-BANNER
7
+ crab testcase create: add a test case to a story in Rally
8
+
9
+ Usage: crab testcase create <story> <name> [options*]
10
+ BANNER
7
11
 
8
12
  story_id = ARGV.shift
9
13
  unless story_id
@@ -0,0 +1,18 @@
1
+ # vim: set ft=ruby :
2
+ require 'crab'
3
+
4
+ include Crab::Utilities
5
+
6
+ opts = add_or_update_options <<-BANNER
7
+ crab testcase update: update a test case in Rally
8
+
9
+ Usage: crab testcase update <id> [options*]
10
+ BANNER
11
+
12
+ tc_id = ARGV.shift
13
+
14
+ Crab::Rally.new(opts[:dry]) do |rally|
15
+ tc = rally.find_test_case(tc_id)
16
+ tc.update(sanitize_options(opts))
17
+ puts "#{tc.story.formatted_id}/#{tc.formatted_id}: #{tc.name} (#{tc.tags.join(" ")})"
18
+ end
@@ -3,7 +3,11 @@ require 'crab'
3
3
 
4
4
  include Crab::Utilities
5
5
 
6
- opts = add_or_update_options "crab testcase add: add a test case to a story in Rally"
6
+ opts = add_or_update_options <<-BANNER
7
+ crab testcase create: add a test case to a story in Rally
8
+
9
+ Usage: crab testcase create <story> <name> [options*]
10
+ BANNER
7
11
 
8
12
  story_id = ARGV.shift
9
13
  unless story_id
@@ -0,0 +1,18 @@
1
+ # vim: set ft=ruby :
2
+ require 'crab'
3
+
4
+ Trollop::options do
5
+ banner <<-BANNER
6
+ crab testcase delete: delete a test case in Rally
7
+
8
+ Usage: crab testcase delete <id> [options*]
9
+ BANNER
10
+ opt :dry, "Dry-run (don't change anything)", :short => "-D", :default => false
11
+ end
12
+
13
+ tc_id = ARGV.shift
14
+ Crab::Rally.new(opts[:dry]) do |rally|
15
+ tc = rally.find_test_case(tc_id)
16
+ tc.delete
17
+ puts "Test case #{tc_id} deleted."
18
+ end
@@ -2,7 +2,11 @@
2
2
  require 'crab'
3
3
 
4
4
  Trollop::options do
5
- banner "crab testcase delete: delete a test case in Rally"
5
+ banner <<-BANNER
6
+ crab testcase delete: delete a test case in Rally
7
+
8
+ Usage: crab testcase delete <id> [options*]
9
+ BANNER
6
10
  opt :dry, "Dry-run (don't change anything)", :short => "-D", :default => false
7
11
  end
8
12
 
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+ # vim: set ft=ruby :
3
+
4
+ require 'crab'
5
+
6
+ puts <<-BANNER
7
+ crab testcase find: find a test case in Rally
8
+
9
+ Usage: crab testcase find <story> [options*]
10
+ BANNER
@@ -1,10 +1,16 @@
1
1
  # vim: set ft=ruby :
2
- require 'crab'
3
2
 
4
3
  puts <<-HELP
5
- crab testcase: manage test cases in a story (add, update, delete)
4
+ Usage: crab testcase <command> [options*]
6
5
 
7
- Usage: crab testcase add story name [options]
8
- crab testcase update testcase [options]
9
- crab testcase delete testcase [options]
6
+ Available commands:
7
+
8
+ create Create a new test case in a story
9
+ delete Delete an existing test case
10
+ help Show this help text
11
+ list List test cases in a story
12
+ show Show a test case (and its steps) as a Cucumber scenario
13
+ update Update a test case (name, priority, testing method, etc)
14
+
15
+ --help, -h: Show this message
10
16
  HELP
@@ -5,7 +5,7 @@ opts = Trollop::options do
5
5
  banner <<-BANNER
6
6
  crab testcase list: displays all testcases in Rally in a story as Cucumber scenarios
7
7
 
8
- Usage: crab testcase list <story> [options]"
8
+ Usage: crab testcase list <story> [options*]"
9
9
  BANNER
10
10
  opt :language, "Language to display Cucumber features in (ISO code)", :default => "en", :short => "-l"
11
11
  opt :dry, "Dry-run (don't change anything)", :short => "-D", :default => false
@@ -1,25 +1,10 @@
1
+ #!/usr/bin/env ruby
1
2
  # vim: set ft=ruby :
2
- require 'crab'
3
-
4
- opts = Trollop::options do
5
- banner <<-BANNER
6
- crab testcase list: displays all testcases in Rally in a story as Cucumber scenarios
7
3
 
8
- Usage: crab testcase list <story> [options]"
9
- BANNER
10
- opt :language, "Language to display Cucumber features in (ISO code)", :default => "en", :short => "-l"
11
- opt :dry, "Dry-run (don't change anything)", :short => "-D", :default => false
12
- end
13
-
14
- id = ARGV.shift
15
- unless id
16
- $stderr.puts "Error: No story ID provided."
17
- system "crab-testcase-help"
18
- exit 1
19
- end
4
+ require 'crab'
20
5
 
21
- Crab::Rally.new(opts[:dry]) do |rally|
22
- story = rally.find_story_with_id id
6
+ puts <<-BANNER
7
+ crab testcase find: find a test case in Rally
23
8
 
24
- puts Array(story.scenarios).map {|scenario| Crab::CucumberScenario.new(opts[:language]).generate_from scenario }.join.strip
25
- end
9
+ Usage: crab testcase find <story> [options*]
10
+ BANNER
@@ -3,7 +3,11 @@ require 'crab'
3
3
 
4
4
  include Crab::Utilities
5
5
 
6
- opts = add_or_update_options "crab testcase add: add a test case to a story in Rally"
6
+ opts = add_or_update_options <<-BANNER
7
+ crab testcase create: add a test case to a story in Rally
8
+
9
+ Usage: crab testcase create <story> <name> [options*]
10
+ BANNER
7
11
 
8
12
  story_id = ARGV.shift
9
13
  unless story_id
@@ -2,7 +2,11 @@
2
2
  require 'crab'
3
3
 
4
4
  Trollop::options do
5
- banner "crab testcase delete: delete a test case in Rally"
5
+ banner <<-BANNER
6
+ crab testcase delete: delete a test case in Rally
7
+
8
+ Usage: crab testcase delete <id> [options*]
9
+ BANNER
6
10
  opt :dry, "Dry-run (don't change anything)", :short => "-D", :default => false
7
11
  end
8
12
 
@@ -5,7 +5,7 @@ opts = Trollop::options do
5
5
  banner <<-BANNER
6
6
  crab testcase show: displays a testcase in Rally as a Cucumber scenario
7
7
 
8
- Usage: crab testcase show <testcase> [options]"
8
+ Usage: crab testcase show <id> [options*]"
9
9
  BANNER
10
10
  opt :language, "Language to display Cucumber features in (ISO code)", :default => "en", :short => "-l"
11
11
  opt :dry, "Dry-run (don't change anything)", :short => "-D", :default => false
@@ -0,0 +1,18 @@
1
+ # vim: set ft=ruby :
2
+ require 'crab'
3
+
4
+ include Crab::Utilities
5
+
6
+ opts = add_or_update_options <<-BANNER
7
+ crab testcase update: update a test case in Rally
8
+
9
+ Usage: crab testcase update <id> [options*]
10
+ BANNER
11
+
12
+ tc_id = ARGV.shift
13
+
14
+ Crab::Rally.new(opts[:dry]) do |rally|
15
+ tc = rally.find_test_case(tc_id)
16
+ tc.update(sanitize_options(opts))
17
+ puts "#{tc.story.formatted_id}/#{tc.formatted_id}: #{tc.name} (#{tc.tags.join(" ")})"
18
+ end
@@ -3,7 +3,11 @@ require 'crab'
3
3
 
4
4
  include Crab::Utilities
5
5
 
6
- opts = add_or_update_options "crab testcase update: update a test case in Rally"
6
+ opts = add_or_update_options <<-BANNER
7
+ crab testcase update: update a test case in Rally
8
+
9
+ Usage: crab testcase update <id> [options*]
10
+ BANNER
7
11
 
8
12
  tc_id = ARGV.shift
9
13
 
@@ -9,7 +9,7 @@ Feature: Find Text in Stories
9
9
  And I have selected my test project
10
10
 
11
11
  Scenario: Matching Name
12
- When I run `crab find Sample Crab`
12
+ When I run `crab story find Sample Crab`
13
13
  Then the output should contain:
14
14
  """
15
15
  US4988: Sample Crab Story (grooming)
@@ -19,11 +19,11 @@ Feature: Find Text in Stories
19
19
  @quick
20
20
  Scenario: Project Must be Specified If Not Set
21
21
  Given no project is selected
22
- When I run `crab find pattern`
22
+ When I run `crab story find pattern`
23
23
  Then the output should contain "Error: argument --project must be specified."
24
24
 
25
25
  Scenario: Project Must Exist
26
- When I run `crab find --project "foo" pattern`
26
+ When I run `crab story find --project "foo" pattern`
27
27
  Then the output should contain:
28
28
  """
29
29
  Error: Project "foo" not found.
@@ -1,11 +1,10 @@
1
1
  Feature: Log In and Out of Rally
2
-
2
+
3
3
  In order to avoid typing his credentials all the time
4
4
  A lazy and security-conscious developer
5
5
  Wants to log in and out of Rally in order to perform operations
6
6
 
7
7
  Scenario: Logged Out, Logging In
8
- Given I am logged out
9
8
  When I run `crab login` interactively
10
9
  And I type my username
11
10
  And I type my password
@@ -8,8 +8,8 @@ Feature: Move in Rally
8
8
  Given I am logged in
9
9
 
10
10
  Scenario: Move Then Go Back
11
- When I run `crab move US4988`
11
+ When I run `crab story move US4988`
12
12
  Then the output should contain "US4988: Sample Crab Story (defined)"
13
13
 
14
- When I run `crab move US4988 --back`
14
+ When I run `crab story move US4988 --back`
15
15
  Then the output should contain "US4988: Sample Crab Story (grooming)"
@@ -1,16 +1,16 @@
1
1
  Feature: Pull From Rally Into Cucumber
2
-
2
+
3
3
  In order to begin development of a story that was written in Rally
4
4
  A developer who doesn't want to open a browser or click things
5
5
  Wants the story converted into the much nicer Cucumber format
6
6
 
7
- Background:
7
+ Background:
8
8
  Given I am logged in
9
9
 
10
10
  Scenario: Pulling a Single Story
11
11
  Given a directory named "crab-pull"
12
12
  And I cd to "crab-pull"
13
- When I run `crab pull US4988`
13
+ When I run `crab story pull US4988`
14
14
  Then the output should contain "US4988: features/grooming/US4988-sample-crab-story.feature"
15
15
  And a directory named "features" should exist
16
16
  And a file named "features/grooming/US4988-sample-crab-story.feature" should exist
@@ -23,7 +23,7 @@ Feature: Pull From Rally Into Cucumber
23
23
  """
24
24
 
25
25
  Scenario: Pulling Multiple Stories
26
- When I run `crab pull US4988 US5000`
26
+ When I run `crab story pull US4988 US5000`
27
27
  Then the output should contain "US4988: features/grooming/US4988-sample-crab-story.feature"
28
28
  Then the output should contain "US5000: features/grooming/US5000-sample-crab-parent-story.feature"
29
29
 
@@ -8,7 +8,7 @@ Feature: Show Story From Rally
8
8
  Given I am logged in
9
9
 
10
10
  Scenario: Show Simple Story
11
- When I run `crab show US4988`
11
+ When I run `crab story show US4988`
12
12
  Then the output should contain:
13
13
  """
14
14
  Feature: [US4988] Sample Crab Story
@@ -17,7 +17,7 @@ Feature: Show Story From Rally
17
17
  """
18
18
 
19
19
  Scenario: Show Story With Test Cases
20
- When I run `crab show US5000`
20
+ When I run `crab story show US5000`
21
21
  Then the output should contain "Feature: [US5000] Sample Crab Parent Story"
22
22
  And the output should contain "@important @medium @manual @acceptance"
23
23
  And the output should contain "Scenario: [TC10388] Sample Testcase"
@@ -26,7 +26,7 @@ Feature: Show Story From Rally
26
26
  And the output should contain " Then I should be able to export them into Cucumber format"
27
27
 
28
28
  Scenario: Story In Different Language
29
- When I run `crab show US5000 --language pt`
29
+ When I run `crab story show US5000 --language pt`
30
30
  Then the output should contain "Funcionalidade: "
31
31
  And the output should contain "Cenario: "
32
32
 
@@ -1,5 +1,41 @@
1
1
  require 'rally_rest_api'
2
2
 
3
+ def get_rally_credentials
4
+ file = File.expand_path("~/.crab/tests/credentials")
5
+
6
+ if File.exists? file
7
+ username, password = File.read(file).split(/\n/)
8
+ [ username, password ]
9
+ else
10
+ raise "Please run rake cucumber:setup first"
11
+ end
12
+ end
13
+
14
+ def get_rally
15
+ username, password = get_rally_credentials
16
+ @rally = RallyRestAPI.new :username => username, :password => password
17
+ end
18
+
19
+ def get_story(story_id)
20
+ get_rally.find(:hierarchical_requirement, :fetch => true) { equal :formatted_i_d, story_id }.first
21
+ end
22
+
23
+ def get_project
24
+ if File.exists? ".crab/tests/project"
25
+ File.read(".crab/tests/project").strip
26
+ else
27
+ raise "Please run rake cucumber:setup first"
28
+ end
29
+ end
30
+
31
+ def get_test_project
32
+ begin
33
+ test_project = File.read(File.expand_path("~/.crab/tests/project"))
34
+ rescue
35
+ raise "Looks like your test project isn't set up. Please run 'rake cucumber:setup'"
36
+ end
37
+ end
38
+
3
39
  Then /^I should see a usage screen$/ do
4
40
  Then "the output should contain:", <<-TEXT
5
41
  Usage: crab <command> [options*]
@@ -8,48 +44,24 @@ crab version #{Crab::VERSION}: A Cucumber-Rally bridge
8
44
 
9
45
  Available commands:
10
46
 
11
- create Create a new story in Rally
12
- delete Delete an existing story in Rally
13
- find Find stories by text in name, description or notes
14
- login Persistently authenticate user with Rally
15
- move Move a story from one status to the next (or previous)
16
- project Persistently select project to work with in Rally
17
- pull Downloads stories (and its test cases) as Cucumber feature files
18
- rename Rename a story
19
- show Show a story (and its test cases) as a Cucumber feature
20
- testcase Manage test cases in a story (add, update, delete)
21
- update Update a story (name, estimate, etc)
22
-
47
+ help Show this help text
48
+ iteration Manipulate iterations
49
+ login Persistently authenticate user with Rally
50
+ logout Remove stored Rally credentials
51
+ project Persistently select project to work with in Rally
52
+ release Manipulate releases
53
+ story Manipulate stories
54
+ testcase Manipulate test cases
23
55
 
24
56
  --version, -v: Print version and exit
25
57
  --help, -h: Show this message
26
58
  TEXT
27
59
  end
28
60
 
29
- Given /^I am logged out$/ do
30
- end
31
-
32
- Given /^an instance of Rally$/ do
33
- end
34
-
35
- Given /^Rally has a story with ID "([^"]*)"$/ do |arg1|
36
- end
37
-
38
61
  Then /^the user's home directory should have a file named "([^"]*)"$/ do |file|
39
62
  File.exists? File.expand_path("~/#{file}")
40
63
  end
41
64
 
42
- def get_rally_credentials
43
- file = File.expand_path("~/.crab/tests/credentials")
44
-
45
- if File.exists? file
46
- username, password = File.read(file).split(/\n/)
47
- [ username, password ]
48
- else
49
- raise "Please run rake cucumber:setup first"
50
- end
51
- end
52
-
53
65
  When /^I type my username$/ do
54
66
  When %Q{I type "#{get_rally_credentials.first}"}
55
67
  end
@@ -61,9 +73,8 @@ end
61
73
  Given /^I am logged in$/ do
62
74
  username, password = get_rally_credentials
63
75
  steps %Q{
64
- Given I am logged out
65
76
  When I run `crab login -u #{username} -p #{password}`
66
- Then the output should contain "Logged in as #{username}"
77
+ Then the output should contain "Credentials stored for #{username}"
67
78
  }
68
79
  end
69
80
 
@@ -71,15 +82,6 @@ Then /^a file named "([^"]*)" in the user's home directory should exist$/ do |ar
71
82
  pending # express the regexp above with the code you wish you had
72
83
  end
73
84
 
74
- def get_rally
75
- username, password = get_rally_credentials
76
- @rally = RallyRestAPI.new :username => username, :password => password
77
- end
78
-
79
- def get_story(story_id)
80
- get_rally.find(:hierarchical_requirement, :fetch => true) { equal :formatted_i_d, story_id }.first
81
- end
82
-
83
85
  Then /^the story ([A-Z]{2}\d+) should be blocked$/ do |story_id|
84
86
  story = get_story(story_id)
85
87
  story.blocked.should == "true"
@@ -110,14 +112,6 @@ Given /^no project is selected$/ do
110
112
  Given 'I run `rm -rf ".crab/project"`'
111
113
  end
112
114
 
113
- def get_project
114
- if File.exists? ".crab/tests/project"
115
- File.read(".crab/tests/project").strip
116
- else
117
- raise "Please run rake cucumber:setup first"
118
- end
119
- end
120
-
121
115
  Given /^I have selected the project "([^"]*)"$/ do |project|
122
116
  unless get_project == project
123
117
  steps %Q{
@@ -127,14 +121,6 @@ Given /^I have selected the project "([^"]*)"$/ do |project|
127
121
  end
128
122
  end
129
123
 
130
- def get_test_project
131
- begin
132
- test_project = File.read(File.expand_path("~/.crab/tests/project"))
133
- rescue
134
- raise "Looks like your test project isn't set up. Please run 'rake cucumber:setup'"
135
- end
136
- end
137
-
138
124
  Given /^I have selected my test project$/ do
139
125
  When %Q{I run `crab project "#{get_test_project}"`}
140
126
  end