require 'spec_helper'
require 'google/api_client'
-require 'google/api_client/version'
-describe Google::APIClient::Result do
- before do
- @client = Google::APIClient.new
- end
+RSpec.describe Google::APIClient::Result do
+ CLIENT = Google::APIClient.new(:application_name => 'API Client Tests') unless defined?(CLIENT)
describe 'with the plus API' do
before do
- @client.authorization = nil
- @plus = @client.discovered_api('plus', 'v1')
+ CLIENT.authorization = nil
+ @plus = CLIENT.discovered_api('plus', 'v1')
@reference = Google::APIClient::Reference.new({
:api_method => @plus.activities.list,
:parameters => {
'maxResults' => 20
}
})
- @request = @reference.to_request
+ @request = @reference.to_http_request
- # Response stub
- @response = stub("response")
- @response.stub(:status).and_return(200)
- @response.stub(:headers).and_return({
+ # Response double
+ @response = double("response")
+ allow(@response).to receive(:status).and_return(200)
+ allow(@response).to receive(:headers).and_return({
'etag' => '12345',
'x-google-apiary-auth-scopes' =>
'https://www.googleapis.com/auth/plus.me',
describe 'with a next page token' do
before do
- @response.stub(:body).and_return(
+ allow(@response).to receive(:body).and_return(
<<-END_OF_STRING
{
"kind": "plus#activityFeed",
"nextLink": "https://www.googleapis.com/plus/v1/people/foo/activities/public?maxResults=20&pageToken=NEXT%2BPAGE%2BTOKEN",
"title": "Plus Public Activity Feed for ",
"updated": "2012-04-23T00:00:00.000Z",
- "id": "tag:google.com,2010:/plus/people/foo/activities/public",
+ "id": "123456790",
"items": []
}
END_OF_STRING
)
- @result = Google::APIClient::Result.new(@reference, @request, @response)
+ @result = Google::APIClient::Result.new(@reference, @response)
end
it 'should indicate a successful response' do
- @result.error?.should be_false
+ expect(@result.error?).to be_falsey
end
it 'should return the correct next page token' do
- @result.next_page_token.should == 'NEXT+PAGE+TOKEN'
+ expect(@result.next_page_token).to eq('NEXT+PAGE+TOKEN')
end
it 'should escape the next page token when calling next_page' do
reference = @result.next_page
- reference.parameters.should include('pageToken')
- reference.parameters['pageToken'].should == 'NEXT+PAGE+TOKEN'
- path = reference.to_request.path.to_s
- path.should include 'pageToken=NEXT%2BPAGE%2BTOKEN'
+ expect(Hash[reference.parameters]).to include('pageToken')
+ expect(Hash[reference.parameters]['pageToken']).to eq('NEXT+PAGE+TOKEN')
+ url = reference.to_env(CLIENT.connection)[:url]
+ expect(url.to_s).to include('pageToken=NEXT%2BPAGE%2BTOKEN')
end
it 'should return content type correctly' do
- @result.media_type.should == 'application/json'
+ expect(@result.media_type).to eq('application/json')
end
it 'should return the result data correctly' do
- @result.data?.should be_true
- @result.data.class.to_s.should ==
+ expect(@result.data?).to be_truthy
+ expect(@result.data.class.to_s).to eq(
'Google::APIClient::Schema::Plus::V1::ActivityFeed'
- @result.data.kind.should == 'plus#activityFeed'
- @result.data.etag.should == 'FOO'
- @result.data.nextPageToken.should == 'NEXT+PAGE+TOKEN'
- @result.data.selfLink.should ==
+ )
+ expect(@result.data.kind).to eq('plus#activityFeed')
+ expect(@result.data.etag).to eq('FOO')
+ expect(@result.data.nextPageToken).to eq('NEXT+PAGE+TOKEN')
+ expect(@result.data.selfLink).to eq(
'https://www.googleapis.com/plus/v1/people/foo/activities/public?'
- @result.data.nextLink.should ==
+ )
+ expect(@result.data.nextLink).to eq(
'https://www.googleapis.com/plus/v1/people/foo/activities/public?' +
'maxResults=20&pageToken=NEXT%2BPAGE%2BTOKEN'
- @result.data.title.should == 'Plus Public Activity Feed for '
- @result.data.id.should ==
- 'tag:google.com,2010:/plus/people/foo/activities/public'
- @result.data.items.should be_empty
+ )
+ expect(@result.data.title).to eq('Plus Public Activity Feed for ')
+ expect(@result.data.id).to eq("123456790")
+ expect(@result.data.items).to be_empty
end
end
describe 'without a next page token' do
before do
- @response.stub(:body).and_return(
+ allow(@response).to receive(:body).and_return(
<<-END_OF_STRING
{
"kind": "plus#activityFeed",
"selfLink": "https://www.googleapis.com/plus/v1/people/foo/activities/public?",
"title": "Plus Public Activity Feed for ",
"updated": "2012-04-23T00:00:00.000Z",
- "id": "tag:google.com,2010:/plus/people/foo/activities/public",
+ "id": "123456790",
"items": []
}
END_OF_STRING
)
- @result = Google::APIClient::Result.new(@reference, @request, @response)
+ @result = Google::APIClient::Result.new(@reference, @response)
end
it 'should not return a next page token' do
- @result.next_page_token.should == nil
+ expect(@result.next_page_token).to eq(nil)
end
it 'should return content type correctly' do
- @result.media_type.should == 'application/json'
+ expect(@result.media_type).to eq('application/json')
end
it 'should return the result data correctly' do
- @result.data?.should be_true
- @result.data.class.to_s.should ==
+ expect(@result.data?).to be_truthy
+ expect(@result.data.class.to_s).to eq(
'Google::APIClient::Schema::Plus::V1::ActivityFeed'
- @result.data.kind.should == 'plus#activityFeed'
- @result.data.etag.should == 'FOO'
- @result.data.selfLink.should ==
+ )
+ expect(@result.data.kind).to eq('plus#activityFeed')
+ expect(@result.data.etag).to eq('FOO')
+ expect(@result.data.selfLink).to eq(
'https://www.googleapis.com/plus/v1/people/foo/activities/public?'
- @result.data.title.should == 'Plus Public Activity Feed for '
- @result.data.id.should ==
- 'tag:google.com,2010:/plus/people/foo/activities/public'
- @result.data.items.should be_empty
+ )
+ expect(@result.data.title).to eq('Plus Public Activity Feed for ')
+ expect(@result.data.id).to eq("123456790")
+ expect(@result.data.items).to be_empty
end
end
-
+
describe 'with JSON error response' do
before do
- @response.stub(:body).and_return(
+ allow(@response).to receive(:body).and_return(
<<-END_OF_STRING
{
"error": {
}
END_OF_STRING
)
- @response.stub(:status).and_return(400)
- @result = Google::APIClient::Result.new(@reference, @request, @response)
+ allow(@response).to receive(:status).and_return(400)
+ @result = Google::APIClient::Result.new(@reference, @response)
end
-
+
it 'should return error status correctly' do
- @result.error?.should be_true
+ expect(@result.error?).to be_truthy
end
it 'should return the correct error message' do
- @result.error_message.should == 'Parse Error'
+ expect(@result.error_message).to eq('Parse Error')
end
+ end
+ describe 'with 204 No Content response' do
+ before do
+ allow(@response).to receive(:body).and_return('')
+ allow(@response).to receive(:status).and_return(204)
+ allow(@response).to receive(:headers).and_return({})
+ @result = Google::APIClient::Result.new(@reference, @response)
+ end
+
+ it 'should indicate no data is available' do
+ expect(@result.data?).to be_falsey
+ end
+
+ it 'should return nil for data' do
+ expect(@result.data).to eq(nil)
+ end
+
+ it 'should return nil for media_type' do
+ expect(@result.media_type).to eq(nil)
+ end
end
end
end