@@ -146,6 +146,51 @@ - (void)testAddPaymentSuccessWithMockQueue {
146146 XCTAssertEqual (transactionForUpdateBlock.transactionState , SKPaymentTransactionStatePurchased);
147147}
148148
149+ - (void )testAddPaymentWithNullSandboxArgument {
150+ XCTestExpectation* expectation =
151+ [self expectationWithDescription: @" result should return success state" ];
152+ XCTestExpectation* simulatesAskToBuyInSandboxExpectation =
153+ [self expectationWithDescription: @" payment isn't simulatesAskToBuyInSandbox" ];
154+ FlutterMethodCall* call =
155+ [FlutterMethodCall methodCallWithMethodName: @" -[InAppPurchasePlugin addPayment:result:]"
156+ arguments: @{
157+ @" productIdentifier" : @" 123" ,
158+ @" quantity" : @(1 ),
159+ @" simulatesAskToBuyInSandbox" : [NSNull null ],
160+ }];
161+ SKPaymentQueueStub* queue = [SKPaymentQueueStub new ];
162+ queue.testState = SKPaymentTransactionStatePurchased;
163+ __block SKPaymentTransaction* transactionForUpdateBlock;
164+ self.plugin .paymentQueueHandler = [[FIAPaymentQueueHandler alloc ] initWithQueue: queue
165+ transactionsUpdated: ^(NSArray <SKPaymentTransaction*>* _Nonnull transactions) {
166+ SKPaymentTransaction* transaction = transactions[0 ];
167+ if (transaction.transactionState == SKPaymentTransactionStatePurchased) {
168+ transactionForUpdateBlock = transaction;
169+ [expectation fulfill ];
170+ }
171+ if (@available (iOS 8.3 , *)) {
172+ if (!transaction.payment .simulatesAskToBuyInSandbox ) {
173+ [simulatesAskToBuyInSandboxExpectation fulfill ];
174+ }
175+ } else {
176+ [simulatesAskToBuyInSandboxExpectation fulfill ];
177+ }
178+ }
179+ transactionRemoved: nil
180+ restoreTransactionFailed: nil
181+ restoreCompletedTransactionsFinished: nil
182+ shouldAddStorePayment: ^BOOL (SKPayment* _Nonnull payment, SKProduct* _Nonnull product) {
183+ return YES ;
184+ }
185+ updatedDownloads: nil ];
186+ [queue addTransactionObserver: self .plugin.paymentQueueHandler];
187+ [self .plugin handleMethodCall: call
188+ result: ^(id r){
189+ }];
190+ [self waitForExpectations: @[ expectation, simulatesAskToBuyInSandboxExpectation ] timeout: 5 ];
191+ XCTAssertEqual (transactionForUpdateBlock.transactionState , SKPaymentTransactionStatePurchased);
192+ }
193+
149194- (void )testRestoreTransactions {
150195 XCTestExpectation* expectation =
151196 [self expectationWithDescription: @" result successfully restore transactions" ];
0 commit comments