Feature: the Mirage client provides methods for setting responses and loading default responses. There is no need to escape any parameters before using the client api as this is done for you. Patterns can be either a string or regex object. Background: Given the following gems are required to run the Mirage client test code: """ require 'rubygems' require 'rspec' require 'mirage/client' """ Scenario: Setting a basic response Given I run """ Mirage::Client.new.put('greeting','hello') """ When GET is sent to '/responses/greeting' Then 'hello' should be returned Scenario: Setting the method that a response should be returned on 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 response with required 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 response with a request parameter requirement 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: Priming Mirage # Given Mirage is not running # And I run 'mirage start' # # When the file 'responses/default_greetings.rb' contains: # """ # prime do |mirage| # mirage.put('greeting', 'hello') # mirage.put('leaving', 'goodbye') # end # """ # And I run # """ # Mirage::Client.new.prime # """ # And GET is sent to '/responses/greeting' # Then 'hello' should be returned # # When GET is sent to '/responses/leaving' # Then 'goodbye' should be returned Scenario: Setting a file as a response Given the file 'test_file.txt' contains: """ test content """ And I run """ Mirage::Client.new.put('download', File.read('test_file.txt')) """ When GET is sent to '/responses/download' Then the response should be the same as the content of 'test_file.txt' Scenario: Setting a response 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 response with 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