@@ -146,6 +146,51 @@ - (void)testAddPaymentSuccessWithMockQueue {
146
146
XCTAssertEqual (transactionForUpdateBlock.transactionState , SKPaymentTransactionStatePurchased);
147
147
}
148
148
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
+
149
194
- (void )testRestoreTransactions {
150
195
XCTestExpectation* expectation =
151
196
[self expectationWithDescription: @" result successfully restore transactions" ];
0 commit comments