cucumber_fm-core 0.1

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.
Files changed (74) hide show
  1. data/LICENCE +20 -0
  2. data/lib/cucumber_f_m/aggregator.rb +65 -0
  3. data/lib/cucumber_f_m/comment_module/comment.rb +7 -0
  4. data/lib/cucumber_f_m/config.rb +37 -0
  5. data/lib/cucumber_f_m/cvs/git.rb +7 -0
  6. data/lib/cucumber_f_m/feature.rb +141 -0
  7. data/lib/cucumber_f_m/feature_element/background.rb +10 -0
  8. data/lib/cucumber_f_m/feature_element/comment.rb +13 -0
  9. data/lib/cucumber_f_m/feature_element/component/comments.rb +21 -0
  10. data/lib/cucumber_f_m/feature_element/component/information/component.rb +16 -0
  11. data/lib/cucumber_f_m/feature_element/component/tags.rb +108 -0
  12. data/lib/cucumber_f_m/feature_element/component/title.rb +26 -0
  13. data/lib/cucumber_f_m/feature_element/component/total_estimation.rb +42 -0
  14. data/lib/cucumber_f_m/feature_element/example.rb +7 -0
  15. data/lib/cucumber_f_m/feature_element/info.rb +13 -0
  16. data/lib/cucumber_f_m/feature_element/narrative.rb +7 -0
  17. data/lib/cucumber_f_m/feature_element/scenario.rb +15 -0
  18. data/lib/cucumber_f_m/feature_element/scenario_outline.rb +23 -0
  19. data/lib/cucumber_f_m/feature_element/step.rb +7 -0
  20. data/lib/cucumber_f_m/statistic.rb +31 -0
  21. data/lib/cucumber_f_m/tag_filter.rb +85 -0
  22. data/lib/cucumber_feature_manager.rb +164 -0
  23. data/lib/grit/lib/grit.rb +75 -0
  24. data/lib/grit/lib/grit/actor.rb +36 -0
  25. data/lib/grit/lib/grit/blame.rb +61 -0
  26. data/lib/grit/lib/grit/blob.rb +126 -0
  27. data/lib/grit/lib/grit/commit.rb +247 -0
  28. data/lib/grit/lib/grit/commit_stats.rb +128 -0
  29. data/lib/grit/lib/grit/config.rb +44 -0
  30. data/lib/grit/lib/grit/diff.rb +70 -0
  31. data/lib/grit/lib/grit/errors.rb +7 -0
  32. data/lib/grit/lib/grit/git-ruby.rb +267 -0
  33. data/lib/grit/lib/grit/git-ruby/commit_db.rb +52 -0
  34. data/lib/grit/lib/grit/git-ruby/file_index.rb +193 -0
  35. data/lib/grit/lib/grit/git-ruby/git_object.rb +350 -0
  36. data/lib/grit/lib/grit/git-ruby/internal/file_window.rb +58 -0
  37. data/lib/grit/lib/grit/git-ruby/internal/loose.rb +137 -0
  38. data/lib/grit/lib/grit/git-ruby/internal/pack.rb +384 -0
  39. data/lib/grit/lib/grit/git-ruby/internal/raw_object.rb +37 -0
  40. data/lib/grit/lib/grit/git-ruby/object.rb +325 -0
  41. data/lib/grit/lib/grit/git-ruby/repository.rb +767 -0
  42. data/lib/grit/lib/grit/git.rb +323 -0
  43. data/lib/grit/lib/grit/index.rb +122 -0
  44. data/lib/grit/lib/grit/lazy.rb +33 -0
  45. data/lib/grit/lib/grit/merge.rb +45 -0
  46. data/lib/grit/lib/grit/ref.rb +74 -0
  47. data/lib/grit/lib/grit/repo.rb +482 -0
  48. data/lib/grit/lib/grit/ruby1.9.rb +7 -0
  49. data/lib/grit/lib/grit/status.rb +151 -0
  50. data/lib/grit/lib/grit/submodule.rb +88 -0
  51. data/lib/grit/lib/grit/tag.rb +16 -0
  52. data/lib/grit/lib/grit/tree.rb +123 -0
  53. data/lib/grit/lib/open3_detach.rb +46 -0
  54. data/spec/cucumber_f_m/aggregator_spec.rb +210 -0
  55. data/spec/cucumber_f_m/comment_module/comment_spec.rb +4 -0
  56. data/spec/cucumber_f_m/config_spec.rb +27 -0
  57. data/spec/cucumber_f_m/cvs/git_spec.rb +40 -0
  58. data/spec/cucumber_f_m/feature_all_tags_to_scenario_spec.rb +7 -0
  59. data/spec/cucumber_f_m/feature_file_manipulation_spec.rb +29 -0
  60. data/spec/cucumber_f_m/feature_module/background_spec.rb +30 -0
  61. data/spec/cucumber_f_m/feature_module/comment_spec.rb +23 -0
  62. data/spec/cucumber_f_m/feature_module/example_spec.rb +5 -0
  63. data/spec/cucumber_f_m/feature_module/info_spec.rb +30 -0
  64. data/spec/cucumber_f_m/feature_module/narrative_spec.rb +7 -0
  65. data/spec/cucumber_f_m/feature_module/scenario_outline_spec.rb +39 -0
  66. data/spec/cucumber_f_m/feature_module/scenario_spec.rb +33 -0
  67. data/spec/cucumber_f_m/feature_module/step_spec.rb +7 -0
  68. data/spec/cucumber_f_m/feature_module/tag_spec.rb +96 -0
  69. data/spec/cucumber_f_m/feature_spec.rb +229 -0
  70. data/spec/cucumber_f_m/tag_filter_spec.rb +191 -0
  71. data/spec/cucumber_feature_manager_spec.rb +59 -0
  72. data/spec/data/feature_manager/some_ruby_file.rb +0 -0
  73. data/spec/spec_helper.rb +1 -0
  74. metadata +141 -0
