aboutsummaryrefslogtreecommitdiffhomepage
path: root/Example/Storage/Tests/Unit/FIRStorageMetadataTests.m
diff options
context:
space:
mode:
authorGravatar Paul Beusterien <paulbeusterien@google.com>2017-05-15 12:27:07 -0700
committerGravatar Paul Beusterien <paulbeusterien@google.com>2017-05-15 12:27:07 -0700
commit98ba64449a632518bd2b86fe8d927f4a960d3ddc (patch)
tree131d9c4272fa6179fcda6c5a33fcb3b1bd57ad2e /Example/Storage/Tests/Unit/FIRStorageMetadataTests.m
parent32461366c9e204a527ca05e6e9b9404a2454ac51 (diff)
Initial
Diffstat (limited to 'Example/Storage/Tests/Unit/FIRStorageMetadataTests.m')
-rw-r--r--Example/Storage/Tests/Unit/FIRStorageMetadataTests.m282
1 files changed, 282 insertions, 0 deletions
diff --git a/Example/Storage/Tests/Unit/FIRStorageMetadataTests.m b/Example/Storage/Tests/Unit/FIRStorageMetadataTests.m
new file mode 100644
index 0000000..f5fb3b3
--- /dev/null
+++ b/Example/Storage/Tests/Unit/FIRStorageMetadataTests.m
@@ -0,0 +1,282 @@
+// Copyright 2017 Google
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#import <XCTest/XCTest.h>
+
+#import "FIRStorageMetadata.h"
+#import "FIRStorageMetadata_Private.h"
+#import "FIRStorageUtils.h"
+
+@interface FIRStorageMetadataTests : XCTestCase
+
+@end
+
+@implementation FIRStorageMetadataTests
+
+- (void)testInitialzeNoMetadata {
+ FIRStorageMetadata *metadata = [[FIRStorageMetadata alloc] initWithDictionary:@{}];
+ XCTAssertNotNil(metadata);
+}
+
+- (void)testInitialzeFullMetadata {
+ NSDictionary *metaDict = @{
+ kFIRStorageMetadataBucket : @"bucket",
+ kFIRStorageMetadataCacheControl : @"max-age=3600, no-cache",
+ kFIRStorageMetadataContentDisposition : @"inline",
+ kFIRStorageMetadataContentEncoding : @"gzip",
+ kFIRStorageMetadataContentLanguage : @"en-us",
+ kFIRStorageMetadataContentType : @"application/octet-stream",
+ kFIRStorageMetadataCustomMetadata : @{@"foo" : @{@"bar" : @"baz"}},
+ kFIRStorageMetadataDownloadTokens : @"1234567890",
+ kFIRStorageMetadataGeneration : @"12345",
+ kFIRStorageMetadataMetageneration : @"67890",
+ kFIRStorageMetadataName : @"path/to/object",
+ kFIRStorageMetadataTimeCreated : @"1992-08-07T17:22:53.108Z",
+ kFIRStorageMetadataUpdated : @"2016-03-01T20:16:01.673Z"
+ };
+ FIRStorageMetadata *metadata = [[FIRStorageMetadata alloc] initWithDictionary:metaDict];
+ XCTAssertNotNil(metadata);
+ XCTAssertEqualObjects(metadata.bucket, metaDict[kFIRStorageMetadataBucket]);
+ XCTAssertEqualObjects(metadata.cacheControl, metaDict[kFIRStorageMetadataCacheControl]);
+ XCTAssertEqualObjects(metadata.contentDisposition,
+ metaDict[kFIRStorageMetadataContentDisposition]);
+ XCTAssertEqualObjects(metadata.contentEncoding, metaDict[kFIRStorageMetadataContentEncoding], );
+ XCTAssertEqualObjects(metadata.contentType, metaDict[kFIRStorageMetadataContentType]);
+ XCTAssertEqualObjects(metadata.customMetadata, metaDict[kFIRStorageMetadataCustomMetadata]);
+ NSString *URLFormat = @"https://firebasestorage.googleapis.com/v0/b/%@/o/%@?alt=media&token=%@";
+ NSString *URLString = [NSString
+ stringWithFormat:URLFormat, metaDict[kFIRStorageMetadataBucket],
+ [FIRStorageUtils GCSEscapedString:metaDict[kFIRStorageMetadataName]],
+ metaDict[kFIRStorageMetadataDownloadTokens]];
+ XCTAssertEqualObjects([metadata.downloadURL description], URLString);
+ NSString *generation = [NSString stringWithFormat:@"%lld", metadata.generation];
+ XCTAssertEqualObjects(generation, metaDict[kFIRStorageMetadataGeneration]);
+ NSString *metageneration = [NSString stringWithFormat:@"%lld", metadata.metageneration];
+ XCTAssertEqualObjects(metageneration, metaDict[kFIRStorageMetadataMetageneration]);
+ XCTAssertEqualObjects(metadata.path, metaDict[kFIRStorageMetadataName]);
+ XCTAssertEqualObjects([metadata RFC3339StringFromDate:metadata.timeCreated],
+ metaDict[kFIRStorageMetadataTimeCreated]);
+ XCTAssertEqualObjects([metadata RFC3339StringFromDate:metadata.updated],
+ metaDict[kFIRStorageMetadataUpdated]);
+}
+
+- (void)testDictionaryRepresentation {
+ NSDictionary *metaDict = @{
+ kFIRStorageMetadataBucket : @"bucket",
+ kFIRStorageMetadataCacheControl : @"max-age=3600, no-cache",
+ kFIRStorageMetadataContentDisposition : @"inline",
+ kFIRStorageMetadataContentEncoding : @"gzip",
+ kFIRStorageMetadataContentLanguage : @"en-us",
+ kFIRStorageMetadataContentType : @"application/octet-stream",
+ kFIRStorageMetadataCustomMetadata : @{@"foo" : @{@"bar" : @"baz"}},
+ kFIRStorageMetadataDownloadTokens : @"1234567890",
+ kFIRStorageMetadataGeneration : @"12345",
+ kFIRStorageMetadataMetageneration : @"67890",
+ kFIRStorageMetadataName : @"path/to/object",
+ kFIRStorageMetadataTimeCreated : @"1992-08-07T17:22:53.108Z",
+ kFIRStorageMetadataUpdated : @"2016-03-01T20:16:01.673Z"
+ };
+ FIRStorageMetadata *metadata = [[FIRStorageMetadata alloc] initWithDictionary:metaDict];
+ NSDictionary *dictRepresentation = [metadata dictionaryRepresentation];
+ XCTAssertNotEqual(dictRepresentation, nil);
+ XCTAssertEqualObjects(dictRepresentation[kFIRStorageMetadataBucket],
+ metaDict[kFIRStorageMetadataBucket]);
+ XCTAssertEqualObjects(dictRepresentation[kFIRStorageMetadataCacheControl],
+ metaDict[kFIRStorageMetadataCacheControl]);
+ XCTAssertEqualObjects(dictRepresentation[kFIRStorageMetadataContentDisposition],
+ metaDict[kFIRStorageMetadataContentDisposition]);
+ XCTAssertEqualObjects(dictRepresentation[kFIRStorageMetadataContentEncoding],
+ metaDict[kFIRStorageMetadataContentEncoding]);
+ XCTAssertEqualObjects(dictRepresentation[kFIRStorageMetadataContentLanguage],
+ metaDict[kFIRStorageMetadataContentLanguage]);
+ XCTAssertEqualObjects(dictRepresentation[kFIRStorageMetadataContentType],
+ metaDict[kFIRStorageMetadataContentType]);
+ XCTAssertEqualObjects(dictRepresentation[kFIRStorageMetadataCustomMetadata],
+ metaDict[kFIRStorageMetadataCustomMetadata]);
+ XCTAssertEqualObjects(dictRepresentation[kFIRStorageMetadataDownloadTokens],
+ metaDict[kFIRStorageMetadataDownloadTokens]);
+ XCTAssertEqualObjects(dictRepresentation[kFIRStorageMetadataGeneration],
+ metaDict[kFIRStorageMetadataGeneration]);
+ XCTAssertEqualObjects(dictRepresentation[kFIRStorageMetadataMetageneration],
+ metaDict[kFIRStorageMetadataMetageneration]);
+ XCTAssertEqualObjects(dictRepresentation[kFIRStorageMetadataName],
+ metaDict[kFIRStorageMetadataName]);
+ XCTAssertEqualObjects(dictRepresentation[kFIRStorageMetadataTimeCreated],
+ metaDict[kFIRStorageMetadataTimeCreated]);
+ XCTAssertEqualObjects(dictRepresentation[kFIRStorageMetadataUpdated],
+ metaDict[kFIRStorageMetadataUpdated]);
+}
+
+- (void)testInitialzeNoDownloadTokensGetToken {
+ NSDictionary *metaDict = @{
+ kFIRStorageMetadataBucket : @"bucket",
+ kFIRStorageMetadataName : @"path/to/object",
+ };
+ FIRStorageMetadata *metadata = [[FIRStorageMetadata alloc] initWithDictionary:metaDict];
+ XCTAssertNotNil(metadata);
+ XCTAssertEqual(metadata.downloadURL, nil);
+ XCTAssertEqual(metadata.downloadURLs, nil);
+}
+
+- (void)testInitialzeMultipleDownloadTokensGetToken {
+ NSDictionary *metaDict = @{
+ kFIRStorageMetadataBucket : @"bucket",
+ kFIRStorageMetadataDownloadTokens : @"12345,67890",
+ kFIRStorageMetadataName : @"path/to/object",
+ };
+ FIRStorageMetadata *metadata = [[FIRStorageMetadata alloc] initWithDictionary:metaDict];
+ XCTAssertNotNil(metadata);
+ NSString *URLformat = @"https://firebasestorage.googleapis.com/v0/b/%@/o/%@?alt=media&token=%@";
+ NSString *URLString0 = [NSString
+ stringWithFormat:URLformat, metaDict[kFIRStorageMetadataBucket],
+ [FIRStorageUtils GCSEscapedString:metaDict[kFIRStorageMetadataName]],
+ @"12345"];
+ NSString *URLString1 = [NSString
+ stringWithFormat:URLformat, metaDict[kFIRStorageMetadataBucket],
+ [FIRStorageUtils GCSEscapedString:metaDict[kFIRStorageMetadataName]],
+ @"67890"];
+ XCTAssertEqualObjects([metadata.downloadURL absoluteString], URLString0);
+ XCTAssertEqualObjects([metadata.downloadURLs[0] absoluteString], URLString0);
+ XCTAssertEqualObjects([metadata.downloadURLs[1] absoluteString], URLString1);
+}
+
+- (void)testMultipleDownloadURLsGetToken {
+ NSDictionary *metaDict = @{
+ kFIRStorageMetadataBucket : @"bucket",
+ kFIRStorageMetadataName : @"path/to/object",
+ };
+ FIRStorageMetadata *metadata = [[FIRStorageMetadata alloc] initWithDictionary:metaDict];
+ NSString *URLformat = @"https://firebasestorage.googleapis.com/v0/b/%@/o/%@?alt=media&token=%@";
+ NSString *URLString0 = [NSString
+ stringWithFormat:URLformat, metaDict[kFIRStorageMetadataBucket],
+ [FIRStorageUtils GCSEscapedString:metaDict[kFIRStorageMetadataName]],
+ @"12345"];
+ NSString *URLString1 = [NSString
+ stringWithFormat:URLformat, metaDict[kFIRStorageMetadataBucket],
+ [FIRStorageUtils GCSEscapedString:metaDict[kFIRStorageMetadataName]],
+ @"67890"];
+ NSURL *URL0 = [NSURL URLWithString:URLString0];
+ NSURL *URL1 = [NSURL URLWithString:URLString1];
+ NSArray *downloadURLs = @[ URL0, URL1 ];
+ [metadata setValue:downloadURLs forKey:@"downloadURLs"];
+ NSDictionary *newMetaDict = metadata.dictionaryRepresentation;
+ XCTAssertEqualObjects(newMetaDict[kFIRStorageMetadataDownloadTokens], @"12345,67890");
+}
+
+- (void)testInitialzeMetadataWithFile {
+ NSDictionary *metaDict = @{
+ kFIRStorageMetadataBucket : @"bucket",
+ kFIRStorageMetadataName : @"path/to/file",
+ };
+ FIRStorageMetadata *metadata = [[FIRStorageMetadata alloc] initWithDictionary:metaDict];
+ [metadata setType:FIRStorageMetadataTypeFile];
+ XCTAssertEqual(metadata.isFile, YES);
+ XCTAssertEqual(metadata.isFolder, NO);
+}
+
+- (void)testInitialzeMetadataWithFolder {
+ NSDictionary *metaDict = @{
+ kFIRStorageMetadataBucket : @"bucket",
+ kFIRStorageMetadataName : @"path/to/folder/",
+ };
+ FIRStorageMetadata *metadata = [[FIRStorageMetadata alloc] initWithDictionary:metaDict];
+ [metadata setType:FIRStorageMetadataTypeFolder];
+ XCTAssertEqual(metadata.isFolder, YES);
+ XCTAssertEqual(metadata.isFile, NO);
+}
+
+- (void)testReflexiveMetadataEquality {
+ NSDictionary *metaDict = @{
+ kFIRStorageMetadataBucket : @"bucket",
+ kFIRStorageMetadataName : @"path/to/object",
+ };
+ FIRStorageMetadata *metadata0 = [[FIRStorageMetadata alloc] initWithDictionary:metaDict];
+ FIRStorageMetadata *metadata1 = metadata0;
+ XCTAssertEqual(metadata0, metadata1);
+ XCTAssertEqualObjects(metadata0, metadata1);
+}
+
+- (void)testNonsenseMetadataEquality {
+ NSDictionary *metaDict = @{
+ kFIRStorageMetadataBucket : @"bucket",
+ kFIRStorageMetadataName : @"path/to/object",
+ };
+ FIRStorageMetadata *metadata0 = [[FIRStorageMetadata alloc] initWithDictionary:metaDict];
+ XCTAssertNotEqualObjects(metadata0, @"I'm not object metadata!");
+}
+
+- (void)testMetadataEquality {
+ NSDictionary *metaDict = @{
+ kFIRStorageMetadataBucket : @"bucket",
+ kFIRStorageMetadataName : @"path/to/object",
+ };
+ FIRStorageMetadata *metadata0 = [[FIRStorageMetadata alloc] initWithDictionary:metaDict];
+ FIRStorageMetadata *metadata1 = [[FIRStorageMetadata alloc] initWithDictionary:metaDict];
+ XCTAssertNotEqual(metadata0, metadata1);
+ XCTAssertEqualObjects(metadata0, metadata1);
+}
+
+- (void)testMetadataCopy {
+ NSDictionary *metaDict = @{
+ kFIRStorageMetadataBucket : @"bucket",
+ kFIRStorageMetadataName : @"path/to/object",
+ };
+ FIRStorageMetadata *metadata0 = [[FIRStorageMetadata alloc] initWithDictionary:metaDict];
+ FIRStorageMetadata *metadata1 = [metadata0 copy];
+ XCTAssertNotEqual(metadata0, metadata1);
+ XCTAssertEqualObjects(metadata0, metadata1);
+}
+
+- (void)testMetadataHashEquality {
+ NSDictionary *metaDict = @{
+ kFIRStorageMetadataBucket : @"bucket",
+ kFIRStorageMetadataName : @"path/to/object",
+ };
+ FIRStorageMetadata *metadata0 = [[FIRStorageMetadata alloc] initWithDictionary:metaDict];
+ FIRStorageMetadata *metadata1 = [[FIRStorageMetadata alloc] initWithDictionary:metaDict];
+ XCTAssertNotEqual(metadata0, metadata1);
+ XCTAssertEqual([metadata0 hash], [metadata1 hash]);
+}
+
+- (void)testZuluTimeOffset {
+ NSDictionary *metaDict = @{ kFIRStorageMetadataTimeCreated : @"1992-08-07T17:22:53.108Z" };
+ FIRStorageMetadata *metadata = [[FIRStorageMetadata alloc] initWithDictionary:metaDict];
+ XCTAssertNotNil(metadata.timeCreated);
+}
+
+- (void)testZuluZeroTimeOffset {
+ NSDictionary *metaDict = @{ kFIRStorageMetadataTimeCreated : @"1992-08-07T17:22:53.108+0000" };
+ FIRStorageMetadata *metadata = [[FIRStorageMetadata alloc] initWithDictionary:metaDict];
+ XCTAssertNotNil(metadata.timeCreated);
+}
+
+- (void)testGoogleStandardTimeOffset {
+ NSDictionary *metaDict = @{ kFIRStorageMetadataTimeCreated : @"1992-08-07T17:22:53.108-0700" };
+ FIRStorageMetadata *metadata = [[FIRStorageMetadata alloc] initWithDictionary:metaDict];
+ XCTAssertNotNil(metadata.timeCreated);
+}
+
+- (void)testUnspecifiedTimeOffset {
+ NSDictionary *metaDict = @{ kFIRStorageMetadataTimeCreated : @"1992-08-07T17:22:53.108-0000" };
+ FIRStorageMetadata *metadata = [[FIRStorageMetadata alloc] initWithDictionary:metaDict];
+ XCTAssertNotNil(metadata.timeCreated);
+}
+
+- (void)testNoTimeOffset {
+ NSDictionary *metaDict = @{ kFIRStorageMetadataTimeCreated : @"1992-08-07T17:22:53.108" };
+ FIRStorageMetadata *metadata = [[FIRStorageMetadata alloc] initWithDictionary:metaDict];
+ XCTAssertNil(metadata.timeCreated);
+}
+
+@end