Browse Source

Add restoreCompletedTransactionsFinished and unit test

Andrea Bizzotto 8 years ago
parent
commit
91481dff13

+ 1 - 0
SwiftyStoreKit/PaymentQueueController.swift

@@ -166,6 +166,7 @@ public class PaymentQueueController: NSObject, SKPaymentTransactionObserver {
     
     public func paymentQueueRestoreCompletedTransactionsFinished(_ queue: SKPaymentQueue) {
 
+        restorePurchasesController.restoreCompletedTransactionsFinished()
     }
     
     public func paymentQueue(_ queue: SKPaymentQueue, updatedDownloads downloads: [SKDownload]) {

+ 18 - 0
SwiftyStoreKit/RestorePurchasesController.swift

@@ -78,6 +78,9 @@ public class RestorePurchasesController: TransactionController {
         if restoredProducts.count > 0 {
             restorePurchases.callback(restoredProducts)
         }
+        // Reset to nil after purchases complete
+        self.restorePurchases = nil
+
         return unhandledTransactions
     }
     
@@ -87,5 +90,20 @@ public class RestorePurchasesController: TransactionController {
             return
         }
         restorePurchases.callback([.failed(error: error)])
+        
+        // Reset to nil after error received
+        self.restorePurchases = nil
+
+    }
+    
+    public func restoreCompletedTransactionsFinished() {
+        
+        guard let restorePurchases = restorePurchases else {
+            return
+        }
+        restorePurchases.callback([])
+        
+        // Reset to nil after error transactions finished
+        self.restorePurchases = nil
     }
 }

+ 14 - 0
SwiftyStoreKitTests/RestorePurchasesControllerTests.swift

@@ -140,6 +140,20 @@ class RestorePurchasesControllerTests: XCTestCase {
         XCTAssertTrue(callbackCalled)
     }
 
+    func testRestoreCompletedTransactionsFinished_callsCallbackWithNoTransactions() {
+        
+        var callbackCalled = false
+        let restorePurchases = RestorePurchases(atomically: true) { results in
+            callbackCalled = true
+
+            XCTAssertEqual(results.count, 0)
+        }
+        let restorePurchasesController = makeRestorePurchasesController(restorePurchases: restorePurchases)
+        
+        restorePurchasesController.restoreCompletedTransactionsFinished()
+        
+        XCTAssertTrue(callbackCalled)
+    }
     
     func makeRestorePurchasesController(restorePurchases: RestorePurchases?) -> RestorePurchasesController {