-
Notifications
You must be signed in to change notification settings - Fork 316
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
New TestStoreProduct
for creating mock StoreProduct
s and Offering
s
#2711
New TestStoreProduct
for creating mock StoreProduct
s and Offering
s
#2711
Conversation
be432d1
to
63ef66e
Compare
092c19d
to
3c606bf
Compare
734d723
to
781c5bf
Compare
781c5bf
to
d7e50c2
Compare
d7e50c2
to
750aaaa
Compare
Codecov Report
@@ Coverage Diff @@
## main #2711 +/- ##
==========================================
+ Coverage 86.46% 86.51% +0.04%
==========================================
Files 212 213 +1
Lines 15055 15101 +46
==========================================
+ Hits 13018 13064 +46
Misses 2037 2037
|
750aaaa
to
66fe37d
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
love it! Tagging @tonidero since it's related to some of the stuff we were talking about for android
} else if product.isTestProduct { | ||
self.handleTestProduct(completion) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
we really aren't making Liskov very happy with this, but it should be fine
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If I understand your point, that also applies to how we handle SK1 and SK2 products above, right?
Sources/Purchasing/StoreKitAbstractions/Test Data/TestStoreProduct.swift
Outdated
Show resolved
Hide resolved
Fixes #1563 and #2193. This introduces **`DEBUG` and `Swift` only** types that allow creating a whole `Offering` for tests and SwiftUI previews. Example: ![Screenshot 2023-06-26 at 12 36 40](https://github.com/RevenueCat/purchases-ios/assets/685609/03d83e65-b95b-40ba-80ad-f8be435c6d3e) By making it available in only `DEBUG` builds we ensure that apps can't accidentally try to purchase these products, which would be impossible. If this is attempted in `DEBUG` builds, we return `ErrorCode`. When trying to compile this API in release builds, you get an error with a suggestion: ![image](https://github.com/RevenueCat/purchases-ios/assets/685609/f83b8848-dab6-4ae6-a92d-5c07a30be217)
66fe37d
to
272f3ee
Compare
**This is an automatic release.** ### New Features * New `TestStoreProduct` for creating mock `StoreProduct`s and `Offering`s (#2711) via NachoSoto (@NachoSoto) ✨ With this new API you can now create fake products for unit tests and SwiftUI previews! 🎉 #### Example: ```swift let product = TestStoreProduct( localizedTitle: "PRO monthly", price: 3.99, localizedPriceString: "$3.99", productIdentifier: "com.revenuecat.product", productType: .autoRenewableSubscription, localizedDescription: "Description", subscriptionGroupIdentifier: "group", subscriptionPeriod: .init(value: 1, unit: .month) ) let offering = Offering( identifier: "offering", serverDescription: "Main offering", metadata: [:], availablePackages: [ .init( identifier: "monthly", packageType: .monthly, storeProduct: product.toStoreProduct(), offeringIdentifier: offering ) ] ) ``` ### Dependency Updates * Bump fastlane-plugin-revenuecat_internal from `13773d2` to `b2108fb` (#2706) via dependabot[bot] (@dependabot[bot]) ### Other Changes * `VerificationResult: CustomDebugStringConvertible` (#2739) via NachoSoto (@NachoSoto) * Refactor: simplified `PurchasesOrchestrator.syncPurchases` (#2731) via NachoSoto (@NachoSoto) * `Trusted Entitlements`: add integration tests to verify `CustomerInfo` cache invalidation (#2730) via NachoSoto (@NachoSoto) * `SystemInfo.identifierForVendor`: add tests (#2732) via NachoSoto (@NachoSoto) * `Tests`: disabled `iOS 11.x` tests to fix `Xcode 15` tests (#2720) via NachoSoto (@NachoSoto) * `DebugViewSwiftUITests`: create separate snapshots for each OS version (#2721) via NachoSoto (@NachoSoto) * `Integration Tests`: fix clearing `UserDefaults` before each test (#2719) via NachoSoto (@NachoSoto) * Remove unused `Signing.loadPublicKey(with:)` (#2714) via NachoSoto (@NachoSoto) * Add `UInt32(littleEndian32Bits:)` and `UInt32.littleEndianData` (#2713) via NachoSoto (@NachoSoto) * `TimingUtil`: added synchronous API (#2716) via NachoSoto (@NachoSoto) * `XCFramework`: sign archive for `Xcode 15` (#2709) via NachoSoto (@NachoSoto) * `CI`: removed `carthage_archive` from `release` lane (#2710) via NachoSoto (@NachoSoto) * `PriceFormatterProvider.priceFormatterForSK2`: enable on all versions (#2712) via NachoSoto (@NachoSoto) * `xrOS`: add support for `debugRevenueCatOverlay` (#2702) via NachoSoto (@NachoSoto) * Refactor method to get product ID including plan ID in android purchases (#2708) via Toni Rico (@tonidero) * `Purchases.restoreLogHandler` (#2699) via NachoSoto (@NachoSoto) * Remove alpha from purchase tester icon to upload to testflight (#2705) via Toni Rico (@tonidero) --------- Co-authored-by: NachoSoto <ignaciosoto90@gmail.com>
See #2711. This is needed for #2855. In order to be able to create test products for the paywall loading screen, we need to be able to do this in release builds as well. Another benefit of exposing `TestStoreProduct` in release builds is that it's also usable for pre-built versions of the SDK (like Carthage).
Fixes #1563 and #2193.
This introduces
DEBUG
andSwift
only types that allow creating a wholeOffering
for tests and SwiftUI previews.Example:
By making it available in only
DEBUG
builds we ensure that apps can't accidentally try to purchase these products, which would be impossible. If this is attempted inDEBUG
builds, we returnErrorCode
.When trying to compile this API in release builds, you get an error with a suggestion: