cucumber-blendle-steps 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7320de3eb5c6186e98321d606bbfb9ac0a1500de
4
- data.tar.gz: 816e6291f8beb068bcc6782fb05aa9152d03e082
3
+ metadata.gz: 0be27a2993064f1cf9e8e38c15565a7e133f7582
4
+ data.tar.gz: 1448623821ea97fe10e5af636ba4cc0180f35780
5
5
  SHA512:
6
- metadata.gz: 7fbcf0e02fdcf9dab18f63060894d3448322195524f8074344ed5b30cdf0bffa719a1671feafde5a8949730b2d956bcb901869cf35af83bd323f93291141ac7d
7
- data.tar.gz: 836fa6d7b1268b8e5cb2ce312d57dd89b4578b4a37fc8ed35e44673f743fae3b8dc2dca1dee5fd032d65fea5252fedd93bf5b985ea654d655c18599744944988
6
+ metadata.gz: 581b547e5072a223724382378f1522e27033203cb11d6651c2bbde4b09c4213b9525f4d7eb4d04a29c6cf5842223aaaf1993f7f0c1d662e7d02cd2ce6724655c
7
+ data.tar.gz: c9b38af4d4ad9ab240929419582e8e11a52d7e0872052ccd71fc92d531a071c6fc728a42f3498d3a3c641ea5a17a25c0db7c7ae44f26b71bc55c6914e74d9703
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ **v0.3.1** – 2015-12-12
2
+
3
+ * add new model steps [5275fcf]
4
+ * show last_response.body if status code assertion fails [d0a6d0f]
5
+ * show error message if Halidator JSON parsing fails [9e2e6ab]
6
+ * don't create mkmf.log when copying output to clipboard [59c63f4]
7
+ * add descriptions to all steps [37d5bd4]
8
+
1
9
  **v0.3.0** – 2015-12-4
2
10
 
3
11
  * add support for [type-casting model values](https://github.com/blendle/cucumber-blendle-steps/pull/2)
@@ -1,10 +1,16 @@
1
1
  require 'active_support/core_ext/hash/keys'
2
+ require 'active_support/core_ext/hash/compact'
2
3
  require 'active_support/core_ext/object/blank'
3
4
  require 'active_support/core_ext/string/inflections'
4
5
  require 'sequel'
5
6
 
6
7
  # rubocop:disable Lint/Eval,Metrics/LineLength,Lint/UselessAssignment
7
8
 
9
+ # * Given the following items exist:
10
+ # | uid | price |
11
+ # | hello | 100 |
12
+ # | world | 10 |
13
+ #
8
14
  Given(/^the following (\S+) exist:$/) do |object, table|
9
15
  table.hashes.each do |row|
10
16
  hash = parse_row(row)
@@ -14,6 +20,33 @@ Given(/^the following (\S+) exist:$/) do |object, table|
14
20
  end
15
21
  end
16
22
 
23
+ # * Given the item with uid "hello" exists
24
+ # * Given the item with uid "hello" and price "100" exists
25
+ # * Given the item with uid "hello" and the price "100" exists
26
+ #
27
+ Given(/^the (\S+) with (\S+) "([^"]*)"(?: and(?: the)? (\S+) "([^"]*)")? exists$/) do |object, attribute1, value1, attribute2, value2|
28
+ hash = { attribute1 => value1, attribute2 => value2 }.symbolize_keys.compact
29
+
30
+ assert eval("#{object.singularize.capitalize}.create(hash)")
31
+ step %(the following #{object.singularize} should exist:), table([hash.keys, hash.values])
32
+ end
33
+
34
+ # * Given the item with uid "hello" and the following description:
35
+ # """
36
+ # hello world
37
+ # """
38
+ #
39
+ Given(/^the (\S+) with (\S+) "([^"]*)" and the following (\S+):$/) do |object, attribute1, value1, attribute2, value2|
40
+ hash = { attribute1 => value1, attribute2 => value2 }.symbolize_keys
41
+
42
+ assert eval("#{object.singularize.capitalize}.create(hash)")
43
+ step %(the following #{object.singularize} should exist:), table([hash.keys, hash.values])
44
+ end
45
+
46
+ # * Then the item with uid "hello" should exist
47
+ # * Then the item with uid "hello" should not exist
48
+ # * Then the item with labels (Array) "[10234, 64325]" should exist
49
+ #
17
50
  Then(/^the (\S+) with (\S+)(?: \((\S+)\))? "([^"]*)" should( not)? exist$/) do |object, attribute, type, value, negate|
18
51
  hash = parse_row("#{attribute} (#{type})" => value)
19
52
  assertion = negate ? 'blank?' : 'present?'
