Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Created CachingTrialOrIntroPriceEligibilityChecker #2007

Merged
merged 8 commits into from
Jan 12, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions RevenueCat.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,7 @@
57554C88282AC293009A7E58 /* PurchaseOwnershipTypeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57554C87282AC293009A7E58 /* PurchaseOwnershipTypeTests.swift */; };
57554CC1282AE1E3009A7E58 /* TestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57554CC0282AE1E3009A7E58 /* TestCase.swift */; };
57554CC2282AE1E3009A7E58 /* TestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57554CC0282AE1E3009A7E58 /* TestCase.swift */; };
575642B62910116900719219 /* EligibilityStrings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 575642B52910116900719219 /* EligibilityStrings.swift */; };
575A17AB2773A59300AA6F22 /* CurrentTestCaseTracker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 575A17AA2773A59300AA6F22 /* CurrentTestCaseTracker.swift */; };
575A8EE12922C56300936709 /* AsyncTestHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 575A8EE02922C56300936709 /* AsyncTestHelpers.swift */; };
575A8EE22922C56300936709 /* AsyncTestHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 575A8EE02922C56300936709 /* AsyncTestHelpers.swift */; };
Expand Down Expand Up @@ -331,6 +332,7 @@
57BB070E28D27A2B007F5DF0 /* CachingProductsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57BB070D28D27A2B007F5DF0 /* CachingProductsManager.swift */; };
57BB071628D282A4007F5DF0 /* CachingProductsManagerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57BB071528D282A4007F5DF0 /* CachingProductsManagerTests.swift */; };
57BD50AA27692B7500211D6D /* StoreKitError+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57BD50A927692B7500211D6D /* StoreKitError+Extensions.swift */; };
57BF87592967880C00424254 /* MockCachingTrialOrIntroPriceEligibilityChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57BF87582967880C00424254 /* MockCachingTrialOrIntroPriceEligibilityChecker.swift */; };
57C2931528BFEF4F0054EDFC /* PurchasesError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57C2931428BFEF4F0054EDFC /* PurchasesError.swift */; };
57C2932A28BFF89D0054EDFC /* ErrorMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57E4A52028BD8F610095C793 /* ErrorMatcher.swift */; };
57C381B72791E593009E3940 /* StoreKit2TransactionListenerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57C381B62791E593009E3940 /* StoreKit2TransactionListenerTests.swift */; };
Expand Down Expand Up @@ -387,6 +389,8 @@
57E4A52128BD8F610095C793 /* ErrorMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57E4A52028BD8F610095C793 /* ErrorMatcher.swift */; };
57E4A52228BD8F610095C793 /* ErrorMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57E4A52028BD8F610095C793 /* ErrorMatcher.swift */; };
57E6195028D291DC0093170C /* StoreKit2CachingProductsManagerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57E6194F28D291DC0093170C /* StoreKit2CachingProductsManagerTests.swift */; };
57E9CF0F290B2A4B00EE12D1 /* CachingTrialOrIntroPriceEligibilityChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57E9CF0E290B2A4B00EE12D1 /* CachingTrialOrIntroPriceEligibilityChecker.swift */; };
57E9CF11290B2ADC00EE12D1 /* CachingTrialOrIntroPriceEligibilityCheckerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57E9CF10290B2ADC00EE12D1 /* CachingTrialOrIntroPriceEligibilityCheckerTests.swift */; };
57EAE527274324C60060EB74 /* Lock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57EAE526274324C60060EB74 /* Lock.swift */; };
57EAE52B274332830060EB74 /* Obsoletions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57EAE52A274332830060EB74 /* Obsoletions.swift */; };
57EAE52D274468900060EB74 /* RawDataContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57EAE52C274468900060EB74 /* RawDataContainer.swift */; };
Expand Down Expand Up @@ -822,6 +826,7 @@
57554C83282AC273009A7E58 /* PeriodTypeTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PeriodTypeTests.swift; sourceTree = "<group>"; };
57554C87282AC293009A7E58 /* PurchaseOwnershipTypeTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PurchaseOwnershipTypeTests.swift; sourceTree = "<group>"; };
57554CC0282AE1E3009A7E58 /* TestCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestCase.swift; sourceTree = "<group>"; };
575642B52910116900719219 /* EligibilityStrings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EligibilityStrings.swift; sourceTree = "<group>"; };
575A17AA2773A59300AA6F22 /* CurrentTestCaseTracker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CurrentTestCaseTracker.swift; sourceTree = "<group>"; };
575A8EE02922C56300936709 /* AsyncTestHelpers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AsyncTestHelpers.swift; sourceTree = "<group>"; };
575A8EE42922C9F300936709 /* MockStoreKit2TransactionListenerDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockStoreKit2TransactionListenerDelegate.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -895,6 +900,7 @@
57BB070D28D27A2B007F5DF0 /* CachingProductsManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CachingProductsManager.swift; sourceTree = "<group>"; };
57BB071528D282A4007F5DF0 /* CachingProductsManagerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CachingProductsManagerTests.swift; sourceTree = "<group>"; };
57BD50A927692B7500211D6D /* StoreKitError+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "StoreKitError+Extensions.swift"; sourceTree = "<group>"; };
57BF87582967880C00424254 /* MockCachingTrialOrIntroPriceEligibilityChecker.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockCachingTrialOrIntroPriceEligibilityChecker.swift; sourceTree = "<group>"; };
57C2931428BFEF4F0054EDFC /* PurchasesError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PurchasesError.swift; sourceTree = "<group>"; };
57C381B62791E593009E3940 /* StoreKit2TransactionListenerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoreKit2TransactionListenerTests.swift; sourceTree = "<group>"; };
57C381D92796153D009E3940 /* SK1StoreProductDiscount.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SK1StoreProductDiscount.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -929,6 +935,8 @@
57E415FE28469EAB00EA5460 /* PurchasesGetProductsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PurchasesGetProductsTests.swift; sourceTree = "<group>"; };
57E4A52028BD8F610095C793 /* ErrorMatcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ErrorMatcher.swift; sourceTree = "<group>"; };
57E6194F28D291DC0093170C /* StoreKit2CachingProductsManagerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoreKit2CachingProductsManagerTests.swift; sourceTree = "<group>"; };
57E9CF0E290B2A4B00EE12D1 /* CachingTrialOrIntroPriceEligibilityChecker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CachingTrialOrIntroPriceEligibilityChecker.swift; sourceTree = "<group>"; };
57E9CF10290B2ADC00EE12D1 /* CachingTrialOrIntroPriceEligibilityCheckerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CachingTrialOrIntroPriceEligibilityCheckerTests.swift; sourceTree = "<group>"; };
57EAE526274324C60060EB74 /* Lock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Lock.swift; sourceTree = "<group>"; };
57EAE52A274332830060EB74 /* Obsoletions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Obsoletions.swift; sourceTree = "<group>"; };
57EAE52C274468900060EB74 /* RawDataContainer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RawDataContainer.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -1207,6 +1215,7 @@
F5714EE426DC2F1D00635477 /* CodableStrings.swift */,
9A65E03525918B0500DE00B0 /* ConfigureStrings.swift */,
9A65E03A25918B0900DE00B0 /* CustomerInfoStrings.swift */,
575642B52910116900719219 /* EligibilityStrings.swift */,
9A65E0752591977200DE00B0 /* IdentityStrings.swift */,
2D00A41C2767C08300FC3DD8 /* ManageSubscriptionsStrings.swift */,
9A65E07A2591977500DE00B0 /* NetworkStrings.swift */,
Expand Down Expand Up @@ -1460,6 +1469,7 @@
351B514026D4498F00BD2BD7 /* MockBackend.swift */,
A563F585271E072B00246E0C /* MockBeginRefundRequestHelper.swift */,
2D1C3F3826B9D8B800112626 /* MockBundle.swift */,
57BF87582967880C00424254 /* MockCachingTrialOrIntroPriceEligibilityChecker.swift */,
57CFB96B27FE0E79002A6730 /* MockCurrentUserProvider.swift */,
351B514826D44A2F00BD2BD7 /* MockCustomerInfoManager.swift */,
351B516F26D44E8D00BD2BD7 /* MockDateProvider.swift */,
Expand Down Expand Up @@ -1654,6 +1664,7 @@
F56E2E7627622B5E009FED5B /* TransactionsManager.swift */,
359E8E3E26DEBEEB00B869F9 /* TrialOrIntroPriceEligibilityChecker.swift */,
57BB070D28D27A2B007F5DF0 /* CachingProductsManager.swift */,
57E9CF0E290B2A4B00EE12D1 /* CachingTrialOrIntroPriceEligibilityChecker.swift */,
);
path = Purchasing;
sourceTree = "<group>";
Expand Down Expand Up @@ -1686,6 +1697,7 @@
57554C87282AC293009A7E58 /* PurchaseOwnershipTypeTests.swift */,
57BA943028330ACA00CD5FC5 /* ConfigurationTests.swift */,
57BB071528D282A4007F5DF0 /* CachingProductsManagerTests.swift */,
57E9CF10290B2ADC00EE12D1 /* CachingTrialOrIntroPriceEligibilityCheckerTests.swift */,
);
path = Purchasing;
sourceTree = "<group>";
Expand Down Expand Up @@ -2595,9 +2607,11 @@
2DDF419724F6F331005BC22D /* DateExtensions.swift in Sources */,
9A65E0A52591A23500DE00B0 /* PurchaseStrings.swift in Sources */,
57EAE52B274332830060EB74 /* Obsoletions.swift in Sources */,
57E9CF0F290B2A4B00EE12D1 /* CachingTrialOrIntroPriceEligibilityChecker.swift in Sources */,
2C0B98CD2797070B00C5874F /* PromotionalOffer.swift in Sources */,
57DC9F4627CC2E4900DA6AF9 /* HTTPRequest.swift in Sources */,
2DC5623024EC63730031F69B /* OperationDispatcher.swift in Sources */,
575642B62910116900719219 /* EligibilityStrings.swift in Sources */,
57A0FBF22749CF66009E2FC3 /* SynchronizedUserDefaults.swift in Sources */,
F5714EE526DC2F1D00635477 /* CodableStrings.swift in Sources */,
57C381DC27961547009E3940 /* SK2StoreProductDiscount.swift in Sources */,
Expand Down Expand Up @@ -2792,6 +2806,7 @@
B300E4C026D4371200B22262 /* SKPaymentTransactionExtensionsTests.swift in Sources */,
2DDF41C924F6F4C3005BC22D /* UInt8+ExtensionsTests.swift in Sources */,
2D4D6AF524F717B800B656BE /* ContainerFactory.swift in Sources */,
57E9CF11290B2ADC00EE12D1 /* CachingTrialOrIntroPriceEligibilityCheckerTests.swift in Sources */,
57E415FF28469EAB00EA5460 /* PurchasesGetProductsTests.swift in Sources */,
351B514726D44A0D00BD2BD7 /* MockSystemInfo.swift in Sources */,
B300E4C226D439B700B22262 /* IntroEligibilityCalculatorTests.swift in Sources */,
Expand Down Expand Up @@ -2828,6 +2843,7 @@
351B51B526D450E800BD2BD7 /* ProductsFetcherSK1Tests.swift in Sources */,
2DDF41CC24F6F4C3005BC22D /* AppleReceiptBuilderTests.swift in Sources */,
575A8EE52922C9F300936709 /* MockStoreKit2TransactionListenerDelegate.swift in Sources */,
57BF87592967880C00424254 /* MockCachingTrialOrIntroPriceEligibilityChecker.swift in Sources */,
2DDF41CD24F6F4C3005BC22D /* ASN1ContainerBuilderTests.swift in Sources */,
573A10D52800A7C800F976E5 /* SKErrorTests.swift in Sources */,
B31C8BEC285BD58F001017B7 /* MockIdentityAPI.swift in Sources */,
Expand Down
54 changes: 54 additions & 0 deletions Sources/Logging/Strings/EligibilityStrings.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
//
// Copyright RevenueCat Inc. All Rights Reserved.
//
// Licensed under the MIT License (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// https://opensource.org/licenses/MIT
//
// EligibilityStrings.swift
//
// Created by Nacho Soto on 10/31/22.