@@ -0,0 +1,4 @@
1
+ require 'spec_helper'
2
+
3
+ describe CucumberFM::CommentModule::Comment do
4
+ end
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ describe CucumberFM::Config do
4
+ context "default values for" do
5
+ before(:each) do
6
+ @config = CucumberFM::Config.new
7
+ end
8
+ {:dir => '', :cvs_commit => '1', :cvs_push => '1'}.each_pair do |attribute, value|
9
+ it "#{attribute} should be '#{value}'" do
10
+ @config.send(attribute).should == value
11
+ end
12
+ end
13
+ end
14
+
15
+ context "saving config" do
16
+ before(:each) do
17
+ @config = CucumberFM::Config.new('cvs_push' => '0', :aggregate => ['developer'])
18
+ end
19
+ {:dir => '', :cvs_commit => '1',
20
+ :cvs_push => '0', :aggregate => ['developer']}.each_pair do |attribute, value|
21
+ it "#{attribute} should be '#{value}'" do
22
+ @config.send(attribute).should == value
23
+ end
24
+ end
25
+ end
26
+
27
+ end
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+
3
+ # test is too expensive to run it each time
4
+
5
+ #describe CucumberFM::Cvs::Git do
6
+ # before(:all) do
7
+ # @remote_repo = 'git@github.com:cs3b/cucumber_fm_test_repo.git'
8
+ # @base_repo_path = Dir.getwd + '/tmp/repo_base'
9
+ # @repo_path = '/tmp/repo'
10
+ # `git clone #{@base_repo_path} #{@repo_path}`
11
+ # @cfm = CucumberFeatureManager.new(@repo_path+'/features', @repo_path)
12
+ # @repo = @cfm.send(:repo)
13
+ # `cd #{@repo_path} && git remote rm origin`
14
+ # @repo.remote_add('origin', @remote_repo)
15
+ ## @repo.git.push({}, '--force', 'origin', 'master:master')
16
+ # end
17
+ #
18
+ # after(:all) do
19
+ # `rm -rf #{@repo_path}`
20
+ # # remove all remotes except master
21
+ # end
22
+ #
23
+ # it "should be able to add changes to stash" do
24
+ # f = @cfm.features.first
25
+ # f.raw = 'Hello'
26
+ # f.save
27
+ # commit = @cfm.commit_change_on(f)
28
+ # commit.should =~ /1 files changed/
29
+ # end
30
+ #
31
+ # it "should detect that there is no changes"
32
+ #
33
+ # it "should be able to commit changes to local branch"
34
+ #
35
+ # it "should be able to push changes to remote branch" do
36
+ # @cfm.send_to_remote
37
+ # end
38
+ # it "should handle when remote branch is not fast forward"
39
+ #
40
+ #end
@@ -0,0 +1,7 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Moving all tags from feature to scenarios" do
4
+ # TODO:
5
+ # it "should move all tags from feature to scenario"
6
+ # it "should preserve single acceptance tags from overwriting"
7
+ end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+
3
+ #describe CucumberFeatureManager do
4
+ # before(:all) do
5
+ # `cp -r "spec/data tmp/`
6
+ # end
7
+ #
8
+ # after(:all) do
9
+ ## `rm -rf tmp/data`
10
+ # end
11
+ #
12
+ # context "moving file to other directory" do
13
+ # before(:each) do
14
+ # @path = "tmp/data/feature_manager/subdir/second.feature"
15
+ # @path_new = "tmp/data/feature_manager/subdir_2/second.feature"
16
+ # @feature = CucumberFM::Feature.new(@path)
17
+ ## @feature.file_move_to("tmp/data/feature_manager/subdir_2")
18
+ # end
19
+ #
20
+ # it "should not be file in dir subdir" do
21
+ # File.exist?(@path).should be_false
22
+ # end
23
+ #
24
+ # it "should be file in dir subdir_2" do
25
+ # File.exist?(@path_new).should be_true
26
+ # end
27
+ # end
28
+ #
29
+ #end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ describe CucumberFM::FeatureElement::Background do
4
+ before(:each) do
5
+ raw = <<EOF
6
+ #{@comment = "## wireframe::http://somelink"}
7
+
8
+ Background: #{@title = "I am logged in as user admin"}
9
+ Given system user "t_a@hp.mc/secret" with role "locale"
10
+ And system user "p_e@hp.mc/secret" with role "product"
11
+ And signed up with "not_system_user@hp.mc/secret"
12
+ And I sign in as "admin@hearingpages.com/SxSUYGiEPi"
13
+ And user "admin@hearingpages.com" has assigned role "sys_user"
14
+ And I am on system user administration page
15
+ EOF
16
+ @feature = CucumberFM::Feature.new('fake_path')
17
+ @background = CucumberFM::FeatureElement::Background.new(@feature, raw)
18
+ end
19
+ it "should have access to feature" do
20
+ @background.feature.should == @feature
21
+ end
22
+ it "should parse comments lines" do
23
+ CucumberFM::FeatureElement::Comment.should_receive(:new).with(@background, @comment)
24
+ @background.should have(1).comments
25
+ end
26
+ it "should parse title" do
27
+ @background.title.should == @title
28
+ end
29
+ # it "should parse steps"
30
+ end
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ describe CucumberFM::FeatureElement::Comment do
4
+
5
+ {
6
+ " #:::wireframe::: http://somelink" => :wireframe,
7
+ "#:::mockup::: ftp://something" => :mockup,
8
+ " #:::doc::: redmine.selleo.com/doc/124.pdf" => :doc
9
+
10
+ }.each_pair do |raw, type|
11
+ @comment = CucumberFM::FeatureElement::Comment.new("nil", raw)
12
+
13
+ it "should be treated as link" do
14
+ pending
15
+ @comment.send(:is_it_link?).should be_true
16
+ end
17
+
18
+ it "should recognize type: #{type}" do
19
+ pending
20
+ @comment.type.should == type
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,5 @@
1
+ require 'spec_helper'
2
+
3
+ describe CucumberFM::FeatureElement::Example do
4
+ # it "should map attributes with values"
5
+ end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ describe CucumberFM::FeatureElement::Info do
4
+ before(:all) do
5
+ raw = <<EOF
6
+ #{@comment_1 = "# some comment"}
7
+ #{@comment_2 = "# wireframe:: http://cs3b.com"}
8
+
9
+ @tag @mc
10
+ Feature: #{@title = "Tag filter"}
11
+ In order to fetch only scenarios that i want
12
+ as project manager, developer
13
+ I want to be able to create filter scope
14
+ EOF
15
+ feature = CucumberFM::Feature.new('fake_path')
16
+ @info = CucumberFM::FeatureElement::Info.new(feature, raw)
17
+ end
18
+ it "should parse tags" do
19
+ @info.tags.should == %w(@tag @mc)
20
+ end
21
+ it "should parse comments lines" do
22
+ CucumberFM::FeatureElement::Comment.should_receive(:new).with(@info, @comment_1)
23
+ CucumberFM::FeatureElement::Comment.should_receive(:new).with(@info, @comment_2)
24
+ @info.should have(2).comments
25
+ end
26
+ it "should parse title" do
27
+ @info.title.should == @title
28
+ end
29
+ # it "should parse narrative"
30
+ end
@@ -0,0 +1,7 @@
1
+ require 'spec_helper'
2
+
3
+ describe CucumberFM::FeatureElement::Narrative do
4
+ # it "should parse cause of intruducting feature"
5
+ # it "should find subject"
6
+ # it "should find activity"
7
+ end
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+
3
+ describe CucumberFM::FeatureElement::ScenarioOutline do
4
+ before(:each) do
5
+ raw = %Q{#{@comment = "## wireframe::http://somelink"}
6
+ #{@comment1 = "# some text comment"}
7
+
8
+ @_todo @2 @hash @wow
9
+ Scenario Outline: #{@title = "Creating filter scope"}
10
+ When I follow "New system user"
11
+ And I fill in "password" for "Password Confirmation"
12
+
13
+ Examples:
14
+ |id |email |roles |
15
+ |5 |some@oo.com |admin |}
16
+ @feature = CucumberFM::Feature.new('fake_path')
17
+ @scenario = CucumberFM::FeatureElement::ScenarioOutline.new(@feature, raw)
18
+ @scenario.stub!(:parent_tags).and_return([])
19
+ end
20
+ it "should have access to feature" do
21
+ @scenario.feature.should == @feature
22
+ end
23
+ it "should parse tags" do
24
+ @scenario.tags.should == %w(@_todo @2 @hash @wow)
25
+ end
26
+ it "should parse estimation" do
27
+ @scenario.estimation.should == 2.0
28
+ end
29
+ it "should parse comments lines" do
30
+ CucumberFM::FeatureElement::Comment.should_receive(:new).with(@scenario, @comment)
31
+ CucumberFM::FeatureElement::Comment.should_receive(:new).with(@scenario, @comment1)
32
+ @scenario.should have(2).comments
33
+ end
34
+ it "should parse title" do
35
+ @scenario.title.should == @title
36
+ end
37
+ # it "should parse steps"
38
+ # it "should parse example outline"
39
+ end
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+
3
+ describe CucumberFM::FeatureElement::Scenario do
4
+ before(:each) do
5
+ raw = %Q{#{@comment = "## wireframe::http://somelink"}
6
+
7
+ @_todo @2.5 @hash @wow
8
+ Scenario: #{@title = "Creating filter: scope"}
9
+ When I follow "New system user"
10
+ And I fill in "password" for "Password Confirmation"}
11
+ @feature = CucumberFM::Feature.new('fake_path')
12
+ @scenario = CucumberFM::FeatureElement::Scenario.new(@feature, raw)
13
+ @scenario.stub!(:parent_tags).and_return(['@mc', '@_done', '@aaa', '@4.5'])
14
+ end
15
+
16
+ it "should have access to feature" do
17
+ @scenario.feature.should == @feature
18
+ end
19
+ it "should parse tags" do
20
+ @scenario.tags.should == %w(@_todo @2.5 @hash @wow)
21
+ end
22
+ it "should parse comments lines" do
23
+ CucumberFM::FeatureElement::Comment.should_receive(:new).with(@scenario, @comment)
24
+ @scenario.should have(1).comments
25
+ end
26
+ it "should parse title" do
27
+ @scenario.title.should == @title
28
+ end
29
+ it "should parse estimation" do
30
+ @scenario.estimation.should == 2.5
31
+ end
32
+ # it "should parse steps"
33
+ end
@@ -0,0 +1,7 @@
1
+ require 'spec_helper'
2
+
3
+ describe CucumberFM::FeatureElement::Step do
4
+ # it "should separate type from value"
5
+ # it "should be able to find definition of step"
6
+ # it "should be able to find definition of sub step"
7
+ end
@@ -0,0 +1,96 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Cucumber::FeatureElement::Component::Tags" do
4
+ before(:all) do
5
+ class TagTesting
6
+ include CucumberFM::FeatureElement::Component::Tags
7
+ end
8
+ end
9
+ before(:each) do
10
+ @test = TagTesting.new
11
+ end
12
+ it "should find all tags without duplication" do
13
+ @test.stub!(:raw).and_return("@aa @bb @24343 @dd")
14
+ @test.stub!(:parent_tags).and_return(['@mc', '@_done', '@component', '@4.5'])
15
+ @test.tags.should == %w(@aa @bb @24343 @dd @_done @component )
16
+ end
17
+
18
+ context "without need to look in feature" do
19
+ before(:each) do
20
+ @test.stub!(:raw).and_return("@user @m2 @_done @__forums @5 @_3 @mc @i1 @p4 @$_admin")
21
+ @test.stub!(:parent_tags).and_return(['@tb', '@_wip', '@m2b', '@4.5',
22
+ '@__knowledge_base', '@_8', '@knowledge_base'])
23
+ end
24
+ {
25
+ :component => '@user',
26
+ :milestone => '@m2',
27
+ :status => '@_done',
28
+ :bucket => '@__forums',
29
+ :estimation => 5.0,
30
+ :value => 3,
31
+ :developer => '@mc',
32
+ :iteration => '@i1',
33
+ :priority => '@p4',
34
+ :role => '@$_admin'
35
+ }.each do |tag, value|
36
+ it "should scan #{tag} with #{value}" do
37
+ @test.send(tag).should == value
38
+ end
39
+ end
40
+ end
41
+
42
+ # TODO it should removes duplication - tags from the same type if they are present in scenario
43
+ context "from feature" do
44
+ before(:each) do
45
+ @test.stub!(:raw).and_return("@javascript @mongo")
46
+ @test.stub!(:parent_tags).and_return(['@tb', '@_wip', '@m2b', '@4.5',
47
+ '@__knowledge_base', '@_8', '@knowledge_base'])
48
+ end
49
+ {
50
+ :component => '@knowledge_base',
51
+ :milestone => '@m2b',
52
+ :status => '@_wip',
53
+ :bucket => '@__knowledge_base',
54
+ :estimation => 4.5,
55
+ :value => 8,
56
+ :developer => '@tb'
57
+ }.each do |tag, value|
58
+ it "should scan #{tag} with #{value}" do
59
+ @test.send(tag).should == value
60
+ end
61
+ end
62
+ it { @test.done?.should be_false }
63
+ end
64
+
65
+ context "scenario tags without duplicates" do
66
+
67
+ before(:each) do
68
+ @test.stub!(:raw).and_return("@mc @m2 @__ads @p1 @i2")
69
+ @test.stub!(:parent_tags).and_return(['@tb', '@_done', '@m2b', '@4.5',
70
+ '@__knowledge_base', '@_8', '@knowledge_base'])
71
+ end
72
+ ['@tb', '@m2b', '@__knowledge_base'].each do |tag|
73
+ it "should not include tag: #{tag}" do
74
+ @test.tags.should_not include(tag)
75
+ end
76
+ end
77
+ it "should return 9 tags" do
78
+ @test.should have(9).tags
79
+ end
80
+ it { @test.done?.should be_true }
81
+ end
82
+
83
+ context "tag detecting"
84
+
85
+ context "tags without technical" do
86
+ before(:each) do
87
+ @test.stub!(:raw).and_return("@aa @selenium @bb @24343 @dd @nontestable")
88
+
89
+ end
90
+ it "should clean up all technical tags" do
91
+ %w(@selenium @nontestable).each do |tag|
92
+ @test.tags_without_technical.should_not include(tag)
93
+ end
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,229 @@
1
+ require 'spec_helper'
2
+
3
+ describe CucumberFM::Feature do
4
+ it "should store path for file" do
5
+ path = "some_path_to_my.feature"
6
+ feature = CucumberFM::Feature.new(path)
7
+ feature.path.should == path
8
+ end
9
+
10
+ it "should return filename" do
11
+ path = "/somedir/andanother/some_path_to_my.feature"
12
+ feature = CucumberFM::Feature.new(path)
13
+ feature.filename.should == 'some_path_to_my.feature'
14
+ end
15
+
16
+ it "should return filename without extension" do
17
+ path = "/somedir/andanother/some_path_to_my.feature"
18
+ feature = CucumberFM::Feature.new(path)
19
+ feature.filename_without_extension.should == 'some_path_to_my'
20
+ end
21
+
22
+ it "should load file content" do
23
+ feature = CucumberFM::Feature.new('spec/data/cucumber_f_m/feature/first.feature')
24
+ feature.raw.should == %q{Feature: Edit feature content
25
+ To update requirement for project
26
+ product owner
27
+ should be able to change feature content
28
+
29
+ Scenario: Inserting Background
30
+
31
+ Scenario: Inserting Scenario when cursor on text field
32
+ }
33
+ end
34
+
35
+ describe "PARSING" do
36
+ before(:each) do
37
+ subject { CucumberFM::Feature.new('some_path') }
38
+ subject.stub(:raw).and_return(FEATURE_CONTENT)
39
+ cfm = mock(:cfm)
40
+ filter = CucumberFM::TagFilter.new('')
41
+ cfm.stub(:filter).and_return(filter)
42
+ subject.stub(:cfm).and_return(cfm)
43
+ end
44
+ it "should parse feature info" do
45
+ CucumberFM::FeatureElement::Info.should_receive(:new).with(subject, INFO_CONTENT)
46
+ subject.info
47
+ end
48
+ it "should parse background" do
49
+ CucumberFM::FeatureElement::Background.should_receive(:new).with(subject, BACKGROUND_CONTENT)
50
+ subject.background
51
+ end
52
+
53
+ # SKIP bug in rspec
54
+ # it "should parse scenarios" do
55
+ # CucumberFM::FeatureElement::Scenario.should_receive(:new).with(subject, SCENARIO_CONTENT)
56
+ # subject.scenarios
57
+ # end
58
+ # it "should parse scenario outlines" do
59
+ # CucumberFM::FeatureElement::ScenarioOutline.should_receive(:new).with(subject, SCENARIO_OUTLINE)
60
+ # subject.scenarios
61
+ # end
62
+
63
+ it "should parse two scenarios" do
64
+ subject.should have(2).scenarios
65
+ end
66
+ context "TAGS" do
67
+ specify { should have(2).tags }
68
+ specify { subject.tags.should == %w( @tag @mc ) }
69
+ end
70
+ end
71
+
72
+ describe "WRITING" do
73
+ # TODO
74
+ # it "should compact file content"
75
+ it "should write content to file" do
76
+ @feature = CucumberFM::Feature.new('tmp/some.feature')
77
+ @feature.stub!(:raw).and_return("Some Content")
78
+ @feature.save
79
+ File.open('tmp/some.feature', 'r') { |stream| stream.read.should == "Some Content" }
80
+
81
+ # claenup
82
+ File.delete('tmp/some.feature')
83
+ end
84
+ end
85
+
86
+ describe "ESTIMATION" do
87
+ before(:each) do
88
+ subject { CucumberFM::Feature.new('some_path') }
89
+ subject.stub(:raw).and_return(FEATURE_CONTENT)
90
+ cfm = mock(:cfm)
91
+ filter = CucumberFM::TagFilter.new('')
92
+ cfm.stub!(:filter).and_return(filter)
93
+ subject.stub(:cfm).and_return(cfm)
94
+ end
95
+
96
+ it "should compute correct total estimation" do
97
+ subject.estimation.should == 8.25
98
+ end
99
+ end
100
+ context "PATH & ID" do
101
+ before(:each) do
102
+ cfm = mock('cfm', :path => "/some/path/features")
103
+ @feature = CucumberFM::Feature.new("/some/path/features/one/user_login.feature", cfm)
104
+ end
105
+
106
+ it "should return relative path based on cfm path" do
107
+ @feature.relative_path.should == "one/user_login.feature"
108
+ end
109
+
110
+ it "should return id (base64 encode relative path)" do
111
+ @feature.id.should == Base64.encode64("one/user_login.feature")
112
+ end
113
+ end
114
+
115
+
116
+ context "CVS TRIGGER" do
117
+ context "on default config values" do
118
+ before(:each) do
119
+ cfm = mock('cfm', :send_to_remote => true, :commit_change_on => true, :config => CucumberFM::Config.new)
120
+ @feature = CucumberFM::Feature.new("", cfm)
121
+ end
122
+ it "should do commit" do
123
+ @feature.send(:do_commit?).should be_true
124
+ end
125
+ it "should do push" do
126
+ @feature.send(:do_push?).should be_true
127
+ end
128
+ end
129
+ context "when push is set to false" do
130
+ before(:each) do
131
+ cfm = mock('cfm', :send_to_remote => true, :commit_change_on => true,
132
+ :config => CucumberFM::Config.new({:cvs_push => '0'}))
133
+ @feature = CucumberFM::Feature.new("", cfm)
134
+ end
135
+ it "should do commit" do
136
+ @feature.send(:do_commit?).should be_true
137
+ end
138
+ it "should skip push" do
139
+ @feature.send(:do_push?).should be_false
140
+ end
141
+ end
142
+ context "when only commit is set to false" do
143
+ before(:each) do
144
+ cfm = mock('cfm', :send_to_remote => true, :commit_change_on => true,
145
+ :config => CucumberFM::Config.new({:cvs_commit => '0'}))
146
+ @feature = CucumberFM::Feature.new("", cfm)
147
+ end
148
+ it "should skip commit" do
149
+ @feature.send(:do_commit?).should be_false
150
+ end
151
+ it "should skip push" do
152
+ @feature.send(:do_push?).should be_false
153
+ end
154
+ end
155
+ context "when only commit and push are set to false" do
156
+ before(:each) do
157
+ cfm = mock('cfm', :send_to_remote => true, :commit_change_on => true,
158
+ :config => CucumberFM::Config.new({:cvs_commit => '0', :cvs_push => '0'}))
159
+ @feature = CucumberFM::Feature.new("", cfm)
160
+ end
161
+ it "should skip commit" do
162
+ @feature.send(:do_commit?).should be_false
163
+ end
164
+ it "should skip push" do
165
+ @feature.send(:do_push?).should be_false
166
+ end
167
+ end
168
+ end
169
+
170
+
171
+ end
172
+
173
+ INFO_CONTENT = <<EOF
174
+ # some comment
175
+ #:::wireframe::: http://cs3b.com
176
+
177
+ @tag @mc
178
+ Feature: Tag filter
179
+ In order to fetch only scenarios that i want
180
+ as project manager, developer
181
+ I want to be able to create filter scope
182
+ EOF
183
+
184
+ BACKGROUND_CONTENT = <<EOF
185
+ Background: I am logged in as user admin
186
+ Given system user "t_a@hp.mc/secret" with role "locale"
187
+ And system user "p_e@hp.mc/secret" with role "product"
188
+ And signed up with "not_system_user@hp.mc/secret"
189
+ And I sign in as "admin@hearingpages.com/SxSUYGiEPi"
190
+ And user "admin@hearingpages.com" has assigned role "sys_user"
191
+ And I am on system user administration page
192
+ EOF
193
+
194
+ SCENARIO_CONTENT = <<EOF
195
+ #:::wireframe::: http://somelink
196
+
197
+ @_todo @5.25
198
+ Scenario: Creating filter scope
199
+ When I follow "New system user"
200
+ And I fill in "systemuser@hp.mc" for "Email"
201
+ And I fill in "password" for "Password"
202
+ And I fill in "password" for "Password Confirmation"
203
+ And I fill in "password" for "Password Confirmation"
204
+ EOF
205
+
206
+ SCENARIO_OUTLINE = <<EOF
207
+ # some comment about below filter
208
+
209
+ @_todo @3
210
+ Scenario Outline: Selecting filter scope as active
211
+
212
+ Examples:
213
+ |id |email |roles |
214
+ |5 |some@oo.com |admin |
215
+ EOF
216
+
217
+ FEATURE_CONTENT = <<EOF
218
+ #{INFO_CONTENT}
219
+
220
+ #{BACKGROUND_CONTENT}
221
+
222
+ #{SCENARIO_OUTLINE}
223
+
224
+ #{SCENARIO_CONTENT}
225
+
226
+ EOF
227
+
228
+
229
+