restfolia 1.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/.gitignore +8 -0
- data/.travis.yml +3 -0
- data/.yardopts +1 -0
- data/Gemfile +4 -0
- data/MIT-LICENSE +20 -0
- data/Rakefile +11 -0
- data/Readme.md +101 -0
- data/ReadmeDeveloper.md +30 -0
- data/lib/restfolia/entry_point.rb +156 -0
- data/lib/restfolia/exceptions.rb +109 -0
- data/lib/restfolia/http/behaviour.rb +164 -0
- data/lib/restfolia/http/configuration.rb +74 -0
- data/lib/restfolia/http/request.rb +54 -0
- data/lib/restfolia/http.rb +135 -0
- data/lib/restfolia/resource.rb +109 -0
- data/lib/restfolia/resource_creator.rb +97 -0
- data/lib/restfolia/version.rb +3 -0
- data/lib/restfolia.rb +97 -0
- data/restfolia.gemspec +28 -0
- data/samples/changing_behaviour.rb +32 -0
- data/samples/changing_links_parse.rb +38 -0
- data/samples/cookies_options.rb +23 -0
- data/samples/headers_options.rb +27 -0
- data/samples/http_behaviour.rb +52 -0
- data/samples/using_custom_factory.rb +25 -0
- data/samples/using_custom_resource.rb +25 -0
- data/test/restfolia/entry_point_test.rb +123 -0
- data/test/restfolia/http_behaviour_test.rb +86 -0
- data/test/restfolia/http_configuration_test.rb +45 -0
- data/test/restfolia/resource_creator_test.rb +54 -0
- data/test/restfolia/resource_test.rb +89 -0
- data/test/restfolia_test.rb +10 -0
- data/test/support/json_samples.rb +41 -0
- data/test/support/stub_helpers.rb +36 -0
- data/test/test_helper.rb +13 -0
- metadata +182 -0
@@ -0,0 +1,52 @@
|
|
1
|
+
|
2
|
+
# Run this sample from root project:
|
3
|
+
# $ ruby samples/http_behaviour.rb
|
4
|
+
|
5
|
+
require "rubygems"
|
6
|
+
$LOAD_PATH << "lib"
|
7
|
+
require "restfolia"
|
8
|
+
require "ostruct"
|
9
|
+
|
10
|
+
Restfolia::HTTP.behaviours do
|
11
|
+
|
12
|
+
on(200) do |http_response|
|
13
|
+
content_type = (http_response["content-type"] =~ /application\/json/)
|
14
|
+
if !content_type
|
15
|
+
msg_error = "Response \"content-type\" header should be \"application/json\""
|
16
|
+
raise Restfolia::ResponseError.new(msg_error, caller, http_response)
|
17
|
+
end
|
18
|
+
|
19
|
+
http_body = http_response.body.to_s
|
20
|
+
if !http_body.empty?
|
21
|
+
json_parsed = helpers.parse_json(http_response)
|
22
|
+
Restfolia.create_resource(json_parsed)
|
23
|
+
elsif (location = http_response["location"])
|
24
|
+
helpers.follow_url(location)
|
25
|
+
else
|
26
|
+
nil
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
# 3xx range
|
31
|
+
on(300...400) do
|
32
|
+
raise "3xx error"
|
33
|
+
end
|
34
|
+
|
35
|
+
#on([404, 402]) do
|
36
|
+
# custom_helper
|
37
|
+
#end
|
38
|
+
|
39
|
+
#helpers do
|
40
|
+
# def custom_helper
|
41
|
+
# 'lixo'
|
42
|
+
# end
|
43
|
+
#end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
SERVICE_URL = "http://localhost:9292/recursos/busca"
|
48
|
+
resource = Restfolia.at(SERVICE_URL).get
|
49
|
+
puts resource.inspect
|
50
|
+
|
51
|
+
Restfolia.at("http://google.com").get
|
52
|
+
# => "3xx error"
|
@@ -0,0 +1,25 @@
|
|
1
|
+
|
2
|
+
# Run this sample from root project:
|
3
|
+
# $ ruby samples/using_custom_factory.rb
|
4
|
+
|
5
|
+
require "rubygems"
|
6
|
+
$LOAD_PATH << "lib"
|
7
|
+
require "restfolia"
|
8
|
+
require "ostruct"
|
9
|
+
|
10
|
+
SERVICE_URL = "http://localhost:9292/recursos/busca"
|
11
|
+
|
12
|
+
resource = Restfolia.at(SERVICE_URL).get
|
13
|
+
puts resource.inspect # => #<Restfolia::Resource ...>
|
14
|
+
|
15
|
+
# Here you have the "pure" json from response body.
|
16
|
+
# You can do anything.
|
17
|
+
module Restfolia
|
18
|
+
def self.create_resource(json)
|
19
|
+
OpenStruct.new(json)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
resource = Restfolia.at(SERVICE_URL).get
|
23
|
+
puts resource.inspect # => #<OpenStruct ...>
|
24
|
+
|
25
|
+
puts "Done!"
|
@@ -0,0 +1,25 @@
|
|
1
|
+
|
2
|
+
# Run this sample from root project:
|
3
|
+
# $ ruby samples/using_custom_resource.rb
|
4
|
+
|
5
|
+
require "rubygems"
|
6
|
+
$LOAD_PATH << "lib"
|
7
|
+
require "restfolia"
|
8
|
+
require "ostruct"
|
9
|
+
|
10
|
+
SERVICE_URL = "http://localhost:9292/recursos/busca"
|
11
|
+
|
12
|
+
resource = Restfolia.at(SERVICE_URL).get
|
13
|
+
puts resource.inspect # => #<Restfolia::Resource ...>
|
14
|
+
|
15
|
+
# Here you have the advantage to use a custom resource
|
16
|
+
# and the same time you have the recursive lookup at hash
|
17
|
+
class Restfolia::ResourceCreator
|
18
|
+
def resource_class
|
19
|
+
OpenStruct
|
20
|
+
end
|
21
|
+
end
|
22
|
+
resource = Restfolia.at(SERVICE_URL).get
|
23
|
+
puts resource.inspect # => #<OpenStruct ...>
|
24
|
+
|
25
|
+
puts "Done!"
|
@@ -0,0 +1,123 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
describe Restfolia::EntryPoint do
|
4
|
+
|
5
|
+
include Restfolia::Test::JsonSamples
|
6
|
+
include Restfolia::Test::StubHelpers
|
7
|
+
|
8
|
+
subject { Restfolia::EntryPoint.new(Restfolia::Test::FAKE_URL) }
|
9
|
+
|
10
|
+
describe "#get" do
|
11
|
+
|
12
|
+
it "create Resource for valid request" do
|
13
|
+
stub_get_request(:status => 200, :body => valid_json)
|
14
|
+
|
15
|
+
resource = subject.get
|
16
|
+
resource.must_be_instance_of(Restfolia::Resource)
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should accept String params" do
|
20
|
+
stub_api = stub_get_request(:status => 200,
|
21
|
+
:body => valid_json,
|
22
|
+
:query => {:q => "stringtest",
|
23
|
+
:p1 => "test"})
|
24
|
+
subject.get("q=stringtest&p1=test")
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should accept Hash params" do
|
28
|
+
stub_api = stub_get_request(:status => 200,
|
29
|
+
:body => valid_json,
|
30
|
+
:query => {:q => "hashtest"})
|
31
|
+
subject.get(:q => "hashtest")
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should send Custom HTTP header" do
|
35
|
+
stub_api = stub_get_request(:status => 200,
|
36
|
+
:body => valid_json,
|
37
|
+
:query => {:q => "hashtest"},
|
38
|
+
:with_headers => {"X-Custom" => "test"})
|
39
|
+
|
40
|
+
subject.headers["X-Custom"] = "test"
|
41
|
+
subject.get(:q => "hashtest")
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
describe "#post" do
|
47
|
+
|
48
|
+
it "can post Hash params" do
|
49
|
+
headers = {"Content-Type" => "application/json"}
|
50
|
+
stub_method_request(:post,
|
51
|
+
:status => 201,
|
52
|
+
:body => "{\"attr_test\":\"test\"}",
|
53
|
+
:headers => headers)
|
54
|
+
|
55
|
+
subject.post(:attr_test => "test")
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should send Custom HTTP header" do
|
59
|
+
headers = {"Content-Type" => "application/json"}
|
60
|
+
stub_method_request(:post,
|
61
|
+
:status => 201,
|
62
|
+
:body => "{\"attr_test\":\"test\"}",
|
63
|
+
:headers => headers,
|
64
|
+
:with_headers => {"X-Custom" => "test"})
|
65
|
+
|
66
|
+
subject.headers["X-Custom"] = "test"
|
67
|
+
subject.post(:attr_test => "test")
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
describe "#put" do
|
73
|
+
|
74
|
+
it "can put Hash params" do
|
75
|
+
headers = {"Content-Type" => "application/json"}
|
76
|
+
stub_method_request(:put,
|
77
|
+
:status => 200,
|
78
|
+
:body => "{\"attr_test\":\"upd test\"}",
|
79
|
+
:headers => headers)
|
80
|
+
|
81
|
+
subject.put(:attr_test => "upd test")
|
82
|
+
end
|
83
|
+
|
84
|
+
it "should send Custom HTTP header" do
|
85
|
+
headers = {"Content-Type" => "application/json"}
|
86
|
+
stub_method_request(:put,
|
87
|
+
:status => 200,
|
88
|
+
:body => "{\"attr_test\":\"upd test\"}",
|
89
|
+
:headers => headers,
|
90
|
+
:with_headers => {"X-Custom" => "test"})
|
91
|
+
|
92
|
+
subject.headers["X-Custom"] = "test"
|
93
|
+
subject.put(:attr_test => "upd test")
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
describe "#delete" do
|
98
|
+
|
99
|
+
it "can send DELETE request" do
|
100
|
+
headers = {"Content-Type" => "application/json"}
|
101
|
+
stub_method_request(:delete,
|
102
|
+
:status => 204,
|
103
|
+
:body => nil,
|
104
|
+
:headers => headers)
|
105
|
+
|
106
|
+
subject.delete
|
107
|
+
end
|
108
|
+
|
109
|
+
it "should send Custom HTTP header" do
|
110
|
+
headers = {"Content-Type" => "application/json"}
|
111
|
+
stub_method_request(:delete,
|
112
|
+
:status => 204,
|
113
|
+
:body => nil,
|
114
|
+
:headers => headers,
|
115
|
+
:with_headers => {"X-Custom" => "test"})
|
116
|
+
|
117
|
+
subject.headers["X-Custom"] = "test"
|
118
|
+
subject.delete
|
119
|
+
end
|
120
|
+
|
121
|
+
end
|
122
|
+
|
123
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
describe Restfolia::HTTP::Behaviour do
|
4
|
+
|
5
|
+
describe "Store" do
|
6
|
+
subject { Restfolia::HTTP::Behaviour::Store.new }
|
7
|
+
|
8
|
+
describe "#execute" do
|
9
|
+
before do
|
10
|
+
@http_mock = MiniTest::Mock.new
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should execute block for Integer code match" do
|
14
|
+
@http_mock.expect(:code, "200")
|
15
|
+
subject.on(200) { 'test' }
|
16
|
+
|
17
|
+
return_value = subject.execute(@http_mock)
|
18
|
+
return_value.must_equal('test')
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should execute block for Range code match" do
|
22
|
+
@http_mock.expect(:code, "300")
|
23
|
+
subject.on(300...400) { 'test' }
|
24
|
+
|
25
|
+
return_value = subject.execute(@http_mock)
|
26
|
+
return_value.must_equal('test')
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should execute block for Array code match" do
|
30
|
+
@http_mock.expect(:code, "404")
|
31
|
+
subject.on([404, 403]) { 'test' }
|
32
|
+
|
33
|
+
return_value = subject.execute(@http_mock)
|
34
|
+
return_value.must_equal('test')
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should call #default_behaviour for non match code" do
|
38
|
+
@http_mock.expect(:code, "666")
|
39
|
+
lambda { subject.execute(@http_mock) }.
|
40
|
+
must_raise(Restfolia::ResponseError)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe "#behaviours" do
|
45
|
+
it "should be possible to call 'on' method" do
|
46
|
+
subject.behaviours do
|
47
|
+
on(200) { 'test' }
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
it "#helpers" do
|
53
|
+
subject.must_respond_to(:helpers)
|
54
|
+
subject.helpers.must_be_instance_of(Restfolia::HTTP::Behaviour::Helpers)
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
describe "Helpers" do
|
60
|
+
|
61
|
+
subject { Restfolia::HTTP::Behaviour::Helpers.new }
|
62
|
+
|
63
|
+
before do
|
64
|
+
@http_mock = MiniTest::Mock.new
|
65
|
+
end
|
66
|
+
|
67
|
+
describe "#parse_json" do
|
68
|
+
it "should returns parsed json" do
|
69
|
+
json_sample = '{"test":"ok"}'
|
70
|
+
@http_mock.expect(:body, json_sample)
|
71
|
+
json = subject.parse_json(@http_mock)
|
72
|
+
|
73
|
+
json.must_be_instance_of(Hash)
|
74
|
+
json[:test].must_equal("ok")
|
75
|
+
end
|
76
|
+
it "should raise error for invalid body" do
|
77
|
+
@http_mock.expect(:body, "<html><body>error</body></html>")
|
78
|
+
lambda do
|
79
|
+
subject.parse_json(@http_mock)
|
80
|
+
end.must_raise(Restfolia::ResponseError)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
describe Restfolia::HTTP::Configuration do
|
4
|
+
|
5
|
+
class TestConfiguration; include Restfolia::HTTP::Configuration; end
|
6
|
+
|
7
|
+
before do
|
8
|
+
@object = TestConfiguration.new
|
9
|
+
@expected_headers = {"Content-Type" => "application/json"}
|
10
|
+
end
|
11
|
+
|
12
|
+
it "#headers" do
|
13
|
+
@object.headers["Content-Type"] = "application/json"
|
14
|
+
@object.headers.must_equal(@expected_headers)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "#with_headers" do
|
18
|
+
return_value = @object.with_headers("Content-Type" => "application/json")
|
19
|
+
|
20
|
+
@object.must_be_same_as(return_value)
|
21
|
+
@object.headers.must_equal(@expected_headers)
|
22
|
+
end
|
23
|
+
|
24
|
+
it "#as" do
|
25
|
+
expected_headers = {"Content-Type" => "application/json",
|
26
|
+
"Accept" => "application/json"}
|
27
|
+
return_value = @object.as("application/json")
|
28
|
+
|
29
|
+
@object.must_be_same_as(return_value)
|
30
|
+
@object.headers.must_equal(expected_headers)
|
31
|
+
end
|
32
|
+
|
33
|
+
it "#cookies" do
|
34
|
+
@object.must_respond_to(:cookies)
|
35
|
+
end
|
36
|
+
|
37
|
+
it "#set_cookies" do
|
38
|
+
expected_cookies = "key=value;"
|
39
|
+
return_value = @object.set_cookies(expected_cookies)
|
40
|
+
|
41
|
+
@object.must_be_same_as(return_value)
|
42
|
+
@object.cookies.must_equal(expected_cookies)
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
require "ostruct"
|
3
|
+
|
4
|
+
describe Restfolia::ResourceCreator do
|
5
|
+
|
6
|
+
let(:subject) do
|
7
|
+
creator = Restfolia::ResourceCreator.new
|
8
|
+
def creator.resource_class
|
9
|
+
OpenStruct
|
10
|
+
end
|
11
|
+
creator
|
12
|
+
end
|
13
|
+
|
14
|
+
describe ".create" do
|
15
|
+
|
16
|
+
it "accept only hash object as parameter" do
|
17
|
+
lambda { subject.create(nil) }.must_raise(ArgumentError)
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should create Resource for simple hash" do
|
21
|
+
resource = subject.create(:attr_test => "test")
|
22
|
+
resource.must_be_instance_of(OpenStruct)
|
23
|
+
end
|
24
|
+
|
25
|
+
it "transforms nested hash in Resource" do
|
26
|
+
resource = subject.create(:attr_test => {:nested => "nested"})
|
27
|
+
resource.attr_test.must_be_instance_of(OpenStruct)
|
28
|
+
resource.attr_test.nested.must_equal("nested")
|
29
|
+
end
|
30
|
+
|
31
|
+
it "transforms nested hash from Arrays in Resource" do
|
32
|
+
resource = subject.create(:attr_test => [{:nested_array => "object"}],
|
33
|
+
:attr_test2 => ["not object"])
|
34
|
+
|
35
|
+
resource.attr_test.must_be_instance_of(Array)
|
36
|
+
resource.attr_test[0].must_be_instance_of(OpenStruct)
|
37
|
+
resource.attr_test[0].nested_array.must_equal("object")
|
38
|
+
|
39
|
+
resource.attr_test2[0].must_be_instance_of(String)
|
40
|
+
resource.attr_test2[0].must_equal("not object")
|
41
|
+
end
|
42
|
+
|
43
|
+
it "transforms nested hash from nested Array from Array in Resource" do
|
44
|
+
resource = subject.create(:attr_test => [[{:nested => "nested2"}]])
|
45
|
+
|
46
|
+
resource.attr_test.must_be_instance_of(Array)
|
47
|
+
resource.attr_test[0].must_be_instance_of(Array)
|
48
|
+
resource.attr_test[0][0].must_be_instance_of(OpenStruct)
|
49
|
+
resource.attr_test[0][0].nested.must_equal("nested2")
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
describe Restfolia::Resource do
|
4
|
+
|
5
|
+
let(:subject) { Restfolia::Resource }
|
6
|
+
|
7
|
+
describe "#initialize" do
|
8
|
+
|
9
|
+
it "accept only hash object as parameter" do
|
10
|
+
lambda { subject.new(nil) }.must_raise(ArgumentError)
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "#initialize - look_for_resource" do
|
16
|
+
|
17
|
+
it "transforms hash keys in attributes" do
|
18
|
+
resource = subject.new(:attr_test => "test")
|
19
|
+
|
20
|
+
resource.must_respond_to(:attr_test)
|
21
|
+
resource.attr_test.must_equal("test")
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
describe "#links" do
|
27
|
+
|
28
|
+
let(:hash_link) do
|
29
|
+
{:href => "http://service.com", :rel => "rel", :type => "type"}
|
30
|
+
end
|
31
|
+
|
32
|
+
let(:array_links) do
|
33
|
+
link2 = hash_link
|
34
|
+
link2[:rel] = "rel2"
|
35
|
+
|
36
|
+
[hash_link, link2]
|
37
|
+
end
|
38
|
+
|
39
|
+
it "returns empty Array for no links" do
|
40
|
+
resource = subject.new(:attr_test => "test")
|
41
|
+
resource.links.must_be_empty
|
42
|
+
end
|
43
|
+
|
44
|
+
it "returns Array for one link" do
|
45
|
+
resource = subject.new(:links => hash_link)
|
46
|
+
resource.links.must_be_instance_of(Array)
|
47
|
+
resource.links[0].must_be_instance_of(Restfolia::EntryPoint)
|
48
|
+
end
|
49
|
+
|
50
|
+
it "returns Array for many links" do
|
51
|
+
resource = subject.new(:links => array_links)
|
52
|
+
resource.links.must_be_instance_of(Array)
|
53
|
+
resource.links[0].must_be_instance_of(Restfolia::EntryPoint)
|
54
|
+
resource.links.size.must_equal(2)
|
55
|
+
end
|
56
|
+
|
57
|
+
it "understand 'link' node too" do
|
58
|
+
resource = subject.new(:link => array_links)
|
59
|
+
resource.links.must_be_instance_of(Array)
|
60
|
+
resource.links[0].must_be_instance_of(Restfolia::EntryPoint)
|
61
|
+
end
|
62
|
+
|
63
|
+
it "raises Error for invalid link" do
|
64
|
+
resource = subject.new(:links => {:invalid => "invalid"})
|
65
|
+
lambda { resource.links }.must_raise(RuntimeError)
|
66
|
+
end
|
67
|
+
|
68
|
+
describe "rel search" do
|
69
|
+
|
70
|
+
it "returns nil for rel not found (without link)" do
|
71
|
+
resource = subject.new(:attr_test => "test")
|
72
|
+
resource.links("notexist").must_be_nil
|
73
|
+
end
|
74
|
+
|
75
|
+
it "returns nil for rel not found (with links)" do
|
76
|
+
resource = subject.new(:links => array_links)
|
77
|
+
resource.links("notexist").must_be_nil
|
78
|
+
end
|
79
|
+
|
80
|
+
it "returns EntryPoint for rel found" do
|
81
|
+
resource = subject.new(:links => array_links)
|
82
|
+
resource.links("rel2").must_be_instance_of(Restfolia::EntryPoint)
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Restfolia::Test
|
2
|
+
|
3
|
+
FAKE_URL = "http://fakeurl.com"
|
4
|
+
FAKE_LOCATION_URL = "http://fakeurl.com/resource/666"
|
5
|
+
|
6
|
+
module JsonSamples
|
7
|
+
|
8
|
+
|
9
|
+
def valid_json
|
10
|
+
json_body = <<json_body
|
11
|
+
{ "itens_por_pagina" : 10,
|
12
|
+
"links" : { "href" : "http://localhost:9292/recursos/busca",
|
13
|
+
"rel" : "self",
|
14
|
+
"type" : "application/json"
|
15
|
+
},
|
16
|
+
"paginal_atual" : 1,
|
17
|
+
"paginas_totais" : 1,
|
18
|
+
"query" : "",
|
19
|
+
"resultado" : [ { "id" : 1,
|
20
|
+
"links" : [ { "href" : "http://localhost:9292/recursos/id/1",
|
21
|
+
"rel" : "recurso",
|
22
|
+
"type" : "application/json"
|
23
|
+
} ],
|
24
|
+
"name" : "Test1"
|
25
|
+
},
|
26
|
+
{ "id" : 2,
|
27
|
+
"links" : [ { "href" : "http://localhost:9292/recursos/id/2",
|
28
|
+
"rel" : "recurso",
|
29
|
+
"type" : "application/json"
|
30
|
+
} ],
|
31
|
+
"name" : "Test2"
|
32
|
+
}
|
33
|
+
],
|
34
|
+
"total_resultado" : 100
|
35
|
+
}
|
36
|
+
json_body
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Restfolia::Test
|
2
|
+
module StubHelpers
|
3
|
+
|
4
|
+
def stub_get_request(args = {})
|
5
|
+
status = args[:status]
|
6
|
+
body = args[:body]
|
7
|
+
query = args[:query]
|
8
|
+
headers = args[:headers] || {}
|
9
|
+
headers["Content-Type"] = "application/json"
|
10
|
+
with_headers = args[:with_headers]
|
11
|
+
|
12
|
+
stub = stub_request(:get, Restfolia::Test::FAKE_URL)
|
13
|
+
stub.with(:query => query) unless query.nil?
|
14
|
+
stub.with(:headers => with_headers) unless with_headers.nil?
|
15
|
+
|
16
|
+
stub.to_return(:body => body,
|
17
|
+
:status => status,
|
18
|
+
:headers => headers)
|
19
|
+
end
|
20
|
+
|
21
|
+
def stub_method_request(method, args = {})
|
22
|
+
status = args[:status]
|
23
|
+
body = args[:body]
|
24
|
+
headers = args[:headers]
|
25
|
+
with_headers = args[:with_headers] || {'Accept'=>'*/*'}
|
26
|
+
|
27
|
+
stub_request(method, Restfolia::Test::FAKE_URL).
|
28
|
+
with(:body => body,
|
29
|
+
:headers => with_headers).
|
30
|
+
to_return(:status => status,
|
31
|
+
:body => "",
|
32
|
+
:headers => headers)
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require "restfolia"
|
2
|
+
|
3
|
+
require "minitest/autorun"
|
4
|
+
require "minitest/reporters"
|
5
|
+
require "webmock/minitest"
|
6
|
+
|
7
|
+
require "support/json_samples"
|
8
|
+
require "support/stub_helpers"
|
9
|
+
|
10
|
+
WebMock.disable_net_connect!
|
11
|
+
|
12
|
+
MiniTest::Unit.runner = MiniTest::SuiteRunner.new
|
13
|
+
MiniTest::Unit.runner.reporters << MiniTest::Reporters::SpecReporter.new
|