summaryrefslogtreecommitdiff
path: root/features/step_definitions
diff options
context:
space:
mode:
authorAzul <azul@leap.se>2014-07-08 11:00:40 +0200
committerAzul <azul@leap.se>2014-07-14 10:49:39 +0200
commit303ec07901af3798efc873cbe050aa5cb4ba7655 (patch)
tree4c9a2d33d2bf1b24233d115e74368a533acf7666 /features/step_definitions
parent4dbfdf30c3235eb19e4f0ad959f65125ed18b39a (diff)
use cucumber; initial ConfigsController
Diffstat (limited to 'features/step_definitions')
-rw-r--r--features/step_definitions/.gitkeep0
-rw-r--r--features/step_definitions/api_steps.rb132
-rw-r--r--features/step_definitions/config_steps.rb6
3 files changed, 138 insertions, 0 deletions
diff --git a/features/step_definitions/.gitkeep b/features/step_definitions/.gitkeep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/features/step_definitions/.gitkeep
diff --git a/features/step_definitions/api_steps.rb b/features/step_definitions/api_steps.rb
new file mode 100644
index 0000000..0e52f7a
--- /dev/null
+++ b/features/step_definitions/api_steps.rb
@@ -0,0 +1,132 @@
+require 'jsonpath'
+
+if defined?(Rack)
+
+ # Monkey patch Rack::MockResponse to work properly with response debugging
+ class Rack::MockResponse
+ def to_str
+ body
+ end
+ end
+
+ World(Rack::Test::Methods)
+
+end
+
+Given /^I set headers:$/ do |headers|
+ headers.rows_hash.each {|k,v| header k, v }
+end
+
+Given /^I send and accept (XML|JSON)$/ do |type|
+ header 'Accept', "application/#{type.downcase}"
+ header 'Content-Type', "application/#{type.downcase}"
+end
+
+Given /^I send and accept HTML$/ do
+ header 'Accept', "text/html"
+ header 'Content-Type', "application/x-www-form-urlencoded"
+end
+
+When /^I authenticate as the user "([^"]*)" with the password "([^"]*)"$/ do |user, pass|
+ authorize user, pass
+end
+
+When /^I digest\-authenticate as the user "(.*?)" with the password "(.*?)"$/ do |user, pass|
+ digest_authorize user, pass
+end
+
+When /^I send a (GET|POST|PUT|DELETE) request (?:for|to) "([^"]*)"(?: with the following:)?$/ do |*args|
+ request_type = args.shift
+ path = args.shift
+ input = args.shift
+
+ request_opts = {method: request_type.downcase.to_sym}
+
+ unless input.nil?
+ if input.class == Cucumber::Ast::Table
+ request_opts[:params] = input.rows_hash
+ else
+ request_opts[:input] = input
+ end
+ end
+
+ request path, request_opts
+end
+
+Then /^show me the (unparsed)?\s?response$/ do |unparsed|
+ if unparsed == 'unparsed'
+ puts last_response.body
+ elsif last_response.headers['Content-Type'] =~ /json/
+ json_response = JSON.parse(last_response.body)
+ puts JSON.pretty_generate(json_response)
+ else
+ puts last_response.headers
+ puts last_response.body
+ end
+end
+
+Then /^the response status should be "([^"]*)"$/ do |status|
+ if self.respond_to? :should
+ last_response.status.should == status.to_i
+ else
+ assert_equal status.to_i, last_response.status
+ end
+end
+
+Then /^the response should (not)?\s?have "([^"]*)"$/ do |negative, json_path|
+ json = JSON.parse(last_response.body)
+ results = JsonPath.new(json_path).on(json).to_a.map(&:to_s)
+ if self.respond_to?(:should)
+ if negative.present?
+ results.should be_empty
+ else
+ results.should_not be_empty
+ end
+ else
+ if negative.present?
+ assert results.empty?
+ else
+ assert !results.empty?
+ end
+ end
+end
+
+
+Then /^the response should (not)?\s?have "([^"]*)" with the text "([^"]*)"$/ do |negative, json_path, text|
+ json = JSON.parse(last_response.body)
+ results = JsonPath.new(json_path).on(json).to_a.map(&:to_s)
+ if self.respond_to?(:should)
+ if negative.present?
+ results.should_not include(text)
+ else
+ results.should include(text)
+ end
+ else
+ if negative.present?
+ assert !results.include?(text)
+ else
+ assert results.include?(text)
+ end
+ end
+end
+
+Then /^the response should be:$/ do |json|
+ expected = JSON.parse(json)
+ actual = JSON.parse(last_response.body)
+
+ if self.respond_to?(:should)
+ actual.should == expected
+ else
+ assert_equal expected, actual
+ end
+end
+
+Then /^the response should have "([^"]*)" with a length of (\d+)$/ do |json_path, length|
+ json = JSON.parse(last_response.body)
+ results = JsonPath.new(json_path).on(json)
+ if self.respond_to?(:should)
+ results.length.should == length.to_i
+ else
+ assert_equal length.to_i, results.length
+ end
+end
diff --git a/features/step_definitions/config_steps.rb b/features/step_definitions/config_steps.rb
new file mode 100644
index 0000000..50ae829
--- /dev/null
+++ b/features/step_definitions/config_steps.rb
@@ -0,0 +1,6 @@
+Given /the provider config is:$/ do |config|
+ @tempfile = Tempfile.new('provider.json')
+ @tempfile.write config
+ @tempfile.close
+ StaticConfigController::PROVIDER_JSON = @tempfile.path
+end