mirage 3.0.0.alpha.17 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +3 -0
- data/Gemfile.lock +107 -76
- data/README.md +2 -1
- data/{rakefile → Rakefile} +0 -0
- data/VERSION +1 -1
- data/features/.nav +10 -0
- data/features/client/clear.feature +5 -3
- data/features/client/configure.feature +4 -2
- data/features/client/model.feature +95 -0
- data/features/client/preview_responses.feature +7 -6
- data/features/client/prime.feature +32 -0
- data/features/client/put.feature +14 -43
- data/features/client/readme.md +3 -0
- data/features/client/requests.feature +3 -1
- data/features/client/running.feature +4 -2
- data/features/client/save_and_revert.feature +5 -3
- data/features/client/start.feature +3 -1
- data/features/client/stop.feature +3 -1
- data/features/commandline_interface/help.feature +1 -1
- data/features/prime.feature +5 -5
- data/features/step_definitions/my_steps.rb +3 -0
- data/features/templates/preview.feature +2 -2
- data/features/templates/put_with_substitutions.feature +1 -1
- data/features/templates/readme.md +0 -3
- data/features/web_user_interface.feature +39 -27
- data/lib/mirage/client/client.rb +0 -1
- data/lib/mirage/client/error.rb +2 -2
- data/lib/mirage/client/runner.rb +1 -1
- data/lib/mirage/client/template.rb +1 -1
- data/lib/mirage/client/templates.rb +1 -1
- data/mirage.gemspec +12 -11
- data/server/extensions/hash.rb +1 -1
- data/spec/client/cli_bridge_spec.rb +2 -2
- data/spec/client/client_spec.rb +4 -4
- data/spec/client/runner_spec.rb +13 -12
- data/spec/client/template/model/instance_methods_spec.rb +1 -1
- data/spec/client/template_spec.rb +1 -1
- data/spec/client/templates_spec.rb +7 -7
- data/spec/server/server_spec.rb +1 -1
- data/spec/spec_helper.rb +3 -3
- data/{responses/default_responses.rb → todo.list} +0 -0
- metadata +14 -13
- data/.rvmrc +0 -1
- data/profiles.rb +0 -1
- data/test.html +0 -12
- data/test.rb +0 -5
- data/todo.lst +0 -2
data/features/client/put.feature
CHANGED
@@ -1,18 +1,21 @@
|
|
1
|
-
Feature:
|
2
|
-
There is no need to escape any parameters before using the client api as this is done for you.
|
1
|
+
Feature: Adding Templates
|
3
2
|
|
4
|
-
|
3
|
+
The Mirage client provides methods for setting Templates.
|
4
|
+
|
5
|
+
The client will escape all data for you so your free to just get on with using Mirage :)
|
6
|
+
|
7
|
+
Body, Header, and Parameter requirements can be specified as either a String or Regexp
|
5
8
|
|
6
9
|
Background:
|
7
10
|
Given the following gems are required to run the Mirage client test code:
|
8
11
|
"""
|
9
12
|
require 'rubygems'
|
10
|
-
require 'rspec'
|
13
|
+
require 'rspec/expectations'
|
11
14
|
require 'mirage/client'
|
12
15
|
"""
|
13
16
|
|
14
17
|
|
15
|
-
Scenario: Setting a
|
18
|
+
Scenario: Setting a Template on Mirage
|
16
19
|
Given I run
|
17
20
|
"""
|
18
21
|
Mirage::Client.new.put('greeting','hello')
|
@@ -20,7 +23,7 @@ Feature: the Mirage client provides methods for setting responses and loading de
|
|
20
23
|
When GET is sent to '/responses/greeting'
|
21
24
|
Then 'hello' should be returned
|
22
25
|
|
23
|
-
Scenario: Setting the
|
26
|
+
Scenario: Setting the required HTTP method
|
24
27
|
Given I run
|
25
28
|
"""
|
26
29
|
Mirage::Client.new.put('greeting', 'Hello Leon') do
|
@@ -33,7 +36,7 @@ Feature: the Mirage client provides methods for setting responses and loading de
|
|
33
36
|
Then 'Hello Leon' should be returned
|
34
37
|
|
35
38
|
|
36
|
-
Scenario: Setting a
|
39
|
+
Scenario: Setting a requirement on body content
|
37
40
|
Given I run
|
38
41
|
"""
|
39
42
|
Mirage::Client.new.put('greeting', 'Hello Leon') do
|
@@ -51,7 +54,7 @@ Feature: the Mirage client provides methods for setting responses and loading de
|
|
51
54
|
"""
|
52
55
|
Then 'Hello Leon' should be returned
|
53
56
|
|
54
|
-
Scenario: Setting a
|
57
|
+
Scenario: Setting a requirement on requests parameters
|
55
58
|
Given I run
|
56
59
|
"""
|
57
60
|
Mirage::Client.new.put('greeting', 'Hello Leon') do
|
@@ -89,40 +92,8 @@ Feature: the Mirage client provides methods for setting responses and loading de
|
|
89
92
|
When GET is sent to '/responses/greeting'
|
90
93
|
And the response 'content-type' should be 'text/xml'
|
91
94
|
|
92
|
-
|
93
|
-
|
94
|
-
# And I run 'mirage start'
|
95
|
-
#
|
96
|
-
# When the file 'responses/default_greetings.rb' contains:
|
97
|
-
# """
|
98
|
-
# prime do |mirage|
|
99
|
-
# mirage.put('greeting', 'hello')
|
100
|
-
# mirage.put('leaving', 'goodbye')
|
101
|
-
# end
|
102
|
-
# """
|
103
|
-
# And I run
|
104
|
-
# """
|
105
|
-
# Mirage::Client.new.prime
|
106
|
-
# """
|
107
|
-
# And GET is sent to '/responses/greeting'
|
108
|
-
# Then 'hello' should be returned
|
109
|
-
#
|
110
|
-
# When GET is sent to '/responses/leaving'
|
111
|
-
# Then 'goodbye' should be returned
|
112
|
-
|
113
|
-
Scenario: Setting a file as a response
|
114
|
-
Given the file 'test_file.txt' contains:
|
115
|
-
"""
|
116
|
-
test content
|
117
|
-
"""
|
118
|
-
And I run
|
119
|
-
"""
|
120
|
-
Mirage::Client.new.put('download', File.read('test_file.txt'))
|
121
|
-
"""
|
122
|
-
When GET is sent to '/responses/download'
|
123
|
-
Then the response should be the same as the content of 'test_file.txt'
|
124
|
-
|
125
|
-
Scenario: Setting a response status code
|
95
|
+
|
96
|
+
Scenario: Setting the HTTP status code
|
126
97
|
Given I run
|
127
98
|
"""
|
128
99
|
Mirage::Client.new.put('greeting', 'hello'){status 203}
|
@@ -131,7 +102,7 @@ Feature: the Mirage client provides methods for setting responses and loading de
|
|
131
102
|
Then a 203 should be returned
|
132
103
|
|
133
104
|
|
134
|
-
Scenario: Setting a
|
105
|
+
Scenario: Setting a delay
|
135
106
|
Given I run
|
136
107
|
"""
|
137
108
|
Mirage::Client.new.put('greeting', 'hello'){delay 2}
|
@@ -1,4 +1,6 @@
|
|
1
|
-
Feature:
|
1
|
+
Feature: Retrieving tracked requests
|
2
|
+
|
3
|
+
Requests made to the Mirage Server can be retrieved using the Mirage client
|
2
4
|
|
3
5
|
Background:
|
4
6
|
Given the following require statements are needed:
|
@@ -1,12 +1,14 @@
|
|
1
1
|
@command_line
|
2
|
-
Feature:
|
2
|
+
Feature: How to check if Mirage is running
|
3
|
+
|
4
|
+
Use the Mirage client api to check if Mirage is running either on the local machine or on a remote host.
|
3
5
|
|
4
6
|
|
5
7
|
Background:
|
6
8
|
Given the following gems are required to run the Mirage client test code:
|
7
9
|
"""
|
8
10
|
require 'rubygems'
|
9
|
-
require 'rspec'
|
11
|
+
require 'rspec/expectations'
|
10
12
|
require 'mirage/client'
|
11
13
|
"""
|
12
14
|
|
@@ -1,17 +1,19 @@
|
|
1
|
-
Feature:
|
1
|
+
Feature: Creating snapshots
|
2
|
+
|
3
|
+
The client can be used to snapshot and rollback the Mirage server
|
2
4
|
|
3
5
|
|
4
6
|
Background:
|
5
7
|
Given the following gems are required to run the Mirage client test code:
|
6
8
|
"""
|
7
9
|
require 'rubygems'
|
8
|
-
require 'rspec'
|
10
|
+
require 'rspec/expectations'
|
9
11
|
require 'mirage/client'
|
10
12
|
"""
|
11
13
|
And a template for 'greeting' has been set with a value of 'The default greeting'
|
12
14
|
|
13
15
|
|
14
|
-
Scenario:
|
16
|
+
Scenario: Creating a snapshot and rolling back
|
15
17
|
Given I run
|
16
18
|
"""
|
17
19
|
Mirage::Client.new.save
|
@@ -1,5 +1,7 @@
|
|
1
1
|
@command_line
|
2
|
-
Feature:
|
2
|
+
Feature: Stopping Mirage
|
3
|
+
|
4
|
+
The client API can be used to stop instances of Mirage running on localhost.
|
3
5
|
|
4
6
|
Background:
|
5
7
|
Given the following require statements are needed:
|
@@ -6,7 +6,7 @@ Feature: Help
|
|
6
6
|
Background: Mirage usage
|
7
7
|
Given usage information:
|
8
8
|
"""
|
9
|
-
mirage help [
|
9
|
+
mirage help [COMMAND] # Describe available commands or one specific command
|
10
10
|
mirage start # Starts mirage
|
11
11
|
mirage stop # Stops mirage
|
12
12
|
"""
|
data/features/prime.feature
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
#TODO - rename responses directory to templates
|
2
2
|
@command_line
|
3
|
-
Feature: Preloading
|
3
|
+
Feature: Preloading Templates
|
4
4
|
Mirage can be primed with a set of templates.
|
5
|
-
By default, Mirage loads any .rb files found in ./
|
5
|
+
By default, Mirage loads any .rb files found in ./mirage on startup. Mirage can also be made to load responses from a directory
|
6
6
|
of your choosing by using the -d/--defaults option
|
7
7
|
|
8
8
|
Responses can be added to the responses directory and used to prime Mirage after Mirage has been started.
|
@@ -11,7 +11,7 @@ Feature: Preloading templates
|
|
11
11
|
|
12
12
|
|
13
13
|
Scenario: Using the default responses directory
|
14
|
-
Given the file '
|
14
|
+
Given the file 'mirage/default_greetings.rb' contains:
|
15
15
|
"""
|
16
16
|
prime do |mirage|
|
17
17
|
mirage.templates.put('greeting', 'hello')
|
@@ -24,12 +24,12 @@ Feature: Preloading templates
|
|
24
24
|
|
25
25
|
Scenario: Using a custom responses directory
|
26
26
|
Given Mirage is not running
|
27
|
-
And the file '/tmp/
|
27
|
+
And the file '/tmp/mirage/default_greetings.rb' contains:
|
28
28
|
"""
|
29
29
|
prime do |mirage|
|
30
30
|
mirage.templates.put('greeting', 'hello')
|
31
31
|
end
|
32
32
|
"""
|
33
|
-
And I run 'mirage start --defaults /tmp/
|
33
|
+
And I run 'mirage start --defaults /tmp/mirage'
|
34
34
|
And GET is sent to '/responses/greeting'
|
35
35
|
Then 'hello' should be returned
|
@@ -275,4 +275,7 @@ Then(/^the template (request|response) specification should have the following s
|
|
275
275
|
end
|
276
276
|
Then(/^the following json should be returned:$/) do |text|
|
277
277
|
JSON.parse(text).should == JSON.parse(@response.body)
|
278
|
+
end
|
279
|
+
When(/^the content-type should be '(.*)'$/) do |content_type|
|
280
|
+
@response.content_type.should == content_type
|
278
281
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
Feature: Substituting values from requests in to a template
|
2
|
-
Parts of a response can be
|
2
|
+
Parts of a response can be substituted for values found in the request body or query string.
|
3
3
|
This allows dynamic content to be sent back to a client.
|
4
4
|
|
5
5
|
To do this, substitution, matchers must be put in the the response value.
|
@@ -1,32 +1,44 @@
|
|
1
1
|
Feature: Web interface
|
2
|
-
|
3
|
-
From this page you can:
|
4
|
-
- Peek at a responses content
|
5
|
-
- Track the response to see if a request has been made to it
|
6
|
-
|
7
|
-
#TODO tests needed for displaying pattern and delay values and http method
|
2
|
+
Note: This feature is being rewritten but the screens pretty basic so take a look:
|
8
3
|
|
9
|
-
|
10
|
-
Given I send PUT to '/templates/greeting' with body 'hello' and headers:
|
11
|
-
| X-mirage-default | true |
|
12
|
-
| X-mirage-method | POST |
|
13
|
-
And I send PUT to '/templates/leaving' with body 'goodbye'
|
4
|
+
The home page is served from '/' so by default is found at http://localhost:7001/
|
14
5
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
6
|
+
Mirage's home page allows you to see what response are currently being hosted.
|
7
|
+
From this page you can:
|
8
|
+
- See all currently hosted templates
|
9
|
+
- Preview at a Templates content
|
10
|
+
- View the last request to trigger a particular Template
|
19
11
|
|
20
|
-
Scenario: Using the home page to peek at a response
|
21
|
-
Given I goto ''
|
22
|
-
When I click 'peek_response_1'
|
23
|
-
Then I should see 'hello'
|
24
12
|
|
25
|
-
|
26
|
-
Given
|
27
|
-
"""
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
13
|
+
# Background: There are already a couple of responses hosted on he Mirage server
|
14
|
+
# Given the following template template:
|
15
|
+
# """
|
16
|
+
# {
|
17
|
+
# "response":{
|
18
|
+
# "body":"SGVsbG8="
|
19
|
+
# },
|
20
|
+
# "request":{
|
21
|
+
# }
|
22
|
+
# }
|
23
|
+
# """
|
24
|
+
# And the template is sent using PUT to '/templates/greeting'
|
25
|
+
#
|
26
|
+
#
|
27
|
+
# Scenario: Using the home page to see what response are being hosted
|
28
|
+
# Given I goto to the Mirage home page
|
29
|
+
# Then I should see 'greeting/*'
|
30
|
+
# Then I should see 'leaving'
|
31
|
+
#
|
32
|
+
# Scenario: Using the home page to peek at a response
|
33
|
+
# Given I goto ''
|
34
|
+
# When I click 'peek_response_1'
|
35
|
+
# Then I should see 'hello'
|
36
|
+
#
|
37
|
+
# Scenario: Using the home page to track if a request has been made
|
38
|
+
# Given I send POST to '/responses/greeting' with request entity
|
39
|
+
# """
|
40
|
+
# Yo!
|
41
|
+
# """
|
42
|
+
# Given I goto ''
|
43
|
+
# When I click 'track_response_1'
|
44
|
+
# Then I should see 'Yo!'
|
data/lib/mirage/client/client.rb
CHANGED
@@ -11,7 +11,6 @@ module Mirage
|
|
11
11
|
|
12
12
|
def initialize options={:url => "http://localhost:7001"}, &block
|
13
13
|
if options.is_a?(String) && options =~ URI.regexp
|
14
|
-
warn("Client.new(url): Deprecated usage, please use :url => url | :port => port")
|
15
14
|
@url = options
|
16
15
|
elsif options.kind_of?(Hash) && options[:port]
|
17
16
|
@url = "http://localhost:#{options[:port]}"
|
data/lib/mirage/client/error.rb
CHANGED
@@ -8,10 +8,10 @@ module Mirage
|
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
11
|
-
class InternalServerException < MirageError
|
11
|
+
class InternalServerException < MirageError
|
12
12
|
end
|
13
13
|
|
14
|
-
class
|
14
|
+
class TemplateNotFound < ::Exception
|
15
15
|
end
|
16
16
|
|
17
17
|
class ClientError < ::Exception
|
data/lib/mirage/client/runner.rb
CHANGED
@@ -56,7 +56,7 @@ module Mirage
|
|
56
56
|
|
57
57
|
desc "start", "Starts mirage"
|
58
58
|
method_option :port, :aliases => "-p", :type => :numeric, :default => 7001, :desc => "port that mirage should be started on"
|
59
|
-
method_option :defaults, :aliases => "-d", :type => :string, :default => '
|
59
|
+
method_option :defaults, :aliases => "-d", :type => :string, :default => 'mirage', :desc => "location to load default responses from"
|
60
60
|
method_option :debug, :type => :boolean, :default => false, :desc => "run in debug mode"
|
61
61
|
|
62
62
|
def start
|
@@ -19,7 +19,7 @@ module Mirage
|
|
19
19
|
|
20
20
|
def get url
|
21
21
|
response = backedup_get(url, :format => :json)
|
22
|
-
raise
|
22
|
+
raise TemplateNotFound if response.code == 404
|
23
23
|
response_hashie = Hashie::Mash.new response
|
24
24
|
|
25
25
|
response_config = response_hashie.response
|
@@ -25,7 +25,7 @@ module Mirage
|
|
25
25
|
if args.first.class.is_a?(Template::Model)
|
26
26
|
template = args.first
|
27
27
|
template = template.clone
|
28
|
-
template.endpoint "#{@url}/#{template.endpoint}"
|
28
|
+
template.endpoint "#{@url}/#{template.endpoint}"
|
29
29
|
else
|
30
30
|
|
31
31
|
endpoint, template = args
|
data/mirage.gemspec
CHANGED
@@ -1,34 +1,40 @@
|
|
1
1
|
# Generated by jeweler
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "mirage"
|
8
|
-
s.version = "3.0.0
|
8
|
+
s.version = "3.0.0"
|
9
9
|
|
10
|
-
s.required_rubygems_version = Gem::Requirement.new("
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Leon Davis"]
|
12
|
-
s.date = "2013-10-
|
12
|
+
s.date = "2013-10-27"
|
13
13
|
s.description = "Mirage aids testing of your applications by hosting mock responses so that your applications do not have to talk to real endpoints. Its accessible via HTTP and has a RESTful interface."
|
14
14
|
s.executables = ["mirage"]
|
15
15
|
s.extra_rdoc_files = [
|
16
16
|
"README.md"
|
17
17
|
]
|
18
18
|
s.files = [
|
19
|
-
".
|
19
|
+
".ruby-gemset",
|
20
|
+
".ruby-version",
|
20
21
|
".simplecov",
|
22
|
+
".travis.yml",
|
21
23
|
"Gemfile",
|
22
24
|
"Gemfile.lock",
|
23
25
|
"HISTORY",
|
24
26
|
"README.md",
|
27
|
+
"Rakefile",
|
25
28
|
"VERSION",
|
26
29
|
"bin/mirage",
|
27
30
|
"features/.nav",
|
28
31
|
"features/client/clear.feature",
|
29
32
|
"features/client/configure.feature",
|
33
|
+
"features/client/model.feature",
|
30
34
|
"features/client/preview_responses.feature",
|
35
|
+
"features/client/prime.feature",
|
31
36
|
"features/client/put.feature",
|
37
|
+
"features/client/readme.md",
|
32
38
|
"features/client/requests.feature",
|
33
39
|
"features/client/running.feature",
|
34
40
|
"features/client/save_and_revert.feature",
|
@@ -76,9 +82,6 @@ Gem::Specification.new do |s|
|
|
76
82
|
"lib/mirage/client/templates.rb",
|
77
83
|
"mirage.gemspec",
|
78
84
|
"mirage_server.rb",
|
79
|
-
"profiles.rb",
|
80
|
-
"rakefile",
|
81
|
-
"responses/default_responses.rb",
|
82
85
|
"server/app.rb",
|
83
86
|
"server/binary_data_checker.rb",
|
84
87
|
"server/extensions/hash.rb",
|
@@ -104,9 +107,7 @@ Gem::Specification.new do |s|
|
|
104
107
|
"spec/server/mock_response_spec.rb",
|
105
108
|
"spec/server/server_spec.rb",
|
106
109
|
"spec/spec_helper.rb",
|
107
|
-
"
|
108
|
-
"test.rb",
|
109
|
-
"todo.lst",
|
110
|
+
"todo.list",
|
110
111
|
"views/index.haml",
|
111
112
|
"views/response.haml"
|
112
113
|
]
|