aboutsummaryrefslogtreecommitdiffhomepage
path: root/Example/Auth/Tests/FIRAuthUserDefaultsStorageTests.m
diff options
context:
space:
mode:
Diffstat (limited to 'Example/Auth/Tests/FIRAuthUserDefaultsStorageTests.m')
-rw-r--r--Example/Auth/Tests/FIRAuthUserDefaultsStorageTests.m155
1 files changed, 155 insertions, 0 deletions
diff --git a/Example/Auth/Tests/FIRAuthUserDefaultsStorageTests.m b/Example/Auth/Tests/FIRAuthUserDefaultsStorageTests.m
new file mode 100644
index 0000000..07493d5
--- /dev/null
+++ b/Example/Auth/Tests/FIRAuthUserDefaultsStorageTests.m
@@ -0,0 +1,155 @@
+/*
+ * 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 "FIRAuthUserDefaultsStorage.h"
+
+#if FIRAUTH_USER_DEFAULTS_STORAGE_AVAILABLE
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @var kKey
+ @brief The key used in tests.
+ */
+static NSString *const kKey = @"ACCOUNT";
+
+/** @var kService
+ @brief The keychain service used in tests.
+ */
+static NSString *const kService = @"SERVICE";
+
+/** @var kOtherService
+ @brief Another keychain service used in tests.
+ */
+static NSString *const kOtherService = @"OTHER_SERVICE";
+
+/** @var kData
+ @brief A piece of keychain data used in tests.
+ */
+static NSString *const kData = @"DATA";
+
+/** @var kOtherData
+ @brief Another piece of keychain data used in tests.
+ */
+static NSString *const kOtherData = @"OTHER_DATA";
+
+/** @fn dataFromString
+ @brief Converts a NSString to NSData.
+ @param string The NSString to be converted from.
+ @return The NSData being the conversion result.
+ */
+static NSData *dataFromString(NSString *string) {
+ return [string dataUsingEncoding:NSUTF8StringEncoding];
+}
+
+/** @fn fakeError
+ @brief Creates a fake error object.
+ @return a non-nil NSError instance.
+ */
+static NSError *fakeError() {
+ return [NSError errorWithDomain:@"ERROR" code:-1 userInfo:nil];
+}
+
+/** @class FIRAuthUserDefaultsStorageTests
+ @brief Tests for @c FIRAuthUserDefaultsStorage .
+ */
+@interface FIRAuthUserDefaultsStorageTests : XCTestCase
+@end
+
+@implementation FIRAuthUserDefaultsStorageTests {
+ /** @var _storage
+ @brief The @c FIRAuthUserDefaultsStorage object under test.
+ */
+ FIRAuthUserDefaultsStorage *_storage;
+}
+
+- (void)setUp {
+ [super setUp];
+ _storage = [[FIRAuthUserDefaultsStorage alloc] initWithService:kService];
+ [_storage clear];
+}
+
+/** @fn testReadNonexisting
+ @brief Tests reading non-existing storage item.
+ */
+- (void)testReadNonExisting {
+ NSError *error = fakeError();
+ XCTAssertNil([_storage dataForKey:kKey error:&error]);
+ XCTAssertNil(error);
+}
+
+/** @fn testWriteRead
+ @brief Tests writing and reading a storage item.
+ */
+- (void)testWriteRead {
+ XCTAssertTrue([_storage setData:dataFromString(kData) forKey:kKey error:NULL]);
+ NSError *error = fakeError();
+ XCTAssertEqualObjects([_storage dataForKey:kKey error:&error], dataFromString(kData));
+ XCTAssertNil(error);
+}
+
+/** @fn testOverwrite
+ @brief Tests overwriting a storage item.
+ */
+- (void)testOverwrite {
+ XCTAssertTrue([_storage setData:dataFromString(kData) forKey:kKey error:NULL]);
+ XCTAssertTrue([_storage setData:dataFromString(kOtherData) forKey:kKey error:NULL]);
+ NSError *error = fakeError();
+ XCTAssertEqualObjects([_storage dataForKey:kKey error:&error], dataFromString(kOtherData));
+ XCTAssertNil(error);
+}
+
+/** @fn testRemove
+ @brief Tests removing a storage item.
+ */
+- (void)testRemove {
+ XCTAssertTrue([_storage setData:dataFromString(kData) forKey:kKey error:NULL]);
+ XCTAssertTrue([_storage removeDataForKey:kKey error:NULL]);
+ NSError *error = fakeError();
+ XCTAssertNil([_storage dataForKey:kKey error:&error]);
+ XCTAssertNil(error);
+}
+
+/** @fn testServices
+ @brief Tests storage items belonging to different services doesn't affect each other.
+ */
+- (void)testServices {
+ XCTAssertTrue([_storage setData:dataFromString(kData) forKey:kKey error:NULL]);
+ _storage = [[FIRAuthUserDefaultsStorage alloc] initWithService:kOtherService];
+ NSError *error = fakeError();
+ XCTAssertNil([_storage dataForKey:kKey error:&error]);
+ XCTAssertNil(error);
+}
+
+/** @fn testStandardUserDefaults
+ @brief Tests standard user defaults are not affected by FIRAuthUserDefaultsStorage operations,
+ */
+- (void)testStandardUserDefaults {
+ NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
+ NSUInteger count =
+ [userDefaults persistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]].count;
+ XCTAssertTrue([_storage setData:dataFromString(kData) forKey:kKey error:NULL]);
+ XCTAssertNil([userDefaults dataForKey:kKey]);
+ XCTAssertEqual([userDefaults persistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]]
+ .count, count);
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif // FIRAUTH_USER_DEFAULTS_STORAGE_AVAILABLE