webstub 0.4.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/README.md +4 -1
- data/lib/webstub/protocol.rb +18 -2
- data/lib/webstub/stub.rb +20 -1
- data/lib/webstub/version.rb +1 -1
- data/spec/api_spec.rb +16 -1
- data/spec/helpers/request_helper.rb +21 -10
- data/spec/stub_spec.rb +22 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5a5ee428399a0214cd16a8d72651cf34d6d07497
|
4
|
+
data.tar.gz: e55c492aca59216cf5b245286e8ba9859d2b9abb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 58f0a1305f0d7a7b0f6dceea41696210694991f88ddc36c20007a0312fe32f76e77c6087a12f96b7f89a9e67e37b41cb0074b31a13c7055c00b105a61b7213db
|
7
|
+
data.tar.gz: 20330658e51a988deada8bfec184c32a699c8437eb635a0073a13ad6c4840788e9cba1e7cc4287c01895c1d2b862d6c3feaa993b1f9f8dd663e907f54df8a5e6
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -15,7 +15,7 @@ Installation
|
|
15
15
|
------------
|
16
16
|
Update your Gemfile:
|
17
17
|
|
18
|
-
gem "webstub"
|
18
|
+
gem "webstub"
|
19
19
|
|
20
20
|
Bundle:
|
21
21
|
|
@@ -105,6 +105,9 @@ Conventions
|
|
105
105
|
- `body`: accepts a String, and returns it as-is
|
106
106
|
- `content_type`: sets the Content-Type when using the `body` parameter
|
107
107
|
- `status_code`: sets the integer Status Code of the response. Defaults to `200`.
|
108
|
+
- The `to_redirect` method accepts:
|
109
|
+
- `url`: String of the URL to redirect to (*required*)
|
110
|
+
- All options supported by `to_return` except for `status_code`
|
108
111
|
|
109
112
|
Expectations
|
110
113
|
-----------------
|
data/lib/webstub/protocol.rb
CHANGED
@@ -49,6 +49,24 @@ module WebStub
|
|
49
49
|
statusCode:@stub.response_status_code,
|
50
50
|
HTTPVersion:"HTTP/1.1",
|
51
51
|
headerFields:@stub.response_headers)
|
52
|
+
@stub.requests += 1
|
53
|
+
|
54
|
+
if @stub.redirects?
|
55
|
+
url = NSURL.URLWithString(@stub.response_headers["Location"])
|
56
|
+
redirect_request = NSURLRequest.requestWithURL(url)
|
57
|
+
|
58
|
+
client.URLProtocol(self, wasRedirectedToRequest: redirect_request, redirectResponse: response)
|
59
|
+
|
60
|
+
unless @stub = self.class.stub_for(redirect_request)
|
61
|
+
error = NSError.errorWithDomain("WebStub", code:0, userInfo:{ NSLocalizedDescriptionKey: "network access is not permitted!"})
|
62
|
+
client.URLProtocol(self, didFailWithError:error)
|
63
|
+
|
64
|
+
return
|
65
|
+
end
|
66
|
+
|
67
|
+
@timer = NSTimer.scheduledTimerWithTimeInterval(@stub.response_delay, target:self, selector: :completeLoading, userInfo:nil, repeats:false)
|
68
|
+
return
|
69
|
+
end
|
52
70
|
|
53
71
|
client.URLProtocol(self, didReceiveResponse:response, cacheStoragePolicy:NSURLCacheStorageNotAllowed)
|
54
72
|
client.URLProtocol(self, didLoadData:@stub.response_body.dataUsingEncoding(NSUTF8StringEncoding))
|
@@ -66,8 +84,6 @@ module WebStub
|
|
66
84
|
return
|
67
85
|
end
|
68
86
|
|
69
|
-
@stub.requests += 1
|
70
|
-
|
71
87
|
@timer = NSTimer.scheduledTimerWithTimeInterval(@stub.response_delay, target:self, selector: :completeLoading, userInfo:nil, repeats:false)
|
72
88
|
end
|
73
89
|
|
data/lib/webstub/stub.rb
CHANGED
@@ -48,6 +48,10 @@ module WebStub
|
|
48
48
|
|
49
49
|
attr_accessor :requests
|
50
50
|
|
51
|
+
def redirects?
|
52
|
+
@response_status_code.between?(300, 399) && @response_headers["Location"] != nil
|
53
|
+
end
|
54
|
+
|
51
55
|
def requested?
|
52
56
|
@requests > 0
|
53
57
|
end
|
@@ -62,6 +66,10 @@ module WebStub
|
|
62
66
|
@response_status_code = status_code
|
63
67
|
end
|
64
68
|
|
69
|
+
if headers = options[:headers]
|
70
|
+
@response_headers.merge!(headers)
|
71
|
+
end
|
72
|
+
|
65
73
|
if json = options[:json]
|
66
74
|
@response_body = json
|
67
75
|
@response_headers["Content-Type"] = "application/json"
|
@@ -71,7 +79,6 @@ module WebStub
|
|
71
79
|
end
|
72
80
|
else
|
73
81
|
@response_body = options[:body] || ""
|
74
|
-
@response_headers = options[:headers] || {}
|
75
82
|
|
76
83
|
if content_type = options[:content_type]
|
77
84
|
@response_headers["Content-Type"] = content_type
|
@@ -85,6 +92,18 @@ module WebStub
|
|
85
92
|
self
|
86
93
|
end
|
87
94
|
|
95
|
+
def to_redirect(options)
|
96
|
+
unless url = options.delete(:url)
|
97
|
+
raise ArgumentError, "to_redirect requires the :url option"
|
98
|
+
end
|
99
|
+
|
100
|
+
options[:headers] ||= {}
|
101
|
+
options[:headers]["Location"] = url
|
102
|
+
options[:status_code] = 301
|
103
|
+
|
104
|
+
to_return(options)
|
105
|
+
end
|
106
|
+
|
88
107
|
def with(options)
|
89
108
|
if body = options[:body]
|
90
109
|
@request_body = body
|
data/lib/webstub/version.rb
CHANGED
data/spec/api_spec.rb
CHANGED
@@ -2,7 +2,7 @@ describe WebStub::API do
|
|
2
2
|
before do
|
3
3
|
WebStub::API.reset_stubs
|
4
4
|
|
5
|
-
@url = "http://www.
|
5
|
+
@url = "http://www.example.com/"
|
6
6
|
@request = NSURLRequest.requestWithURL(NSURL.URLWithString(@url))
|
7
7
|
end
|
8
8
|
|
@@ -157,6 +157,21 @@ describe WebStub::API do
|
|
157
157
|
response.body.should == '{}'
|
158
158
|
end
|
159
159
|
end
|
160
|
+
|
161
|
+
describe "when a stub redirects" do
|
162
|
+
it "redirects the request" do
|
163
|
+
@redirect_url = @url + "redirect"
|
164
|
+
|
165
|
+
WebStub::API.stub_request(:get, @url).
|
166
|
+
to_redirect(url: @redirect_url)
|
167
|
+
WebStub::API.stub_request(:get, @redirect_url).
|
168
|
+
to_return(json: {})
|
169
|
+
|
170
|
+
response = get(@url)
|
171
|
+
|
172
|
+
response.body.should == '{}'
|
173
|
+
end
|
174
|
+
end
|
160
175
|
end
|
161
176
|
|
162
177
|
describe ".reset_stubs" do
|
@@ -20,11 +20,7 @@ def get(url, headers={})
|
|
20
20
|
request.setValue(value, forHTTPHeaderField: key.to_s)
|
21
21
|
end
|
22
22
|
|
23
|
-
|
24
|
-
error = Pointer.new(:object)
|
25
|
-
body = NSURLConnection.sendSynchronousRequest(request, returningResponse:response, error:error)
|
26
|
-
|
27
|
-
Response.new(body, response[0], error[0])
|
23
|
+
issue_request(request)
|
28
24
|
end
|
29
25
|
|
30
26
|
def post(url, body)
|
@@ -44,10 +40,25 @@ def post(url, body)
|
|
44
40
|
|
45
41
|
request.HTTPBody = body.dataUsingEncoding(NSUTF8StringEncoding)
|
46
42
|
|
47
|
-
|
48
|
-
error = Pointer.new(:object)
|
49
|
-
body = NSURLConnection.sendSynchronousRequest(request, returningResponse:response, error:error)
|
50
|
-
|
51
|
-
Response.new(body, response[0], error[0])
|
43
|
+
issue_request(request)
|
52
44
|
end
|
53
45
|
|
46
|
+
def issue_request(request)
|
47
|
+
result = {}
|
48
|
+
queue = NSOperationQueue.alloc.init
|
49
|
+
lock = NSConditionLock.alloc.initWithCondition(0)
|
50
|
+
|
51
|
+
NSURLConnection.sendAsynchronousRequest(request,
|
52
|
+
queue: queue,
|
53
|
+
completionHandler: lambda do |response, data, error|
|
54
|
+
lock.lockWhenCondition(0)
|
55
|
+
result[:data] = data
|
56
|
+
result[:response] = response
|
57
|
+
result[:error] = error
|
58
|
+
lock.unlockWithCondition(1)
|
59
|
+
end)
|
60
|
+
|
61
|
+
lock.lockWhenCondition(1)
|
62
|
+
|
63
|
+
Response.new(result[:data], result[:response], result[:error])
|
64
|
+
end
|
data/spec/stub_spec.rb
CHANGED
@@ -108,6 +108,28 @@ describe WebStub::Stub do
|
|
108
108
|
end
|
109
109
|
end
|
110
110
|
|
111
|
+
describe "#to_redirect" do
|
112
|
+
it "requires the :url option" do
|
113
|
+
lambda { @stub.to_redirect }.should.raise(ArgumentError)
|
114
|
+
end
|
115
|
+
|
116
|
+
it "sets the Location header to the specified URL" do
|
117
|
+
@stub.to_redirect(url: "http://example.org/")
|
118
|
+
|
119
|
+
@stub.response_headers.should.include("Location")
|
120
|
+
end
|
121
|
+
|
122
|
+
it "sets the status code to 301" do
|
123
|
+
@stub.to_redirect(url: "http://example.org/")
|
124
|
+
|
125
|
+
@stub.response_status_code.should == 301
|
126
|
+
end
|
127
|
+
|
128
|
+
it "returns the stub" do
|
129
|
+
@stub.to_redirect(url: "http://example.org/").should == @stub
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
111
133
|
describe "#to_return" do
|
112
134
|
it "sets the response body" do
|
113
135
|
@stub.to_return(body: "hello")
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: webstub
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Green
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-06-
|
11
|
+
date: 2013-06-26 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Easily stub out HTTP responses in RubyMotion specs
|
14
14
|
email:
|