rainforest-cli 1.1.4 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/README.md +11 -0
- data/lib/rainforest/cli.rb +2 -1
- data/lib/rainforest/cli/options.rb +3 -4
- data/lib/rainforest/cli/test_files.rb +32 -0
- data/lib/rainforest/cli/test_importer.rb +142 -78
- data/lib/rainforest/cli/test_parser.rb +17 -6
- data/lib/rainforest/cli/version.rb +1 -1
- data/spec/options_spec.rb +1 -6
- data/spec/rainforest-example/example_test.rfml +6 -0
- data/spec/test_files_spec.rb +36 -0
- metadata +7 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5a4d51888c0d3ce1b8845532734aa59145159b2f
|
4
|
+
data.tar.gz: 49d5541c943fc62aca7dbd5c173823cf6c64743c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8f8479a400d1d88eaf84e0eeb584a1e6a8e56590e89b628cfbd9cb8c0126cc4b6b0e64c4ff9c8427f31d6f79795ad2a43abd5b27c03a10232fdc3481dd77c1a4
|
7
|
+
data.tar.gz: 1e1337f1e45e4b5131e612d0bea3fef8d01686ea043af10d7deb2d5d76baf79a13d6a558773619ace488f8f7acbb01ae5b3090d5aeac968f5c9e54494e610888
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
# Rainforest CLI Changelog
|
2
2
|
|
3
|
+
## 1.2.0 - 8th February 2016
|
4
|
+
- Add support for embedded tests.
|
5
|
+
- Add support for customizable RFML ids.
|
6
|
+
|
3
7
|
## 1.1.4 - 15th January 2016
|
4
8
|
- Customizable folder location for rainforest tests (fa4418738311cee8ca25cbb22a8ca52aa9cbd873, @ukd1)
|
5
9
|
- Update valid browser list, though this doesn't include custom browsers today (e6195c42f95cce72a17f49643bfe8c297baf8dd9, @ukd1)
|
data/README.md
CHANGED
@@ -41,6 +41,17 @@ Run all tests with tag 'run-me' and abort previous in-progress runs.
|
|
41
41
|
rainforest run --tag run-me --fg --conflict abort --token YOUR_TOKEN_HERE
|
42
42
|
```
|
43
43
|
|
44
|
+
Create new Rainforest test in RFML format (Rainforest Markup Language).
|
45
|
+
|
46
|
+
```bash
|
47
|
+
rainforest new
|
48
|
+
```
|
49
|
+
|
50
|
+
Upload rainforest
|
51
|
+
|
52
|
+
```bash
|
53
|
+
rainforest upload --token YOUR_TOKEN_HERE
|
54
|
+
```
|
44
55
|
|
45
56
|
## Options
|
46
57
|
|
data/lib/rainforest/cli.rb
CHANGED
@@ -4,8 +4,9 @@ require "rainforest/cli/runner"
|
|
4
4
|
require "rainforest/cli/http_client"
|
5
5
|
require "rainforest/cli/git_trigger"
|
6
6
|
require "rainforest/cli/csv_importer"
|
7
|
-
require "rainforest/cli/test_importer"
|
8
7
|
require "rainforest/cli/test_parser"
|
8
|
+
require "rainforest/cli/test_files"
|
9
|
+
require "rainforest/cli/test_importer"
|
9
10
|
require "erb"
|
10
11
|
require "httparty"
|
11
12
|
require "json"
|
@@ -12,7 +12,7 @@ module RainforestCli
|
|
12
12
|
attr_writer :file_name, :tags
|
13
13
|
attr_reader :command, :token, :tags, :conflict, :browsers, :site_id, :environment_id,
|
14
14
|
:import_file_name, :import_name, :custom_url, :description, :folder,
|
15
|
-
:debug, :file_name, :
|
15
|
+
:debug, :file_name, :test_folder
|
16
16
|
|
17
17
|
# Note, not all of these may be available to your account
|
18
18
|
# also, we may remove this in the future.
|
@@ -24,7 +24,6 @@ module RainforestCli
|
|
24
24
|
@browsers = nil
|
25
25
|
@require_token = true
|
26
26
|
@debug = false
|
27
|
-
@test_spec_folder = RainforestCli::TestImporter::SPEC_FOLDER
|
28
27
|
|
29
28
|
@parsed = ::OptionParser.new do |opts|
|
30
29
|
opts.on("--debug") do
|
@@ -36,7 +35,7 @@ module RainforestCli
|
|
36
35
|
end
|
37
36
|
|
38
37
|
opts.on("--test-folder spec/rainforest", "Specify the test folder. Defaults to spec/rainforest if not set.") do |value|
|
39
|
-
@
|
38
|
+
@test_folder = value
|
40
39
|
end
|
41
40
|
|
42
41
|
opts.on("--import-variable-csv-file FILE", "Import step variables; CSV data") do |value|
|
@@ -134,7 +133,7 @@ module RainforestCli
|
|
134
133
|
end
|
135
134
|
|
136
135
|
def validate!
|
137
|
-
if @require_token
|
136
|
+
if @require_token
|
138
137
|
unless token
|
139
138
|
raise ValidationError, "You must pass your API token using: --token TOKEN"
|
140
139
|
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
class RainforestCli::TestFiles
|
2
|
+
DEFAULT_TEST_FOLDER = './spec/rainforest'.freeze
|
3
|
+
EXT = ".rfml".freeze
|
4
|
+
|
5
|
+
attr_reader :test_folder, :test_paths, :test_data
|
6
|
+
|
7
|
+
def initialize(test_folder = nil)
|
8
|
+
@test_folder = test_folder || DEFAULT_TEST_FOLDER
|
9
|
+
|
10
|
+
unless Dir.exists?(@test_folder)
|
11
|
+
Dir.mkdir(@test_folder)
|
12
|
+
end
|
13
|
+
@test_paths = "#{@test_folder}/**/*#{EXT}"
|
14
|
+
@test_data = [].tap do |all_tests|
|
15
|
+
Dir.glob(@test_paths) do |file_name|
|
16
|
+
all_tests << RainforestCli::TestParser::Parser.new(File.read(file_name)).process
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def file_extension
|
22
|
+
EXT
|
23
|
+
end
|
24
|
+
|
25
|
+
def rfml_ids
|
26
|
+
@test_data.map(&:rfml_id)
|
27
|
+
end
|
28
|
+
|
29
|
+
def count
|
30
|
+
@test_data.count
|
31
|
+
end
|
32
|
+
end
|
@@ -4,31 +4,29 @@ require 'parallel'
|
|
4
4
|
require 'ruby-progressbar'
|
5
5
|
|
6
6
|
class RainforestCli::TestImporter
|
7
|
-
attr_reader :options, :client
|
8
|
-
SPEC_FOLDER = 'spec/rainforest'.freeze
|
9
|
-
EXT = ".rfml".freeze
|
7
|
+
attr_reader :options, :client, :test_files
|
10
8
|
THREADS = 32.freeze
|
11
9
|
|
12
10
|
SAMPLE_FILE = <<EOF
|
13
|
-
#! %s (this
|
11
|
+
#! %s (Test ID - only edit if this test has not yet been uploaded)
|
14
12
|
# title: New test
|
13
|
+
# start_uri: /
|
15
14
|
#
|
16
|
-
#
|
17
|
-
#
|
18
|
-
#
|
19
|
-
#
|
20
|
-
#
|
21
|
-
#
|
15
|
+
# Lines starting with # are test attributes or comments
|
16
|
+
# Possible attributes: #{RainforestCli::TestParser::Parser::TEXT_FIELDS.join(', ')}
|
17
|
+
#
|
18
|
+
# Steps are composed of two lines: an action and a question. Example:
|
19
|
+
#
|
20
|
+
# This is the step action.
|
21
|
+
# This is the step question?
|
22
22
|
#
|
23
23
|
|
24
24
|
EOF
|
25
25
|
|
26
26
|
def initialize(options)
|
27
27
|
@options = options
|
28
|
-
|
29
|
-
|
30
|
-
exit 2
|
31
|
-
end
|
28
|
+
::Rainforest.api_key = @options.token
|
29
|
+
@test_files = RainforestCli::TestFiles.new(@options.test_folder)
|
32
30
|
end
|
33
31
|
|
34
32
|
def logger
|
@@ -36,8 +34,6 @@ EOF
|
|
36
34
|
end
|
37
35
|
|
38
36
|
def export
|
39
|
-
::Rainforest.api_key = @options.token
|
40
|
-
|
41
37
|
tests = Rainforest::Test.all(page_size: 1000)
|
42
38
|
p = ProgressBar.create(title: 'Rows', total: tests.count, format: '%a %B %p%% %t')
|
43
39
|
Parallel.each(tests, in_threads: THREADS, finish: lambda { |item, i, result| p.increment }) do |test|
|
@@ -115,69 +111,35 @@ EOF
|
|
115
111
|
end
|
116
112
|
|
117
113
|
def upload
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
tests = validate.values
|
134
|
-
|
135
|
-
logger.info "Uploading tests..."
|
136
|
-
p = ProgressBar.create(title: 'Rows', total: tests.count, format: '%a %B %p%% %t')
|
137
|
-
|
138
|
-
# Insert the data
|
139
|
-
Parallel.each(tests, in_threads: THREADS, finish: lambda { |item, i, result| p.increment }) do |test|
|
140
|
-
next unless test.steps.count > 0
|
141
|
-
|
142
|
-
if @options.debug
|
143
|
-
logger.debug "Starting: #{test.id}"
|
144
|
-
logger.debug "\t#{test.start_uri || "/"}"
|
145
|
-
end
|
146
|
-
|
147
|
-
test_obj = {
|
148
|
-
start_uri: test.start_uri || "/",
|
149
|
-
title: test.title,
|
150
|
-
description: test.description,
|
151
|
-
tags: (["ro"] + test.tags).uniq,
|
152
|
-
elements: test.steps.map do |step|
|
153
|
-
{type: 'step', redirection: true, element: {
|
154
|
-
action: step.action,
|
155
|
-
response: step.response
|
156
|
-
}}
|
114
|
+
# Prioritize embedded tests before other tests
|
115
|
+
upload_groups = []
|
116
|
+
unordered_tests = []
|
117
|
+
queued_tests = test_files.test_data.dup
|
118
|
+
|
119
|
+
until queued_tests.empty?
|
120
|
+
new_ordered_group = []
|
121
|
+
ordered_ids = upload_groups.flatten.map(&:rfml_id)
|
122
|
+
|
123
|
+
queued_tests.each do |rfml_test|
|
124
|
+
if (rfml_test.embedded_ids - ordered_ids).empty?
|
125
|
+
new_ordered_group << rfml_test
|
126
|
+
else
|
127
|
+
unordered_tests << rfml_test
|
157
128
|
end
|
158
|
-
}
|
159
|
-
|
160
|
-
unless test.browsers.empty?
|
161
|
-
test_obj[:browsers] = test.browsers.map {|b|
|
162
|
-
{'state' => 'enabled', 'name' => b}
|
163
|
-
}
|
164
129
|
end
|
165
130
|
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
131
|
+
upload_groups << new_ordered_group
|
132
|
+
queued_tests = unordered_tests
|
133
|
+
unordered_tests = []
|
134
|
+
end
|
170
135
|
|
171
|
-
|
172
|
-
else
|
173
|
-
t = Rainforest::Test.create(test_obj)
|
136
|
+
logger.info "Uploading tests..."
|
174
137
|
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
end
|
138
|
+
# Upload in parallel if order doesn't matter
|
139
|
+
if upload_groups.count > 1
|
140
|
+
upload_groups_sequentially(upload_groups)
|
141
|
+
else
|
142
|
+
upload_group_in_parallel(upload_groups.first)
|
181
143
|
end
|
182
144
|
end
|
183
145
|
|
@@ -185,7 +147,7 @@ EOF
|
|
185
147
|
tests = {}
|
186
148
|
has_errors = []
|
187
149
|
|
188
|
-
Dir.glob(
|
150
|
+
Dir.glob(test_files.test_paths).each do |file_name|
|
189
151
|
out = RainforestCli::TestParser::Parser.new(File.read(file_name)).process
|
190
152
|
|
191
153
|
tests[file_name] = out
|
@@ -224,15 +186,117 @@ EOF
|
|
224
186
|
def create_new file_name = nil
|
225
187
|
name = @options.file_name if @options.file_name
|
226
188
|
name = file_name if !file_name.nil?
|
189
|
+
ext = test_files.file_extension
|
227
190
|
|
228
191
|
uuid = SecureRandom.uuid
|
229
|
-
name = "#{uuid}#{
|
230
|
-
name +=
|
231
|
-
name = File.join([@
|
192
|
+
name = "#{uuid}#{ext}" unless name
|
193
|
+
name += ext unless name[-ext.length..-1] == ext
|
194
|
+
name = File.join([@test_files.test_folder, name])
|
232
195
|
|
233
196
|
File.open(name, "w") { |file| file.write(sprintf(SAMPLE_FILE, uuid)) }
|
234
197
|
|
235
198
|
logger.info "Created #{name}" if file_name.nil?
|
236
199
|
name
|
237
200
|
end
|
201
|
+
|
202
|
+
private
|
203
|
+
|
204
|
+
def upload_groups_sequentially(upload_groups)
|
205
|
+
progress_bar = ProgressBar.create(title: 'Rows', total: test_files.count, format: '%a %B %p%% %t')
|
206
|
+
upload_groups.each_with_index do |rfml_tests, idx|
|
207
|
+
if idx == (rfml_tests.length - 1)
|
208
|
+
upload_group_in_parallel(rfml_tests, progress_bar)
|
209
|
+
else
|
210
|
+
rfml_tests.each { |rfml_test| upload_test(rfml_test) }
|
211
|
+
progress_bar.increment
|
212
|
+
end
|
213
|
+
end
|
214
|
+
end
|
215
|
+
|
216
|
+
def upload_group_in_parallel(rfml_tests, progress_bar = nil)
|
217
|
+
progress_bar ||= ProgressBar.create(title: 'Rows', total: rfml_tests.count, format: '%a %B %p%% %t')
|
218
|
+
Parallel.each(rfml_tests, in_threads: THREADS, finish: lambda { |item, i, result| progress_bar.increment }) do |rfml_test|
|
219
|
+
upload_test(rfml_test)
|
220
|
+
end
|
221
|
+
end
|
222
|
+
|
223
|
+
def upload_test(rfml_test)
|
224
|
+
return unless rfml_test.steps.count > 0
|
225
|
+
|
226
|
+
if @options.debug
|
227
|
+
logger.debug "Starting: #{rfml_test.rfml_id}"
|
228
|
+
logger.debug "\t#{rfml_test.start_uri || "/"}"
|
229
|
+
end
|
230
|
+
|
231
|
+
test_obj = create_test_obj(rfml_test)
|
232
|
+
# Upload the test
|
233
|
+
begin
|
234
|
+
if rfml_id_mappings[rfml_test.rfml_id]
|
235
|
+
t = Rainforest::Test.update(rfml_id_mappings[rfml_test.rfml_id], test_obj)
|
236
|
+
|
237
|
+
logger.info "\tUpdated #{rfml_test.rfml_id} -- ##{t.id}" if @options.debug
|
238
|
+
else
|
239
|
+
t = Rainforest::Test.create(test_obj)
|
240
|
+
|
241
|
+
logger.info "\tCreated #{rfml_test.rfml_id} -- ##{t.id}" if @options.debug
|
242
|
+
rfml_id_mappings[rfml_test.rfml_id] = t.id
|
243
|
+
end
|
244
|
+
rescue => e
|
245
|
+
logger.fatal "Error: #{rfml_test.rfml_id}: #{e}"
|
246
|
+
exit 2
|
247
|
+
end
|
248
|
+
end
|
249
|
+
|
250
|
+
def rfml_id_mappings
|
251
|
+
if @_id_mappings.nil?
|
252
|
+
@_id_mappings = {}.tap do |id_mappings|
|
253
|
+
Rainforest::Test.all(page_size: 1000, rfml_ids: test_files.rfml_ids).each do |rf_test|
|
254
|
+
rfml_id = rf_test.rfml_id
|
255
|
+
next if rfml_id.nil?
|
256
|
+
|
257
|
+
id_mappings[rfml_id] = rf_test.id
|
258
|
+
end
|
259
|
+
end
|
260
|
+
end
|
261
|
+
@_id_mappings
|
262
|
+
end
|
263
|
+
|
264
|
+
def create_test_obj(rfml_test)
|
265
|
+
test_obj = {
|
266
|
+
start_uri: rfml_test.start_uri || "/",
|
267
|
+
title: rfml_test.title,
|
268
|
+
description: rfml_test.description,
|
269
|
+
tags: (["ro"] + rfml_test.tags).uniq,
|
270
|
+
rfml_id: rfml_test.rfml_id,
|
271
|
+
elements: rfml_test.steps.map do |step|
|
272
|
+
case step.type
|
273
|
+
when :step
|
274
|
+
{
|
275
|
+
type: 'step',
|
276
|
+
redirection: true,
|
277
|
+
element: {
|
278
|
+
action: step.action,
|
279
|
+
response: step.response
|
280
|
+
}
|
281
|
+
}
|
282
|
+
when :test
|
283
|
+
{
|
284
|
+
type: 'test',
|
285
|
+
redirection: true,
|
286
|
+
element: {
|
287
|
+
id: rfml_id_mappings[step.rfml_id]
|
288
|
+
}
|
289
|
+
}
|
290
|
+
end
|
291
|
+
end
|
292
|
+
}
|
293
|
+
|
294
|
+
unless rfml_test.browsers.empty?
|
295
|
+
test_obj[:browsers] = rfml_test.browsers.map {|b|
|
296
|
+
{'state' => 'enabled', 'name' => b}
|
297
|
+
}
|
298
|
+
end
|
299
|
+
|
300
|
+
test_obj
|
301
|
+
end
|
238
302
|
end
|
@@ -1,11 +1,19 @@
|
|
1
1
|
module RainforestCli::TestParser
|
2
|
-
class EmbeddedTest < Struct.new(:
|
2
|
+
class EmbeddedTest < Struct.new(:rfml_id)
|
3
|
+
def type
|
4
|
+
:test
|
5
|
+
end
|
6
|
+
|
3
7
|
def to_s
|
4
|
-
"--> embed: #{
|
8
|
+
"--> embed: #{rfml_id}"
|
5
9
|
end
|
6
10
|
end
|
7
11
|
|
8
12
|
class Step < Struct.new(:action, :response)
|
13
|
+
def type
|
14
|
+
:step
|
15
|
+
end
|
16
|
+
|
9
17
|
def to_s
|
10
18
|
"#{action} --> #{response}"
|
11
19
|
end
|
@@ -17,7 +25,10 @@ module RainforestCli::TestParser
|
|
17
25
|
end
|
18
26
|
end
|
19
27
|
|
20
|
-
class Test < Struct.new(:
|
28
|
+
class Test < Struct.new(:rfml_id, :description, :title, :start_uri, :steps, :errors, :tags, :browsers)
|
29
|
+
def embedded_ids
|
30
|
+
steps.inject([]) { |embeds, step| step.type == :test ? embeds + [step.rfml_id] : embeds }
|
31
|
+
end
|
21
32
|
end
|
22
33
|
|
23
34
|
class Parser
|
@@ -43,7 +54,7 @@ module RainforestCli::TestParser
|
|
43
54
|
text.lines.map(&:chomp).each_with_index do |line, line_no|
|
44
55
|
if line[0..1] == '#!'
|
45
56
|
# special comment, don't ignore!
|
46
|
-
@test.
|
57
|
+
@test.rfml_id = line[2..-1].strip.split(" ")[0]
|
47
58
|
@test.description += line[1..-1] + "\n"
|
48
59
|
|
49
60
|
elsif line[0] == '#'
|
@@ -90,8 +101,8 @@ module RainforestCli::TestParser
|
|
90
101
|
end
|
91
102
|
end
|
92
103
|
|
93
|
-
if @test.
|
94
|
-
@test.errors[0] = Error.new(0, "Missing
|
104
|
+
if @test.rfml_id == nil
|
105
|
+
@test.errors[0] = Error.new(0, "Missing RFML ID. Please start a line #! followed by a unique id.")
|
95
106
|
end
|
96
107
|
|
97
108
|
return @test
|
data/spec/options_spec.rb
CHANGED
@@ -9,12 +9,7 @@ describe RainforestCli::OptionParser do
|
|
9
9
|
|
10
10
|
context "test folder (when passed)" do
|
11
11
|
let(:args) { ["--test-folder", "/path/to/folder"] }
|
12
|
-
its(:
|
13
|
-
end
|
14
|
-
|
15
|
-
context "test folder (when not passed)" do
|
16
|
-
let(:args) { [] }
|
17
|
-
its(:test_spec_folder) { should == RainforestCli::TestImporter::SPEC_FOLDER }
|
12
|
+
its(:test_folder) { should == "/path/to/folder" }
|
18
13
|
end
|
19
14
|
|
20
15
|
context "importing name" do
|
@@ -0,0 +1,36 @@
|
|
1
|
+
describe RainforestCli::TestFiles do
|
2
|
+
let(:test_folder) { File.dirname(__FILE__) + '/rainforest-example' }
|
3
|
+
subject { described_class.new(test_folder) }
|
4
|
+
|
5
|
+
let(:rfml_test) { subject.test_data.first }
|
6
|
+
let(:text_file) { File.read(test_folder + '/example_test.rfml') }
|
7
|
+
|
8
|
+
describe '#initialize' do
|
9
|
+
before do
|
10
|
+
allow(Dir).to receive(:mkdir)
|
11
|
+
end
|
12
|
+
|
13
|
+
context 'when test folder name is not supplied' do
|
14
|
+
it 'uses the default file folder' do
|
15
|
+
expect(described_class.new.test_folder).to eq(described_class::DEFAULT_TEST_FOLDER)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context 'when test folder name is supplied' do
|
20
|
+
let(:folder_name) { './foo' }
|
21
|
+
|
22
|
+
it 'creates the supplied folder if file does not exist' do
|
23
|
+
expect(Dir).to receive(:mkdir).with(folder_name).once
|
24
|
+
described_class.new(folder_name)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
describe '#test_data' do
|
31
|
+
it 'parses all available tests on initialization' do
|
32
|
+
expect(rfml_test.title).to eq(text_file.match(/^# title: (.+)$/)[1])
|
33
|
+
expect(rfml_test.rfml_id).to eq(text_file.match(/^#! (.+?)($| .+?$)/)[1])
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
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.
|
4
|
+
version: 1.2.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: 2016-
|
12
|
+
date: 2016-02-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: httparty
|
@@ -121,6 +121,7 @@ files:
|
|
121
121
|
- lib/rainforest/cli/http_client.rb
|
122
122
|
- lib/rainforest/cli/options.rb
|
123
123
|
- lib/rainforest/cli/runner.rb
|
124
|
+
- lib/rainforest/cli/test_files.rb
|
124
125
|
- lib/rainforest/cli/test_importer.rb
|
125
126
|
- lib/rainforest/cli/test_parser.rb
|
126
127
|
- lib/rainforest/cli/version.rb
|
@@ -130,8 +131,10 @@ files:
|
|
130
131
|
- spec/fixtures/variables.txt
|
131
132
|
- spec/git_trigger_spec.rb
|
132
133
|
- spec/options_spec.rb
|
134
|
+
- spec/rainforest-example/example_test.rfml
|
133
135
|
- spec/runner_spec.rb
|
134
136
|
- spec/spec_helper.rb
|
137
|
+
- spec/test_files_spec.rb
|
135
138
|
homepage: https://www.rainforestqa.com/
|
136
139
|
licenses:
|
137
140
|
- MIT
|
@@ -162,5 +165,7 @@ test_files:
|
|
162
165
|
- spec/fixtures/variables.txt
|
163
166
|
- spec/git_trigger_spec.rb
|
164
167
|
- spec/options_spec.rb
|
168
|
+
- spec/rainforest-example/example_test.rfml
|
165
169
|
- spec/runner_spec.rb
|
166
170
|
- spec/spec_helper.rb
|
171
|
+
- spec/test_files_spec.rb
|