cucumber-http 0.5.1 → 0.7.1

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
2
  SHA256:
3
- metadata.gz: 70917cc0394f65db06b914e26836bf920b17fc5120127679a53036d379ebe4c1
4
- data.tar.gz: e0f37cc9f42f5ccaae713d2552fbd94de84f8d36c1384f981666bb0556515298
3
+ metadata.gz: 0232a60b32d3567ea573d9d14ed9f20855d73dab6606f0f34f4d99b73c466349
4
+ data.tar.gz: b7a4607176199b8ec28d08421006cee16c9a87f93550f6022ba0a4eb77130061
5
5
  SHA512:
6
- metadata.gz: d046821b5b54f7a6ed66c5af93508960c3f5191255f9bae74ab683443434c91a87e817d7c5637c3925b1695682dd835a6e2ce53bc4dba53f020df6e9ee98c3a0
7
- data.tar.gz: cf9804b017bb0c10f7ffa132af654fe0d1749b95d5fa06cd18a81e16c40529ca9adf035e385879bbfc35e74e1dd69f047843eeb58c6d1609c5d615934b35856e
6
+ metadata.gz: faec65815b43fc54d5e99dbfeeb901513d3d8626761f263de337d1f723bbac0283ae7e6fe1b3b93b6c436b4c5c3e7c883921952a5842cf347dcb68187aa9a0e7
7
+ data.tar.gz: 163dcbabd2c0b8d488ee9f945fa4d56505cc8b32692a3d3d23b906ae3a1bab8b53c12f4321e6d260c743ca2ad2bc51d47c73afccc0d324208cb2362c358672b5
data/README.md CHANGED
@@ -50,6 +50,25 @@ Feature: Test the UDB3 labels API
50
50
  And the JSON response at "privacy" should be "public"
51
51
  ```
52
52
 
53
+ ```ruby
54
+ @api @images
55
+ Feature: Test the UDB3 image API
56
+
57
+ Background:
58
+ Given I am using the UDB3 development environment
59
+ And I am authorized as user "centraal_beheerder"
60
+ And I accept "application/json"
61
+
62
+ @imagecreate
63
+ Scenario: Create image
64
+ Given I set the form data properties to:
65
+ | description | logo |
66
+ | copyrightHolder | me |
67
+ | language | nl |
68
+ When I upload "file" from path "images/UDB.jpg" to "/images/"
69
+ Then the response status should be "201"
70
+ ```
71
+
53
72
  #### Benchmarking
54
73
 
55
74
  ```ruby
@@ -57,7 +76,7 @@ Given /^I am benchmarking$/
57
76
  ```
58
77
 
59
78
  ```ruby
60
- Then /^the elapsed time should be less than (#{CAPTURE_FLOAT}) seconds?$/
79
+ Then 'the elapsed time should be less than {float} second(s)'
61
80
  ```
62
81
 
63
82
  #### HTTP
@@ -90,6 +109,10 @@ Given /^I send "(.*?)" and accept JSON$/
90
109
  Given /^I send and accept JSON$/
91
110
  ```
92
111
 
112
+ ```ruby
113
+ Given 'I set the form data properties to:'
114
+ ```
115
+
93
116
  ```ruby
94
117
  Given /^I set the JSON request payload to:$/
95
118
  ```
@@ -103,7 +126,15 @@ When /^I send a (GET|POST|PATCH|PUT|DELETE) request to "([^"]*)"(?: with paramet
103
126
  ```
104
127
 
105
128
  ```ruby
106
- Then /^the response status should( not)? be "(#{CAPTURE_INTEGER})"$/
129
+ When 'I upload {string} from path {string} to {string}"'
130
+ ```
131
+
132
+ ```ruby
133
+ Then 'the response status should be "{int}"'
134
+ ```
135
+
136
+ ```ruby
137
+ Then 'the response status should not be "{int}"'
107
138
  ```
108
139
 
109
140
  ```ruby
