gitnesse 0.12.6 → 1.0.0.beta2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. checksums.yaml +7 -0
  2. data/.travis.yml +6 -0
  3. data/Rakefile +6 -11
  4. data/bin/.keep +0 -0
  5. data/bin/gitnesse +2 -32
  6. data/config/gitnesse.rb.example +2 -4
  7. data/gitnesse.gemspec +22 -21
  8. data/lib/gitnesse/cli/helpers/config_helpers.rb +13 -0
  9. data/lib/gitnesse/cli/helpers/feature_helpers.rb +26 -0
  10. data/lib/gitnesse/cli/helpers/wiki_helpers.rb +53 -0
  11. data/lib/gitnesse/cli/task/help.rb +42 -0
  12. data/lib/gitnesse/cli/task/info.rb +29 -0
  13. data/lib/gitnesse/cli/task/pull.rb +26 -0
  14. data/lib/gitnesse/cli/task/push.rb +101 -0
  15. data/lib/gitnesse/cli/task/run.rb +85 -0
  16. data/lib/gitnesse/cli/task.rb +67 -0
  17. data/lib/gitnesse/cli.rb +55 -0
  18. data/lib/gitnesse/config.rb +68 -0
  19. data/lib/gitnesse/config_loader.rb +36 -0
  20. data/lib/gitnesse/dependency_checker.rb +86 -0
  21. data/lib/gitnesse/dir_manager.rb +37 -0
  22. data/lib/gitnesse/feature.rb +63 -0
  23. data/lib/gitnesse/feature_extractor.rb +29 -0
  24. data/lib/gitnesse/feature_transform.rb +30 -0
  25. data/lib/gitnesse/hooks/gitnesse.rb +5 -0
  26. data/lib/gitnesse/hooks.rb +30 -33
  27. data/lib/gitnesse/railtie.rb +3 -1
  28. data/lib/gitnesse/rake/tasks.rake +11 -0
  29. data/lib/gitnesse/tasks.rb +7 -4
  30. data/lib/gitnesse/version.rb +1 -1
  31. data/lib/gitnesse/wiki/page.rb +103 -0
  32. data/lib/gitnesse/wiki.rb +80 -143
  33. data/lib/gitnesse.rb +10 -102
  34. data/spec/lib/cli/task/help_spec.rb +34 -0
  35. data/spec/lib/cli/task/info_spec.rb +22 -0
  36. data/spec/lib/cli/task/pull_spec.rb +24 -0
  37. data/spec/lib/cli/task/push_spec.rb +24 -0
  38. data/spec/lib/cli_spec.rb +13 -0
  39. data/spec/lib/config_loader_spec.rb +46 -0
  40. data/spec/lib/config_spec.rb +61 -0
  41. data/spec/lib/dependency_checker_spec.rb +193 -0
  42. data/spec/lib/dir_manager_spec.rb +46 -0
  43. data/spec/lib/feature_extractor_spec.rb +30 -0
  44. data/spec/lib/feature_spec.rb +53 -0
  45. data/spec/lib/feature_transform_spec.rb +25 -0
  46. data/spec/lib/hooks_spec.rb +40 -0
  47. data/spec/lib/version_spec.rb +9 -0
  48. data/spec/lib/wiki/page_spec.rb +68 -0
  49. data/spec/lib/wiki_spec.rb +34 -0
  50. data/spec/spec_helper.rb +4 -0
  51. data/spec/support/cli.rb +20 -0
  52. data/spec/support/example_config/gitnesse.rb +4 -0
  53. data/{test/test_helper.rb → spec/support/example_features/addition.feature} +0 -16
  54. data/spec/support/example_features/division.feature +10 -0
  55. data/spec/support/example_wiki_pages/developer_can_sync_features_to_code.md +29 -0
  56. data/spec/support_helper.rb +79 -0
  57. metadata +103 -109
  58. data/README.md +0 -85
  59. data/features/step_definitions/gitnesse_steps.rb +0 -54
  60. data/features/support/env.rb +0 -65
  61. data/features/sync_wiki_features_to_code.feature +0 -29
  62. data/lib/gitnesse/configuration.rb +0 -54
  63. data/lib/gitnesse/dependencies.rb +0 -39
  64. data/lib/gitnesse/features.rb +0 -38
  65. data/lib/gitnesse/git_config.rb +0 -39
  66. data/lib/gitnesse/support/hook.rb +0 -11
  67. data/lib/gitnesse/tasks.rake +0 -34
  68. data/test/lib/gitnesse/build_page_content_test.rb +0 -89
  69. data/test/lib/gitnesse/commit_info_test.rb +0 -16
  70. data/test/lib/gitnesse/configuration_defaults_test.rb +0 -11
  71. data/test/lib/gitnesse/configuration_to_hash_test.rb +0 -25
  72. data/test/lib/gitnesse/custom_branch_test.rb +0 -24
  73. data/test/lib/gitnesse/dependencies_check_test.rb +0 -73
  74. data/test/lib/gitnesse/extract_features_test.rb +0 -44
  75. data/test/lib/gitnesse/gather_test.rb +0 -30
  76. data/test/lib/gitnesse/load_feature_files_into_wiki_test.rb +0 -34
  77. data/test/lib/gitnesse/read_git_config_test.rb +0 -33
  78. data/test/lib/gitnesse/strip_results_test.rb +0 -52
  79. data/test/lib/gitnesse/version_test.rb +0 -7
  80. data/test/lib/gitnesse/wiki_append_results_test.rb +0 -50
  81. data/test/lib/gitnesse/write_file_test.rb +0 -18
  82. data/test/wiki_test_helper.rb +0 -11
