webstub 0.4.0 → 0.5.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.
- 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:
|