@@ -138,7 +169,7 @@ Examples for testing the [REST API](https://apidoc.uitdatabank.be) of
138
169
 
139
170
  Creating an organizer with a random name:
140
171
  ```ruby
141
- When /^I create an organizer with a random name of (#{CAPTURE_INTEGER}) characters?$/ do |characters|
172
+ When 'I create an organizer with a random name of {integer} character(s)' do |characters|
142
173
  name = Faker::Lorem.characters(characters)
143
174
  steps %Q{
144
175
  Given I am using the UDB3 development environment
@@ -155,7 +186,7 @@ end
155
186
 
156
187
  Creating a role with a random name:
157
188
  ```ruby
158
- When /^I create a role with a random name of (#{CAPTURE_INTEGER}) characters?$/ do |characters|
189
+ When 'I create a role with a random name of {integer} character(s)' do |characters|
159
190
  name = Faker::Lorem.characters(characters)
160
191
  steps %Q{
161
192
  Given I am using the UDB3 development environment
@@ -2,7 +2,7 @@ Given /^I am benchmarking$/ do
2
2
  @scenario_start_time = Time.now
3
3
  end
4
4
 
5
- Then /^the elapsed time should be less than (#{CAPTURE_FLOAT}) seconds?$/ do |time|
5
+ Then 'the elapsed time should be less than {float} second(s)' do |time|
6
6
  elapsed = Time.now - @scenario_start_time
7
7
 
8
8
  expect(elapsed).to be < time
@@ -0,0 +1,7 @@
1
+ module Cucumber
2
+ module Http
3
+ module Configuration
4
+ attr_accessor :data_directory
5
+ end
6
+ end
7
+ end
@@ -3,6 +3,7 @@ After do
3
3
  clear_parameters
4
4
  clear_headers
5
5
  clear_payload
6
+ clear_multipart_payload
6
7
  clear_request
7
8
  clear_response
8
9
  end
@@ -1,5 +1,3 @@
1
- require 'json_spec'
2
-
3
1
  Given /^I set headers?:$/ do |hdrs|
4
2
  hdrs.rows_hash.each { |name, value| add_header(name, value) }
5
3
  end
@@ -59,7 +57,7 @@ Given(/^I set the JSON request payload to:$/) do |payload|
59
57
  end
60
58
 
61
59
  Given(/^I set the JSON request payload from "(.*?)"$/) do |filename|
62
- path = "#{Dir.pwd}/features/support/data/#{filename}"
60
+ path = "#{Cucumber::Http.data_directory}/#{filename}"
63
61
 
64
62
  if File.file? path
65
63
  set_payload(JSON.parse(resolve(File.read(path))).to_json)
@@ -68,6 +66,13 @@ Given(/^I set the JSON request payload from "(.*?)"$/) do |filename|
68
66
  end
69
67
  end
70
68
 
69
+ Given 'I set the form data properties to:' do |table|
70
+ table.rows_hash.each { |name, value| add_multipart_payload(name, value) }
71
+
72
+ remove_header('Content-Type')
73
+ add_multipart_payload('multipart', true)
74
+ end
75
+
71
76
  When /^I send a (GET|POST|PATCH|PUT|DELETE) request to "([^"]*)"(?: with parameters?:)?$/ do |*args|
72
77
  method = args.shift
73
78
  endpoint = resolve(args.shift)
@@ -88,16 +93,33 @@ When /^I send a (GET|POST|PATCH|PUT|DELETE) request to "([^"]*)"(?: with paramet
88
93
  perform_request(method, request_url)
89
94
  end
90
95
 
96
+ When 'I upload {string} from path {string} to {string}' do |key, filename, endpoint|
97
+ method = 'post'
98
+ payload_key = key
99
+ path = "#{Cucumber::Http.data_directory}/#{filename}"
100
+
101
+ request_url = URI.join(url, URI::encode(endpoint)).to_s
102
+
103
+ if File.file? path
104
+ remove_header('Content-Type')
105
+ add_multipart_payload(payload_key, File.new(path, 'rb'))
106
+ else
107
+ raise "File not found: '#{path}'"
108
+ end
109
+
110
+ perform_request(method, request_url)
111
+ end
112
+
91
113
  When /^(?:I )?keep the value of the (?:JSON|json)(?: response)?(?: at "(.*)")? as "(.*)"$/ do |path, key|
92
114
  JsonSpec.memorize(key, parse_json(last_json, path))
93
115
  end
94
116
 
95
- Then /^the response status should( not)? be "(#{CAPTURE_INTEGER})"$/ do |negative, status_code|
96
- if negative
97
- expect(response[:status]).not_to eq(status_code)
98
- else
99
- expect(response[:status]).to eq(status_code)
100
- end
117
+ Then 'the response status should be "{int}"' do |status_code|
118
+ expect(response[:status]).to eq(status_code)
119
+ end
120
+
121
+ Then 'the response status should not be "{int}"' do |status_code|
122
+ expect(response[:status]).not_to eq(status_code)
101
123
  end
102
124
 
103
125
  Then /^the response body should be valid JSON$/ do
@@ -1,5 +1,5 @@
1
1
  module Cucumber
2
2
  module Http
3
- VERSION = "0.5.1"
3
+ VERSION = "0.7.1"
4
4
  end
5
5
  end
