FIRStorageMetadataTests.m 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  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 <XCTest/XCTest.h>
  15. #import "FIRStorageMetadata.h"
  16. #import "FIRStorageMetadata_Private.h"
  17. #import "FIRStorageUtils.h"
  18. @interface FIRStorageMetadataTests : XCTestCase
  19. @end
  20. @implementation FIRStorageMetadataTests
  21. - (void)testInitialzeNoMetadata {
  22. FIRStorageMetadata *metadata = [[FIRStorageMetadata alloc] initWithDictionary:@{}];
  23. XCTAssertNotNil(metadata);
  24. }
  25. - (void)testInitialzeFullMetadata {
  26. NSDictionary *metaDict = @{
  27. kFIRStorageMetadataBucket : @"bucket",
  28. kFIRStorageMetadataCacheControl : @"max-age=3600, no-cache",
  29. kFIRStorageMetadataContentDisposition : @"inline",
  30. kFIRStorageMetadataContentEncoding : @"gzip",
  31. kFIRStorageMetadataContentLanguage : @"en-us",
  32. kFIRStorageMetadataContentType : @"application/octet-stream",
  33. kFIRStorageMetadataCustomMetadata : @{@"foo" : @{@"bar" : @"baz"}},
  34. kFIRStorageMetadataDownloadTokens : @"1234567890",
  35. kFIRStorageMetadataGeneration : @"12345",
  36. kFIRStorageMetadataMetageneration : @"67890",
  37. kFIRStorageMetadataName : @"path/to/object",
  38. kFIRStorageMetadataTimeCreated : @"1992-08-07T17:22:53.108Z",
  39. kFIRStorageMetadataUpdated : @"2016-03-01T20:16:01.673Z"
  40. };
  41. FIRStorageMetadata *metadata = [[FIRStorageMetadata alloc] initWithDictionary:metaDict];
  42. XCTAssertNotNil(metadata);
  43. XCTAssertEqualObjects(metadata.bucket, metaDict[kFIRStorageMetadataBucket]);
  44. XCTAssertEqualObjects(metadata.cacheControl, metaDict[kFIRStorageMetadataCacheControl]);
  45. XCTAssertEqualObjects(metadata.contentDisposition,
  46. metaDict[kFIRStorageMetadataContentDisposition]);
  47. XCTAssertEqualObjects(metadata.contentEncoding, metaDict[kFIRStorageMetadataContentEncoding], );
  48. XCTAssertEqualObjects(metadata.contentType, metaDict[kFIRStorageMetadataContentType]);
  49. XCTAssertEqualObjects(metadata.customMetadata, metaDict[kFIRStorageMetadataCustomMetadata]);
  50. NSString *URLFormat = @"https://firebasestorage.googleapis.com/v0/b/%@/o/%@?alt=media&token=%@";
  51. NSString *URLString = [NSString
  52. stringWithFormat:URLFormat, metaDict[kFIRStorageMetadataBucket],
  53. [FIRStorageUtils GCSEscapedString:metaDict[kFIRStorageMetadataName]],
  54. metaDict[kFIRStorageMetadataDownloadTokens]];
  55. XCTAssertEqualObjects([metadata.downloadURL description], URLString);
  56. NSString *generation = [NSString stringWithFormat:@"%lld", metadata.generation];
  57. XCTAssertEqualObjects(generation, metaDict[kFIRStorageMetadataGeneration]);
  58. NSString *metageneration = [NSString stringWithFormat:@"%lld", metadata.metageneration];
  59. XCTAssertEqualObjects(metageneration, metaDict[kFIRStorageMetadataMetageneration]);
  60. XCTAssertEqualObjects(metadata.path, metaDict[kFIRStorageMetadataName]);
  61. XCTAssertEqualObjects([metadata RFC3339StringFromDate:metadata.timeCreated],
  62. metaDict[kFIRStorageMetadataTimeCreated]);
  63. XCTAssertEqualObjects([metadata RFC3339StringFromDate:metadata.updated],
  64. metaDict[kFIRStorageMetadataUpdated]);
  65. }
  66. - (void)testDictionaryRepresentation {
  67. NSDictionary *metaDict = @{
  68. kFIRStorageMetadataBucket : @"bucket",
  69. kFIRStorageMetadataCacheControl : @"max-age=3600, no-cache",
  70. kFIRStorageMetadataContentDisposition : @"inline",
  71. kFIRStorageMetadataContentEncoding : @"gzip",
  72. kFIRStorageMetadataContentLanguage : @"en-us",
  73. kFIRStorageMetadataContentType : @"application/octet-stream",
  74. kFIRStorageMetadataCustomMetadata : @{@"foo" : @{@"bar" : @"baz"}},
  75. kFIRStorageMetadataDownloadTokens : @"1234567890",
  76. kFIRStorageMetadataGeneration : @"12345",
  77. kFIRStorageMetadataMetageneration : @"67890",
  78. kFIRStorageMetadataName : @"path/to/object",
  79. kFIRStorageMetadataTimeCreated : @"1992-08-07T17:22:53.108Z",
  80. kFIRStorageMetadataUpdated : @"2016-03-01T20:16:01.673Z"
  81. };
  82. FIRStorageMetadata *metadata = [[FIRStorageMetadata alloc] initWithDictionary:metaDict];
  83. NSDictionary *dictRepresentation = [metadata dictionaryRepresentation];
  84. XCTAssertNotEqual(dictRepresentation, nil);
  85. XCTAssertEqualObjects(dictRepresentation[kFIRStorageMetadataBucket],
  86. metaDict[kFIRStorageMetadataBucket]);
  87. XCTAssertEqualObjects(dictRepresentation[kFIRStorageMetadataCacheControl],
  88. metaDict[kFIRStorageMetadataCacheControl]);
  89. XCTAssertEqualObjects(dictRepresentation[kFIRStorageMetadataContentDisposition],
  90. metaDict[kFIRStorageMetadataContentDisposition]);
  91. XCTAssertEqualObjects(dictRepresentation[kFIRStorageMetadataContentEncoding],
  92. metaDict[kFIRStorageMetadataContentEncoding]);
  93. XCTAssertEqualObjects(dictRepresentation[kFIRStorageMetadataContentLanguage],
  94. metaDict[kFIRStorageMetadataContentLanguage]);
  95. XCTAssertEqualObjects(dictRepresentation[kFIRStorageMetadataContentType],
  96. metaDict[kFIRStorageMetadataContentType]);
  97. XCTAssertEqualObjects(dictRepresentation[kFIRStorageMetadataCustomMetadata],
  98. metaDict[kFIRStorageMetadataCustomMetadata]);
  99. XCTAssertEqualObjects(dictRepresentation[kFIRStorageMetadataDownloadTokens],
  100. metaDict[kFIRStorageMetadataDownloadTokens]);
  101. XCTAssertEqualObjects(dictRepresentation[kFIRStorageMetadataGeneration],
  102. metaDict[kFIRStorageMetadataGeneration]);
  103. XCTAssertEqualObjects(dictRepresentation[kFIRStorageMetadataMetageneration],
  104. metaDict[kFIRStorageMetadataMetageneration]);
  105. XCTAssertEqualObjects(dictRepresentation[kFIRStorageMetadataName],
  106. metaDict[kFIRStorageMetadataName]);
  107. XCTAssertEqualObjects(dictRepresentation[kFIRStorageMetadataTimeCreated],
  108. metaDict[kFIRStorageMetadataTimeCreated]);
  109. XCTAssertEqualObjects(dictRepresentation[kFIRStorageMetadataUpdated],
  110. metaDict[kFIRStorageMetadataUpdated]);
  111. }
  112. - (void)testInitialzeNoDownloadTokensGetToken {
  113. NSDictionary *metaDict = @{
  114. kFIRStorageMetadataBucket : @"bucket",
  115. kFIRStorageMetadataName : @"path/to/object",
  116. };
  117. FIRStorageMetadata *metadata = [[FIRStorageMetadata alloc] initWithDictionary:metaDict];
  118. XCTAssertNotNil(metadata);
  119. XCTAssertEqual(metadata.downloadURL, nil);
  120. XCTAssertEqual(metadata.downloadURLs, nil);
  121. }
  122. - (void)testInitialzeMultipleDownloadTokensGetToken {
  123. NSDictionary *metaDict = @{
  124. kFIRStorageMetadataBucket : @"bucket",
  125. kFIRStorageMetadataDownloadTokens : @"12345,67890",
  126. kFIRStorageMetadataName : @"path/to/object",
  127. };
  128. FIRStorageMetadata *metadata = [[FIRStorageMetadata alloc] initWithDictionary:metaDict];
  129. XCTAssertNotNil(metadata);
  130. NSString *URLformat = @"https://firebasestorage.googleapis.com/v0/b/%@/o/%@?alt=media&token=%@";
  131. NSString *URLString0 = [NSString
  132. stringWithFormat:URLformat, metaDict[kFIRStorageMetadataBucket],
  133. [FIRStorageUtils GCSEscapedString:metaDict[kFIRStorageMetadataName]],
  134. @"12345"];
  135. NSString *URLString1 = [NSString
  136. stringWithFormat:URLformat, metaDict[kFIRStorageMetadataBucket],
  137. [FIRStorageUtils GCSEscapedString:metaDict[kFIRStorageMetadataName]],
  138. @"67890"];
  139. XCTAssertEqualObjects([metadata.downloadURL absoluteString], URLString0);
  140. XCTAssertEqualObjects([metadata.downloadURLs[0] absoluteString], URLString0);
  141. XCTAssertEqualObjects([metadata.downloadURLs[1] absoluteString], URLString1);
  142. }
  143. - (void)testMultipleDownloadURLsGetToken {
  144. NSDictionary *metaDict = @{
  145. kFIRStorageMetadataBucket : @"bucket",
  146. kFIRStorageMetadataName : @"path/to/object",
  147. };
  148. FIRStorageMetadata *metadata = [[FIRStorageMetadata alloc] initWithDictionary:metaDict];
  149. NSString *URLformat = @"https://firebasestorage.googleapis.com/v0/b/%@/o/%@?alt=media&token=%@";
  150. NSString *URLString0 = [NSString
  151. stringWithFormat:URLformat, metaDict[kFIRStorageMetadataBucket],
  152. [FIRStorageUtils GCSEscapedString:metaDict[kFIRStorageMetadataName]],
  153. @"12345"];
  154. NSString *URLString1 = [NSString
  155. stringWithFormat:URLformat, metaDict[kFIRStorageMetadataBucket],
  156. [FIRStorageUtils GCSEscapedString:metaDict[kFIRStorageMetadataName]],
  157. @"67890"];
  158. NSURL *URL0 = [NSURL URLWithString:URLString0];
  159. NSURL *URL1 = [NSURL URLWithString:URLString1];
  160. NSArray *downloadURLs = @[ URL0, URL1 ];
  161. [metadata setValue:downloadURLs forKey:@"downloadURLs"];
  162. NSDictionary *newMetaDict = metadata.dictionaryRepresentation;
  163. XCTAssertEqualObjects(newMetaDict[kFIRStorageMetadataDownloadTokens], @"12345,67890");
  164. }
  165. - (void)testInitialzeMetadataWithFile {
  166. NSDictionary *metaDict = @{
  167. kFIRStorageMetadataBucket : @"bucket",
  168. kFIRStorageMetadataName : @"path/to/file",
  169. };
  170. FIRStorageMetadata *metadata = [[FIRStorageMetadata alloc] initWithDictionary:metaDict];
  171. [metadata setType:FIRStorageMetadataTypeFile];
  172. XCTAssertEqual(metadata.isFile, YES);
  173. XCTAssertEqual(metadata.isFolder, NO);
  174. }
  175. - (void)testInitialzeMetadataWithFolder {
  176. NSDictionary *metaDict = @{
  177. kFIRStorageMetadataBucket : @"bucket",
  178. kFIRStorageMetadataName : @"path/to/folder/",
  179. };
  180. FIRStorageMetadata *metadata = [[FIRStorageMetadata alloc] initWithDictionary:metaDict];
  181. [metadata setType:FIRStorageMetadataTypeFolder];
  182. XCTAssertEqual(metadata.isFolder, YES);
  183. XCTAssertEqual(metadata.isFile, NO);
  184. }
  185. - (void)testReflexiveMetadataEquality {
  186. NSDictionary *metaDict = @{
  187. kFIRStorageMetadataBucket : @"bucket",
  188. kFIRStorageMetadataName : @"path/to/object",
  189. };
  190. FIRStorageMetadata *metadata0 = [[FIRStorageMetadata alloc] initWithDictionary:metaDict];
  191. FIRStorageMetadata *metadata1 = metadata0;
  192. XCTAssertEqual(metadata0, metadata1);
  193. XCTAssertEqualObjects(metadata0, metadata1);
  194. }
  195. - (void)testNonsenseMetadataEquality {
  196. NSDictionary *metaDict = @{
  197. kFIRStorageMetadataBucket : @"bucket",
  198. kFIRStorageMetadataName : @"path/to/object",
  199. };
  200. FIRStorageMetadata *metadata0 = [[FIRStorageMetadata alloc] initWithDictionary:metaDict];
  201. XCTAssertNotEqualObjects(metadata0, @"I'm not object metadata!");
  202. }
  203. - (void)testMetadataEquality {
  204. NSDictionary *metaDict = @{
  205. kFIRStorageMetadataBucket : @"bucket",
  206. kFIRStorageMetadataName : @"path/to/object",
  207. };
  208. FIRStorageMetadata *metadata0 = [[FIRStorageMetadata alloc] initWithDictionary:metaDict];
  209. FIRStorageMetadata *metadata1 = [[FIRStorageMetadata alloc] initWithDictionary:metaDict];
  210. XCTAssertNotEqual(metadata0, metadata1);
  211. XCTAssertEqualObjects(metadata0, metadata1);
  212. }
  213. - (void)testMetadataCopy {
  214. NSDictionary *metaDict = @{
  215. kFIRStorageMetadataBucket : @"bucket",
  216. kFIRStorageMetadataName : @"path/to/object",
  217. };
  218. FIRStorageMetadata *metadata0 = [[FIRStorageMetadata alloc] initWithDictionary:metaDict];
  219. FIRStorageMetadata *metadata1 = [metadata0 copy];
  220. XCTAssertNotEqual(metadata0, metadata1);
  221. XCTAssertEqualObjects(metadata0, metadata1);
  222. }
  223. - (void)testMetadataHashEquality {
  224. NSDictionary *metaDict = @{
  225. kFIRStorageMetadataBucket : @"bucket",
  226. kFIRStorageMetadataName : @"path/to/object",
  227. };
  228. FIRStorageMetadata *metadata0 = [[FIRStorageMetadata alloc] initWithDictionary:metaDict];
  229. FIRStorageMetadata *metadata1 = [[FIRStorageMetadata alloc] initWithDictionary:metaDict];
  230. XCTAssertNotEqual(metadata0, metadata1);
  231. XCTAssertEqual([metadata0 hash], [metadata1 hash]);
  232. }
  233. - (void)testZuluTimeOffset {
  234. NSDictionary *metaDict = @{ kFIRStorageMetadataTimeCreated : @"1992-08-07T17:22:53.108Z" };
  235. FIRStorageMetadata *metadata = [[FIRStorageMetadata alloc] initWithDictionary:metaDict];
  236. XCTAssertNotNil(metadata.timeCreated);
  237. }
  238. - (void)testZuluZeroTimeOffset {
  239. NSDictionary *metaDict = @{ kFIRStorageMetadataTimeCreated : @"1992-08-07T17:22:53.108+0000" };
  240. FIRStorageMetadata *metadata = [[FIRStorageMetadata alloc] initWithDictionary:metaDict];
  241. XCTAssertNotNil(metadata.timeCreated);
  242. }
  243. - (void)testGoogleStandardTimeOffset {
  244. NSDictionary *metaDict = @{ kFIRStorageMetadataTimeCreated : @"1992-08-07T17:22:53.108-0700" };
  245. FIRStorageMetadata *metadata = [[FIRStorageMetadata alloc] initWithDictionary:metaDict];
  246. XCTAssertNotNil(metadata.timeCreated);
  247. }
  248. - (void)testUnspecifiedTimeOffset {
  249. NSDictionary *metaDict = @{ kFIRStorageMetadataTimeCreated : @"1992-08-07T17:22:53.108-0000" };
  250. FIRStorageMetadata *metadata = [[FIRStorageMetadata alloc] initWithDictionary:metaDict];
  251. XCTAssertNotNil(metadata.timeCreated);
  252. }
  253. - (void)testNoTimeOffset {
  254. NSDictionary *metaDict = @{ kFIRStorageMetadataTimeCreated : @"1992-08-07T17:22:53.108" };
  255. FIRStorageMetadata *metadata = [[FIRStorageMetadata alloc] initWithDictionary:metaDict];
  256. XCTAssertNil(metadata.timeCreated);
  257. }
  258. @end