@@ -0,0 +1,193 @@
1
+ require 'spec_helper'
2
+
3
+ module Gitnesse
4
+ describe DependencyChecker do
5
+ let(:checker) { DependencyChecker.new }
6
+ let(:config) { Config.instance }
7
+
8
+ describe "#check" do
9
+ it "calls other dependency checks" do
10
+ checks = %w(check_git check_cucumber check_repository_url
11
+ check_identifier check_features_dir_exists)
12
+ checks.each do |check|
13
+ checker.should_receive(check.to_sym).and_return(true)
14
+ end
15
+
16
+ checker.check
17
+ end
18
+
19
+ it "calls display_errors if there are any errors" do
20
+ checks = %w(check_cucumber check_repository_url check_identifier
21
+ check_features_dir_exists)
22
+
23
+ checks.each do |check|
24
+ checker.should_receive(check.to_sym).and_return(true)
25
+ end
26
+
27
+ checker.should_receive(:system).with('git --version &> /dev/null').and_return(nil)
28
+ checker.should_receive(:display_errors)
29
+
30
+ checker.check
31
+ end
32
+ end
33
+
34
+ describe "#display_errors" do
35
+ before do
36
+ checker.instance_variable_set(:@errors, ["this is an example error"])
37
+
38
+ checker.should_receive(:puts).with("Configuration errors were found!")
39
+ checker.should_receive(:puts).with(" - this is an example error")
40
+ checker.should_receive(:exit)
41
+ end
42
+
43
+ it "prints a note saying errors were found" do
44
+ checker.display_errors
45
+ end
46
+
47
+ it "displays every error in @errors" do
48
+ checker.display_errors
49
+ end
50
+
51
+ it "should exit" do
52
+ checker.display_errors
53
+ end
54
+ end
55
+
56
+ describe '#check_git' do
57
+ context 'when git is installed' do
58
+ before do
59
+ checker.should_receive(:system).with('git --version &> /dev/null').and_return(true)
60
+ end
61
+
62
+ it 'returns true' do
63
+ expect(checker.check_git).to be_true
64
+ end
65
+ end
66
+
67
+ context 'when git is not installed' do
68
+ before do
69
+ checker.should_receive(:system).with('git --version &> /dev/null').and_return(nil)
70
+ end
71
+
72
+ it 'adds an error' do
73
+ expect {
74
+ checker.check_git
75
+ }.to change{checker.errors.length}.from(0).to(1)
76
+ end
77
+ end
78
+ end
79
+
80
+ describe '#check_cucumber' do
81
+ context 'when cucumber is installed' do
82
+ before do
83
+ checker.should_receive(:system).with('cucumber --version &> /dev/null').and_return(true)
84
+ end
85
+
86
+ it 'returns true' do
87
+ expect(checker.check_cucumber).to be_true
88
+ end
89
+ end
90
+
91
+ context 'when cucumber is not installed' do
92
+ before do
93
+ checker.should_receive(:system).with('cucumber --version &> /dev/null').and_return(nil)
94
+ end
95
+
96
+ it 'adds an error' do
97
+ expect {
98
+ checker.check_cucumber
99
+ }.to change{checker.errors.length}.from(0).to(1)
100
+ end
101
+ end
102
+ end
103
+
104
+ describe "#check_repository_url" do
105
+ context "when repository_url is set" do
106
+ before do
107
+ config.repository_url = "git@github.com:hybridgroup/gitnesse.wiki.git"
108
+ end
109
+
110
+ it "returns true" do
111
+ expect(checker.check_repository_url).to be_true
112
+ end
113
+ end
114
+
115
+ context "when repository_url is not set" do
116
+ before do
117
+ config.repository_url = nil
118
+ end
119
+
120
+ it "adds an error" do
121
+ expect {
122
+ checker.check_repository_url
123
+ }.to change{checker.errors.length}.from(0).to(1)
124
+ end
125
+ end
126
+ end
127
+
128
+
129
+ describe "#check_identifier" do
130
+ context "when annotate_results is true" do
131
+ before do
132
+ config.annotate_results = true
133
+ end
134
+
135
+ context "when identifier is set" do
136
+ before do
137
+ config.identifier = "Uncle Bob's Macbook Pro"
138
+ end
139
+
140
+ it "returns true" do
141
+ expect(checker.check_identifier).to be_true
142
+ end
143
+ end
144
+
145
+ context "when identifier is not set" do
146
+ before do
147
+ config.identifier = nil
148
+ end
149
+
150
+ it "adds an error" do
151
+ expect {
152
+ checker.check_identifier
153
+ }.to change{checker.errors.length}.from(0).to(1)
154
+ end
155
+ end
156
+ end
157
+
158
+ context "when annotate_results is false" do
159
+ before do
160
+ config.annotate_results = false
161
+ end
162
+
163
+ it "returns true" do
164
+ expect(checker.check_identifier).to be_true
165
+ end
166
+ end
167
+ end
168
+
169
+ describe "#check_features_dir_exists" do
170
+ context "when features_dir exists" do
171
+ before do
172
+ File.should_receive(:directory?).and_return(true)
173
+ end
174
+
175
+ it "returns true" do
176
+ expect(checker.check_features_dir_exists).to be_true
177
+ end
178
+ end
179
+
180
+ context "when features_dir does not exist or is a file" do
181
+ before do
182
+ File.should_receive(:directory?).and_return(false)
183
+ end
184
+
185
+ it "adds an error" do
186
+ expect {
187
+ checker.check_features_dir_exists
188
+ }.to change{checker.errors.length}.from(0).to(1)
189
+ end
190
+ end
191
+ end
192
+ end
193
+ end
@@ -0,0 +1,46 @@
1
+ require 'spec_helper'
2
+
3
+ module Gitnesse
4
+ describe DirManager do
5
+ let(:path) { "#{Dir.home}/.gitnesse/gitnesse" }
6
+
7
+ describe ".make_project_dir" do
8
+ before do
9
+ FileUtils.should_receive(:mkdir_p).with(path).and_return(true)
10
+ end
11
+
12
+ it "creates a dir based on the current project name" do
13
+ expect(DirManager.make_project_dir).to eq path
14
+ end
15
+ end
16
+
17
+ describe ".remove_project_dir" do
18
+ it "removes the wiki dir for the current project" do
19
+ FileUtils.should_receive(:rm_rf).with(path).and_return(true)
20
+ DirManager.remove_project_dir
21
+ end
22
+ end
23
+
24
+ describe ".project_dir_present?" do
25
+ context "if project dir is a directory" do
26
+ before do
27
+ File.should_receive(:directory?).with(path).and_return(true)
28
+ end
29
+
30
+ it "returns true" do
31
+ expect(DirManager.project_dir_present?).to be_true
32
+ end
33
+ end
34
+
35
+ context "if project dir does not exists" do
36
+ before do
37
+ File.should_receive(:directory?).with(path).and_return(false)
38
+ end
39
+
40
+ it "returns false" do
41
+ expect(DirManager.project_dir_present?).to be_false
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ module Gitnesse
4
+ describe FeatureExtractor do
5
+ let(:example_page) { Support.example_wiki_page }
6
+ let(:expected_features) { Support.example_features }
7
+
8
+ describe ".extract!" do
9
+ it "extracts Cucumber features from Markdown wiki pages as an array" do
10
+ extracted_page = FeatureExtractor.extract!(example_page)
11
+ expect(extracted_page).to eq expected_features
12
+ expect(extracted_page).to be_an Array
13
+ end
14
+
15
+ it "returns an empty array if no examples were found" do
16
+ expect(FeatureExtractor.extract!("")).to eq []
17
+ end
18
+ end
19
+
20
+ describe ".contains_features?" do
21
+ it "returns true if the page contains features" do
22
+ expect(FeatureExtractor.contains_features?(example_page)).to be_true
23
+ end
24
+
25
+ it "returns false if no features were found" do
26
+ expect(FeatureExtractor.contains_features?("")).to be_false
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,53 @@
1
+ require 'spec_helper'
2
+
3
+ module Gitnesse
4
+ describe Feature do
5
+ let(:feature) { Feature.new "thing.feature" }
6
+ let(:nested_feature) { Feature.new "nested_features/thing.feature" }
7
+
8
+ it "accepts a filename as an argument" do
9
+ expect(feature.filename).to eq "thing.feature"
10
+ end
11
+
12
+ it "can generate a wiki filename" do
13
+ expect(feature.wiki_filename).to eq "features > thing.feature.md"
14
+ end
15
+
16
+ describe "#wiki_filename" do
17
+ it "generates wiki filenames for nested features" do
18
+ expect(nested_feature.wiki_filename).to eq "features > nested_features > thing.feature.md"
19
+ end
20
+ end
21
+
22
+ describe "#read" do
23
+ before do
24
+ expect(File).to receive(:read).once.with("features/thing.feature").and_return('')
25
+ end
26
+
27
+ it "reads and caches the content of the file" do
28
+ expect(feature.read).to be_a String
29
+ expect(feature.read).to eq ''
30
+ end
31
+ end
32
+
33
+ describe "#write" do
34
+ before do
35
+ @stringio = StringIO.new
36
+ expect(File).to receive(:open).with("features/thing.feature", "w").and_yield(@stringio)
37
+ allow(File).to receive(:read).with("features/thing.feature").and_return(@stringio.string)
38
+ end
39
+
40
+ it "writes content to the file" do
41
+ feature.write('testing')
42
+ expect(feature.read).to eq "testing"
43
+ end
44
+ end
45
+
46
+ describe "#index_page" do
47
+ it "generates the path to the index page the feature will appear on" do
48
+ expect(feature.index_page).to eq "features.md"
49
+ expect(nested_feature.index_page).to eq "features > nested_features.md"
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ module Gitnesse
4
+ describe FeatureTransform do
5
+ describe ".convert" do
6
+ context "when a feature is passed" do
7
+ it "converts a Cucumber feature to a Markdown wiki page" do
8
+ wiki_page = FeatureTransform.convert(Support.addition_feature)
9
+ expect(wiki_page).to eq Support.wiki_addition_feature
10
+ end
11
+ end
12
+
13
+ context "when a non-feature string is passed" do
14
+ it "returns a 'undefined feature' page" do
15
+ result = <<-EOS.chomp
16
+ # Undefined Feature
17
+
18
+ This feature hasn't been added yet.
19
+ EOS
20
+ expect(FeatureTransform.convert('')).to eq result
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+
3
+ module Gitnesse
4
+ describe Hooks do
5
+ let(:hook) { File.expand_path("#{File.dirname(__FILE__)}/../../lib/gitnesse/hooks/gitnesse.rb") }
6
+ let(:path) { Hooks::PATH }
7
+ let(:dir) { Hooks::DIR }
8
+
9
+ it "sets DIR to the 'support' cucumber dir" do
10
+ expect(dir).to match "features/support"
11
+ end
12
+
13
+ it "sets PATH to the filename for the Cucumber hook" do
14
+ expect(path).to match "features/support/gitnesse.rb"
15
+ end
16
+
17
+ describe ".create!" do
18
+ before do
19
+ expect(FileUtils).to receive(:cp).with(hook, path)
20
+ end
21
+
22
+ it "copies the hooks to the support dir" do
23
+ Hooks.create!
24
+ end
25
+
26
+ it "creates the support dir if it doesn't exist" do
27
+ expect(File).to receive(:directory?).with(dir).and_return(false)
28
+ expect(FileUtils).to receive(:mkdir_p).with(dir).and_return(nil)
29
+ Hooks.create!
30
+ end
31
+ end
32
+
33
+ describe ".destroy!" do
34
+ it "removes the Gitnesse hooks from the Cucumber support dir" do
35
+ expect(FileUtils).to receive(:rm).with(path, force: true).and_return(nil)
36
+ Hooks.destroy!
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,9 @@
1
+ require 'spec_helper'
2
+
3
+ module Gitnesse
4
+ describe VERSION do
5
+ it "should have a version number string" do
6
+ expect(VERSION).to be_a String
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,68 @@
1
+ require 'spec_helper'
2
+ require 'time'
3
+
4
+ module Gitnesse
5
+ describe Wiki::Page do
6
+ let(:page) { Wiki::Page.new("~/.gitnesse/gitnesse/features > new_features > new_feature.feature.md") }
7
+
8
+ it "converts the filename to a local path" do
9
+ expect(page.relative_path).to eq "./features/new_features"
10
+ end
11
+
12
+ it "extracts the feature filename" do
13
+ expect(page.filename).to eq "new_feature.feature"
14
+ end
15
+
16
+ it "constructs the full local file path" do
17
+ expect(page.path).to eq "./features/new_features/new_feature.feature"
18
+ end
19
+
20
+ describe "#read" do
21
+ it "reads and caches the page's contents" do
22
+ File.should_receive(:read).with(page.wiki_path).once.and_return("test")
23
+
24
+ expect(page.read).to be_a String
25
+ expect(page.read).to eq "test"
26
+ end
27
+ end
28
+
29
+ describe "#write" do
30
+ before do
31
+ @stringio = StringIO.new
32
+ expect(File).to receive(:open).with(page.wiki_path, 'w+').and_yield(@stringio)
33
+ allow(File).to receive(:read).with(page.wiki_path).and_return(@stringio.string)
34
+ end
35
+
36
+ it "writes content to the file" do
37
+ page.write('testing')
38
+ expect(page.read).to eq "testing"
39
+ end
40
+ end
41
+
42
+ describe "#remove_results" do
43
+ before do
44
+ @stringio = StringIO.new(Support.wiki_feature_with_annotations)
45
+ expect(File).to receive(:read).with(page.wiki_path).and_return(@stringio.string)
46
+ allow(File).to receive(:open).with(page.wiki_path, 'w+').and_yield(@stringio)
47
+ end
48
+
49
+ it "removes all existing scenario results from the wiki page" do
50
+ expect(page.remove_results).to eq Support.wiki_feature_without_annotations
51
+ end
52
+ end
53
+
54
+ describe "#append_result" do
55
+ before do
56
+ @stringio = StringIO.new(Support.wiki_feature_without_annotations)
57
+ allow(File).to receive(:read).with(page.wiki_path).and_return(@stringio.string)
58
+ allow(File).to receive(:open).with(page.wiki_path, 'w+').and_yield(@stringio)
59
+ allow(Time).to receive(:now).and_return(Time.parse("Sep 06 2013 10:10"))
60
+ end
61
+
62
+ it "appends scenario results to the wiki page" do
63
+ page.append_result('Divide two numbers', :passed)
64
+ expect(page.read).to eq Support.wiki_feature_with_annotations
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,34 @@
1
+ require 'spec_helper'
2
+
3
+ module Gitnesse
4
+ describe Wiki do
5
+ describe "#remove_features" do
6
+ before do
7
+ Wiki.any_instance.stub(:clone_or_update_repo).and_return(true)
8
+
9
+ @repo = double('repo', status: [])
10
+ expect(Git).to receive(:init).with("~/.gitnesse/gitnesse").and_return(@repo)
11
+
12
+ @wiki = Wiki.new "", "~/.gitnesse/gitnesse"
13
+ end
14
+
15
+ it "removes gitnesse-created files from the wiki" do
16
+ files = [
17
+ double(path: "Home.md"),
18
+ double(path: "features.md"),
19
+ double(path: "features > test.md"),
20
+ double(path: "features > test > thing.feature.md")
21
+ ]
22
+
23
+ allow(@repo).to receive(:status).and_return(files)
24
+
25
+ expect(@repo).to_not receive(:remove).with("Home.md")
26
+ expect(@repo).to receive(:remove).with("features.md")
27
+ expect(@repo).to receive(:remove).with("features > test.md")
28
+ expect(@repo).to receive(:remove).with("features > test > thing.feature.md")
29
+
30
+ @wiki.remove_features
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,4 @@
1
+ require 'gitnesse'
2
+
3
+ require 'rspec'
4
+ require 'support_helper'
@@ -0,0 +1,20 @@
1
+ require 'fileutils'
2
+ require 'tempfile'
3
+ require 'tmpdir'
4
+
5
+ module CliSpecs
6
+ def gitnesse(args)
7
+ out = StringIO.new
8
+ Gitnesse::Cli.new(out).parse(args.split(/\s+/))
9
+
10
+ out.rewind
11
+ out.read
12
+ rescue SystemExit
13
+ out.rewind
14
+ out.read
15
+ end
16
+ end
17
+
18
+ RSpec.configure do |c|
19
+ c.include CliSpecs, type: :cli
20
+ end
@@ -0,0 +1,4 @@
1
+ Gitnesse::Config.config do |config|
2
+ config.annotate_results = true
3
+ config.identifier = "Uncle Bob's Laptop"
4
+ end
@@ -1,16 +1,3 @@
1
- require "minitest/matchers"
2
- require "minitest/autorun"
3
- require "minitest/pride"
4
- require "mocha"
5
- require File.expand_path('../../lib/gitnesse.rb', __FILE__)
6
-
7
- module FeatureTestMethods
8
-
9
- # Creates a basic test feature
10
- #
11
- # Returns a string
12
- def create_test_feature
13
- <<-EOF
14
1
  Feature: Addition
