| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 |
- // Copyright 2025 Google LLC
- //
- // 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.
- @testable import FirebaseRemoteConfig
- import XCTest
- class UserDefaultsManagerTests: XCTestCase {
- let appName = "testApp"
- let bundleID = "com.example.testApp"
- let namespace = "namespace:app"
- let fullyQualifiedNamespace = "namespace:testApp"
- override func setUp() {
- super.setUp()
- // Clear for clean test state
- let persistentDomain = UserDefaultsManager.userDefaultsSuiteName(for: bundleID)
- UserDefaults.standard.removePersistentDomain(forName: persistentDomain)
- }
- func testSharedUserDefaultsForBundleIdentifier() {
- let defaults1 = UserDefaultsManager.sharedUserDefaultsForBundleIdentifier(bundleID)
- let defaults2 = UserDefaultsManager.sharedUserDefaultsForBundleIdentifier(bundleID)
- XCTAssertTrue(defaults1 === defaults2) // Should return the same instance each time
- }
- func testUserDefaultsSuiteName() {
- let suiteName = UserDefaultsManager.userDefaultsSuiteName(for: bundleID)
- XCTAssertEqual(suiteName, "group.\(bundleID).firebase")
- }
- func testLastETag() {
- let manager = UserDefaultsManager(
- appName: appName,
- bundleID: bundleID,
- namespace: namespace
- )
- manager.lastETag = "eTag1"
- XCTAssertEqual(manager.lastETag, "eTag1")
- }
- func testSettingNilLastETagIsNoOp() {
- let manager = UserDefaultsManager(
- appName: appName,
- bundleID: bundleID,
- namespace: namespace
- )
- manager.lastETag = "eTag1"
- XCTAssertEqual(manager.lastETag, "eTag1")
- manager.lastETag = nil
- XCTAssertEqual(manager.lastETag, "eTag1")
- }
- func testLastFetchedTemplateVersion() {
- let manager = UserDefaultsManager(
- appName: appName,
- bundleID: bundleID,
- namespace: namespace
- )
- // Test default value
- // Default should be "0"
- XCTAssertEqual(manager.lastFetchedTemplateVersion, "0")
- manager.lastFetchedTemplateVersion = "123"
- XCTAssertEqual(manager.lastFetchedTemplateVersion, "123")
- }
- func testUserDefaultsSharedWithinBundleID() {
- let manager1 = UserDefaultsManager(appName: appName, bundleID: bundleID, namespace: namespace)
- let manager2 = UserDefaultsManager(appName: appName, bundleID: bundleID, namespace: namespace)
- let manager3 = UserDefaultsManager(
- appName: appName,
- bundleID: bundleID,
- namespace: namespace + "1"
- )
- let manager4 = UserDefaultsManager(
- appName: appName,
- bundleID: bundleID + "1",
- namespace: namespace
- )
- manager1.lastETag = "etag1"
- XCTAssertEqual(manager2.lastETag, "etag1")
- XCTAssertEqual(manager3.lastETag, "etag1")
- XCTAssertNil(manager4.lastETag)
- }
- func testLastActiveTemplateVersion() {
- let manager = UserDefaultsManager(
- appName: appName,
- bundleID: bundleID,
- namespace: namespace
- )
- // Test default value
- // Default should be "0"
- XCTAssertEqual(manager.lastActiveTemplateVersion, "0")
- manager.lastActiveTemplateVersion = "456"
- XCTAssertEqual(manager.lastActiveTemplateVersion, "456")
- }
- func testLastETagUpdateTime() {
- let manager = UserDefaultsManager(
- appName: appName,
- bundleID: bundleID,
- namespace: namespace
- )
- let time: TimeInterval = 1_678_886_400 // Example timestamp
- manager.lastETagUpdateTime = time
- XCTAssertEqual(manager.lastETagUpdateTime, time)
- }
- func testLastFetchTime() {
- let manager = UserDefaultsManager(
- appName: appName,
- bundleID: bundleID,
- namespace: namespace
- )
- let time: TimeInterval = 1_678_886_400 // Example timestamp
- manager.lastFetchTime = time
- XCTAssertEqual(manager.lastFetchTime, time)
- }
- func testLastFetchStatus() {
- let manager = UserDefaultsManager(
- appName: appName,
- bundleID: bundleID,
- namespace: namespace
- )
- manager.lastFetchStatus = "Success"
- XCTAssertEqual(manager.lastFetchStatus, "Success")
- }
- func testLastFetchStatusIsNoOp() {
- let manager = UserDefaultsManager(
- appName: appName,
- bundleID: bundleID,
- namespace: namespace
- )
- manager.lastETag = "eTag1"
- XCTAssertEqual(manager.lastETag, "eTag1")
- manager.lastETag = nil
- XCTAssertEqual(manager.lastETag, "eTag1")
- }
- func testIsClientThrottledWithExponentialBackoff() {
- let manager = UserDefaultsManager(
- appName: appName,
- bundleID: bundleID,
- namespace: namespace
- )
- manager.isClientThrottledWithExponentialBackoff = true
- XCTAssertTrue(manager.isClientThrottledWithExponentialBackoff)
- manager.isClientThrottledWithExponentialBackoff = false
- XCTAssertFalse(manager.isClientThrottledWithExponentialBackoff)
- }
- func testThrottleEndTime() {
- let manager = UserDefaultsManager(
- appName: appName,
- bundleID: bundleID,
- namespace: namespace
- )
- let time: TimeInterval = 1_678_886_400 // Example timestamp
- manager.throttleEndTime = time
- XCTAssertEqual(manager.throttleEndTime, time)
- }
- func testCurrentThrottlingRetryIntervalSeconds() {
- let manager = UserDefaultsManager(
- appName: appName,
- bundleID: bundleID,
- namespace: namespace
- )
- let interval: TimeInterval = 300 // Example interval
- manager.currentThrottlingRetryIntervalSeconds = interval
- XCTAssertEqual(manager.currentThrottlingRetryIntervalSeconds, interval)
- }
- func testRealtimeRetryCount() {
- let manager = UserDefaultsManager(
- appName: appName,
- bundleID: bundleID,
- namespace: namespace
- )
- manager.realtimeRetryCount = 5
- XCTAssertEqual(manager.realtimeRetryCount, 5)
- }
- func testRealtimeThrottleEndTime() {
- let manager = UserDefaultsManager(
- appName: appName,
- bundleID: bundleID,
- namespace: namespace
- )
- let time: TimeInterval = 1_678_886_400 // Example timestamp
- manager.realtimeThrottleEndTime = time
- XCTAssertEqual(manager.realtimeThrottleEndTime, time)
- }
- func testCurrentRealtimeThrottlingRetryIntervalSeconds() {
- let manager = UserDefaultsManager(
- appName: appName,
- bundleID: bundleID,
- namespace: namespace
- )
- let interval: TimeInterval = 300 // Example interval
- manager.currentRealtimeThrottlingRetryIntervalSeconds = interval
- XCTAssertEqual(manager.currentRealtimeThrottlingRetryIntervalSeconds, interval)
- }
- func testResetUserDefaults() {
- let manager = UserDefaultsManager(
- appName: appName,
- bundleID: bundleID,
- namespace: namespace
- )
- manager.lastETag = "testValue"
- manager.resetUserDefaults()
- XCTAssertNil(manager.lastETag) // Check if value was removed
- }
- }
|