import Foundation

// swiftlint:disable identifier_name

enum EligibilityStrings {

case found_cached_eligibility_for_products(_ identifiers: Set<String>)
case caching_intro_eligibility_for_products(_ identifiers: Set<String>)
case clearing_intro_eligibility_cache
case unable_to_get_intro_eligibility_for_user(error: Error)
case check_eligibility_no_identifiers
case check_eligibility_failed(productIdentifier: String, error: Error)
}

extension EligibilityStrings: CustomStringConvertible {

var description: String {
switch self {
case let .found_cached_eligibility_for_products(identifiers):
return "Found cached trial or intro eligibility for products: \(identifiers)"

case let .caching_intro_eligibility_for_products(identifiers):
return "Caching trial or intro eligibility for products: \(identifiers)"

case .clearing_intro_eligibility_cache:
return "Detected active subscriptions changed. Clearing trial or intro eligibility cache."

case let .unable_to_get_intro_eligibility_for_user(error):
return "Unable to get intro eligibility for appUserID: \(error.localizedDescription)"

case .check_eligibility_no_identifiers:
return "Requested trial or introductory price eligibility with no identifiers. " +
"This is likely a program error."

case let .check_eligibility_failed(productIdentifier, error):
return "Error checking discount eligibility for product '\(productIdentifier)': \(error).\n" +
"Will be considered not eligible."
}
}

}
13 changes: 1 addition & 12 deletions Sources/Logging/Strings/PurchaseStrings.swift
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import Foundation
import StoreKit