@@ -22,6 +55,11 @@ Then(/^the (\S+) with (\S+)(?: \((\S+)\))? "([^"]*)" should( not)? exist$/) do |
22
55
  %(#{object.capitalize} not found \(#{attribute}: #{value}\))
23
56
  end
24
57
 
58
+ # * Then the following items should exist:
59
+ # | uid | price |
60
+ # | hello | 100 |
61
+ # * Then the following items should not exist:
62
+ #
25
63
  Then(/^the following (\S+) should( not)? exist:$/) do |object, negate, table|
26
64
  assertion = negate ? 'blank?' : 'present?'
27
65
 
@@ -32,6 +70,18 @@ Then(/^the following (\S+) should( not)? exist:$/) do |object, negate, table|
32
70
  end
33
71
  end
34
72
 
73
+ # parse_row
74
+ #
75
+ # Given a Cucumber table row, parses the type "numbers (Array)" and converts the
76
+ # string representation of the value "[1, 2, 3]" into a Sequel pg_array.
77
+ #
78
+ # @todo Rename method to a more sensible name
79
+ # @todo Move method to helper file
80
+ # @todo Add more types (Integer)
81
+ #
82
+ # @param [Object] row in Cucumber::Table
83
+ # @return [Hash] hash representation of key/values in table
84
+ #
35
85
  def parse_row(row)
36
86
  hash = row.map do |attribute, value|
37
87
  value = case attribute[/\s\((\w+)\)$/, 1]
@@ -1,16 +1,25 @@
1
1
  # rubocop:disable Metrics/LineLength
2
2
 
3
+ # * When the client does a GET request to the "items" resource
4
+ #
3
5
  When(/^the client does a (GET|POST|DELETE) request to the "([^"]*)" resource$/) do |method, resource|
4
6
  step %(the client does a #{method} request to the "#{resource}" resource with these parameters:), table([[]])
5
7
  end
6
8
 
9
+ # * When the client does a GET request to the "item" resource with the template variable "item_uid" set to "hello"
10
+ #
7
11
  When(/^the client does a (GET|POST|DELETE) request to the "([^"]*)" resource with the template variable "([^"]*)" set to "([^"]*)"$/) do |method, resource, key, value|
8
12
  tables = [%w(key value), [key, value]]
9
13
 
10
14
  step %(the client does a #{method} request to the "#{resource}" resource with these parameters:), table(tables)
11
15
  end
12
16
 
13
- When(/^the client does a (GET|POST|DELETE) request to the "([^"]*)" resource with these parameters:$/) do |method, resource, table|
17
+ # * When the client does a GET request to the "item" resource with these template variables:
18
+ # | key | value |
19
+ # | item_uid | hello |
20
+ # | user_uid | bartsimpson |
21
+ #
22
+ When(/^the client does a (GET|POST|DELETE) request to the "([^"]*)" resource with these template variables:$/) do |method, resource, table|
14
23
  params = {}
15
24
  current_accept_header = current_session.instance_variable_get(:@headers)['Accept']
16
25
 
@@ -30,6 +39,14 @@ When(/^the client does a (GET|POST|DELETE) request to the "([^"]*)" resource wit
30
39
  step %(the client does a #{method} request to "#{url}")
31
40
  end
32
41
 
42
+ # When the client does a POST request to the "items" resource with the following content:
43
+ # """json
44
+ # {
45
+ # "uid": "hello",
46
+ # "price": 100
47
+ # }
48
+ # """
49
+ #
33
50
  When(/^the client does a (GET|POST|DELETE) request to the "([^"]*)" resource with the following content:$/) do |method, resource, content|
34
51
  body = JSON.parse(get('/api').body)
35
52
  api = HyperResource.from_body(body)
@@ -38,6 +55,13 @@ When(/^the client does a (GET|POST|DELETE) request to the "([^"]*)" resource wit
38
55
  step %(the client does a #{method} request to "#{url}" with the following content:), content
39
56
  end
40
57
 
58
+ # When the client does a PUT request to the "item" resource with the template variable "item_uid" set to "hello" and the following content:
59
+ # """json
60
+ # {
61
+ # "price": 10
62
+ # }
63
+ # """
64
+ #
41
65
  When(/^the client does a (POST|PUT) request to the "([^"]*)" resource with the template variable "([^"]*)" set to "([^"]*)" and the following content:$/) do |method, resource, key, value, content|
42
66
  body = JSON.parse(get('/api').body)
43
67
  api = HyperResource.from_body(body)
@@ -3,32 +3,58 @@
3
3
  require 'halidator'
4
4
  require 'rack/utils'
5
5
 
6
+ # * When the client does a GET request to "/items"
7
+ #
6
8
  When('the client does a GET request to "$1"') do |path|
7
9
  get(path, {}, {})
8
10
  end
9
11
 
12
+ # * When the client provides the header "Accept: application/hal+json"
13
+ #
10
14
  When(/^the client provides the header ["']([^"']*)["']$/) do |header|
11
15
  name, value = header.split(/\s*:\s*/)
12
16
  header(name, value)
13
17
  end
14
18
 
19
+ # * When the client does a DELETE request to "/item/hello"
20
+ #
15
21
  When(/^the client does a (POST|DELETE) request to "([^"]*)"$/) do |method, path|
