cucumber_factory 2.2.0 → 2.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/CHANGELOG.md +10 -0
- data/Gemfile.cucumber-1.3 +1 -0
- data/Gemfile.cucumber-1.3.lock +9 -1
- data/Gemfile.cucumber-2.4 +1 -0
- data/Gemfile.cucumber-2.4.lock +9 -1
- data/Gemfile.cucumber-3.0 +1 -0
- data/Gemfile.cucumber-3.0.lock +9 -1
- data/Gemfile.cucumber-3.1 +1 -0
- data/Gemfile.cucumber-3.1.lock +9 -1
- data/README.md +9 -0
- data/lib/cucumber_factory/factory.rb +19 -6
- data/lib/cucumber_factory/version.rb +1 -1
- data/spec/assets/file.txt +1 -0
- data/spec/assets/file2.txt +1 -0
- data/spec/assets/symlink.txt +1 -0
- data/spec/cucumber_factory/steps_spec.rb +51 -0
- data/spec/spec_helper.rb +3 -0
- data/spec/support/database.rb +1 -0
- data/spec/support/models/payment.rb +13 -8
- data/spec/support/uploaders/attachment_uploader.rb +3 -0
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 864d657afd1eb2d45bba31a210ed4025aed3756c5224d5c2a2bfb8d9b9baa469
|
4
|
+
data.tar.gz: fc74f572c8518d5cb366e92a4799f6b74b176cc516c67cd6750432380404be49
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 75750f57520b8a9e535d8d26094d53fbff9678a41b3ccff12a01f0610f79cc876ee2b031a95be37e831da33d80fa7b8072ae6ef4c377be233dc87f4d2edc4994
|
7
|
+
data.tar.gz: a409eaa3516d73efaf6da8d413bd426b48cd4b2aee19621982936fab6f0d79c830b8aae07b19d064b253f69445f4c26ab97700e08d14f0022ec9a54befbcd120
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
@@ -15,6 +15,16 @@ This project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html
|
|
15
15
|
|
16
16
|
-
|
17
17
|
|
18
|
+
## 2.3.0 - 2020-09-24
|
19
|
+
|
20
|
+
### Compatible changes
|
21
|
+
|
22
|
+
- Added a step to add file objects to a model:
|
23
|
+
```cucumber
|
24
|
+
Given there is a user with the avatar file:"path/to/avatar.jpg"
|
25
|
+
```
|
26
|
+
Both single and double quotes are supported.
|
27
|
+
|
18
28
|
## 2.2.0 - 2020-09-23
|
19
29
|
|
20
30
|
### Compatible changes
|
data/Gemfile.cucumber-1.3
CHANGED
data/Gemfile.cucumber-1.3.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
cucumber_factory (2.
|
4
|
+
cucumber_factory (2.3.0)
|
5
5
|
activerecord
|
6
6
|
activesupport
|
7
7
|
cucumber
|
@@ -24,6 +24,10 @@ GEM
|
|
24
24
|
tzinfo (~> 1.1)
|
25
25
|
arel (6.0.4)
|
26
26
|
builder (3.2.4)
|
27
|
+
carrierwave (1.2.3)
|
28
|
+
activemodel (>= 4.0.0)
|
29
|
+
activesupport (>= 4.0.0)
|
30
|
+
mime-types (>= 1.16)
|
27
31
|
concurrent-ruby (1.1.6)
|
28
32
|
cucumber (1.3.20)
|
29
33
|
builder (>= 2.1.2)
|
@@ -42,6 +46,9 @@ GEM
|
|
42
46
|
multi_json (~> 1.3)
|
43
47
|
i18n (0.9.5)
|
44
48
|
concurrent-ruby (~> 1.0)
|
49
|
+
mime-types (3.2.2)
|
50
|
+
mime-types-data (~> 3.2015)
|
51
|
+
mime-types-data (3.2018.0812)
|
45
52
|
minitest (5.12.0)
|
46
53
|
multi_json (1.14.1)
|
47
54
|
multi_test (0.1.2)
|
@@ -70,6 +77,7 @@ PLATFORMS
|
|
70
77
|
DEPENDENCIES
|
71
78
|
activerecord (~> 4.2.0)
|
72
79
|
activesupport (~> 4.2.0)
|
80
|
+
carrierwave (~> 1.0)
|
73
81
|
cucumber (~> 1.3.20)
|
74
82
|
cucumber_factory!
|
75
83
|
database_cleaner (~> 1.0.0)
|
data/Gemfile.cucumber-2.4
CHANGED
data/Gemfile.cucumber-2.4.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
cucumber_factory (2.
|
4
|
+
cucumber_factory (2.3.0)
|
5
5
|
activerecord
|
6
6
|
activesupport
|
7
7
|
cucumber
|
@@ -24,6 +24,10 @@ GEM
|
|
24
24
|
tzinfo (~> 1.1)
|
25
25
|
arel (6.0.4)
|
26
26
|
builder (3.2.3)
|
27
|
+
carrierwave (1.2.3)
|
28
|
+
activemodel (>= 4.0.0)
|
29
|
+
activesupport (>= 4.0.0)
|
30
|
+
mime-types (>= 1.16)
|
27
31
|
concurrent-ruby (1.0.5)
|
28
32
|
cucumber (2.4.0)
|
29
33
|
builder (>= 2.1.2)
|
@@ -46,6 +50,9 @@ GEM
|
|
46
50
|
gherkin (4.1.3)
|
47
51
|
i18n (0.9.5)
|
48
52
|
concurrent-ruby (~> 1.0)
|
53
|
+
mime-types (3.2.2)
|
54
|
+
mime-types-data (~> 3.2015)
|
55
|
+
mime-types-data (3.2018.0812)
|
49
56
|
minitest (5.11.3)
|
50
57
|
multi_json (1.13.1)
|
51
58
|
multi_test (0.1.2)
|
@@ -74,6 +81,7 @@ PLATFORMS
|
|
74
81
|
DEPENDENCIES
|
75
82
|
activerecord (~> 4.2.0)
|
76
83
|
activesupport (~> 4.2.0)
|
84
|
+
carrierwave (~> 1.0)
|
77
85
|
cucumber (~> 2.4.0)
|
78
86
|
cucumber_factory!
|
79
87
|
database_cleaner
|
data/Gemfile.cucumber-3.0
CHANGED
data/Gemfile.cucumber-3.0.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
cucumber_factory (2.
|
4
|
+
cucumber_factory (2.3.0)
|
5
5
|
activerecord
|
6
6
|
activesupport
|
7
7
|
cucumber
|
@@ -24,6 +24,10 @@ GEM
|
|
24
24
|
arel (7.1.4)
|
25
25
|
backports (3.11.1)
|
26
26
|
builder (3.2.3)
|
27
|
+
carrierwave (1.2.3)
|
28
|
+
activemodel (>= 4.0.0)
|
29
|
+
activesupport (>= 4.0.0)
|
30
|
+
mime-types (>= 1.16)
|
27
31
|
concurrent-ruby (1.0.5)
|
28
32
|
cucumber (3.0.2)
|
29
33
|
builder (>= 2.1.2)
|
@@ -51,6 +55,9 @@ GEM
|
|
51
55
|
gherkin (4.1.3)
|
52
56
|
i18n (0.9.5)
|
53
57
|
concurrent-ruby (~> 1.0)
|
58
|
+
mime-types (3.2.2)
|
59
|
+
mime-types-data (~> 3.2015)
|
60
|
+
mime-types-data (3.2018.0812)
|
54
61
|
minitest (5.11.3)
|
55
62
|
multi_json (1.13.1)
|
56
63
|
multi_test (0.1.2)
|
@@ -79,6 +86,7 @@ PLATFORMS
|
|
79
86
|
DEPENDENCIES
|
80
87
|
activerecord (~> 5.0.0)
|
81
88
|
activesupport (~> 5.0.0)
|
89
|
+
carrierwave
|
82
90
|
cucumber (~> 3.0.0)
|
83
91
|
cucumber_factory!
|
84
92
|
database_cleaner
|
data/Gemfile.cucumber-3.1
CHANGED
data/Gemfile.cucumber-3.1.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
cucumber_factory (2.
|
4
|
+
cucumber_factory (2.3.0)
|
5
5
|
activerecord
|
6
6
|
activesupport
|
7
7
|
cucumber
|
@@ -24,6 +24,10 @@ GEM
|
|
24
24
|
arel (8.0.0)
|
25
25
|
backports (3.11.1)
|
26
26
|
builder (3.2.3)
|
27
|
+
carrierwave (1.2.3)
|
28
|
+
activemodel (>= 4.0.0)
|
29
|
+
activesupport (>= 4.0.0)
|
30
|
+
mime-types (>= 1.16)
|
27
31
|
concurrent-ruby (1.0.5)
|
28
32
|
cucumber (3.1.0)
|
29
33
|
builder (>= 2.1.2)
|
@@ -51,6 +55,9 @@ GEM
|
|
51
55
|
gherkin (5.0.0)
|
52
56
|
i18n (0.9.5)
|
53
57
|
concurrent-ruby (~> 1.0)
|
58
|
+
mime-types (3.2.2)
|
59
|
+
mime-types-data (~> 3.2015)
|
60
|
+
mime-types-data (3.2018.0812)
|
54
61
|
minitest (5.11.3)
|
55
62
|
multi_json (1.13.1)
|
56
63
|
multi_test (0.1.2)
|
@@ -79,6 +86,7 @@ PLATFORMS
|
|
79
86
|
DEPENDENCIES
|
80
87
|
activerecord (~> 5.1.0)
|
81
88
|
activesupport (~> 5.1.0)
|
89
|
+
carrierwave
|
82
90
|
cucumber (~> 3.1.0)
|
83
91
|
cucumber_factory!
|
84
92
|
database_cleaner
|
data/README.md
CHANGED
@@ -151,7 +151,16 @@ Given there is a movie with the tags ["comedy", "drama" and "action"]
|
|
151
151
|
```
|
152
152
|
|
153
153
|
|
154
|
+
Setting file attributes
|
155
|
+
-----------------------
|
154
156
|
|
157
|
+
You can set an attribute to a file object with the following syntax:
|
158
|
+
|
159
|
+
```cucumber
|
160
|
+
Given there is a movie with the image file:'path/to/image.jpg'
|
161
|
+
```
|
162
|
+
|
163
|
+
All paths are relative to the project root, absolute paths are not supported. Please note that file attributes must follow the syntax `file:"PATH"`, both single and double quotes are allowed.
|
155
164
|
|
156
165
|
Using named factories and traits
|
157
166
|
--------------------------------
|
@@ -16,10 +16,11 @@ module CucumberFactory
|
|
16
16
|
VALUE_INTEGER = /\d+/
|
17
17
|
VALUE_DECIMAL = /[\d\.]+/
|
18
18
|
VALUE_STRING = /"[^"]*"|'[^']*'/
|
19
|
+
VALUE_FILE = /file:#{VALUE_STRING}/
|
19
20
|
VALUE_ARRAY = /\[[^\]]*\]/
|
20
21
|
VALUE_LAST_RECORD = /\babove\b/
|
21
22
|
|
22
|
-
VALUE_SCALAR = /#{VALUE_STRING}|#{VALUE_DECIMAL}|#{VALUE_INTEGER}/
|
23
|
+
VALUE_SCALAR = /#{VALUE_STRING}|#{VALUE_DECIMAL}|#{VALUE_INTEGER}|#{VALUE_FILE}/
|
23
24
|
|
24
25
|
CLEAR_NAMED_RECORDS_STEP_DESCRIPTOR = {
|
25
26
|
:kind => :Before,
|
@@ -160,16 +161,16 @@ module CucumberFactory
|
|
160
161
|
# DocString e.g. "first name: Jane\nlast name: Jenny\n"
|
161
162
|
if raw_multiline_attributes.is_a?(String)
|
162
163
|
raw_multiline_attributes.split("\n").each do |fragment|
|
163
|
-
raw_attribute, value = fragment.split(': ')
|
164
|
+
raw_attribute, value = fragment.split(': ', 2)
|
164
165
|
attribute = attribute_name_from_prose(raw_attribute)
|
165
|
-
value = "\"#{value}\"" unless matches_fully?(value, VALUE_ARRAY)
|
166
|
+
value = "\"#{value}\"" unless matches_fully?(value, /#{VALUE_ARRAY}|#{VALUE_FILE}/)
|
166
167
|
attributes[attribute] = attribute_value(world, model_class, transient_attributes, attribute, value)
|
167
168
|
end
|
168
169
|
# DataTable e.g. in raw [["first name", "Jane"], ["last name", "Jenny"]]
|
169
170
|
else
|
170
171
|
raw_multiline_attributes.raw.each do |raw_attribute, value|
|
171
172
|
attribute = attribute_name_from_prose(raw_attribute)
|
172
|
-
value = "\"#{value}\"" unless matches_fully?(value, VALUE_ARRAY)
|
173
|
+
value = "\"#{value}\"" unless matches_fully?(value, /#{VALUE_ARRAY}|#{VALUE_FILE}/)
|
173
174
|
attributes[attribute] = attribute_value(world, model_class, transient_attributes, attribute, value)
|
174
175
|
end
|
175
176
|
end
|
@@ -236,6 +237,9 @@ module CucumberFactory
|
|
236
237
|
value = value.to_i
|
237
238
|
elsif matches_fully?(value, VALUE_DECIMAL)
|
238
239
|
value = BigDecimal(value)
|
240
|
+
elsif matches_fully?(value, VALUE_FILE)
|
241
|
+
path = File.path("./#{file_value_to_path(value)}")
|
242
|
+
value = File.new(path)
|
239
243
|
else
|
240
244
|
raise Error, "Cannot set attribute #{model_class}##{attribute} to #{value}."
|
241
245
|
end
|
@@ -243,11 +247,20 @@ module CucumberFactory
|
|
243
247
|
end
|
244
248
|
|
245
249
|
def unquote(string)
|
250
|
+
# This method removes quotes or brackets from the start and end from a string
|
251
|
+
# Examples: 'single' => single, "double" => double, [1, 2, 3] => 1, 2, 3
|
246
252
|
string[1, string.length - 2]
|
247
253
|
end
|
248
254
|
|
255
|
+
def file_value_to_path(string)
|
256
|
+
# file paths are marked with a special keyword and enclosed with quotes.
|
257
|
+
# Example: file:"/path/image.png"
|
258
|
+
# This will extract the path (/path/image.png) from the text fragment above
|
259
|
+
unquote string.sub(/\Afile:/, '')
|
260
|
+
end
|
261
|
+
|
249
262
|
def full_regexp(partial_regexp)
|
250
|
-
Regexp.new(
|
263
|
+
Regexp.new('\\A(?:' + partial_regexp.source + ')\\z', partial_regexp.options)
|
251
264
|
end
|
252
265
|
|
253
266
|
def matches_fully?(string, partial_regexp)
|
@@ -267,7 +280,7 @@ module CucumberFactory
|
|
267
280
|
end
|
268
281
|
|
269
282
|
def attribute_name_from_prose(prose)
|
270
|
-
prose.downcase.gsub(
|
283
|
+
prose.downcase.gsub(' ', '_').to_sym
|
271
284
|
end
|
272
285
|
|
273
286
|
def remember_record_names(world, record, attributes)
|
@@ -0,0 +1 @@
|
|
1
|
+
This is a test file.
|
@@ -0,0 +1 @@
|
|
1
|
+
This is the second test file.
|
@@ -0,0 +1 @@
|
|
1
|
+
spec/assets/file.txt
|
@@ -388,6 +388,50 @@ title: Before Sunrise
|
|
388
388
|
}.to raise_error(CucumberFactory::Factory::Error, 'Cannot set last Movie#premiere_site for polymorphic associations')
|
389
389
|
end
|
390
390
|
|
391
|
+
it 'supports carrierwave uploaders' do
|
392
|
+
invoke_cucumber_step('there is a payment with the attachment file:"spec/assets/file.txt"')
|
393
|
+
payment = Payment.last
|
394
|
+
expect(payment.attachment.file.read).to eq "This is a test file.\n"
|
395
|
+
end
|
396
|
+
|
397
|
+
it 'supports single quote for carrierwave uploaders' do
|
398
|
+
invoke_cucumber_step("there is a payment with the attachment file:'spec/assets/file.txt'")
|
399
|
+
payment = Payment.last
|
400
|
+
expect(payment.attachment.file.read).to eq "This is a test file.\n"
|
401
|
+
end
|
402
|
+
|
403
|
+
it 'is able to read symlinked files' do
|
404
|
+
invoke_cucumber_step("there is a payment with the attachment file:'spec/assets/symlink.txt'")
|
405
|
+
payment = Payment.last
|
406
|
+
expect(payment.attachment.file.read).to eq "This is a test file.\n"
|
407
|
+
end
|
408
|
+
|
409
|
+
it 'supports table syntax for carrierwave uploaders' do
|
410
|
+
invoke_cucumber_step('there is a payment with these attributes:', nil, <<-DATA_TABLE)
|
411
|
+
| attachment | file:"spec/assets/file.txt" |
|
412
|
+
DATA_TABLE
|
413
|
+
payment = Payment.last
|
414
|
+
expect(payment.attachment.file.read).to eq "This is a test file.\n"
|
415
|
+
end
|
416
|
+
|
417
|
+
it 'supports doc string syntax for carrierwave uploaders' do
|
418
|
+
invoke_cucumber_step('there is a payment with these attributes:', <<-DOC_STRING)
|
419
|
+
attachment: file:"spec/assets/file.txt"
|
420
|
+
DOC_STRING
|
421
|
+
payment = Payment.last
|
422
|
+
payment.save!
|
423
|
+
expect(payment.attachment.file.read).to eq "This is a test file.\n"
|
424
|
+
end
|
425
|
+
|
426
|
+
it 'allows updating a carrierwave attribute' do
|
427
|
+
invoke_cucumber_step('there is a payment with the attachment file:"spec/assets/file.txt"')
|
428
|
+
payment = Payment.last
|
429
|
+
expect(payment.attachment.file.read).to eq "This is a test file.\n"
|
430
|
+
invoke_cucumber_step('the payment above has the attachment file:"spec/assets/file2.txt"')
|
431
|
+
payment.reload
|
432
|
+
expect(payment.attachment.file.read).to eq "This is the second test file.\n"
|
433
|
+
end
|
434
|
+
|
391
435
|
it 'works with nested factories (BUGFIX)' do
|
392
436
|
invoke_cucumber_step('there is a subgenre movie')
|
393
437
|
end
|
@@ -447,6 +491,13 @@ title: Before Sunrise
|
|
447
491
|
obj.attributes[:total].to_s.should == "45.6"
|
448
492
|
end
|
449
493
|
|
494
|
+
it "should allow to set file attributes with the file:'path' syntax" do
|
495
|
+
invoke_cucumber_step('there is a plain Ruby class with the file file:"spec/assets/file.txt"')
|
496
|
+
obj = PlainRubyClass.last
|
497
|
+
obj.attributes[:file].should be_a(File)
|
498
|
+
obj.attributes[:file].read.should == "This is a test file.\n"
|
499
|
+
end
|
500
|
+
|
450
501
|
it "should allow set an array of strings with square brackets" do
|
451
502
|
invoke_cucumber_step('there is a plain Ruby class with the tags ["foo", "bar"] and the list ["bam", "baz"]')
|
452
503
|
obj = PlainRubyClass.last
|
data/spec/spec_helper.rb
CHANGED
@@ -3,9 +3,12 @@ $: << File.join(File.dirname(__FILE__), "/../../lib" )
|
|
3
3
|
require 'cucumber_factory'
|
4
4
|
require 'gemika'
|
5
5
|
require 'factory_bot'
|
6
|
+
require 'carrierwave'
|
7
|
+
require 'carrierwave/orm/activerecord'
|
6
8
|
|
7
9
|
ActiveRecord::Base.default_timezone = :local
|
8
10
|
|
11
|
+
Dir["#{File.dirname(__FILE__)}/support/uploaders/*.rb"].sort.each {|f| require f}
|
9
12
|
Dir["#{File.dirname(__FILE__)}/support/models/*.rb"].sort.each {|f| require f}
|
10
13
|
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].sort.each {|f| require f}
|
11
14
|
Dir["#{File.dirname(__FILE__)}/shared_examples/**/*.rb"].sort.each {|f| require f}
|
data/spec/support/database.rb
CHANGED
@@ -1,8 +1,13 @@
|
|
1
|
-
class Payment < ActiveRecord::Base
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
1
|
+
class Payment < ActiveRecord::Base
|
2
|
+
class AttachmentUploader < CarrierWave::Uploader::Base
|
3
|
+
storage :file
|
4
|
+
end
|
5
|
+
|
6
|
+
mount_uploader :attachment, AttachmentUploader
|
7
|
+
|
8
|
+
if ActiveRecord::VERSION::MAJOR <= 3
|
9
|
+
# Only the comment is accessible, amount isn't
|
10
|
+
attr_accessible :comment
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cucumber_factory
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Henning Koch
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-09-
|
11
|
+
date: 2020-09-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cucumber
|
@@ -99,6 +99,9 @@ files:
|
|
99
99
|
- lib/cucumber_factory/switcher.rb
|
100
100
|
- lib/cucumber_factory/update_strategy.rb
|
101
101
|
- lib/cucumber_factory/version.rb
|
102
|
+
- spec/assets/file.txt
|
103
|
+
- spec/assets/file2.txt
|
104
|
+
- spec/assets/symlink.txt
|
102
105
|
- spec/cucumber_factory/factory/build_strategy_spec.rb
|
103
106
|
- spec/cucumber_factory/steps_spec.rb
|
104
107
|
- spec/spec_helper.rb
|
@@ -116,6 +119,7 @@ files:
|
|
116
119
|
- spec/support/models/plain_ruby_class.rb
|
117
120
|
- spec/support/models/user.rb
|
118
121
|
- spec/support/models/uuid_user.rb
|
122
|
+
- spec/support/uploaders/attachment_uploader.rb
|
119
123
|
homepage: http://github.com/makandra/cucumber_factory
|
120
124
|
licenses:
|
121
125
|
- MIT
|