cucumber-blendle-steps 0.4.0 → 0.5.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/CHANGELOG.md +3 -0
- data/cucumber-blendle-steps.gemspec +2 -0
- data/lib/cucumber/blendle/steps/benchmark_steps.rb +1 -1
- data/lib/cucumber/blendle/steps/mock_server_steps.rb +33 -0
- data/lib/cucumber/blendle/steps/model_steps.rb +42 -23
- data/lib/cucumber/blendle/version.rb +3 -1
- data/lib/cucumber/blendle_steps.rb +1 -0
- metadata +32 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 946f7c5d7486fc1e9fd8ff619fbe0c8ca48dbeda
|
4
|
+
data.tar.gz: c2483cf653920913aa8583d24920937adf342808
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8db1be035b1356c48a2ee70732f8d9b014bc6e615d74b9407abad7a7ec20d0421d2b124e8468e13b878999d3847fdb98fa44179fe5f81de09e6ba93838f5606a
|
7
|
+
data.tar.gz: f1e227098a3fc04dc9d272567e833d8af88e748175ae70feddaeeaa713f976e929f8f32cbd612c93273aa8ab1c57c875d79edbe721cd31ee2d2d5674dadea901
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
|
+
## [v0.4.0](https://github.com/blendle/cucumber-blendle-steps/tree/v0.4.0) (2016-01-26)
|
4
|
+
[Full Changelog](https://github.com/blendle/cucumber-blendle-steps/compare/v0.3.2...v0.4.0)
|
5
|
+
|
3
6
|
## [v0.3.2](https://github.com/blendle/cucumber-blendle-steps/tree/v0.3.2) (2015-12-12)
|
4
7
|
[Full Changelog](https://github.com/blendle/cucumber-blendle-steps/compare/v0.3.1...v0.3.2)
|
5
8
|
|
@@ -17,6 +17,7 @@ Gem::Specification.new do |spec|
|
|
17
17
|
spec.require_paths = %w(lib)
|
18
18
|
|
19
19
|
spec.add_dependency 'activesupport'
|
20
|
+
spec.add_dependency 'chronic'
|
20
21
|
spec.add_dependency 'cucumber'
|
21
22
|
spec.add_dependency 'halidator'
|
22
23
|
spec.add_dependency 'hyperresource'
|
@@ -26,6 +27,7 @@ Gem::Specification.new do |spec|
|
|
26
27
|
spec.add_dependency 'rack'
|
27
28
|
spec.add_dependency 'rspec-expectations'
|
28
29
|
spec.add_dependency 'sequel'
|
30
|
+
spec.add_dependency 'timecop'
|
29
31
|
spec.add_dependency 'typhoeus'
|
30
32
|
|
31
33
|
spec.add_development_dependency 'bundler'
|
@@ -8,7 +8,7 @@ end
|
|
8
8
|
#
|
9
9
|
When(/^the client does (\d+) concurrent GET requests to "([^"]*)"$/) do |count, url|
|
10
10
|
hydra = Typhoeus::Hydra.new
|
11
|
-
@last_requests = count.to_i
|
11
|
+
@last_requests = Array.new(count.to_i) do
|
12
12
|
request = Typhoeus::Request.new(url, followlocation: true)
|
13
13
|
hydra.queue(request)
|
14
14
|
request
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
# * Given the following endpoint configurations:
|
5
|
+
# | service | endpoint | method | status |
|
6
|
+
# | subscription | /hello/world | GET | 200 |
|
7
|
+
# | core | /hello | POST | 204 |
|
8
|
+
#
|
9
|
+
# This step definition is dependent on the mock-server implementation available
|
10
|
+
# at https://github.com/eterps/mock-server. You need to set the
|
11
|
+
# `MOCK_ENDPOINT_HOST` environment variable for this step to work.
|
12
|
+
#
|
13
|
+
Given(/^the following endpoint configurations:$/) do |table|
|
14
|
+
unless ENV['MOCK_ENDPOINT_HOST']
|
15
|
+
puts 'environment variable missing: MOCK_ENDPOINT_HOST'
|
16
|
+
next pending
|
17
|
+
end
|
18
|
+
|
19
|
+
table.hashes.each do |row|
|
20
|
+
payload = { request: {}, response: {} }
|
21
|
+
|
22
|
+
%i(method endpoint).each do |option|
|
23
|
+
payload[:request][option.to_sym] = row[option.to_s]
|
24
|
+
end
|
25
|
+
|
26
|
+
%i(status headers body).each do |option|
|
27
|
+
payload[:response][option.to_sym] = row[option.to_s]
|
28
|
+
end
|
29
|
+
|
30
|
+
payload[:request][:endpoint] = File.join(row['service'], payload[:request][:endpoint])
|
31
|
+
Net::HTTP.start(ENV['MOCK_ENDPOINT_HOST']).post('/mock/_mocks', payload.to_json)
|
32
|
+
end
|
33
|
+
end
|
@@ -2,6 +2,7 @@ require 'active_support/core_ext/hash/keys'
|
|
2
2
|
require 'active_support/core_ext/hash/compact'
|
3
3
|
require 'active_support/core_ext/object/blank'
|
4
4
|
require 'active_support/core_ext/string/inflections'
|
5
|
+
require 'chronic'
|
5
6
|
require 'sequel'
|
6
7
|
|
7
8
|
# rubocop:disable Lint/Eval,Metrics/LineLength,Lint/UselessAssignment
|
@@ -11,12 +12,12 @@ require 'sequel'
|
|
11
12
|
# | hello | 100 |
|
12
13
|
# | world | 10 |
|
13
14
|
#
|
14
|
-
Given(/^the following (
|
15
|
+
Given(/^the following ((?:(?!should).)+) exist:$/) do |object, table|
|
15
16
|
table.hashes.each do |row|
|
16
|
-
hash = parse_row(row)
|
17
|
+
hash = parse_row(row, object)
|
17
18
|
|
18
|
-
assert eval("#{object.singularize.
|
19
|
-
step %(the following #{object
|
19
|
+
assert eval("#{object.tr(' ', '_').singularize.classify}.create(hash)")
|
20
|
+
step %(the following #{object} should exist:), table([hash.keys, hash.values])
|
20
21
|
end
|
21
22
|
end
|
22
23
|
|
@@ -27,8 +28,8 @@ end
|
|
27
28
|
Given(/^the (\S+) with (\S+) "([^"]*)"(?: and(?: the)? (\S+) "([^"]*)")? exists$/) do |object, attribute1, value1, attribute2, value2|
|
28
29
|
hash = { attribute1 => value1, attribute2 => value2 }.symbolize_keys.compact
|
29
30
|
|
30
|
-
assert eval("#{object.singularize.
|
31
|
-
step %(the following #{object
|
31
|
+
assert eval("#{object.tr(' ', '_').singularize.classify}.create(hash)")
|
32
|
+
step %(the following #{object} should exist:), table([hash.keys, hash.values])
|
32
33
|
end
|
33
34
|
|
34
35
|
# * Given the item with uid "hello" and the following description:
|
@@ -39,19 +40,18 @@ end
|
|
39
40
|
Given(/^the (\S+) with (\S+) "([^"]*)" and the following (\S+):$/) do |object, attribute1, value1, attribute2, value2|
|
40
41
|
hash = { attribute1 => value1, attribute2 => value2 }.symbolize_keys
|
41
42
|
|
42
|
-
assert eval("#{object.singularize.
|
43
|
-
step %(the following #{object
|
43
|
+
assert eval("#{object.tr(' ', '_').singularize.classify}.create(hash)")
|
44
|
+
step %(the following #{object} should exist:), table([hash.keys, hash.values])
|
44
45
|
end
|
45
46
|
|
46
47
|
# * Then the item with uid "hello" should exist
|
47
48
|
# * Then the item with uid "hello" should not exist
|
48
|
-
# * Then the item with labels (Array) "[10234, 64325]" should exist
|
49
49
|
#
|
50
|
-
Then(/^the (\S+) with (\S+)
|
51
|
-
hash = parse_row(
|
50
|
+
Then(/^the (\S+) with (\S+) "([^"]*)" should( not)? exist$/) do |object, attribute, value, negate|
|
51
|
+
hash = parse_row({ attribute => value }, object)
|
52
52
|
assertion = negate ? 'blank?' : 'present?'
|
53
53
|
|
54
|
-
assert eval("#{object.
|
54
|
+
assert eval("#{object.tr(' ', '_').singularize.classify}.first(hash).#{assertion}"),
|
55
55
|
%(#{object.capitalize} not found \(#{attribute}: #{value}\))
|
56
56
|
end
|
57
57
|
|
@@ -60,13 +60,17 @@ end
|
|
60
60
|
# | hello | 100 |
|
61
61
|
# * Then the following items should not exist:
|
62
62
|
#
|
63
|
-
Then(/^the following (
|
63
|
+
Then(/^the following (.+)? should( not)? exist:$/) do |object, negate, table|
|
64
64
|
assertion = negate ? 'blank?' : 'present?'
|
65
65
|
|
66
66
|
table.hashes.each do |row|
|
67
|
-
hash = parse_row(row)
|
67
|
+
hash = parse_row(row, object)
|
68
|
+
klass = object.tr(' ', '_').singularize.classify
|
68
69
|
|
69
|
-
assert eval("#{
|
70
|
+
assert eval("#{klass}.first(hash).#{assertion}"),
|
71
|
+
"Could not find requested #{object}:\n\n" \
|
72
|
+
"- #{hash}\n" \
|
73
|
+
"+ #{Object.const_get(klass).all.map(&:values).join("\n+ ")}"
|
70
74
|
end
|
71
75
|
end
|
72
76
|
|
@@ -75,23 +79,38 @@ end
|
|
75
79
|
# Given a Cucumber table row, parses the type "numbers (Array)" and converts the
|
76
80
|
# string representation of the value "[1, 2, 3]" into a Sequel pg_array.
|
77
81
|
#
|
78
|
-
# @todo Rename method to a more sensible name
|
79
|
-
# @todo Move method to helper file
|
80
|
-
# @todo Add more types (Integer)
|
81
|
-
#
|
82
82
|
# @param [Object] row in Cucumber::Table
|
83
|
+
# @param [String] object_name to be parsed
|
83
84
|
# @return [Hash] hash representation of key/values in table
|
84
85
|
#
|
85
|
-
|
86
|
+
# rubocop:disable Metrics/CyclomaticComplexity
|
87
|
+
# rubocop:disable Metrics/MethodLength
|
88
|
+
# rubocop:disable Metrics/AbcSize
|
89
|
+
#
|
90
|
+
def parse_row(row, object_name)
|
91
|
+
table = object_name.tr(' ', '_')
|
92
|
+
klass = Object.const_get(table.singularize.classify)
|
93
|
+
schema = klass.db.schema(table)
|
94
|
+
|
86
95
|
hash = row.map do |attribute, value|
|
87
|
-
|
88
|
-
|
96
|
+
column = schema.reverse.find { |c| c.first.to_s == attribute.to_s } || []
|
97
|
+
|
98
|
+
next [attribute.to_sym, value] unless value.is_a?(String)
|
99
|
+
|
100
|
+
value = case column.last.to_h[:type]
|
101
|
+
when :integer
|
102
|
+
value.to_i
|
103
|
+
when :datetime
|
104
|
+
Timecop.return { Chronic.parse(value) || DateTime.parse(value) }
|
105
|
+
when :boolean
|
106
|
+
value.to_s.casecmp('true')
|
107
|
+
when :string_array, :varchar_array, :bigint_array
|
89
108
|
Sequel.pg_array(eval(value))
|
90
109
|
else
|
91
110
|
value
|
92
111
|
end
|
93
112
|
|
94
|
-
[attribute.
|
113
|
+
[attribute.to_sym, value]
|
95
114
|
end
|
96
115
|
|
97
116
|
Hash[hash]
|
@@ -5,6 +5,7 @@ require 'cucumber/blendle/support/minitest'
|
|
5
5
|
require 'cucumber/blendle/support/rack_test'
|
6
6
|
|
7
7
|
require 'cucumber/blendle/steps/benchmark_steps'
|
8
|
+
require 'cucumber/blendle/steps/mock_server_steps'
|
8
9
|
require 'cucumber/blendle/steps/model_steps'
|
9
10
|
require 'cucumber/blendle/steps/resource_steps'
|
10
11
|
require 'cucumber/blendle/steps/rest_steps'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cucumber-blendle-steps
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jean Mertz
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-03-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: chronic
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: cucumber
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -150,6 +164,20 @@ dependencies:
|
|
150
164
|
- - ">="
|
151
165
|
- !ruby/object:Gem::Version
|
152
166
|
version: '0'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: timecop
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ">="
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
type: :runtime
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - ">="
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0'
|
153
181
|
- !ruby/object:Gem::Dependency
|
154
182
|
name: typhoeus
|
155
183
|
requirement: !ruby/object:Gem::Requirement
|
@@ -265,6 +293,7 @@ files:
|
|
265
293
|
- Rakefile
|
266
294
|
- cucumber-blendle-steps.gemspec
|
267
295
|
- lib/cucumber/blendle/steps/benchmark_steps.rb
|
296
|
+
- lib/cucumber/blendle/steps/mock_server_steps.rb
|
268
297
|
- lib/cucumber/blendle/steps/model_steps.rb
|
269
298
|
- lib/cucumber/blendle/steps/resource_steps.rb
|
270
299
|
- lib/cucumber/blendle/steps/rest_steps.rb
|
@@ -294,7 +323,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
294
323
|
version: '0'
|
295
324
|
requirements: []
|
296
325
|
rubyforge_project:
|
297
|
-
rubygems_version: 2.
|
326
|
+
rubygems_version: 2.5.1
|
298
327
|
signing_key:
|
299
328
|
specification_version: 4
|
300
329
|
summary: Cucumber steps used by all of Blendle Ruby projects
|