@@ -0,0 +1,21 @@
1
+ module Cucumber
2
+ module Http
3
+ module Payload
4
+ def multipart_payload
5
+ @multipart_payload ||= {}
6
+ end
7
+
8
+ def add_multipart_payload(key, value)
9
+ multipart_payload[key] = value
10
+ end
11
+
12
+ def remove_multipart_payload(key)
13
+ multipart_payload.tap { |p| p.delete(key)}
14
+ end
15
+
16
+ def clear_multipart_payload
17
+ multipart_payload.clear
18
+ end
19
+ end
20
+ end
21
+ end
@@ -14,12 +14,14 @@ module Cucumber
14
14
  def perform_request(method, path)
15
15
  add_header('params', parameters)
16
16
 
17
+ request_payload = multipart_payload.empty? ? payload : multipart_payload
18
+
17
19
  begin
18
20
  r = RestClient::Request.execute(
19
21
  method: method.downcase,
20
22
  url: path,
21
23
  headers: headers,
22
- payload: payload
24
+ payload: request_payload
23
25
  )
24
26
  rescue RestClient::Exception => e
25
27
  r = e.response
@@ -27,13 +29,16 @@ module Cucumber
27
29
 
28
30
  set_request('url', path)
29
31
  set_request('method', method.upcase)
30
- set_request('headers', headers)
32
+ set_request('headers', headers.tap { |hdrs| hdrs.delete('params')})
31
33
  set_request('parameters', parameters)
32
- set_request('payload', payload)
34
+ set_request('payload', request_payload)
33
35
 
34
36
  set_response('status', r.code)
35
37
  set_response('body', r.body)
36
38
  set_response('headers', r.raw_headers)
39
+
40
+ clear_multipart_payload
41
+ clear_payload
37
42
  end
38
43
 
39
44
  def clear_request
@@ -2,6 +2,7 @@ require_relative 'world_extensions/json_spec_interface'
2
2
  require_relative 'world_extensions/headers'
3
3
  require_relative 'world_extensions/parameters'
4
4
  require_relative 'world_extensions/payload'
5
+ require_relative 'world_extensions/multipart_payload'
5
6
  require_relative 'world_extensions/request'
6
7
  require_relative 'world_extensions/response'
7
8
  require_relative 'world_extensions/url'
data/lib/cucumber/http.rb CHANGED
@@ -1,6 +1,14 @@
1
- require 'cucumber/http/transforms'
2
1
  require 'cucumber/http/world_extensions'
3
2
  require 'cucumber/http/hooks'
4
3
  require 'cucumber/http/http_steps'
5
4
  require 'cucumber/http/benchmark_steps'
6
5
  require 'cucumber/http/debug_steps'
6
+ require 'cucumber/http/configuration'
7
+ require 'json_spec'
8
+ require 'json_spec/cucumber'
9
+
10
+ module Cucumber
11
+ module Http
12
+ extend Configuration
13
+ end
14
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cucumber-http
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kristof Willaert
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-02-09 00:00:00.000000000 Z
11
+ date: 2022-03-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cucumber
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '2.0'
19
+ version: '3.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '2.0'
26
+ version: '3.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: json_spec
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '10.0'
75
+ version: '13.0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '10.0'
82
+ version: '13.0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: bundler
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -104,14 +104,15 @@ files:
104
104
  - README.md
105
105
  - lib/cucumber/http.rb
106
106
  - lib/cucumber/http/benchmark_steps.rb
107
+ - lib/cucumber/http/configuration.rb
107
108
  - lib/cucumber/http/debug_steps.rb
108
109
  - lib/cucumber/http/hooks.rb
109
110
  - lib/cucumber/http/http_steps.rb
110
- - lib/cucumber/http/transforms.rb
111
111
  - lib/cucumber/http/version.rb
112
112
  - lib/cucumber/http/world_extensions.rb
113
113
  - lib/cucumber/http/world_extensions/headers.rb
114
114
  - lib/cucumber/http/world_extensions/json_spec_interface.rb
115
+ - lib/cucumber/http/world_extensions/multipart_payload.rb
115
116
  - lib/cucumber/http/world_extensions/parameters.rb
116
117
  - lib/cucumber/http/world_extensions/payload.rb
117
118
  - lib/cucumber/http/world_extensions/request.rb
@@ -1,7 +0,0 @@
1
- CAPTURE_INTEGER = Transform /^(-?\d+)$/ do |number_string|
2
- number_string.to_i
3
- end
4
-
5
- CAPTURE_FLOAT = Transform /^(-?[\d.]+)$/ do |number_string|
6
- number_string.to_f
7
- end