diff --git a/Sources/Identity/CustomerInfoManager.swift b/Sources/Identity/CustomerInfoManager.swift index 09b3912ee8..b04d30ee71 100644 --- a/Sources/Identity/CustomerInfoManager.swift +++ b/Sources/Identity/CustomerInfoManager.swift @@ -19,8 +19,6 @@ class CustomerInfoManager { typealias CustomerInfoCompletion = @MainActor @Sendable (Result) -> Void - var lastSentCustomerInfo: CustomerInfo? { return self.data.value.lastSentCustomerInfo } - private let offlineEntitlementsManager: OfflineEntitlementsManager private let operationDispatcher: OperationDispatcher private let backend: Backend @@ -207,7 +205,6 @@ class CustomerInfoManager { func clearCustomerInfoCache(forAppUserID appUserID: String) { self.modifyData { $0.deviceCache.clearCustomerInfoCache(appUserID: appUserID) - $0.lastSentCustomerInfo = nil } } @@ -251,6 +248,9 @@ class CustomerInfoManager { } } + // Visible for tests + var lastSentCustomerInfo: CustomerInfo? { return self.data.value.lastSentCustomerInfo } + private func removeObserver(with identifier: Int) { self.modifyData { $0.customerInfoObserversByIdentifier.removeValue(forKey: identifier) diff --git a/Tests/UnitTests/Identity/CustomerInfoManagerTests.swift b/Tests/UnitTests/Identity/CustomerInfoManagerTests.swift index 5bdf6b67cd..c29cd6f421 100644 --- a/Tests/UnitTests/Identity/CustomerInfoManagerTests.swift +++ b/Tests/UnitTests/Identity/CustomerInfoManagerTests.swift @@ -16,6 +16,7 @@ class BaseCustomerInfoManagerTests: TestCase { var mockTransactionPoster: MockTransactionPoster! var mockCustomerInfo: CustomerInfo! + var mockCustomerInfo2: CustomerInfo! var customerInfoManager: CustomerInfoManager! @@ -37,6 +38,16 @@ class BaseCustomerInfoManagerTests: TestCase { "original_application_version": NSNull() ] as [String: Any] ]) + self.mockCustomerInfo2 = try CustomerInfo(data: [ + "request_date": "2020-12-21T02:40:36Z", + "subscriber": [ + "original_app_user_id": "another_user", + "first_seen": "2020-06-17T16:05:33Z", + "subscriptions": [:] as [String: Any], + "other_purchases": [:] as [String: Any], + "original_application_version": NSNull() + ] as [String: Any] + ]) self.mockOfflineEntitlementsManager = MockOfflineEntitlementsManager() self.mockDeviceCache = MockDeviceCache(sandboxEnvironmentDetector: self.mockSystemInfo) @@ -437,6 +448,17 @@ class CustomerInfoManagerTests: BaseCustomerInfoManagerTests { expect(self.customerInfoManagerLastCustomerInfoChange) == (old: nil, new: info) } + func testCacheCustomerInfoSendsToDelegateAfterCachingComputedOnDevice() { + let info1 = self.mockCustomerInfo.copy(with: .verifiedOnDevice) + let info2 = self.mockCustomerInfo2.copy(with: .verifiedOnDevice) + + self.customerInfoManager.cache(customerInfo: info1, appUserID: info1.originalAppUserId) + self.customerInfoManager.cache(customerInfo: info2, appUserID: info2.originalAppUserId) + + expect(self.customerInfoManagerChangesCallCount).toEventually(equal(2)) + expect(self.customerInfoManagerLastCustomerInfoChange) == (old: info1, new: info2) + } + func testClearCustomerInfoCacheClearsCorrectly() { let appUserID = "myUser" customerInfoManager.clearCustomerInfoCache(forAppUserID: appUserID) @@ -444,14 +466,14 @@ class CustomerInfoManagerTests: BaseCustomerInfoManagerTests { expect(self.mockDeviceCache.invokedClearCustomerInfoCacheParameters?.appUserID) == appUserID } - func testClearCustomerInfoCacheResetsLastSent() { + func testClearCustomerInfoCacheDoesNotResetLastSent() { let appUserID = "myUser" customerInfoManager.cache(customerInfo: mockCustomerInfo, appUserID: appUserID) expect(self.customerInfoManager.lastSentCustomerInfo) == self.mockCustomerInfo customerInfoManager.clearCustomerInfoCache(forAppUserID: appUserID) - expect(self.customerInfoManager.lastSentCustomerInfo).to(beNil()) + expect(self.customerInfoManager.lastSentCustomerInfo) === self.mockCustomerInfo } }