mirage 1.3.6 → 2.0.0.alpha1
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +7 -4
- data/VERSION +1 -1
- data/bin/mirage +2 -0
- data/features/client/clear.feature +38 -20
- data/features/client/peek.feature +11 -11
- data/features/client/save_and_revert.feature +14 -8
- data/features/client/set.feature +59 -13
- data/features/client/track.feature +5 -3
- data/features/server/clear.feature +59 -47
- data/features/server/logging.feature +2 -3
- data/features/server/peek.feature +12 -10
- data/features/server/prime.feature +15 -13
- data/features/server/response_templates.feature +9 -16
- data/features/server/save_and_revert.feature +11 -14
- data/features/server/set.feature +44 -17
- data/features/server/set_default_response.feature +19 -25
- data/features/server/set_with_a_delay.feature +3 -5
- data/features/server/set_with_a_pattern.feature +24 -29
- data/features/server/track_requests.feature +71 -0
- data/features/server/web_user_interface.feature +7 -8
- data/features/step_definitions/my_steps.rb +83 -28
- data/features/support/env.rb +0 -14
- data/lib/mirage.rb +3 -0
- data/lib/mirage/client.rb +48 -43
- data/lib/mirage/core.rb +65 -152
- data/lib/mirage/mock_response.rb +49 -0
- data/lib/mirage/mock_responses_collection.rb +109 -0
- data/lib/mirage/object.rb +5 -0
- data/lib/mirage/web.rb +37 -28
- data/lib/start_mirage.rb +27 -5
- data/lib/{view/mirage/index.xhtml → views/index.erb} +5 -5
- data/mirage.gemspec +7 -7
- metadata +57 -23
- data/features/client/get.feature +0 -46
- data/features/server/file_responses.feature +0 -8
- data/features/server/track.feature +0 -74
data/Gemfile
CHANGED
@@ -1,15 +1,18 @@
|
|
1
|
-
source
|
1
|
+
source :rubygems
|
2
2
|
|
3
3
|
gem 'rack', '~> 1.1.0'
|
4
|
-
gem '
|
5
|
-
gem 'mechanize', '>= 1.0.0'
|
4
|
+
gem 'sinatra'
|
6
5
|
gem 'childprocess', '~> 0.1'
|
7
6
|
|
8
7
|
group :development do
|
9
|
-
gem 'rake'
|
8
|
+
gem 'rake', '0.9.0'
|
10
9
|
gem 'cucumber'
|
10
|
+
gem 'gherkin', '2.3.9'
|
11
11
|
gem 'rspec'
|
12
12
|
gem "jeweler", "~> 1.5.2"
|
13
13
|
gem 'bundler'
|
14
|
+
gem 'sinatra-reloader'
|
15
|
+
gem 'mechanize', '>= 1.0.0'
|
16
|
+
gem 'gemcutter'
|
14
17
|
end
|
15
18
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
2.0.0.alpha1
|
data/bin/mirage
CHANGED
@@ -7,36 +7,37 @@ Feature: The client can be used for clearing responses from Mirage
|
|
7
7
|
require 'rspec'
|
8
8
|
require 'mirage'
|
9
9
|
"""
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
And I hit 'http://localhost:7001/mirage/get/greeting' with request body:
|
10
|
+
|
11
|
+
And I send PUT to 'http://localhost:7001/mirage/templates/greeting' with request entity
|
14
12
|
"""
|
15
|
-
Hello
|
13
|
+
Hello
|
16
14
|
"""
|
17
|
-
And I
|
18
|
-
|
|
19
|
-
|
20
|
-
And I
|
15
|
+
And I send GET to 'http://localhost:7001/mirage/responses/greeting' with parameters:
|
16
|
+
| message | hello there |
|
17
|
+
|
18
|
+
And I send PUT to 'http://localhost:7001/mirage/templates/leaving' with request entity
|
21
19
|
"""
|
22
|
-
|
20
|
+
Goodbye
|
23
21
|
"""
|
22
|
+
And I send GET to 'http://localhost:7001/mirage/responses/greeting' with parameters:
|
23
|
+
| message | I'm going |
|
24
24
|
|
25
|
+
|
25
26
|
Scenario: Clearing everything
|
26
27
|
When I run
|
27
28
|
"""
|
28
29
|
Mirage::Client.new.clear
|
29
30
|
"""
|
30
|
-
And I
|
31
|
+
And I send GET to 'http://localhost:7001/mirage/responses/greeting'
|
31
32
|
Then a 404 should be returned
|
32
33
|
|
33
|
-
When I
|
34
|
+
When I send GET to 'http://localhost:7001/mirage/requests/1'
|
34
35
|
Then a 404 should be returned
|
35
36
|
|
36
|
-
And I
|
37
|
+
And I send GET to 'http://localhost:7001/mirage/responses/leaving'
|
37
38
|
Then a 404 should be returned
|
38
39
|
|
39
|
-
When I
|
40
|
+
When I send GET to 'http://localhost:7001/mirage/requests/2'
|
40
41
|
Then a 404 should be returned
|
41
42
|
|
42
43
|
|
@@ -45,29 +46,46 @@ Feature: The client can be used for clearing responses from Mirage
|
|
45
46
|
"""
|
46
47
|
Mirage::Client.new.clear :requests
|
47
48
|
"""
|
48
|
-
When I
|
49
|
+
When I send GET to 'http://localhost:7001/mirage/requests/1'
|
49
50
|
Then a 404 should be returned
|
50
51
|
|
51
|
-
When I
|
52
|
+
When I send GET to 'http://localhost:7001/mirage/requests/2'
|
52
53
|
Then a 404 should be returned
|
54
|
+
|
55
|
+
When I send GET to 'http://localhost:7001/mirage/responses/greeting'
|
56
|
+
Then a 200 should be returned
|
57
|
+
When I send GET to 'http://localhost:7001/mirage/responses/leaving'
|
58
|
+
Then a 200 should be returned
|
59
|
+
|
53
60
|
|
54
61
|
Scenario: Clearning a response
|
55
62
|
Given I run
|
56
63
|
"""
|
57
|
-
Mirage::Client.new.clear 1
|
64
|
+
Mirage::Client.new.clear 1
|
58
65
|
"""
|
59
|
-
When I
|
66
|
+
When I send GET to 'http://localhost:7001/mirage/responses/greeting'
|
60
67
|
Then a 404 should be returned
|
61
|
-
When I
|
68
|
+
When I send GET to 'http://localhost:7001/mirage/requests/1'
|
62
69
|
Then a 404 should be returned
|
70
|
+
When I send GET to 'http://localhost:7001/mirage/responses/leaving'
|
71
|
+
Then a 200 should be returned
|
72
|
+
When I send GET to 'http://localhost:7001/mirage/requests/2'
|
73
|
+
Then a 200 should be returned
|
74
|
+
|
63
75
|
|
64
76
|
Scenario: Clearning a request
|
65
77
|
Given I run
|
66
78
|
"""
|
67
79
|
Mirage::Client.new.clear :request => 1
|
68
80
|
"""
|
69
|
-
When I
|
81
|
+
When I send GET to 'http://localhost:7001/mirage/requests/1'
|
70
82
|
Then a 404 should be returned
|
83
|
+
When I send GET to 'http://localhost:7001/mirage/responses/greeting'
|
84
|
+
Then a 200 should be returned
|
85
|
+
When I send GET to 'http://localhost:7001/mirage/responses/leaving'
|
86
|
+
Then a 200 should be returned
|
87
|
+
When I send GET to 'http://localhost:7001/mirage/requests/2'
|
88
|
+
Then a 200 should be returned
|
71
89
|
|
72
90
|
|
73
91
|
|
@@ -8,17 +8,16 @@ Feature: the client can be used for peeking at responses hosted on Mirage.
|
|
8
8
|
require 'mirage'
|
9
9
|
"""
|
10
10
|
|
11
|
-
Scenario: peeking a response
|
12
|
-
Given I
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
Then a 404 should be returned
|
11
|
+
# Scenario: peeking a response
|
12
|
+
# Given I send PUT to 'http://localhost:7001/mirage/templates/greeting' with body 'Hello'
|
13
|
+
#
|
14
|
+
# When I run
|
15
|
+
# """
|
16
|
+
# Mirage::Client.new.peek(1).should == 'Hello'
|
17
|
+
# """
|
18
|
+
#
|
19
|
+
# When I send GET to 'http://localhost:7001/mirage/requests/1'
|
20
|
+
# Then a 404 should be returned
|
22
21
|
|
23
22
|
Scenario: getting a response that does not exist
|
24
23
|
Given I run
|
@@ -27,6 +26,7 @@ Feature: the client can be used for peeking at responses hosted on Mirage.
|
|
27
26
|
Mirage::Client.new.peek(2).should == 'this should not have happened'
|
28
27
|
fail("Error should have been thrown")
|
29
28
|
rescue Exception => e
|
29
|
+
puts e
|
30
30
|
e.is_a?(Mirage::ResponseNotFound).should == true
|
31
31
|
end
|
32
32
|
"""
|
@@ -8,8 +8,10 @@ Feature: The Mirage client can be used to snaphsot and rollback the Mirage serve
|
|
8
8
|
require 'rspec'
|
9
9
|
require 'mirage'
|
10
10
|
"""
|
11
|
-
And I
|
12
|
-
|
11
|
+
And I send PUT to 'http://localhost:7001/mirage/templates/greeting' with request entity
|
12
|
+
"""
|
13
|
+
The default greeting
|
14
|
+
"""
|
13
15
|
|
14
16
|
|
15
17
|
Scenario: saving and reverting
|
@@ -17,18 +19,22 @@ Feature: The Mirage client can be used to snaphsot and rollback the Mirage serve
|
|
17
19
|
"""
|
18
20
|
Mirage::Client.new.save
|
19
21
|
"""
|
20
|
-
And I
|
21
|
-
|
22
|
+
And I send PUT to 'http://localhost:7001/mirage/templates/leaving' with request entity
|
23
|
+
"""
|
24
|
+
Goodbye
|
25
|
+
"""
|
22
26
|
|
23
|
-
And I
|
24
|
-
|
27
|
+
And I send PUT to 'http://localhost:7001/mirage/set/greeting' with request entity
|
28
|
+
"""
|
29
|
+
Changed
|
30
|
+
"""
|
25
31
|
|
26
32
|
When I run
|
27
33
|
"""
|
28
34
|
Mirage::Client.new.revert
|
29
35
|
"""
|
30
|
-
And I
|
36
|
+
And I send GET to 'http://localhost:7001/mirage/responses/leaving'
|
31
37
|
Then a 404 should be returned
|
32
38
|
|
33
|
-
When I
|
39
|
+
When I send GET to 'http://localhost:7001/mirage/responses/greeting'
|
34
40
|
Then 'The default greeting' should be returned
|
data/features/client/set.feature
CHANGED
@@ -10,25 +10,40 @@ Feature: the Mirage client provides methods for setting responses and loading de
|
|
10
10
|
require 'rspec'
|
11
11
|
require 'mirage'
|
12
12
|
"""
|
13
|
-
|
13
|
+
|
14
14
|
|
15
15
|
Scenario: Setting a basic response
|
16
16
|
Given I run
|
17
17
|
"""
|
18
18
|
Mirage::Client.new.set('greeting','hello')
|
19
19
|
"""
|
20
|
-
When I
|
20
|
+
When I send GET to 'http://localhost:7001/mirage/responses/greeting'
|
21
21
|
Then 'hello' should be returned
|
22
|
-
|
22
|
+
|
23
|
+
Scenario: Setting the method that a response should be returned on
|
24
|
+
Given I run
|
25
|
+
"""
|
26
|
+
Mirage::Client.new.set('greeting', 'Hello Leon') do |response|
|
27
|
+
response.method = 'POST'
|
28
|
+
end
|
29
|
+
"""
|
30
|
+
When I send GET to 'http://localhost:7001/mirage/responses/greeting'
|
31
|
+
Then a 404 should be returned
|
32
|
+
When I send POST to 'http://localhost:7001/mirage/responses/greeting'
|
33
|
+
Then 'Hello Leon' should be returned
|
34
|
+
|
23
35
|
|
24
36
|
Scenario Outline: Setting a response with a pattern
|
25
37
|
Given I run
|
26
38
|
"""
|
27
|
-
Mirage::Client.new.set('greeting', 'Hello Leon'
|
39
|
+
Mirage::Client.new.set('greeting', 'Hello Leon') do |response|
|
40
|
+
response.method = 'POST'
|
41
|
+
response.pattern = <pattern>
|
42
|
+
end
|
28
43
|
"""
|
29
|
-
When I
|
44
|
+
When I send POST to 'http://localhost:7001/mirage/responses/greeting'
|
30
45
|
Then a 404 should be returned
|
31
|
-
When I
|
46
|
+
When I send POST to 'http://localhost:7001/mirage/responses/greeting' with request entity
|
32
47
|
"""
|
33
48
|
<greetingRequest>
|
34
49
|
<name>leon</name>
|
@@ -36,10 +51,20 @@ Feature: the Mirage client provides methods for setting responses and loading de
|
|
36
51
|
"""
|
37
52
|
Then 'Hello Leon' should be returned
|
38
53
|
Examples:
|
39
|
-
| pattern
|
54
|
+
| pattern |
|
40
55
|
| /.*?>leon<\\/name>/ |
|
41
56
|
| 'leon' |
|
42
|
-
|
57
|
+
|
58
|
+
|
59
|
+
Scenario: Setting the content type
|
60
|
+
Given I run
|
61
|
+
"""
|
62
|
+
Mirage::Client.new.set('greeting', '<xml></xml>') do |response|
|
63
|
+
response.content_type = 'text/xml'
|
64
|
+
end
|
65
|
+
"""
|
66
|
+
When I send GET to 'http://localhost:7001/mirage/responses/greeting'
|
67
|
+
And the response 'content-type' should be 'text/xml'
|
43
68
|
|
44
69
|
Scenario: Priming Mirage
|
45
70
|
Given Mirage is not running
|
@@ -56,12 +81,32 @@ Feature: the Mirage client provides methods for setting responses and loading de
|
|
56
81
|
"""
|
57
82
|
Mirage::Client.new.prime
|
58
83
|
"""
|
59
|
-
And I
|
84
|
+
And I send GET to 'http://localhost:7001/mirage/responses/greeting'
|
60
85
|
Then 'hello' should be returned
|
61
86
|
|
62
|
-
When I
|
87
|
+
When I send GET to 'http://localhost:7001/mirage/responses/leaving'
|
63
88
|
Then 'goodbye' should be returned
|
64
89
|
|
90
|
+
Scenario: A file is given to the client with substitution in it
|
91
|
+
Given the file 'response_file' contains:
|
92
|
+
"""
|
93
|
+
Hello ${<firstname>(.*?)</firstname>} ${<surname>(.*?)</surname>}, how are you?
|
94
|
+
"""
|
95
|
+
And I run
|
96
|
+
"""
|
97
|
+
puts Dir.pwd
|
98
|
+
Mirage::Client.new.set('greeting', File.open('scratch/response_file')) do |response|
|
99
|
+
response.method = 'POST'
|
100
|
+
end
|
101
|
+
"""
|
102
|
+
When I send POST to 'http://localhost:7001/mirage/responses/greeting' with request entity
|
103
|
+
"""
|
104
|
+
<grettingRequest>
|
105
|
+
<firstname>Leon</firstname>
|
106
|
+
<surname>Davis</surname>
|
107
|
+
</greetingRequest>
|
108
|
+
"""
|
109
|
+
Then 'Hello Leon Davis, how are you?' should be returned
|
65
110
|
|
66
111
|
Scenario: Priming Mirage when one of the response file has something bad in it
|
67
112
|
Given the file 'responses/default_greetings.rb' contains:
|
@@ -77,12 +122,13 @@ Feature: the Mirage client provides methods for setting responses and loading de
|
|
77
122
|
e.is_a?(Mirage::InternalServerException).should == true
|
78
123
|
end
|
79
124
|
"""
|
80
|
-
|
125
|
+
#
|
126
|
+
#
|
81
127
|
|
82
128
|
Scenario: Setting a file as a response
|
83
129
|
Given I run
|
84
130
|
"""
|
85
131
|
Mirage::Client.new.set('download', File.open('README.md'))
|
86
132
|
"""
|
87
|
-
When I
|
88
|
-
Then the response should be
|
133
|
+
When I send GET to 'http://localhost:7001/mirage/responses/download'
|
134
|
+
Then the response should be the same as the content of 'README.md'
|
@@ -9,10 +9,12 @@ Feature: Requests made to the Mirage Server can be tracked using the Mirage clie
|
|
9
9
|
"""
|
10
10
|
|
11
11
|
Scenario: The MockServer returns a response
|
12
|
-
Given I
|
13
|
-
|
12
|
+
Given I send PUT to 'http://localhost:7001/mirage/templates/greeting' with request entity
|
13
|
+
"""
|
14
|
+
Hello
|
15
|
+
"""
|
14
16
|
|
15
|
-
When I
|
17
|
+
When I send GET to 'http://localhost:7001/mirage/responses/greeting' with parameters:
|
16
18
|
| name | leon |
|
17
19
|
Then I run
|
18
20
|
"""
|
@@ -8,74 +8,86 @@ Feature: Responses and requests can be cleared.
|
|
8
8
|
${mirage_url}/clear/request/response_id - Clear request for a particular response
|
9
9
|
|
10
10
|
|
11
|
-
|
12
11
|
Background: The MockServer has already got a response for greeting and leaving on it.
|
13
|
-
Given I
|
14
|
-
|
15
|
-
|
16
|
-
And I post to 'http://localhost:7001/mirage/set/leaving' with parameters:
|
17
|
-
| response | Goodbye |
|
12
|
+
Given I send PUT to 'http://localhost:7001/mirage/templates/greeting' with body 'Hello'
|
13
|
+
And I send GET to 'http://localhost:7001/mirage/responses/greeting'
|
18
14
|
|
15
|
+
And I send PUT to 'http://localhost:7001/mirage/templates/leaving' with body 'Goodbye'
|
16
|
+
And I send GET to 'http://localhost:7001/mirage/responses/leaving'
|
19
17
|
|
20
18
|
|
21
19
|
Scenario: Clearing all responses
|
22
|
-
Given I
|
20
|
+
Given I send DELETE to 'http://localhost:7001/mirage/templates'
|
23
21
|
|
24
|
-
When I
|
22
|
+
When I send GET to 'http://localhost:7001/mirage/requests/1'
|
23
|
+
Then a 404 should be returned
|
24
|
+
When I send GET to 'http://localhost:7001/mirage/responses/greeting'
|
25
|
+
Then a 404 should be returned
|
26
|
+
When I send GET to 'http://localhost:7001/mirage/templates/1'
|
25
27
|
Then a 404 should be returned
|
26
28
|
|
27
|
-
When I
|
29
|
+
When I send GET to 'http://localhost:7001/mirage/requests/2'
|
30
|
+
Then a 404 should be returned
|
31
|
+
When I send GET to 'http://localhost:7001/mirage/responses/leaving'
|
32
|
+
Then a 404 should be returned
|
33
|
+
When I send GET to 'http://localhost:7001/mirage/templates/2'
|
28
34
|
Then a 404 should be returned
|
29
35
|
|
30
36
|
|
31
37
|
Scenario: Clearing a particular response
|
32
|
-
Given I
|
38
|
+
Given I send DELETE to 'http://localhost:7001/mirage/templates/1'
|
33
39
|
|
34
|
-
When I
|
40
|
+
When I send GET to 'http://localhost:7001/mirage/templates/1'
|
35
41
|
Then a 404 should be returned
|
36
|
-
|
37
|
-
|
42
|
+
When I send GET to 'http://localhost:7001/mirage/responses/greeting'
|
43
|
+
Then a 404 should be returned
|
44
|
+
When I send GET to 'http://localhost:7001/mirage/requests/1'
|
38
45
|
Then a 404 should be returned
|
39
46
|
|
40
|
-
When I
|
41
|
-
Then
|
47
|
+
When I send GET to 'http://localhost:7001/mirage/requests/2'
|
48
|
+
Then a 200 should be returned
|
49
|
+
When I send GET to 'http://localhost:7001/mirage/responses/leaving'
|
50
|
+
Then a 200 should be returned
|
51
|
+
When I send GET to 'http://localhost:7001/mirage/templates/2'
|
52
|
+
Then a 200 should be returned
|
53
|
+
|
42
54
|
|
43
55
|
|
44
56
|
Scenario: Clearing all requests
|
45
|
-
|
46
|
-
"""
|
47
|
-
Say 'Hello' to me
|
48
|
-
"""
|
49
|
-
And I hit 'http://localhost:7001/mirage/get/leaving' with request body:
|
50
|
-
"""
|
51
|
-
Say 'Goodbye' to me
|
52
|
-
"""
|
53
|
-
And I hit 'http://localhost:7001/mirage/clear'
|
54
|
-
|
55
|
-
When I hit 'http://localhost:7001/mirage/check/1'
|
56
|
-
Then a 404 should be returned
|
57
|
+
And I send DELETE to 'http://localhost:7001/mirage/requests'
|
57
58
|
|
58
|
-
When I
|
59
|
+
When I send GET to 'http://localhost:7001/mirage/requests/1'
|
59
60
|
Then a 404 should be returned
|
61
|
+
When I send GET to 'http://localhost:7001/mirage/responses/greeting'
|
62
|
+
Then a 200 should be returned
|
63
|
+
When I send GET to 'http://localhost:7001/mirage/templates/1'
|
64
|
+
Then a 200 should be returned
|
65
|
+
|
60
66
|
|
67
|
+
When I send GET to 'http://localhost:7001/mirage/requests/2'
|
68
|
+
Then a 404 should be returned
|
69
|
+
When I send GET to 'http://localhost:7001/mirage/responses/leaving'
|
70
|
+
Then a 200 should be returned
|
71
|
+
When I send GET to 'http://localhost:7001/mirage/templates/2'
|
72
|
+
Then a 200 should be returned
|
73
|
+
|
61
74
|
|
62
|
-
Scenario: Clearing a stored request request for a prticular response
|
63
|
-
Given I hit 'http://localhost:7001/mirage/get/leaving' with request body:
|
64
|
-
"""
|
65
|
-
See you later
|
66
|
-
"""
|
67
|
-
|
68
|
-
When I hit 'http://localhost:7001/mirage/clear/request/2'
|
69
|
-
Then I hit 'http://localhost:7001/mirage/check/2'
|
70
|
-
And a 404 should be returned
|
71
|
-
|
72
|
-
|
73
|
-
Scenario: Querying a response that has been cleared
|
74
|
-
Given I hit 'http://localhost:7001/mirage/get/greeting' with request body:
|
75
|
-
"""
|
76
|
-
greet me :)
|
77
|
-
"""
|
78
|
-
And I hit 'http://localhost:7001/mirage/clear/1'
|
79
75
|
|
80
|
-
|
81
|
-
|
76
|
+
Scenario: Clearing a stored request for a prticular response
|
77
|
+
And I send DELETE to 'http://localhost:7001/mirage/requests/1'
|
78
|
+
|
79
|
+
When I send GET to 'http://localhost:7001/mirage/requests/1'
|
80
|
+
Then a 404 should be returned
|
81
|
+
When I send GET to 'http://localhost:7001/mirage/responses/greeting'
|
82
|
+
Then a 200 should be returned
|
83
|
+
When I send GET to 'http://localhost:7001/mirage/templates/1'
|
84
|
+
Then a 200 should be returned
|
85
|
+
|
86
|
+
|
87
|
+
When I send GET to 'http://localhost:7001/mirage/requests/2'
|
88
|
+
Then a 200 should be returned
|
89
|
+
When I send GET to 'http://localhost:7001/mirage/responses/leaving'
|
90
|
+
Then a 200 should be returned
|
91
|
+
When I send GET to 'http://localhost:7001/mirage/templates/2'
|
92
|
+
Then a 200 should be returned
|
93
|
+
|