// swiftlint:disable identifier_name

enum PurchaseStrings {

case storekit1_wrapper_init(StoreKit1Wrapper)
Expand Down Expand Up @@ -52,7 +53,6 @@ enum PurchaseStrings {
case requested_products_not_found(request: SKRequest)
case promo_purchase_product_not_found(productIdentifier: String)
case callback_not_found_for_request(request: SKRequest)
case unable_to_get_intro_eligibility_for_user(error: Error)
case duplicate_refund_request(details: String)
case failed_refund_request(details: String)
case unknown_refund_request_error(details: String)
Expand All @@ -66,8 +66,6 @@ enum PurchaseStrings {
case begin_refund_multiple_active_entitlements
case begin_refund_customer_info_error(entitlementID: String?)
case cached_app_user_id_deleted
case check_eligibility_no_identifiers
case check_eligibility_failed(productIdentifier: String, error: Error)
case missing_cached_customer_info
case sk1_purchase_too_slow
case sk2_purchase_too_slow
Expand Down Expand Up @@ -217,8 +215,6 @@ extension PurchaseStrings: CustomStringConvertible {
case .callback_not_found_for_request(let request):
return "callback not found for failing request: \(request)"

case .unable_to_get_intro_eligibility_for_user(let error):
return "Unable to get intro eligibility for appUserID: \(error.localizedDescription)"
case .duplicate_refund_request(let details):
return "Refund already requested for this product and is either pending, already denied, " +
"or already approved: \(details)"
Expand Down Expand Up @@ -255,13 +251,6 @@ extension PurchaseStrings: CustomStringConvertible {
entries in user defaults don't get deleted by anything other than the SDK.
More info: https://rev.cat/userdefaults-crash
"""
case .check_eligibility_no_identifiers:
return "Requested trial or introductory price eligibility with no identifiers. " +
"This is likely a program error."

case let .check_eligibility_failed(productIdentifier, error):
return "Error checking discount eligibility for product '\(productIdentifier)': \(error).\n" +
"Will be considered not eligible."

case .missing_cached_customer_info:
return "Requested a cached CustomerInfo but it's not available."
Expand Down
1 change: 1 addition & 0 deletions Sources/Logging/Strings/Strings.swift
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ enum Strings {
static let configure = ConfigureStrings.self
static let backendError = BackendErrorStrings.self
static let customerInfo = CustomerInfoStrings.self
static let eligibility = EligibilityStrings.self
static let identity = IdentityStrings.self
static let network = NetworkStrings.self
static let offering = OfferingStrings.self
Expand Down
2 changes: 1 addition & 1 deletion Sources/Misc/Purchases+async.swift
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ extension Purchases {
return nil
} catch {
Logger.error(
Strings.purchase.check_eligibility_failed(
Strings.eligibility.check_eligibility_failed(
productIdentifier: product.productIdentifier,
error: error
)
Expand Down
Loading