diff options
| author | Azul <azul@leap.se> | 2014-07-08 11:00:40 +0200 | 
|---|---|---|
| committer | Azul <azul@leap.se> | 2014-07-14 10:49:39 +0200 | 
| commit | 303ec07901af3798efc873cbe050aa5cb4ba7655 (patch) | |
| tree | 4c9a2d33d2bf1b24233d115e74368a533acf7666 /features/step_definitions/api_steps.rb | |
| parent | 4dbfdf30c3235eb19e4f0ad959f65125ed18b39a (diff) | |
use cucumber; initial ConfigsController
Diffstat (limited to 'features/step_definitions/api_steps.rb')
| -rw-r--r-- | features/step_definitions/api_steps.rb | 132 | 
1 files changed, 132 insertions, 0 deletions
| 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 | 
