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

Commit f45d7ef

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

File tree

2 files changed

+49
-2
lines changed

2 files changed

+49
-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: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
} else {
175+
[simulatesAskToBuyInSandboxExpectation fulfill];
176+
}
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

Comments
 (0)