Continue internal shuffling...

This commit is contained in:
Steven Bazyl committed 2012-10-10 14:28:45 -06:00
1 parent f9c1ab67ba
commit fc45135fcd
13 files changed
+503 -385

No files matched your search

+1 -1
View File
@@ -226,7 +226,7 @@ describe Google::APIClient::BatchRequest do
it 'should convert to a correct HTTP request' do
batch = Google::APIClient::BatchRequest.new { |result| }
batch.add(@call1, '1').add(@call2, '2')
request = batch.to_http_request.to_env(Faraday.default_connection)
request = batch.to_env(Faraday.default_connection)
boundary = Google::APIClient::BatchRequest::BATCH_BOUNDARY
request[:method].to_s.downcase.should == 'post'
request[:url].to_s.should == 'https://www.googleapis.com/batch'
+200 -105
View File
@@ -25,7 +25,24 @@ require 'signet/oauth_1/client'
require 'google/api_client'
require 'google/api_client/version'
def TestHandler
def initialize(&block)
@block = block
end
def call(env)
@block.call(env)
end
end
def mock_connection(&block)
connection = Faraday.new do |builder|
use TestHandler block
end
end
describe Google::APIClient do
include ConnectionHelpers
CLIENT = Google::APIClient.new unless defined?(CLIENT)
after do
@@ -63,7 +80,7 @@ describe Google::APIClient do
it 'should raise an error for bogus methods' do
(lambda do
CLIENT.generate_request(42)
CLIENT.execute(42)
end).should raise_error(TypeError)
end
@@ -86,44 +103,49 @@ describe Google::APIClient do
it 'should correctly determine the discovery URI if :user_ip is set' do
CLIENT.user_ip = '127.0.0.1'
request = CLIENT.generate_request(
conn = stub_connection do |stub|
stub.get('/discovery/v1/apis/prediction/v1.2/rest?userIp=127.0.0.1') do |env|
end
end
CLIENT.execute(
:http_method => 'GET',
:uri => CLIENT.discovery_uri('prediction', 'v1.2'),
:authenticated => false
)
request.to_http_request.to_env(Faraday.default_connection)[:url].to_s.should === (
'https://www.googleapis.com/discovery/v1/apis/prediction/v1.2/rest' +
'?userIp=127.0.0.1'
:authenticated => false,
:connection => conn
)
conn.verify
end
it 'should correctly determine the discovery URI if :key is set' do
CLIENT.key = 'qwerty'
request = CLIENT.generate_request(
conn = stub_connection do |stub|
stub.get('/discovery/v1/apis/prediction/v1.2/rest?key=qwerty') do |env|
end
end
request = CLIENT.execute(
:http_method => 'GET',
:uri => CLIENT.discovery_uri('prediction', 'v1.2'),
:authenticated => false
)
request.to_http_request.to_env(Faraday.default_connection)[:url].to_s.should === (
'https://www.googleapis.com/discovery/v1/apis/prediction/v1.2/rest' +
'?key=qwerty'
)
:authenticated => false,
:connection => conn
)
conn.verify
end
it 'should correctly determine the discovery URI if both are set' do
CLIENT.key = 'qwerty'
CLIENT.user_ip = '127.0.0.1'
request = CLIENT.generate_request(
conn = stub_connection do |stub|
stub.get('/discovery/v1/apis/prediction/v1.2/rest?key=qwerty&userIp=127.0.0.1') do |env|
end
end
request = CLIENT.execute(
:http_method => 'GET',
:uri => CLIENT.discovery_uri('prediction', 'v1.2'),
:authenticated => false
)
Addressable::URI.parse(
request.to_http_request.to_env(Faraday.default_connection)[:url]
).query_values.should == {
'key' => 'qwerty',
'userIp' => '127.0.0.1'
}
:authenticated => false,
:connection => conn
)
conn.verify
end
it 'should correctly generate API objects' do
@@ -165,7 +187,7 @@ describe Google::APIClient do
it 'should raise an error for bogus methods' do
(lambda do
CLIENT.generate_request(CLIENT.discovered_api('prediction', 'v1.2'))
CLIENT.execute(:api_method => CLIENT.discovered_api('prediction', 'v1.2'))
end).should raise_error(TypeError)
end
@@ -179,44 +201,58 @@ describe Google::APIClient do
end
it 'should generate valid requests' do
request = CLIENT.generate_request(
conn = stub_connection do |stub|
stub.post('/prediction/v1.2/training?data=12345') do |env|
env[:body].should == ''
end
end
request = CLIENT.execute(
:api_method => @prediction.training.insert,
:parameters => {'data' => '12345'}
:parameters => {'data' => '12345'},
:connection => conn
)
request.to_http_request.method.should == :post
request.to_http_request.to_env(Faraday.default_connection)[:url].to_s.should ===
'https://www.googleapis.com/prediction/v1.2/training?data=12345'
request.headers.should be_empty
request.body.should == ''
conn.verify
end
it 'should generate valid requests when repeated parameters are passed' do
pending("This is caused by Faraday's encoding of query parameters.")
request = CLIENT.generate_request(
conn = stub_connection do |stub|
stub.post('/prediction/v1.2/training?data=1&data=2') do |env|
env[:params]['data'].should include('1', '2')
end
end
request = CLIENT.execute(
:api_method => @prediction.training.insert,
:parameters => [['data', '1'], ['data','2']]
:parameters => [['data', '1'], ['data','2']],
:connection => conn
)
request.to_http_request.method.should == :post
request.to_http_request.to_env(Faraday.default_connection)[:url].to_s.should ===
'https://www.googleapis.com/prediction/v1.2/training?data=1&data=2'
conn.verify
end
it 'should generate requests against the correct URIs' do
request = CLIENT.generate_request(
conn = stub_connection do |stub|
stub.post('/prediction/v1.2/training?data=12345') do |env|
end
end
request = CLIENT.execute(
:api_method => @prediction.training.insert,
:parameters => {'data' => '12345'}
:parameters => {'data' => '12345'},
:connection => conn
)
request.to_http_request.to_env(Faraday.default_connection)[:url].to_s.should ===
'https://www.googleapis.com/prediction/v1.2/training?data=12345'
conn.verify
end
it 'should generate requests against the correct URIs' do
request = CLIENT.generate_request(
conn = stub_connection do |stub|
stub.post('/prediction/v1.2/training?data=12345') do |env|
end
end
request = CLIENT.execute(
:api_method => @prediction.training.insert,
:parameters => {'data' => '12345'}
:parameters => {'data' => '12345'},
:connection => conn
)
request.to_http_request.to_env(Faraday.default_connection)[:url].to_s.should ===
'https://www.googleapis.com/prediction/v1.2/training?data=12345'
conn.verify
end
it 'should allow modification to the base URIs for testing purposes' do
@@ -225,39 +261,58 @@ describe Google::APIClient do
Google::APIClient.new.discovered_api('prediction', 'v1.2')
prediction_rebase.method_base =
'https://testing-domain.example.com/prediction/v1.2/'
request = CLIENT.generate_request(
conn = stub_connection do |stub|
stub.post('/prediction/v1.2/training') do |env|
env[:url].host.should == 'testing-domain.example.com'
end
end
request = CLIENT.execute(
:api_method => prediction_rebase.training.insert,
:parameters => {'data' => '123'}
)
request.to_http_request.to_env(Faraday.default_connection)[:url].to_s.should === (
'https://testing-domain.example.com/' +
'prediction/v1.2/training?data=123'
:parameters => {'data' => '123'},
:connection => conn
)
conn.verify
end
it 'should generate OAuth 1 requests' do
CLIENT.authorization = :oauth_1
CLIENT.authorization.token_credential_key = '12345'
CLIENT.authorization.token_credential_secret = '12345'
request = CLIENT.generate_request(
conn = stub_connection do |stub|
stub.post('/prediction/v1.2/training?data=12345') do |env|
env[:request_headers].should have_key('Authorization')
env[:request_headers]['Authorization'].should =~ /^OAuth/
end
end
request = CLIENT.execute(
:api_method => @prediction.training.insert,
:parameters => {'data' => '12345'}
:parameters => {'data' => '12345'},
:connection => conn
)
http_request = request.to_http_request
http_request.headers.should have_key('Authorization')
http_request.headers['Authorization'].should =~ /^OAuth/
conn.verify
end
it 'should generate OAuth 2 requests' do
CLIENT.authorization = :oauth_2
CLIENT.authorization.access_token = '12345'
request = CLIENT.generate_request(
conn = stub_connection do |stub|
stub.post('/prediction/v1.2/training?data=12345') do |env|
env[:request_headers].should have_key('Authorization')
env[:request_headers]['Authorization'].should =~ /^Bearer/
end
end
request = CLIENT.execute(
:api_method => @prediction.training.insert,
:parameters => {'data' => '12345'}
:parameters => {'data' => '12345'},
:connection => conn
)
http_request = request.to_http_request
http_request.headers.should have_key('Authorization')
http_request.headers['Authorization'].should =~ /^Bearer/
conn.verify
end
it 'should not be able to execute improperly authorized requests' do
@@ -305,15 +360,21 @@ describe Google::APIClient do
end
it 'should correctly handle unnamed parameters' do
conn = stub_connection do |stub|
stub.post('/prediction/v1.2/training') do |env|
env[:request_headers].should have_key('Content-Type')
env[:request_headers]['Content-Type'].should == 'application/json'
end
end
CLIENT.authorization = :oauth_2
CLIENT.authorization.access_token = '12345'
result = CLIENT.execute(
@prediction.training.insert,
{},
MultiJson.dump({"id" => "bucket/object"}),
{'Content-Type' => 'application/json'}
CLIENT.execute(
:api_method => @prediction.training.insert,
:body => MultiJson.dump({"id" => "bucket/object"}),
:headers => {'Content-Type' => 'application/json'},
:connection => conn
)
result.reference.to_http_request.headers['Content-Type'].should == 'application/json'
conn.verify
end
end
@@ -353,38 +414,42 @@ describe Google::APIClient do
end
it 'should generate requests against the correct URIs' do
request = CLIENT.generate_request(
conn = stub_connection do |stub|
stub.get('/plus/v1/people/107807692475771887386/activities/public' +
'?collection=public&userId=107807692475771887386') do |env|
end
end
request = CLIENT.execute(
:api_method => @plus.activities.list,
:parameters => {
'userId' => '107807692475771887386', 'collection' => 'public'
},
:authenticated => false
)
request.to_http_request.to_env(Faraday.default_connection)[:url].to_s.should === (
'https://www.googleapis.com/plus/v1/' +
'people/107807692475771887386/activities/public'
:authenticated => false,
:connection => conn
)
conn.verify
end
it 'should correctly validate parameters' do
(lambda do
CLIENT.generate_request(
CLIENT.execute(
:api_method => @plus.activities.list,
:parameters => {'alt' => 'json'},
:authenticated => false
).to_http_request
)
end).should raise_error(ArgumentError)
end
it 'should correctly validate parameters' do
(lambda do
CLIENT.generate_request(
CLIENT.execute(
:api_method => @plus.activities.list,
:parameters => {
'userId' => '107807692475771887386', 'collection' => 'bogus'
},
:authenticated => false
).to_http_request
).to_env(Faraday.default_connection)
end).should raise_error(ArgumentError)
end
end
@@ -431,7 +496,7 @@ describe Google::APIClient do
:api_method => 'latitude.currentLocation.get',
:authenticated => false
)
request.to_http_request.to_env(Faraday.default_connection)[:url].to_s.should ===
request.to_env(Faraday.default_connection)[:url].to_s.should ===
'https://www.googleapis.com/latitude/v1/currentLocation'
end
@@ -440,7 +505,7 @@ describe Google::APIClient do
:api_method => @latitude.current_location.get,
:authenticated => false
)
request.to_http_request.to_env(Faraday.default_connection)[:url].to_s.should ===
request.to_env(Faraday.default_connection)[:url].to_s.should ===
'https://www.googleapis.com/latitude/v1/currentLocation'
end
@@ -491,21 +556,29 @@ describe Google::APIClient do
end
it 'should generate requests against the correct URIs' do
request = CLIENT.generate_request(
conn = stub_connection do |stub|
stub.get('/moderator/v1/profiles/@me') do |env|
end
end
request = CLIENT.execute(
:api_method => 'moderator.profiles.get',
:authenticated => false
:authenticated => false,
:connection => conn
)
request.to_http_request.to_env(Faraday.default_connection)[:url].to_s.should ===
'https://www.googleapis.com/moderator/v1/profiles/@me'
conn.verify
end
it 'should generate requests against the correct URIs' do
request = CLIENT.generate_request(
conn = stub_connection do |stub|
stub.get('/moderator/v1/profiles/@me') do |env|
end
end
request = CLIENT.execute(
:api_method => @moderator.profiles.get,
:authenticated => false
:authenticated => false,
:connection => conn
)
request.to_http_request.to_env(Faraday.default_connection)[:url].to_s.should ===
'https://www.googleapis.com/moderator/v1/profiles/@me'
conn.verify
end
it 'should not be able to execute requests without authorization' do
@@ -551,21 +624,29 @@ describe Google::APIClient do
end
it 'should generate requests against the correct URIs' do
request = CLIENT.generate_request(
conn = stub_connection do |stub|
stub.get('/adsense/v1/adclients') do |env|
end
end
request = CLIENT.execute(
:api_method => 'adsense.adclients.list',
:authenticated => false
:authenticated => false,
:connection => conn
)
request.to_http_request.to_env(Faraday.default_connection)[:url].to_s.should ===
'https://www.googleapis.com/adsense/v1/adclients'
conn.verify
end
it 'should generate requests against the correct URIs' do
request = CLIENT.generate_request(
conn = stub_connection do |stub|
stub.get('/adsense/v1/adclients') do |env|
end
end
request = CLIENT.execute(
:api_method => @adsense.adclients.list,
:authenticated => false
:authenticated => false,
:connection => conn
)
request.to_http_request.to_env(Faraday.default_connection)[:url].to_s.should ===
'https://www.googleapis.com/adsense/v1/adclients'
conn.verify
end
it 'should not be able to execute requests without authorization' do
@@ -578,16 +659,20 @@ describe Google::APIClient do
it 'should fail when validating missing required parameters' do
(lambda do
CLIENT.generate_request(
CLIENT.execute(
:api_method => @adsense.reports.generate,
:authenticated => false
).to_http_request
)
end).should raise_error(ArgumentError)
end
it 'should succeed when validating parameters in a correct call' do
conn = stub_connection do |stub|
stub.get('/adsense/v1/reports?dimension=DATE&endDate=2010-01-01&metric=PAGE_VIEWS&startDate=2000-01-01') do |env|
end
end
(lambda do
CLIENT.generate_request(
CLIENT.execute(
:api_method => @adsense.reports.generate,
:parameters => {
'startDate' => '2000-01-01',
@@ -595,14 +680,16 @@ describe Google::APIClient do
'dimension' => 'DATE',
'metric' => 'PAGE_VIEWS'
},
:authenticated => false
).to_http_request
:authenticated => false,
:connection => conn
)
end).should_not raise_error
conn.verify
end
it 'should fail when validating parameters with invalid values' do
(lambda do
CLIENT.generate_request(
CLIENT.execute(
:api_method => @adsense.reports.generate,
:parameters => {
'startDate' => '2000-01-01',
@@ -611,13 +698,19 @@ describe Google::APIClient do
'metric' => 'PAGE_VIEWS'
},
:authenticated => false
).to_http_request
)
end).should raise_error(ArgumentError)
end
it 'should succeed when validating repeated parameters in a correct call' do
conn = stub_connection do |stub|
stub.get('/adsense/v1/reports?dimension%5B%5D=DATE&dimension%5B%5D=PRODUCT_CODE'+
'&endDate=2010-01-01&metric%5B%5D=CLICKS&metric%5B%5D=PAGE_VIEWS&'+
'startDate=2000-01-01') do |env|
end
end
(lambda do
CLIENT.generate_request(
CLIENT.execute(
:api_method => @adsense.reports.generate,
:parameters => {
'startDate' => '2000-01-01',
@@ -625,14 +718,16 @@ describe Google::APIClient do
'dimension' => ['DATE', 'PRODUCT_CODE'],
'metric' => ['PAGE_VIEWS', 'CLICKS']
},
:authenticated => false
:authenticated => false,
:connection => conn
)
end).should_not raise_error
conn.verify
end
it 'should fail when validating incorrect repeated parameters' do
(lambda do
CLIENT.generate_request(
CLIENT.execute(
:api_method => @adsense.reports.generate,
:parameters => {
'startDate' => '2000-01-01',
@@ -641,7 +736,7 @@ describe Google::APIClient do
'metric' => ['PAGE_VIEWS', 'CLICKS']
},
:authenticated => false
).to_http_request
)
end).should raise_error(ArgumentError)
end
end
+18 -18
View File
@@ -78,49 +78,49 @@ describe Google::APIClient::ResumableUpload do
it 'should consider 20x status as complete' do
request = @uploader.to_http_request
@uploader.process_response(mock_result(200))
@uploader.process_http_response(mock_result(200))
@uploader.complete?.should == true
end
it 'should consider 30x status as incomplete' do
request = @uploader.to_http_request
@uploader.process_response(mock_result(308))
@uploader.process_http_response(mock_result(308))
@uploader.complete?.should == false
@uploader.expired?.should == false
end
it 'should consider 40x status as fatal' do
request = @uploader.to_http_request
@uploader.process_response(mock_result(404))
@uploader.process_http_response(mock_result(404))
@uploader.expired?.should == true
end
it 'should detect changes to location' do
request = @uploader.to_http_request
@uploader.process_response(mock_result(308, 'location' => 'https://www.googleapis.com/upload/drive/v1/files/abcdef'))
@uploader.process_http_response(mock_result(308, 'location' => 'https://www.googleapis.com/upload/drive/v1/files/abcdef'))
@uploader.uri.to_s.should == 'https://www.googleapis.com/upload/drive/v1/files/abcdef'
end
it 'should resume from the saved range reported by the server' do
@uploader.chunk_size = 200
request = @uploader.to_http_request # Send bytes 0-199, only 0-99 saved
@uploader.process_response(mock_result(308, 'range' => '0-99'))
request = @uploader.to_http_request # Send bytes 100-299
request.headers['Content-Range'].should == "bytes 100-299/#{@media.length}"
request.headers['Content-length'].should == "200"
@uploader.to_http_request # Send bytes 0-199, only 0-99 saved
@uploader.process_http_response(mock_result(308, 'range' => '0-99'))
method, url, headers, body = @uploader.to_http_request # Send bytes 100-299
headers['Content-Range'].should == "bytes 100-299/#{@media.length}"
headers['Content-length'].should == "200"
end
it 'should resync the offset after 5xx errors' do
@uploader.chunk_size = 200
request = @uploader.to_http_request
@uploader.process_response(mock_result(500)) # Invalidates range
request = @uploader.to_http_request # Resync
request.headers['Content-Range'].should == "bytes */#{@media.length}"
request.headers['Content-length'].should == "0"
@uploader.process_response(mock_result(308, 'range' => '0-99'))
request = @uploader.to_http_request # Send next chunk at correct range
request.headers['Content-Range'].should == "bytes 100-299/#{@media.length}"
request.headers['Content-length'].should == "200"
@uploader.to_http_request
@uploader.process_http_response(mock_result(500)) # Invalidates range
method, url, headers, body = @uploader.to_http_request # Resync
headers['Content-Range'].should == "bytes */#{@media.length}"
headers['Content-length'].should == "0"
@uploader.process_http_response(mock_result(308, 'range' => '0-99'))
method, url, headers, body = @uploader.to_http_request # Send next chunk at correct range
headers['Content-Range'].should == "bytes 100-299/#{@media.length}"
headers['Content-length'].should == "200"
end
def mock_result(status, headers = {})
+1 -1
View File
@@ -82,7 +82,7 @@ describe Google::APIClient::Result do
reference = @result.next_page
Hash[reference.parameters].should include('pageToken')
Hash[reference.parameters]['pageToken'].should == 'NEXT+PAGE+TOKEN'
url = reference.to_http_request.to_env(Faraday.default_connection)[:url]
url = reference.to_env(Faraday.default_connection)[:url]
url.to_s.should include('pageToken=NEXT%2BPAGE%2BTOKEN')
end
@@ -17,6 +17,7 @@ require 'spec_helper'
require 'google/api_client'
describe Google::APIClient::JWTAsserter do
include ConnectionHelpers
before do
@key = OpenSSL::PKey::RSA.new 2048
@@ -33,7 +34,7 @@ describe Google::APIClient::JWTAsserter do
end
it 'should send valid access token request' do
stubs = Faraday::Adapter::Test::Stubs.new do |stub|
conn = stub_connection do |stub|
stub.post('/o/oauth2/token') do |env|
params = Addressable::URI.form_unencode(env[:body])
JWT.decode(params.assoc("assertion").last, @key.public_key)
@@ -45,14 +46,11 @@ describe Google::APIClient::JWTAsserter do
}']
end
end
connection = Faraday.new(:url => 'https://accounts.google.com') do |builder|
builder.adapter(:test, stubs)
end
asserter = Google::APIClient::JWTAsserter.new('client1', 'scope1 scope2', @key)
auth = asserter.authorize(nil, { :connection => connection})
auth = asserter.authorize(nil, { :connection => conn })
auth.should_not == nil?
auth.access_token.should == "1/abcdef1234567890"
conn.verify
end
end
+21 -20
View File
@@ -21,6 +21,8 @@ require 'google/api_client'
require 'google/api_client/version'
shared_examples_for 'configurable user agent' do
include ConnectionHelpers
it 'should allow the user agent to be modified' do
client.user_agent = 'Custom User Agent/1.2.3'
client.user_agent.should == 'Custom User Agent/1.2.3'
@@ -34,16 +36,14 @@ shared_examples_for 'configurable user agent' do
it 'should not allow the user agent to be used with bogus values' do
(lambda do
client.user_agent = 42
client.transmit(
['GET', 'http://www.google.com/', [], []]
)
client.execute(:uri=>'http://www.google.com/')
end).should raise_error(TypeError)
end
it 'should transmit a User-Agent header when sending requests' do
client.user_agent = 'Custom User Agent/1.2.3'
stubs = Faraday::Adapter::Test::Stubs.new do |stub|
conn = stub_connection do |stub|
stub.get('/') do |env|
headers = env[:request_headers]
headers.should have_key('User-Agent')
@@ -51,18 +51,14 @@ shared_examples_for 'configurable user agent' do
[200, {}, ['']]
end
end
connection = Faraday.new(:url => 'https://www.google.com') do |builder|
builder.adapter(:test, stubs)
end
request = connection.build_request(:get) do |req|
req.url('http://www.google.com/')
end
client.transmit(:request => request, :connection => connection)
stubs.verify_stubbed_calls
client.execute(:uri=>'http://www.google.com/', :connection => conn)
conn.verify
end
end
describe Google::APIClient do
include ConnectionHelpers
let(:client) { Google::APIClient.new }
it 'should make its version number available' do
@@ -73,11 +69,18 @@ describe Google::APIClient do
Signet::OAuth2::Client.should === client.authorization
end
it_should_behave_like 'configurable user agent'
describe 'configure for no authentication' do
before do
client.authorization = nil
end
it_should_behave_like 'configurable user agent'
end
describe 'configured for OAuth 1' do
before do
client.authorization = :oauth_1
client.authorization.token_credential_key = 'abc'
client.authorization.token_credential_secret = '123'
end
it 'should use the default OAuth1 client configuration' do
@@ -98,6 +101,7 @@ describe Google::APIClient do
describe 'configured for OAuth 2' do
before do
client.authorization = :oauth_2
client.authorization.access_token = '12345'
end
# TODO
@@ -107,13 +111,10 @@ describe Google::APIClient do
describe 'when executing requests' do
before do
client.authorization = :oauth_2
@connection = Faraday.new(:url => 'https://www.googleapis.com') do |builder|
stubs = Faraday::Adapter::Test::Stubs.new do |stub|
stub.get('/test') do |env|
env[:request_headers]['Authorization'].should == 'Bearer 12345'
end
@connection = stub_connection do |stub|
stub.get('/test') do |env|
env[:request_headers]['Authorization'].should == 'Bearer 12345'
end
builder.adapter(:test, stubs)
end
end
+47
View File
@@ -2,6 +2,53 @@ $LOAD_PATH.unshift(File.expand_path('../../lib', __FILE__))
$LOAD_PATH.uniq!
require 'rspec'
require 'faraday'
require 'faraday/adapter/test'
module Faraday
class Connection
def verify
if app.kind_of?(Faraday::Adapter::Test)
app.stubs.verify_stubbed_calls
else
raise TypeError, "Expected test adapter"
end
end
end
end
module ConnectionHelpers
def stub_connection(&block)
stubs = Faraday::Adapter::Test::Stubs.new do |stub|
block.call(stub)
end
connection = Faraday.new do |builder|
builder.adapter(:test, stubs)
end
end
end
module JSONMatchers
class EqualsJson
def initialize(expected)
@expected = JSON.parse(expected)
end
def matches?(target)
@target = JSON.parse(target)
@target.eql?(@expected)
end
def failure_message
"expected #{@target.inspect} to be #{@expected}"
end
def negative_failure_message
"expected #{@target.inspect} not to be #{@expected}"
end
end
def be_json(expected)
EqualsJson.new(expected)
end
end
RSpec.configure do |config|
end