rainforest-cli 1.0.6 → 1.1.0
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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.rvmrc +1 -1
- data/.travis.yml +2 -0
- data/CHANGELOG.md +3 -0
- data/README.md +2 -1
- data/bin/rainforest +1 -1
- data/lib/rainforest/cli.rb +40 -18
- data/lib/rainforest/cli/csv_importer.rb +37 -39
- data/lib/rainforest/cli/git_trigger.rb +10 -12
- data/lib/rainforest/cli/http_client.rb +46 -45
- data/lib/rainforest/cli/options.rb +113 -92
- data/lib/rainforest/cli/runner.rb +116 -119
- data/lib/rainforest/cli/test_importer.rb +238 -0
- data/lib/rainforest/cli/test_parser.rb +100 -0
- data/lib/rainforest/cli/version.rb +2 -4
- data/rainforest-cli.gemspec +2 -1
- data/spec/cli_spec.rb +5 -5
- data/spec/csv_importer_spec.rb +2 -2
- data/spec/git_trigger_spec.rb +1 -1
- data/spec/options_spec.rb +12 -5
- data/spec/runner_spec.rb +2 -2
- data/spec/spec_helper.rb +1 -1
- metadata +19 -3
@@ -0,0 +1,100 @@
|
|
1
|
+
module RainforestCli::TestParser
|
2
|
+
class EmbeddedTest < Struct.new(:test_name)
|
3
|
+
def to_s
|
4
|
+
"--> embed: #{test_name}"
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
8
|
+
class Step < Struct.new(:action, :response)
|
9
|
+
def to_s
|
10
|
+
"#{action} --> #{response}"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class Error < Struct.new(:line, :reason)
|
15
|
+
def to_s
|
16
|
+
"Line #{line}: #{reason}"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
class Test < Struct.new(:id, :description, :title, :start_uri, :steps, :errors, :tags, :browsers)
|
21
|
+
end
|
22
|
+
|
23
|
+
class Parser
|
24
|
+
attr_reader :steps, :errors, :text
|
25
|
+
|
26
|
+
def initialize(text)
|
27
|
+
@text = text.to_s
|
28
|
+
|
29
|
+
@test = Test.new
|
30
|
+
@test.description = ""
|
31
|
+
@test.steps = []
|
32
|
+
@test.errors = {}
|
33
|
+
@test.tags = []
|
34
|
+
@test.browsers = []
|
35
|
+
end
|
36
|
+
|
37
|
+
TEXT_FIELDS = [:start_uri, :title, :tags].freeze
|
38
|
+
CSV_FIELDS = [:tags, :browsers].freeze
|
39
|
+
|
40
|
+
def process
|
41
|
+
scratch = []
|
42
|
+
|
43
|
+
text.lines.map(&:chomp).each_with_index do |line, line_no|
|
44
|
+
if line[0..1] == '#!'
|
45
|
+
# special comment, don't ignore!
|
46
|
+
@test.id = line[2..-1].strip.split(" ")[0]
|
47
|
+
@test.description += line[1..-1] + "\n"
|
48
|
+
|
49
|
+
elsif line[0] == '#'
|
50
|
+
# comment, store in description
|
51
|
+
@test.description += line[1..-1] + "\n"
|
52
|
+
|
53
|
+
(CSV_FIELDS + TEXT_FIELDS).each do |field|
|
54
|
+
next unless line[1..-1].strip[0..(field.length)] == "#{field}:"
|
55
|
+
|
56
|
+
# extract just the text of the field
|
57
|
+
@test[field] = line[1..-1].split(" ")[1..-1].join(" ").strip
|
58
|
+
|
59
|
+
# if it's supposed to be a CSV field, split and trim it
|
60
|
+
if CSV_FIELDS.include?(field)
|
61
|
+
@test[field] = @test[field].split(',').map(&:strip).map(&:downcase)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
elsif scratch.count == 0 && line.strip != ''
|
66
|
+
if line[0] == '-'
|
67
|
+
@test.steps << EmbeddedTest.new(line[1..-1].strip)
|
68
|
+
else
|
69
|
+
scratch << line.strip
|
70
|
+
end
|
71
|
+
|
72
|
+
elsif scratch.count == 1
|
73
|
+
if line.strip == ''
|
74
|
+
@test.errors[line_no] = Error.new(line_no, "Missing question")
|
75
|
+
elsif !line.include?('?')
|
76
|
+
@test.errors[line_no] = Error.new(line_no, "Missing ?")
|
77
|
+
else
|
78
|
+
scratch << line.strip
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
|
83
|
+
if @test.errors.has_key?(line_no)
|
84
|
+
scratch = []
|
85
|
+
end
|
86
|
+
|
87
|
+
if scratch.count == 2
|
88
|
+
@test.steps << Step.new(scratch[0], scratch[1])
|
89
|
+
scratch = []
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
if @test.id == nil
|
94
|
+
@test.errors[0] = Error.new(0, "Missing test ID. Please start a line #! followed by a unique id.")
|
95
|
+
end
|
96
|
+
|
97
|
+
return @test
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
data/rainforest-cli.gemspec
CHANGED
@@ -5,7 +5,7 @@ require 'rainforest/cli/version'
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = "rainforest-cli"
|
8
|
-
spec.version =
|
8
|
+
spec.version = RainforestCli::VERSION
|
9
9
|
spec.authors = ["Simon Mathieu", "Russell Smith"]
|
10
10
|
spec.email = ["simon@rainforestqa.com", "russ@rainforestqa.com"]
|
11
11
|
spec.description = %q{Command line utility for Rainforest QA}
|
@@ -21,6 +21,7 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.add_dependency "httparty"
|
22
22
|
spec.add_dependency "parallel"
|
23
23
|
spec.add_dependency "ruby-progressbar"
|
24
|
+
spec.add_dependency "rainforest"
|
24
25
|
spec.add_development_dependency "bundler", "~> 1.3"
|
25
26
|
spec.add_development_dependency "rake"
|
26
27
|
end
|
data/spec/cli_spec.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
describe
|
2
|
-
let(:http_client) {
|
1
|
+
describe RainforestCli do
|
2
|
+
let(:http_client) { RainforestCli::HttpClient.any_instance }
|
3
3
|
|
4
4
|
before do
|
5
5
|
Kernel.stub(:sleep)
|
@@ -52,7 +52,7 @@ describe Rainforest::Cli do
|
|
52
52
|
end
|
53
53
|
|
54
54
|
before do
|
55
|
-
|
55
|
+
RainforestCli::GitTrigger.stub(:last_commit_message) { commit_message }
|
56
56
|
end
|
57
57
|
|
58
58
|
describe "with tags parameter passed" do
|
@@ -134,7 +134,7 @@ describe Rainforest::Cli do
|
|
134
134
|
end
|
135
135
|
|
136
136
|
it "starts the run with site_id and environment_id" do
|
137
|
-
|
137
|
+
RainforestCli::Runner.any_instance.stub(get_environment_id: 333)
|
138
138
|
|
139
139
|
http_client.should_receive(:post).with(
|
140
140
|
"/runs",
|
@@ -148,7 +148,7 @@ describe Rainforest::Cli do
|
|
148
148
|
let(:params) { %w(--token x --environment 123) }
|
149
149
|
|
150
150
|
it "starts the run with environment_id" do
|
151
|
-
|
151
|
+
RainforestCli::Runner.any_instance.stub(get_environment_id: 333)
|
152
152
|
|
153
153
|
http_client.should_receive(:post).with(
|
154
154
|
"/runs",
|
data/spec/csv_importer_spec.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
describe
|
1
|
+
describe RainforestCli::CSVImporter do
|
2
2
|
let(:csv_file) { "#{File.dirname(__FILE__)}/fixtures/variables.txt" }
|
3
3
|
|
4
4
|
describe '.import' do
|
@@ -15,7 +15,7 @@ describe Rainforest::Cli::CSVImporter do
|
|
15
15
|
end
|
16
16
|
|
17
17
|
before do
|
18
|
-
|
18
|
+
RainforestCli::HttpClient.stub(:new).and_return(http_client)
|
19
19
|
end
|
20
20
|
|
21
21
|
it 'should post the schema to the generators API' do
|
data/spec/git_trigger_spec.rb
CHANGED
data/spec/options_spec.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
describe
|
2
|
-
subject {
|
1
|
+
describe RainforestCli::OptionParser do
|
2
|
+
subject { RainforestCli::OptionParser.new(args) }
|
3
3
|
|
4
4
|
describe "#initialize" do
|
5
5
|
context "importing csv file" do
|
@@ -38,7 +38,7 @@ describe Rainforest::Cli::OptionParser do
|
|
38
38
|
let(:args) { ["run", "--browsers", "lulbrower"] }
|
39
39
|
|
40
40
|
it "raises an exception" do
|
41
|
-
expect{subject}.to raise_error(
|
41
|
+
expect{subject}.to raise_error(RainforestCli::BrowserException)
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
@@ -65,8 +65,15 @@ describe Rainforest::Cli::OptionParser do
|
|
65
65
|
end
|
66
66
|
|
67
67
|
context "it parses the conflict flag" do
|
68
|
-
|
69
|
-
|
68
|
+
context "when abort" do
|
69
|
+
let(:args) { ["run", "--conflict", "abort", "all"] }
|
70
|
+
its(:conflict) { should == "abort"}
|
71
|
+
end
|
72
|
+
|
73
|
+
context "when abort-all" do
|
74
|
+
let(:args) { ["run", "--conflict", "abort-all", "all"]}
|
75
|
+
its(:conflict) { should == "abort-all" }
|
76
|
+
end
|
70
77
|
end
|
71
78
|
|
72
79
|
context "it parses the fail-fast flag" do
|
data/spec/runner_spec.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
describe
|
1
|
+
describe RainforestCli::Runner do
|
2
2
|
let(:args) { %w(run all) }
|
3
|
-
let(:options) {
|
3
|
+
let(:options) { RainforestCli::OptionParser.new(args) }
|
4
4
|
subject { described_class.new(options) }
|
5
5
|
|
6
6
|
describe "#get_environment_id" do
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rainforest-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Simon Mathieu
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2016-01-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: httparty
|
@@ -53,6 +53,20 @@ dependencies:
|
|
53
53
|
- - ">="
|
54
54
|
- !ruby/object:Gem::Version
|
55
55
|
version: '0'
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: rainforest
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
63
|
+
type: :runtime
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
56
70
|
- !ruby/object:Gem::Dependency
|
57
71
|
name: bundler
|
58
72
|
requirement: !ruby/object:Gem::Requirement
|
@@ -108,6 +122,8 @@ files:
|
|
108
122
|
- lib/rainforest/cli/http_client.rb
|
109
123
|
- lib/rainforest/cli/options.rb
|
110
124
|
- lib/rainforest/cli/runner.rb
|
125
|
+
- lib/rainforest/cli/test_importer.rb
|
126
|
+
- lib/rainforest/cli/test_parser.rb
|
111
127
|
- lib/rainforest/cli/version.rb
|
112
128
|
- rainforest-cli.gemspec
|
113
129
|
- spec/cli_spec.rb
|
@@ -137,7 +153,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
137
153
|
version: '0'
|
138
154
|
requirements: []
|
139
155
|
rubyforge_project:
|
140
|
-
rubygems_version: 2.
|
156
|
+
rubygems_version: 2.5.1
|
141
157
|
signing_key:
|
142
158
|
specification_version: 4
|
143
159
|
summary: Command line utility for Rainforest QA
|