lib/soaspec/cucumber/generic_steps.rb in soaspec-0.2.24 vs lib/soaspec/cucumber/generic_steps.rb in soaspec-0.2.25

- old
+ new

@@ -1,85 +1,85 @@ -require 'active_support/core_ext/string/inflections' - -# @return [Exchange] Return current or last exchange used in Cucumber -def current_exchange - @current_exchange ||= Soaspec.last_exchange -end - -# Pass in the operation (HTTP method or SOAP operation) in first parameter and api name as second. -# API name can be mulitple words and it will be converted to camel case to find the ExchangeHandler class -# @example Create an Exchange representing an HTTP 'post' based on the 'Puppy' RestHandler class -# I am performing a post on the Puppy API -# @example Create an Exchange for a 'get_bank' operation on for a 'Banking' SoapHandler class -# I am performing a get_bank on the Banking API -Given 'I am performing a {word} on the {string} API' do |operation, api_name| - @current_exchange = api_name.tr(' ', '_').camelize.constantize.send operation -end - -# Set a parameter in the request body -# @example Set the name element in the request body to Charlie -# And I set the name to 'Charlie' -# @param [String] Element in request body to set -# @param [String] Value to set it to -Given 'I set the {word} to {string}' do |key, value| - current_exchange[key] = value -end - -# Add onto the base_url to make a complete url for the test -# @example base_url is 'http://petstore.swagger.io/v2' and I want a post to 'http://petstore.swagger.io/v2/pet' -# I use the path pet -Given 'I use the path {word}' do |suburl| - current_exchange.suburl = suburl -end - -# Add a query parameter for http 'get' requests. e.g. will add '?filter_key=filter_value' onto URL -# @example To create a query for '?status=sold' -# And I filter 'status' by 'sold' -# @example To add a query for 'area' being 'australia' to make a total of '?status=sold&area=austrialia' -# And I filter 'area' by 'australia' -Given 'I filter {string} by {string}' do |filter_key, filter_value| - transformed_key = filter_key.to_sym - if current_exchange.override_parameters[:q] - current_exchange.override_parameters[:q][transformed_key] = filter_value - else - current_exchange.override_parameters[:q] = { transformed_key => filter_value } - end -end - -# Add HTTP header 'header_name' as 'header_value' -# @example -# And I set header 'accept' to 'application/xml' -Given 'I set header {string} to {string}' do |header_name, header_value| - if current_exchange.override_parameters[:params] - current_exchange.override_parameters[:params][header_name] = header_value - else - current_exchange.override_parameters[:params] = { header_name => header_value } - end -end - -# Make the API call. This is automatically done when any method extracting a response is made. It can be done -# explicitly here as it is a meaningful step -When 'I make the request' do - current_exchange.call -end - -# Extract the value from the response that is at the path 'key' and verify it is eq to expected_value -# @example Assert response body has at the path 'name', the value 'Charlie' -# Then it should have the name 'Charlie' -Then 'it should have the {word} {string}' do |key, expected_value| - expect(current_exchange[key]).to eq expected_value -end - -# Extract the value from the response that is at the path 'key_string' and verify it is eq to expected_value -# Conversion is made on key_string to make it one snake case word -# @example Assert response body has at the path 'customer_name', the value 'Charlie' -# Then it should have the 'customer name' 'Charlie' -Then 'it should have the {string} {string}' do |key_string, expected_value| - key = key_string.tr(' ', '_') - actual_value = current_exchange.respond_to?(key) ? current_exchange.send(key) : current_exchange[key] - expect(actual_value.to_s).to eq expected_value -end - -# Verify that the HTTP status code is 200..299 and that any defined mandatory elements / mandatory values are as expected -Then 'it should be successful' do - expect(current_exchange).to be_successful -end +require 'active_support/core_ext/string/inflections' + +# @return [Exchange] Return current or last exchange used in Cucumber +def current_exchange + @current_exchange ||= Soaspec.last_exchange +end + +# Pass in the operation (HTTP method or SOAP operation) in first parameter and api name as second. +# API name can be mulitple words and it will be converted to camel case to find the ExchangeHandler class +# @example Create an Exchange representing an HTTP 'post' based on the 'Puppy' RestHandler class +# I am performing a post on the Puppy API +# @example Create an Exchange for a 'get_bank' operation on for a 'Banking' SoapHandler class +# I am performing a get_bank on the Banking API +Given 'I am performing a {word} on the {string} API' do |operation, api_name| + @current_exchange = api_name.tr(' ', '_').camelize.constantize.send operation +end + +# Set a parameter in the request body +# @example Set the name element in the request body to Charlie +# And I set the name to 'Charlie' +# @param [String] Element in request body to set +# @param [String] Value to set it to +Given 'I set the {word} to {string}' do |key, value| + current_exchange[key] = value +end + +# Add onto the base_url to make a complete url for the test +# @example base_url is 'http://petstore.swagger.io/v2' and I want a post to 'http://petstore.swagger.io/v2/pet' +# I use the path pet +Given 'I use the path {word}' do |suburl| + current_exchange.suburl = suburl +end + +# Add a query parameter for http 'get' requests. e.g. will add '?filter_key=filter_value' onto URL +# @example To create a query for '?status=sold' +# And I filter 'status' by 'sold' +# @example To add a query for 'area' being 'australia' to make a total of '?status=sold&area=austrialia' +# And I filter 'area' by 'australia' +Given 'I filter {string} by {string}' do |filter_key, filter_value| + transformed_key = filter_key.to_sym + if current_exchange.override_parameters[:q] + current_exchange.override_parameters[:q][transformed_key] = filter_value + else + current_exchange.override_parameters[:q] = { transformed_key => filter_value } + end +end + +# Add HTTP header 'header_name' as 'header_value' +# @example +# And I set header 'accept' to 'application/xml' +Given 'I set header {string} to {string}' do |header_name, header_value| + if current_exchange.override_parameters[:params] + current_exchange.override_parameters[:params][header_name] = header_value + else + current_exchange.override_parameters[:params] = { header_name => header_value } + end +end + +# Make the API call. This is automatically done when any method extracting a response is made. It can be done +# explicitly here as it is a meaningful step +When 'I make the request' do + current_exchange.call +end + +# Extract the value from the response that is at the path 'key' and verify it is eq to expected_value +# @example Assert response body has at the path 'name', the value 'Charlie' +# Then it should have the name 'Charlie' +Then 'it should have the {word} {string}' do |key, expected_value| + expect(current_exchange[key]).to eq expected_value +end + +# Extract the value from the response that is at the path 'key_string' and verify it is eq to expected_value +# Conversion is made on key_string to make it one snake case word +# @example Assert response body has at the path 'customer_name', the value 'Charlie' +# Then it should have the 'customer name' 'Charlie' +Then 'it should have the {string} {string}' do |key_string, expected_value| + key = key_string.tr(' ', '_') + actual_value = current_exchange.respond_to?(key) ? current_exchange.send(key) : current_exchange[key] + expect(actual_value.to_s).to eq expected_value +end + +# Verify that the HTTP status code is 200..299 and that any defined mandatory elements / mandatory values are as expected +Then 'it should be successful' do + expect(current_exchange).to be_successful +end