瀏覽代碼

Add assertion to check that completeTransactions() was called when the app launches.
Update PaymentQueueControllerTests to enqueue purchase calls in the correct order.

Andrea Bizzotto 7 年之前
父節點
當前提交
755ffd845b
共有 2 個文件被更改,包括 17 次插入7 次删除
  1. 9 1
      SwiftyStoreKit/PaymentQueueController.swift
  2. 8 6
      SwiftyStoreKitTests/PaymentQueueControllerTests.swift

+ 9 - 1
SwiftyStoreKit/PaymentQueueController.swift

@@ -103,9 +103,16 @@ class PaymentQueueController: NSObject, SKPaymentTransactionObserver {
         super.init()
         super.init()
         paymentQueue.add(self)
         paymentQueue.add(self)
     }
     }
+    
+    private func assertCompleteTransactionsWasCalled() {
+        
+        let message = "SwiftyStoreKit.completeTransactions() must be called when the app launches."
+        assert(completeTransactionsController.completeTransactions != nil, message)
+    }
 
 
     func startPayment(_ payment: Payment) {
     func startPayment(_ payment: Payment) {
-
+        assertCompleteTransactionsWasCalled()
+        
         let skPayment = SKMutablePayment(product: payment.product)
         let skPayment = SKMutablePayment(product: payment.product)
         skPayment.applicationUsername = payment.applicationUsername
         skPayment.applicationUsername = payment.applicationUsername
         skPayment.quantity = payment.quantity
         skPayment.quantity = payment.quantity
@@ -115,6 +122,7 @@ class PaymentQueueController: NSObject, SKPaymentTransactionObserver {
     }
     }
 
 
     func restorePurchases(_ restorePurchases: RestorePurchases) {
     func restorePurchases(_ restorePurchases: RestorePurchases) {
+        assertCompleteTransactionsWasCalled()
 
 
         if restorePurchasesController.restorePurchases != nil {
         if restorePurchasesController.restorePurchases != nil {
             return
             return

+ 8 - 6
SwiftyStoreKitTests/PaymentQueueControllerTests.swift

@@ -69,6 +69,8 @@ class PaymentQueueControllerTests: XCTestCase {
 
 
         let payment = makeTestPayment(productIdentifier: "com.SwiftyStoreKit.product1") { _ in }
         let payment = makeTestPayment(productIdentifier: "com.SwiftyStoreKit.product1") { _ in }
 
 
+        paymentQueueController.completeTransactions(CompleteTransactions(atomically: true) { _ in })
+
         paymentQueueController.startPayment(payment)
         paymentQueueController.startPayment(payment)
 
 
         XCTAssertEqual(spy.payments.count, 1)
         XCTAssertEqual(spy.payments.count, 1)
@@ -127,12 +129,12 @@ class PaymentQueueControllerTests: XCTestCase {
         }
         }
 
 
         // run
         // run
+        paymentQueueController.completeTransactions(completeTransactions)
+
         paymentQueueController.startPayment(testPayment)
         paymentQueueController.startPayment(testPayment)
 
 
         paymentQueueController.restorePurchases(restorePurchases)
         paymentQueueController.restorePurchases(restorePurchases)
 
 
-        paymentQueueController.completeTransactions(completeTransactions)
-
         paymentQueueController.paymentQueue(SKPaymentQueue(), updatedTransactions: transactions)
         paymentQueueController.paymentQueue(SKPaymentQueue(), updatedTransactions: transactions)
         paymentQueueController.paymentQueueRestoreCompletedTransactionsFinished(SKPaymentQueue())
         paymentQueueController.paymentQueueRestoreCompletedTransactionsFinished(SKPaymentQueue())
 
 
@@ -183,10 +185,10 @@ class PaymentQueueControllerTests: XCTestCase {
         }
         }
 
 
         // run
         // run
-        paymentQueueController.startPayment(testPayment)
-
         paymentQueueController.completeTransactions(completeTransactions)
         paymentQueueController.completeTransactions(completeTransactions)
 
 
+        paymentQueueController.startPayment(testPayment)
+
         paymentQueueController.paymentQueue(SKPaymentQueue(), updatedTransactions: transactions)
         paymentQueueController.paymentQueue(SKPaymentQueue(), updatedTransactions: transactions)
         paymentQueueController.paymentQueueRestoreCompletedTransactionsFinished(SKPaymentQueue())
         paymentQueueController.paymentQueueRestoreCompletedTransactionsFinished(SKPaymentQueue())
 
 
@@ -238,10 +240,10 @@ class PaymentQueueControllerTests: XCTestCase {
         }
         }
 
 
         // run
         // run
-        paymentQueueController.restorePurchases(restorePurchases)
-
         paymentQueueController.completeTransactions(completeTransactions)
         paymentQueueController.completeTransactions(completeTransactions)
 
 
+        paymentQueueController.restorePurchases(restorePurchases)
+
         paymentQueueController.paymentQueue(SKPaymentQueue(), updatedTransactions: transactions)
         paymentQueueController.paymentQueue(SKPaymentQueue(), updatedTransactions: transactions)
         paymentQueueController.paymentQueueRestoreCompletedTransactionsFinished(SKPaymentQueue())
         paymentQueueController.paymentQueueRestoreCompletedTransactionsFinished(SKPaymentQueue())