15
2
  In order to avoid silly mistakes
16
3
  As a math idiot
@@ -21,6 +8,3 @@ Feature: Addition
21
8
  And I have entered 70 into the calculator
22
9
  When I press add
23
10
  Then the result should be 120 on the screen
24
- EOF
25
- end
26
- end
@@ -0,0 +1,10 @@
1
+ Feature: Division
2
+ In order to avoid silly mistakes
3
+ As a math idiot
4
+ I want to be told the quotient of two numbers
5
+
6
+ Scenario: Divide two numbers
7
+ Given I have entered 6 into the calculator
8
+ And I have entered 2 into the calculator
9
+ When I divide
10
+ Then the result should be 3
@@ -0,0 +1,29 @@
1
+ # Developer Can Sync Features To Code
2
+
3
+ ```Gherkin
4
+ Feature: Addition
5
+ In order to avoid silly mistakes
6
+ As a math idiot
7
+ I want to be told the sum of two numbers
8
+
9
+ Scenario: Add two numbers
10
+ Given I have entered 50 into the calculator
11
+ And I have entered 70 into the calculator
12
+ When I press add
13
+ Then the result should be 120 on the screen
14
+ ```
15
+
16
+ ```gherkin
17
+ Feature: Division
18
+ In order to avoid silly mistakes
19
+ As a math idiot
20
+ I want to be told the quotient of two numbers
21
+
22
+ Scenario: Divide two numbers
23
+ Given I have entered 6 into the calculator
24
+ And I have entered 2 into the calculator
25
+ When I divide
26
+ Then the result should be 3
27
+ ```
28
+
29
+ ![](https://s3.amazonaws.com/gitnesse/github/passing.png) `Last result was PASSED: Features already exist in wiki but not in code (2013-01-01 00:00:00 -0800 - Developer Computer)`
@@ -0,0 +1,79 @@
1
+ SUPPORT_FILES_DIR = File.join(File.dirname(__FILE__), "/support")
2
+
3
+ Dir[File.join(File.dirname(__FILE__), "support", "*.rb")].each { |f| require(f) }
4
+
5
+ class Support
6
+ class << self
7
+ def example_config_file_path
8
+ "#{SUPPORT_FILES_DIR}/example_config/gitnesse.rb"
9
+ end
10
+
11
+ def example_config_file
12
+ @example_config ||= begin
13
+ File.read(example_config_file_path)
14
+ end
15
+ end
16
+
17
+ def addition_feature
18
+ @addition ||= begin
19
+ File.read("#{SUPPORT_FILES_DIR}/example_features/addition.feature")
20
+ end.lstrip.chomp
21
+ end
22
+
23
+ def wiki_addition_feature
24
+ <<-EOS.chomp
25
+ # Addition
26
+
27
+ ```gherkin
28
+ #{addition_feature}
29
+ ```
30
+ EOS
31
+ end
32
+
33
+ def division_feature
34
+ @division ||= begin
35
+ File.read "#{SUPPORT_FILES_DIR}/example_features/division.feature"
36
+ end.lstrip.chomp
37
+ end
38
+
39
+ def wiki_division_feature
40
+ <<-EOS.chomp
41
+ # Division
42
+
43
+ ```gherkin
44
+ #{division_feature}
45
+ ```
46
+ EOS
47
+ end
48
+
49
+ def wiki_feature_without_annotations
50
+ wiki_division_feature
51
+ end
52
+
53
+ def wiki_feature_with_annotations
54
+ <<-EOS.chomp
55
+ # Division
56
+
57
+ ```gherkin
58
+ #{division_feature}
59
+ ```
60
+
61
+ ![](https://s3.amazonaws.com/gitnesse/github/passed.png) `Last Result For Scenario 'Divide two numbers': PASSED (Sep 06, 2013, 10:10 AM - )`
62
+ EOS
63
+ end
64
+
65
+ def example_features
66
+ [addition_feature, division_feature]
67
+ end
68
+
69
+ def example_wiki_page
70
+ @example_wiki ||= begin
71
+ File.read "#{SUPPORT_FILES_DIR}/example_wiki_pages/developer_can_sync_features_to_code.md"
72
+ end
73
+ end
74
+
75
+ def example_wiki_page_features
76
+ [addition_feature, division_feature]
77
+ end
78
+ end
79
+ end