16
22
  send(method.downcase, path, {})
17
23
  end
18
24
 
25
+ # * When the client does a POST request to "/items" with the following content:
26
+ # """json
27
+ # {
28
+ # "uid": "hello",
29
+ # "price": 100
30
+ # }
31
+ # """
32
+ #
19
33
  When(/^the client does a (POST|PUT) request to "([^"]*)" with the following content:$/) do |method, path, content|
20
34
  send(method.downcase, path, content.strip)
21
35
  end
22
36
 
37
+ # * Then the status code should be "200" (OK)
38
+ # * Then the status code should be "204" (No Content)
39
+ #
23
40
  Then(/^the status code should be "(\d+)" \((.+)\)/) do |status_code, status_message|
24
- assert_equal status_code.to_i, last_response.status
41
+ assert_equal status_code.to_i, last_response.status, last_response.body
25
42
  assert_equal status_message, Rack::Utils::HTTP_STATUS_CODES[status_code.to_i]
26
43
  end
27
44
 
45
+ # * Then the response should contain the header "Location" with value "https://example.org/item/hello"
46
+ #
28
47
  Then('the response should contain the header "$" with value "$"') do |header, value|
29
48
  assert_equal last_response.headers[header], value
30
49
  end
31
50
 
51
+ # Then the response should be of type "application/json" with content:
52
+ # """json
53
+ # {
54
+ # "uid": "hello"
55
+ # }
56
+ # """
57
+ #
32
58
  Then(/^the response should be of type "([^"]*)" with content:$/) do |content_type, content|
33
59
  dump last_response.body
34
60
 
@@ -36,6 +62,12 @@ Then(/^the response should be of type "([^"]*)" with content:$/) do |content_typ
36
62
  assert_equal content, last_response.body
37
63
  end
38
64
 
65
+ # * Then the response should be JSON:
66
+ # """json
67
+ # {
68
+ # "uid": "hello"
69
+ # }
70
+ # """
39
71
  Then(/^the response should be JSON:$/) do |json|
40
72
  dump last_response.body
41
73
 
@@ -43,12 +75,32 @@ Then(/^the response should be JSON:$/) do |json|
43
75
  expect(last_response.body).to be_json_eql(json)
44
76
  end
45
77
 
78
+ # * Then the response should be HAL/JSON:
79
+ # """json
80
+ # {
81
+ # "uid": "hello"
82
+ # }
83
+ # """
84
+ # * Then the response should be HAL/JSON (disregarding value of "random_id"):
85
+ # """json
86
+ # {
87
+ # "uid": "hello",
88
+ # "random_id": 57303667592
89
+ # }
90
+ # """
91
+ #
46
92
  Then(%r{^the response should be HAL/JSON(?: \(disregarding values? of "([^"]*)"\))?:$}) do |disregard, json|
47
93
  dump last_response.body
48
94
 
49
95
  assert_match %r{^application/hal\+json(;.*)?$}, last_response.headers['Content-Type']
50
96
 
51
- hal = Halidator.new(last_response.body)
97
+ hal = nil
98
+ begin
99
+ hal = Halidator.new(last_response.body)
100
+ rescue JSON::ParserError => e
101
+ assert false, [e.message, last_response.body].join("\n")
102
+ end
103
+
52
104
  assert hal.valid?, "Halidator errors: #{hal.errors.join(',')}"
53
105
 
54
106
  match = be_json_eql(json)
@@ -61,6 +113,8 @@ Then(%r{^the response should be HAL/JSON(?: \(disregarding values? of "([^"]*)"\
61
113
  expect(last_response.body).to match
62
114
  end
63
115
 
116
+ # * Then the response contains the "Location" header with value "https://example.org/item/hello"
117
+ #
64
118
  Then(/^the response contains the "(.*?)" header with value "(.*?)"$/) do |header, value|
65
119
  assert_equal value, last_response.headers[header]
66
120
  end
@@ -9,7 +9,7 @@ require 'json'
9
9
  def dump(data)
10
10
  return unless ENV['DUMP']
11
11
  require 'mkmf'
12
- if %w(clipboard cb).include?(ENV['DUMP']) && find_executable('pbcopy')
12
+ if %w(clipboard cb).include?(ENV['DUMP']) && find_executable0('pbcopy')
13
13
  IO.popen(['pbcopy'], 'w') { |f| f << pretty_sorted_json(data) }
14
14
  elsif %w(file tmp).include?(ENV['DUMP'])
15
15
  File.open('/tmp/dump', 'w') { |f| f << pretty_sorted_json(data) }
@@ -4,6 +4,6 @@ module Cucumber
4
4
  # This module defines default steps used by all of Blendle Ruby projects.
5
5
  #
6
6
  module BlendleSteps
7
- VERSION = '0.3.0'
7
+ VERSION = '0.3.1'
8
8
  end
9
9
  end
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.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jean Mertz
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-04 00:00:00.000000000 Z
11
+ date: 2015-12-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport