FIRStorageUpdateMetadataTests.m 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. // Copyright 2017 Google
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. #import "FirebaseStorage/Sources/FIRStorageMetadata_Private.h"
  15. #import "FirebaseStorage/Sources/FIRStorageUpdateMetadataTask.h"
  16. #import "FirebaseStorage/Tests/Unit/FIRStorageTestHelpers.h"
  17. @interface FIRStorageUpdateMetadataTests : XCTestCase
  18. @property(strong, nonatomic) GTMSessionFetcherService *fetcherService;
  19. @property(nonatomic) dispatch_queue_t dispatchQueue;
  20. @property(strong, nonatomic) FIRStorageMetadata *metadata;
  21. @property(strong, nonatomic) FIRStorage *storage;
  22. @property(strong, nonatomic) id mockApp;
  23. @end
  24. @implementation FIRStorageUpdateMetadataTests
  25. - (void)setUp {
  26. [super setUp];
  27. NSDictionary *metadataDict = @{@"bucket" : @"bucket", @"name" : @"path/to/object"};
  28. self.metadata = [[FIRStorageMetadata alloc] initWithDictionary:metadataDict];
  29. id mockOptions = OCMClassMock([FIROptions class]);
  30. OCMStub([mockOptions storageBucket]).andReturn(@"bucket.appspot.com");
  31. self.mockApp = [FIRStorageTestHelpers mockedApp];
  32. OCMStub([self.mockApp name]).andReturn(kFIRStorageAppName);
  33. OCMStub([(FIRApp *)self.mockApp options]).andReturn(mockOptions);
  34. self.fetcherService = [[GTMSessionFetcherService alloc] init];
  35. self.fetcherService.authorizer =
  36. [[FIRStorageTokenAuthorizer alloc] initWithGoogleAppID:@"dummyAppID"
  37. fetcherService:self.fetcherService
  38. authProvider:nil
  39. appCheck:nil];
  40. self.dispatchQueue = dispatch_queue_create("Test dispatch queue", DISPATCH_QUEUE_SERIAL);
  41. self.storage = [FIRStorage storageForApp:self.mockApp];
  42. }
  43. - (void)tearDown {
  44. self.fetcherService = nil;
  45. self.storage = nil;
  46. self.mockApp = nil;
  47. [super tearDown];
  48. }
  49. - (void)testFetcherConfiguration {
  50. XCTestExpectation *expectation = [self expectationWithDescription:@"testSuccessfulFetch"];
  51. self.fetcherService.testBlock =
  52. ^(GTMSessionFetcher *fetcher, GTMSessionFetcherTestResponse response) {
  53. #pragma clang diagnostic push
  54. #pragma clang diagnostic ignored "-Warc-retain-cycles"
  55. XCTAssertEqualObjects(fetcher.request.URL, [FIRStorageTestHelpers objectURL]);
  56. XCTAssertEqualObjects(fetcher.request.HTTPMethod, @"PATCH");
  57. NSData *bodyData = [NSData frs_dataFromJSONDictionary:[self.metadata updatedMetadata]];
  58. XCTAssertEqualObjects(fetcher.request.HTTPBody, bodyData);
  59. NSDictionary *HTTPHeaders = fetcher.request.allHTTPHeaderFields;
  60. XCTAssertEqualObjects(HTTPHeaders[@"Content-Type"], @"application/json; charset=UTF-8");
  61. XCTAssertEqualObjects(HTTPHeaders[@"Content-Length"], [@(bodyData.length) stringValue]);
  62. #pragma clang diagnostic pop
  63. NSHTTPURLResponse *httpResponse = [[NSHTTPURLResponse alloc] initWithURL:fetcher.request.URL
  64. statusCode:200
  65. HTTPVersion:kHTTPVersion
  66. headerFields:nil];
  67. response(httpResponse, nil, nil);
  68. self.fetcherService.testBlock = nil;
  69. };
  70. FIRStoragePath *path = [FIRStorageTestHelpers objectPath];
  71. FIRStorageReference *ref = [[FIRStorageReference alloc] initWithStorage:self.storage path:path];
  72. FIRStorageUpdateMetadataTask *task = [[FIRStorageUpdateMetadataTask alloc]
  73. initWithReference:ref
  74. fetcherService:self.fetcherService
  75. dispatchQueue:self.dispatchQueue
  76. metadata:self.metadata
  77. completion:^(FIRStorageMetadata *_Nullable metadata, NSError *_Nullable error) {
  78. [expectation fulfill];
  79. }];
  80. [task enqueue];
  81. [FIRStorageTestHelpers waitForExpectation:self];
  82. }
  83. - (void)testSuccessfulFetch {
  84. XCTestExpectation *expectation = [self expectationWithDescription:@"testSuccessfulFetch"];
  85. self.fetcherService.testBlock = [FIRStorageTestHelpers successBlockWithMetadata:self.metadata];
  86. FIRStoragePath *path = [FIRStorageTestHelpers objectPath];
  87. FIRStorageReference *ref = [[FIRStorageReference alloc] initWithStorage:self.storage path:path];
  88. FIRStorageUpdateMetadataTask *task = [[FIRStorageUpdateMetadataTask alloc]
  89. initWithReference:ref
  90. fetcherService:self.fetcherService
  91. dispatchQueue:self.dispatchQueue
  92. metadata:self.metadata
  93. completion:^(FIRStorageMetadata *_Nullable metadata, NSError *_Nullable error) {
  94. XCTAssertEqualObjects(self.metadata.bucket, metadata.bucket);
  95. XCTAssertEqualObjects(self.metadata.name, metadata.name);
  96. XCTAssertNil(error);
  97. [expectation fulfill];
  98. }];
  99. [task enqueue];
  100. [FIRStorageTestHelpers waitForExpectation:self];
  101. }
  102. - (void)testUnsuccessfulFetchUnauthenticated {
  103. XCTestExpectation *expectation =
  104. [self expectationWithDescription:@"testUnsuccessfulFetchUnauthenticated"];
  105. self.fetcherService.testBlock = [FIRStorageTestHelpers unauthenticatedBlock];
  106. FIRStoragePath *path = [FIRStorageTestHelpers objectPath];
  107. FIRStorageReference *ref = [[FIRStorageReference alloc] initWithStorage:self.storage path:path];
  108. FIRStorageUpdateMetadataTask *task = [[FIRStorageUpdateMetadataTask alloc]
  109. initWithReference:ref
  110. fetcherService:self.fetcherService
  111. dispatchQueue:self.dispatchQueue
  112. metadata:self.metadata
  113. completion:^(FIRStorageMetadata *_Nullable metadata, NSError *_Nullable error) {
  114. XCTAssertNil(metadata);
  115. XCTAssertEqual(error.code, FIRStorageErrorCodeUnauthenticated);
  116. [expectation fulfill];
  117. }];
  118. [task enqueue];
  119. [FIRStorageTestHelpers waitForExpectation:self];
  120. }
  121. - (void)testUnsuccessfulFetchUnauthorized {
  122. XCTestExpectation *expectation =
  123. [self expectationWithDescription:@"testUnsuccessfulFetchUnauthorized"];
  124. self.fetcherService.testBlock = [FIRStorageTestHelpers unauthorizedBlock];
  125. FIRStoragePath *path = [FIRStorageTestHelpers objectPath];
  126. FIRStorageReference *ref = [[FIRStorageReference alloc] initWithStorage:self.storage path:path];
  127. FIRStorageUpdateMetadataTask *task = [[FIRStorageUpdateMetadataTask alloc]
  128. initWithReference:ref
  129. fetcherService:self.fetcherService
  130. dispatchQueue:self.dispatchQueue
  131. metadata:self.metadata
  132. completion:^(FIRStorageMetadata *_Nullable metadata, NSError *_Nullable error) {
  133. XCTAssertNil(metadata);
  134. XCTAssertEqual(error.code, FIRStorageErrorCodeUnauthorized);
  135. [expectation fulfill];
  136. }];
  137. [task enqueue];
  138. [FIRStorageTestHelpers waitForExpectation:self];
  139. }
  140. - (void)testUnsuccessfulFetchObjectDoesntExist {
  141. XCTestExpectation *expectation =
  142. [self expectationWithDescription:@"testUnsuccessfulFetchObjectDoesntExist"];
  143. self.fetcherService.testBlock = [FIRStorageTestHelpers notFoundBlock];
  144. FIRStoragePath *path = [FIRStorageTestHelpers notFoundPath];
  145. FIRStorageReference *ref = [[FIRStorageReference alloc] initWithStorage:self.storage path:path];
  146. FIRStorageUpdateMetadataTask *task = [[FIRStorageUpdateMetadataTask alloc]
  147. initWithReference:ref
  148. fetcherService:self.fetcherService
  149. dispatchQueue:self.dispatchQueue
  150. metadata:self.metadata
  151. completion:^(FIRStorageMetadata *_Nullable metadata, NSError *_Nullable error) {
  152. XCTAssertNil(metadata);
  153. XCTAssertEqual(error.code, FIRStorageErrorCodeObjectNotFound);
  154. [expectation fulfill];
  155. }];
  156. [task enqueue];
  157. [FIRStorageTestHelpers waitForExpectation:self];
  158. }
  159. - (void)testUnsuccessfulFetchBadJSON {
  160. XCTestExpectation *expectation =
  161. [self expectationWithDescription:@"testUnsuccessfulFetchBadJSON"];
  162. self.fetcherService.testBlock = [FIRStorageTestHelpers invalidJSONBlock];
  163. FIRStoragePath *path = [FIRStorageTestHelpers objectPath];
  164. FIRStorageReference *ref = [[FIRStorageReference alloc] initWithStorage:self.storage path:path];
  165. FIRStorageUpdateMetadataTask *task = [[FIRStorageUpdateMetadataTask alloc]
  166. initWithReference:ref
  167. fetcherService:self.fetcherService
  168. dispatchQueue:self.dispatchQueue
  169. metadata:self.metadata
  170. completion:^(FIRStorageMetadata *_Nullable metadata, NSError *_Nullable error) {
  171. XCTAssertNil(metadata);
  172. XCTAssertEqual(error.code, FIRStorageErrorCodeUnknown);
  173. [expectation fulfill];
  174. }];
  175. [task enqueue];
  176. [FIRStorageTestHelpers waitForExpectation:self];
  177. }
  178. @end