Feature: Adding Templates
The Mirage client provides methods for setting Templates.
The client will escape all data for you so your free to just get on with using Mirage :)
Body, Header, and Parameter requirements can be specified as either a String or Regexp
Background:
Given the following gems are required to run the Mirage client test code:
"""
require 'rubygems'
require 'rspec/expectations'
require 'mirage/client'
"""
Scenario: Setting a Template on Mirage
Given I run
"""
Mirage::Client.new.put('greeting','hello')
"""
When GET is sent to '/responses/greeting'
Then 'hello' should be returned
Scenario: Setting the required HTTP method
Given I run
"""
Mirage::Client.new.put('greeting', 'Hello Leon') do
http_method 'POST'
end
"""
When GET is sent to '/responses/greeting'
Then a 404 should be returned
When POST is sent to '/responses/greeting'
Then 'Hello Leon' should be returned
Scenario: Setting a requirement on body content
Given I run
"""
Mirage::Client.new.put('greeting', 'Hello Leon') do
http_method 'POST'
required_body_content << /leon/
end
"""
When POST is sent to '/responses/greeting'
Then a 404 should be returned
When I send POST to '/responses/greeting' with request entity
"""
leon
"""
Then 'Hello Leon' should be returned
Scenario: Setting a requirement on requests parameters
Given I run
"""
Mirage::Client.new.put('greeting', 'Hello Leon') do
http_method 'POST'
required_parameters[:name] = /leon/
end
"""
When POST is sent to '/responses/greeting'
Then a 404 should be returned
When I send POST to '/responses/greeting' with parameters:
| name | leon |
Then 'Hello Leon' should be returned
Scenario: setting a response as default
Given I run
"""
Mirage.start.clear
Mirage::Client.new.put('greeting', 'default greeting') do
default true
end
"""
When GET is sent to '/responses/greeting/for/joel'
Then 'default greeting' should be returned
Scenario: Setting the content type
Given I run
"""
Mirage::Client.new.put('greeting', '') do
content_type 'text/xml'
end
"""
When GET is sent to '/responses/greeting'
And the response 'content-type' should be 'text/xml'
Scenario: Setting the HTTP status code
Given I run
"""
Mirage::Client.new.put('greeting', 'hello'){status 203}
"""
When GET is sent to '/responses/greeting'
Then a 203 should be returned
Scenario: Setting a delay
Given I run
"""
Mirage::Client.new.put('greeting', 'hello'){delay 2}
"""
When GET is sent to '/responses/greeting'
Then it should take at least '2' seconds