Skip to content
This repository was archived by the owner on Feb 22, 2023. It is now read-only.

Commit 01bb825

Browse files
committed
in_app_purchase: started supported null as a parameter for the sandbox arguement
1 parent 18771ff commit 01bb825

File tree

2 files changed

+45
-2
lines changed

2 files changed

+45
-2
lines changed

packages/in_app_purchase/ios/Classes/InAppPurchasePlugin.m

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -179,8 +179,10 @@ - (void)addPayment:(FlutterMethodCall *)call result:(FlutterResult)result {
179179
NSNumber *quantity = [paymentMap objectForKey:@"quantity"];
180180
payment.quantity = (quantity != nil) ? quantity.integerValue : 1;
181181
if (@available(iOS 8.3, *)) {
182-
payment.simulatesAskToBuyInSandbox =
183-
[[paymentMap objectForKey:@"simulatesAskToBuyInSandbox"] boolValue];
182+
NSNumber *simulatesAskToBuyInSandbox = [paymentMap objectForKey:@"simulatesAskToBuyInSandbox"];
183+
payment.simulatesAskToBuyInSandbox = (id)simulatesAskToBuyInSandbox == (id)[NSNull null]
184+
? NO
185+
: [simulatesAskToBuyInSandbox boolValue];
184186
}
185187

186188
if (![self.paymentQueueHandler addPayment:payment]) {

packages/in_app_purchase/ios/Tests/InAppPurchasePluginTest.m

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,47 @@ - (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+
}
172+
transactionRemoved:nil
173+
restoreTransactionFailed:nil
174+
restoreCompletedTransactionsFinished:nil
175+
shouldAddStorePayment:^BOOL(SKPayment* _Nonnull payment, SKProduct* _Nonnull product) {
176+
if (!payment.simulatesAskToBuyInSandbox) {
177+
[simulatesAskToBuyInSandboxExpectation fulfill];
178+
}
179+
return YES;
180+
}
181+
updatedDownloads:nil];
182+
[queue addTransactionObserver:self.plugin.paymentQueueHandler];
183+
[self.plugin handleMethodCall:call
184+
result:^(id r){
185+
}];
186+
[self waitForExpectations:@[ expectation, simulatesAskToBuyInSandboxExpectation] timeout:5];
187+
XCTAssertEqual(transactionForUpdateBlock.transactionState, SKPaymentTransactionStatePurchased);
188+
}
189+
149190
- (void)testRestoreTransactions {
150191
XCTestExpectation* expectation =
151192
[self expectationWithDescription:@"result successfully restore transactions"];

0 commit comments

Comments
 (0)