@@ -360,6 +360,13 @@ - (void)testService_SingleQuery {
360360 // URL query parameters.
361361 XCTAssertEqualObjects (QueryValueForURLItem (fetcherRequest.URL , @" meowParam" ), @" Meow" );
362362
363+ // The fetcher releases its authorizer upon completion, so to test the request,
364+ // we'll use the service's authorizer.
365+ id <GTMFetcherAuthorizationProtocol> authorizer = service.authorizer ;
366+ XCTAssertNotNil (authorizer);
367+ XCTAssert ([authorizer isAuthorizedRequest: fetcherRequest],
368+ @" %@ " , fetcherRequest.allHTTPHeaderFields );
369+
363370 // Ensure all expectations were satisfied.
364371 [self waitForExpectationsWithTimeout: 10 handler: nil ];
365372
@@ -621,6 +628,44 @@ - (void)testService_SingleQuery_Paging {
621628 expectedExpirations: 0 ];
622629}
623630
631+ - (void )testService_SingleQuery_SkipAuth {
632+ // Disallow authorizing request.
633+ GTLRService *service = [self driveServiceForTest ];
634+ service.fetcherService .testBlock =
635+ [self fetcherTestBlockWithResponseForFileName: @" Drive1.response.txt" status: 200 ];
636+
637+ // Request with an auth error.
638+ Test_GTLRDriveQuery_FilesList *query = [Test_GTLRDriveQuery_FilesList query ];
639+ query.fields = @" kind,nextPageToken,files(id,kind,name)" ;
640+ query.requestID = @" gtlr_1234" ;
641+ query.shouldSkipAuthorization = YES ;
642+
643+ XCTestExpectation *queryFinished = [self expectationWithDescription: @" queryFinished" ];
644+
645+ GTLRServiceTicket *queryTicket =
646+ [service executeQuery: query
647+ completionHandler: ^(GTLRServiceTicket *callbackTicket,
648+ Test_GTLRDrive_FileList *object, NSError *error) {
649+ XCTAssertEqualObjects ([object class ], [Test_GTLRDrive_FileList class ]);
650+ XCTAssertNil (error);
651+
652+ [queryFinished fulfill ];
653+ }];
654+
655+ XCTAssert ([self service: service waitForTicket: queryTicket]);
656+ XCTAssert (queryTicket.hasCalledCallback );
657+
658+ // Authorization should have been skipped.
659+ id <GTMFetcherAuthorizationProtocol> authorizer = service.authorizer ;
660+ NSURLRequest *fetcherRequest = queryTicket.objectFetcher .request ;
661+ XCTAssertNotNil (authorizer);
662+ XCTAssertFalse ([authorizer isAuthorizedRequest: fetcherRequest],
663+ @" %@ " , fetcherRequest.allHTTPHeaderFields );
664+
665+ // Ensure all expectations were satisfied.
666+ [self waitForExpectationsWithTimeout: 10 handler: nil ];
667+ }
668+
624669- (void )testService_SingleQuery_InvalidParam {
625670 // Unsuccessful request (invalid page token).
626671 //
@@ -1156,6 +1201,14 @@ - (void)performMediaQueryTestUsingMediaService:(BOOL)useMediaService {
11561201}
11571202
11581203- (void )testService_BatchQuery {
1204+ [self performBatchQueryTestSkippingAuthorization: NO ];
1205+ }
1206+
1207+ - (void )testService_BatchQuery_SkipAuth {
1208+ [self performBatchQueryTestSkippingAuthorization: YES ];
1209+ }
1210+
1211+ - (void )performBatchQueryTestSkippingAuthorization : (BOOL )shouldSkipAuthorization {
11591212 // Mixed failure and success batch request with valid authorization.
11601213 //
11611214 // Response is file Drive1Batch1.response.txt
@@ -1252,6 +1305,8 @@ - (void)testService_BatchQuery {
12521305 XCTAssert ([NSThread isMainThread ]);
12531306 };
12541307
1308+ batchQuery.shouldSkipAuthorization = shouldSkipAuthorization;
1309+
12551310 __block GTLRServiceTicket *queryTicket =
12561311 [service executeQuery: batchQuery
12571312 completionHandler: ^(GTLRServiceTicket *callbackTicket,
@@ -1298,11 +1353,8 @@ - (void)testService_BatchQuery {
12981353 @" https://www.googleapis.com/batch" );
12991354
13001355 // Test additionalHTTPHeaders.
1301- //
1302- // Headers.
1303- XCTAssertEqualObjects ([fetcherRequest valueForHTTPHeaderField: @" Authorization" ],
1304- @" Bearer catpaws" );
13051356 XCTAssertEqualObjects ([fetcherRequest valueForHTTPHeaderField: @" X-Feline" ], @" Fluffy" );
1357+ XCTAssertEqualObjects ([fetcherRequest valueForHTTPHeaderField: @" X-Canine" ], @" Spot" );
13061358
13071359 // Verify the payload was the expected multipart MIME.
13081360 NSData *requestBody = fetcherRequest.HTTPBody ;
@@ -1332,6 +1384,12 @@ - (void)testService_BatchQuery {
13321384 NSString *expectedBodyGet = @" GET /drive/v3/files/0B7svZDDwtKrhS2FDS2JZclU1U0E?fields=parents" ;
13331385 XCTAssert ([part2BodyStr hasPrefix: expectedBodyGet], @" %@ " , part2BodyStr);
13341386
1387+ // Verify authorization.
1388+ id <GTMFetcherAuthorizationProtocol> authorizer = service.authorizer ;
1389+ XCTAssertNotNil (authorizer);
1390+ bool didAuthorize = [authorizer isAuthorizedRequest: fetcherRequest];
1391+ XCTAssertEqual (didAuthorize, !shouldSkipAuthorization, @" %@ " , fetcherRequest.allHTTPHeaderFields );
1392+
13351393 // Ensure all expectations were satisfied.
13361394 [self waitForExpectationsWithTimeout: 10 handler: nil ];
13371395
0 commit comments