Skip to content

Commit

Permalink
Update tests
Browse files Browse the repository at this point in the history
  • Loading branch information
nik3212 committed Jan 15, 2024
1 parent 2950cdb commit e6dba40
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ final class IAPProvider: IIAPProvider {
func fetch(productIDs: Set<String>, completion: @escaping Closure<Result<[StoreProduct], IAPError>>) {
if #available(iOS 15.0, tvOS 15.0, watchOS 8.0, macOS 12.0, *) {
AsyncHandler.call(
completion: { [weak self] result in
completion: { [weak self] (result: Result<[SK2StoreProduct], Error>) in

Check warning on line 58 in Sources/Flare/Classes/Providers/IAPProvider/IAPProvider.swift

View check run for this annotation

Codecov / codecov/patch

Sources/Flare/Classes/Providers/IAPProvider/IAPProvider.swift#L58

Added line #L58 was not covered by tests
self?.handleFetchResult(result: result, completion)
},
asyncMethod: {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ final class PurchaseProvider {
promotionalOffer: PromotionalOffer?,
completion: @escaping @MainActor (Result<StoreTransaction, IAPError>) -> Void
) {
AsyncHandler.call(completion: { result in
AsyncHandler.call(completion: { (result: Result<Product.PurchaseResult, Error>) in
Task {
switch result {
case let .success(result):
Expand Down
16 changes: 9 additions & 7 deletions Tests/FlareTests/UnitTests/FlareTests.swift
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
//
// Flare
// Copyright © 2023 Space Code. All rights reserved.
// Copyright © 2024 Space Code. All rights reserved.
//

@testable import Flare
Expand Down Expand Up @@ -64,8 +64,8 @@ class FlareTests: XCTestCase {
sut.purchase(product: .fake(skProduct: .fake(id: .productID)), completion: { _ in })

// then
XCTAssertTrue(iapProviderMock.invokedPurchase)
XCTAssertEqual(iapProviderMock.invokedPurchaseParameters?.product.productIdentifier, .productID)
XCTAssertTrue(iapProviderMock.invokedPurchaseWithPromotionalOffer)
XCTAssertEqual(iapProviderMock.invokedPurchaseWithPromotionalOfferParameters?.product.productIdentifier, .productID)
}

func test_thatFlareThrowsAnError_whenUserCannotMakePayments() {
Expand All @@ -83,6 +83,7 @@ class FlareTests: XCTestCase {
// given
let paymentTransaction = StoreTransaction(storeTransaction: StoreTransactionStub())
iapProviderMock.stubbedCanMakePayments = true
iapProviderMock.stubbedPurchaseWithPromotionalOffer = .success(paymentTransaction)

// when
var transaction: IStoreTransaction?
Expand All @@ -92,14 +93,15 @@ class FlareTests: XCTestCase {
iapProviderMock.invokedPurchaseParameters?.completion(.success(paymentTransaction))

// then
XCTAssertTrue(iapProviderMock.invokedPurchase)
XCTAssertTrue(iapProviderMock.invokedPurchaseWithPromotionalOffer)
XCTAssertEqual(transaction?.productIdentifier, paymentTransaction.productIdentifier)
}

func test_thatFlareDoesNotPurchaseAProduct_whenPurchaseReturnsUnkownError() {
// given
let errorMock = IAPError.paymentNotAllowed
iapProviderMock.stubbedCanMakePayments = true
iapProviderMock.stubbedPurchaseWithPromotionalOffer = .failure(errorMock)

// when
var error: IAPError?
Expand All @@ -109,7 +111,7 @@ class FlareTests: XCTestCase {
iapProviderMock.invokedPurchaseParameters?.completion(.failure(errorMock))

// then
XCTAssertTrue(iapProviderMock.invokedPurchase)
XCTAssertTrue(iapProviderMock.invokedPurchaseWithPromotionalOffer)
XCTAssertEqual(error, errorMock)
}

Expand All @@ -131,13 +133,13 @@ class FlareTests: XCTestCase {
let transactionMock = StoreTransaction(storeTransaction: StoreTransactionStub())

iapProviderMock.stubbedCanMakePayments = true
iapProviderMock.stubbedAsyncPurchase = transactionMock
iapProviderMock.stubbedPurchaseAsyncWithPromotionalOffer = transactionMock

// when
let transaction = await value(for: { try await sut.purchase(product: .fake(skProduct: .fake(id: .productID))) })

// then
XCTAssertTrue(iapProviderMock.invokedAsyncPurchase)
XCTAssertTrue(iapProviderMock.invokedPurchaseAsyncWithPromotionalOffer)
XCTAssertEqual(transaction?.productIdentifier, transactionMock.productIdentifier)
}

Expand Down
47 changes: 30 additions & 17 deletions Tests/FlareTests/UnitTests/TestHelpers/Mocks/IAPProviderMock.swift
Original file line number Diff line number Diff line change
Expand Up @@ -191,29 +191,42 @@ final class IAPProviderMock: IIAPProvider {
return stubbedAsyncPurchaseWithOptions
}

func promotionalOffer(
productDiscount _: StoreProductDiscount,
product _: StoreProduct,
completion _: @escaping @Sendable (Result<PromotionalOffer, IAPError>) -> Void
) {}

func purchase(
product _: StoreProduct,
promotionalOffer _: PromotionalOffer?,
completion _: @escaping Closure<Result<StoreTransaction, IAPError>>
) {}

var invokedPurchaseWithPromotionalOffer = false
var invokedPurchaseWithPromotionalOfferCount = 0
var stubbedPurchaseWithPromotionalOffer: StoreTransaction!
var invokedPurchaseWithPromotionalOfferParameters: (product: StoreProduct, promotionalOffer: PromotionalOffer?)?
var invokedPurchaseWithPromotionalOfferParametersList = [(product: StoreProduct, VpromotionalOffer: PromotionalOffer?)]()
var stubbedPurchaseWithPromotionalOffer: Result<StoreTransaction, IAPError>?

func purchase(
product _: StoreProduct,
promotionalOffer _: PromotionalOffer?
) async throws -> StoreTransaction {
product: StoreProduct,
promotionalOffer: PromotionalOffer?,
completion: @escaping Closure<Result<StoreTransaction, IAPError>>
) {
invokedPurchaseWithPromotionalOffer = true
invokedPurchaseWithPromotionalOfferCount += 1
return stubbedPurchaseWithPromotionalOffer
invokedPurchaseWithPromotionalOfferParameters = (product, promotionalOffer)
invokedPurchaseWithPromotionalOfferParametersList.append((product, promotionalOffer))

if let result = stubbedPurchaseWithPromotionalOffer {
completion(result)
}
}

var invokedPurchaseAsyncWithPromotionalOffer = false
var invokedPurchaseAsyncWithPromotionalOfferCount = 0
var invokedPurchaseAsyncWithPromotionalOfferParameters: (product: StoreProduct, promotionalOffer: PromotionalOffer?)?
var invokedPurchaseAsyncWithPromotionalOfferParametersList = [(product: StoreProduct, VpromotionalOffer: PromotionalOffer?)]()
var stubbedPurchaseAsyncWithPromotionalOffer: StoreTransaction!

func purchase(
product: StoreProduct,
promotionalOffer: PromotionalOffer?
) async throws -> StoreTransaction {
invokedPurchaseAsyncWithPromotionalOffer = true
invokedPurchaseAsyncWithPromotionalOfferCount += 1
invokedPurchaseAsyncWithPromotionalOfferParameters = (product, promotionalOffer)
invokedPurchaseAsyncWithPromotionalOfferParametersList.append((product, promotionalOffer))
return stubbedPurchaseAsyncWithPromotionalOffer
}

@available(iOS 15.0, tvOS 15.0, watchOS 8.0, macOS 12.0, *)
Expand Down

0 comments on commit e6dba40

Please sign in to comment.