alinta-cucumber-rest-bdd 0.5.19 → 0.5.20

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 27c980d29ee35952fbc7bc96f4795dc0af56e31c
4
- data.tar.gz: cbe202b5007ade6def21773d8a2bd6ed1ac838a8
2
+ SHA256:
3
+ metadata.gz: fbffb705889af8cb87393b7617f1c084c145c31ce37851e0bcbd83f99827bf86
4
+ data.tar.gz: 859abac39ab824a2386976b85badae3a9d60920bd511f917b1b308bc8c04ef6e
5
5
  SHA512:
6
- metadata.gz: be9194bbf9479cb44f9b1cd3ee6ebe610fbd23c5ec049d69ee80677245414ee23e7be667cee6d65edbeadcf1275cf34e54ef79de37e638f8e932293b00cd82fb
7
- data.tar.gz: 2e7c5f36fa32a8cda7e3dcacf0f132cfc9968c9b23f96e63f73bcf1058a1afaa693db70d9eaf695fc623eb96ce21bd5a7a216aa62b4ab35c75814ffacb596b98
6
+ metadata.gz: 3281d942a833aa3dcd689e53aa394e267a58b782632b544d93026bf2dc81d55b516fcf007772a4fde0ff5a9d71ec90b7298f46ac1a599be99aa0e8f77c4517c4
7
+ data.tar.gz: 2d9eaa3ed011778ef147668e16b7abaa3c9a16ccf9d04d3e6d3bb2da70a0622c4563dbdf278f792969b3221faaec21a2922837dfe7e04f9c7586b017924492f8
@@ -5,14 +5,17 @@ INT_AS_WORDS_SYNONYM = %q{zero|one|two|three|four|five|six|seven|eight|nine|ten}
5
5
 
6
6
  ParameterType(
7
7
  name: 'list_has_count',
8
- regexp: /a|an|(?:(#{FEWER_MORE_THAN_SYNONYM})\s+)?(#{INT_AS_WORDS_SYNONYM}|\d+)/,
9
- transformer: -> (type, amount) { ListCountComparison.new(type, amount) },
8
+ regexp: /a|an|(?:(?:#{FEWER_MORE_THAN_SYNONYM})\s+)?(?:#{INT_AS_WORDS_SYNONYM}|\d+)/,
9
+ transformer: -> (match) {
10
+ matches = /(?:(#{FEWER_MORE_THAN_SYNONYM})\s+)?(#{INT_AS_WORDS_SYNONYM}|\d+)/.match(match)
11
+ return ListCountComparison.new(matches[1], matches[2])
12
+ },
10
13
  use_for_snippets: false
11
14
  )
12
15
 
13
16
  ParameterType(
14
17
  name: 'list_nesting',
15
- regexp: %r{((?:(?:#{HAVE_ALTERNATION.split('/').join('|')})\s+(?:a list of\s+)?(?:a|an|(?:(?:#{FEWER_MORE_THAN_SYNONYM})\s+)?(?:#{INT_AS_WORDS_SYNONYM}|\d+))\s+(?:#{FIELD_NAME_SYNONYM})\s*)*)},
18
+ regexp: %r{(?:(?:#{HAVE_ALTERNATION.split('/').join('|')})\s+(?:a list of\s+)?(?:a|an|(?:(?:#{FEWER_MORE_THAN_SYNONYM})\s+)?(?:#{INT_AS_WORDS_SYNONYM}|\d+))\s+(?:#{FIELD_NAME_SYNONYM})\s*)+},
16
19
  transformer: -> (match) { ListNesting.new(match) },
17
20
  use_for_snippets: false
18
21
  )
@@ -73,6 +76,7 @@ class ListNesting
73
76
  end
74
77
 
75
78
  class ListCountComparison
79
+
76
80
  def initialize(type, amount)
77
81
  @type = type.nil? ? CMP_EQUALS : to_compare(type)
78
82
  @amount = amount.nil? ? 1 : to_num(amount)
@@ -31,7 +31,37 @@ Then("the response is a list of/containing {list_has_count} {field_name}") do |l
31
31
  raise %/Expected #{list_comparison.to_string()} items in array for path '#{get_root_data_key()}', found: #{list.count}\n#{@response.to_json_s}/ if !list_comparison.compare(list.count)
32
32
  end
33
33
 
34
- Then("the response( {list_nesting}) #{HAVE_ALTERNATION} (the )(following )attributes:") do |nesting, attributes|
34
+ # Responses without nesting
35
+
36
+ Then("the response #{HAVE_ALTERNATION} (the )(following )attributes:") do |attributes|
37
+ expected = get_attributes(attributes.hashes)
38
+ data = @response.get get_root_data_key()
39
+ raise %/Response did not match:\n#{expected.inspect}\n#{data}/ if data.empty? || !data.deep_include?(expected)
40
+ end
41
+
42
+ Then("the response #{HAVE_ALTERNATION} (the )(following )value {string}") do |value|
43
+ expected = value
44
+ data = @response.get get_root_data_key()
45
+ raise %/Response did not match: #{expected}\n#{data}/ if data.empty? || !data.include?(expected)
46
+ end
47
+
48
+ Then("{list_has_count} {field_name} #{HAVE_ALTERNATION} (the )(following )(data )attributes:") do |list_comparison, count_item, attributes|
49
+ expected = get_attributes(attributes.hashes)
50
+ data = @response.get get_root_data_key()
51
+ matched = data.select { |item| !item.empty? && item.deep_include?(expected) }
52
+ raise %/Expected #{list_comparison.to_string()} items in array that matched:\n#{expected.inspect}\n#{data}/ if !list_comparison.compare(matched.count)
53
+ end
54
+
55
+ Then("{list_has_count} {field_name} #{HAVE_ALTERNATION} (the )(following )value {string}") do |list_comparison, count_item, value|
56
+ expected = value
57
+ data = @response.get get_root_data_key()
58
+ matched = data.select { |item| !item.empty? && item.include?(expected) }
59
+ raise %/Expected #{list_comparison.to_string()} items in array that matched:\n#{expected}\n#{data}/ if !list_comparison.compare(matched.count)
60
+ end
61
+
62
+ # Responses with nesting
63
+
64
+ Then("the response {list_nesting} #{HAVE_ALTERNATION} (the )(following )attributes:") do |nesting, attributes|
35
65
  expected = get_attributes(attributes.hashes)
36
66
  nesting.push({
37
67
  root: true,
@@ -41,7 +71,7 @@ Then("the response( {list_nesting}) #{HAVE_ALTERNATION} (the )(following )attrib
41
71
  raise %/Could not find a match for: #{nesting.match}\n#{expected.inspect}\n#{@response.to_json_s}/ if data.empty? || !nest_match_attributes(data, nesting.grouping, expected, false)
42
72
  end
43
73
 
44
- Then("the response( {list_nesting}) #{HAVE_ALTERNATION} (the )(following )value {string}") do |nesting, value|
74
+ Then("the response {list_nesting} #{HAVE_ALTERNATION} (the )(following )value {string}") do |nesting, value|
45
75
  expected = value
46
76
  nesting.push({
47
77
  root: true,
@@ -60,7 +90,7 @@ Then("the response {list_nesting}") do |nesting|
60
90
  raise %/Could not find a match for: #{nesting.match}\n#{@response.to_json_s}/ if data.empty? || !nest_match_attributes(data, nesting.grouping, {}, false)
61
91
  end
62
92
 
63
- Then("{list_has_count} {field_name}( {list_nesting}) #{HAVE_ALTERNATION} (the )(following )(data )attributes:") do |list_comparison, count_item, nesting, attributes|
93
+ Then("{list_has_count} {field_name} {list_nesting} #{HAVE_ALTERNATION} (the )(following )(data )attributes:") do |list_comparison, count_item, nesting, attributes|
64
94
  expected = get_attributes(attributes.hashes)
65
95
  nesting.push({
66
96
  root: true,
@@ -26,19 +26,6 @@ class FalseClass; include Boolean; end
26
26
  module Enum; end
27
27
  class String; include Enum; end
28
28
 
29
- class String
30
- def to_type(type)
31
- # cannot use 'case type' which checks for instances of a type rather than type equality
32
- if type == Boolean then !(self =~ /true|yes/i).nil?
33
- elsif type == Enum then self.upcase.tr(" ", "_")
34
- elsif type == Float then self.to_f
35
- elsif type == Integer then self.to_i
36
- elsif type == NilClass then nil
37
- else self
38
- end
39
- end
40
- end
41
-
42
29
  class ResponseField
43
30
  def initialize(names)
44
31
  @fields = get_fields(names)
@@ -68,6 +55,7 @@ def parse_type(type)
68
55
  /^bool$/i => 'boolean',
69
56
  /^null$/i => 'nil_class',
70
57
  /^nil$/i => 'nil_class',
58
+ /^string$/i => 'string',
71
59
  /^text$/i => 'string'
72
60
  }
73
61
  type.tr(' ', '_')
@@ -75,6 +63,33 @@ def parse_type(type)
75
63
  type
76
64
  end
77
65
 
66
+ def string_to_type(value, type)
67
+ replacements = {
68
+ /^numeric$/i => 'integer',
69
+ /^int$/i => 'integer',
70
+ /^long$/i => 'integer',
71
+ /^number$/i => 'integer',
72
+ /^decimal$/i => 'float',
73
+ /^double$/i => 'float',
74
+ /^bool$/i => 'boolean',
75
+ /^null$/i => 'nil_class',
76
+ /^nil$/i => 'nil_class',
77
+ /^string$/i => 'string',
78
+ /^text$/i => 'string'
79
+ }
80
+ type.tr(' ', '_')
81
+ replacements.each { |k,v| type.gsub!(k, v) }
82
+ type = type.camelize.constantize
83
+ # cannot use 'case type' which checks for instances of a type rather than type equality
84
+ if type == Boolean then !(value =~ /true|yes/i).nil?
85
+ elsif type == Enum then value.upcase.tr(" ", "_")
86
+ elsif type == Float then value.to_f
87
+ elsif type == Integer then value.to_i
88
+ elsif type == NilClass then nil
89
+ else value
90
+ end
91
+ end
92
+
78
93
  def get_resource(name)
79
94
  if name[0] == '`' && name[-1] == '`'
80
95
  name = name[1..-2]
@@ -114,9 +129,8 @@ def get_attributes(hashes)
114
129
  value = resolve_functions(value)
115
130
  value = resolve(value)
116
131
  value.gsub!(/\\n/, "\n")
117
- type = parse_type(type)
118
132
  names = get_fields(name)
119
- new_hash = names.reverse.inject(value.to_type(type.camelize.constantize)) { |a, n| add_to_hash(a, n) }
133
+ new_hash = names.reverse.inject(string_to_type(value, type)) { |a, n| add_to_hash(a, n) }
120
134
  hash.deep_merge!(new_hash) { |key, old, new| new.kind_of?(Array) ? merge_arrays(old, new) : new }
121
135
  end
122
136
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: alinta-cucumber-rest-bdd
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.19
4
+ version: 0.5.20
5
5
  platform: ruby
6
6
  authors:
7
7
  - Harry Bragg
@@ -17,14 +17,34 @@ dependencies:
17
17
  requirements:
18
18
  - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: '0.5'
20
+ version: '0.6'
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: '0.5'
27
+ version: '0.6'
28
+ - !ruby/object:Gem::Dependency
29
+ name: cucumber-expressions
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: '5.0'
35
+ - - ">="
36
+ - !ruby/object:Gem::Version
37
+ version: 5.0.17
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - - "~>"
43
+ - !ruby/object:Gem::Version
44
+ version: '5.0'
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 5.0.17
28
48
  - !ruby/object:Gem::Dependency
29
49
  name: activesupport
30
50
  requirement: !ruby/object:Gem::Requirement
@@ -94,7 +114,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
94
114
  version: '0'
95
115
  requirements: []
96
116
  rubyforge_project:
97
- rubygems_version: 2.6.14
117
+ rubygems_version: 2.7.6
98
118
  signing_key:
99
119
  specification_version: 4
100
120
  summary: BDD Rest API specifics for cucumber