Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
## 0.4.10+1

* Fixes SK2Transaction to expose the real purchased quantity instead of defaulting to 1.

## 0.4.10

* Clarifies `completePurchase` usage and the consequences of unfinished transactions in the README and API docstrings.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,7 @@ extension on SK2TransactionMessage {
productId: productId,
purchaseDate: purchaseDate ?? '',
expirationDate: expirationDate,
quantity: purchasedQuantity,
Comment thread
LouiseHsu marked this conversation as resolved.
appAccountToken: appAccountToken,
receiptData: receiptData,
jsonRepresentation: jsonRepresentation,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: in_app_purchase_storekit
description: An implementation for the iOS and macOS platforms of the Flutter `in_app_purchase` plugin. This uses the StoreKit Framework.
repository: https://github.com/flutter/packages/tree/main/packages/in_app_purchase/in_app_purchase_storekit
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+in_app_purchase%22
version: 0.4.10
version: 0.4.10+1

environment:
sdk: ^3.10.0
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -319,6 +319,8 @@ class FakeStoreKit2Platform implements InAppPurchase2API {
late bool testTransactionFail;
late int testTransactionCancel;
late List<SK2Transaction> finishedTransactions;
List<SK2TransactionMessage> transactionsList = <SK2TransactionMessage>[];
List<SK2TransactionMessage> unfinishedTransactionsList = <SK2TransactionMessage>[];

PlatformException? queryProductException;
bool isListenerRegistered = false;
Expand Down Expand Up @@ -348,6 +350,28 @@ class FakeStoreKit2Platform implements InAppPurchase2API {
eligibleWinBackOffers = <String, Set<String>>{};
eligibleIntroductoryOffers = <String, bool>{};
simulatedPurchaseResult = SK2ProductPurchaseResultMessage.success;
transactionsList = <SK2TransactionMessage>[
SK2TransactionMessage(
id: 123,
originalId: 123,
productId: 'product_id',
purchaseDate: '12-12',
purchasedQuantity: 2,
status: SK2PurchaseStatusMessage.purchased,
),
];
unfinishedTransactionsList = <SK2TransactionMessage>[
SK2TransactionMessage(
id: 123,
originalId: 123,
productId: 'product_id',
purchaseDate: '12-12',
receiptData: 'fake_jws_representation',
appAccountToken: 'fake_app_account_token',
purchasedQuantity: 3,
status: SK2PurchaseStatusMessage.purchased,
),
];
}

SK2TransactionMessage createRestoredTransaction(
Expand Down Expand Up @@ -449,30 +473,12 @@ class FakeStoreKit2Platform implements InAppPurchase2API {

@override
Future<List<SK2TransactionMessage>> transactions() {
return Future<List<SK2TransactionMessage>>.value(<SK2TransactionMessage>[
SK2TransactionMessage(
id: 123,
originalId: 123,
productId: 'product_id',
purchaseDate: '12-12',
status: SK2PurchaseStatusMessage.purchased,
),
]);
return Future<List<SK2TransactionMessage>>.value(transactionsList);
}

@override
Future<List<SK2TransactionMessage>> unfinishedTransactions() {
return Future<List<SK2TransactionMessage>>.value(<SK2TransactionMessage>[
SK2TransactionMessage(
id: 123,
originalId: 123,
productId: 'product_id',
purchaseDate: '12-12',
receiptData: 'fake_jws_representation',
appAccountToken: 'fake_app_account_token',
status: SK2PurchaseStatusMessage.purchased,
),
]);
return Future<List<SK2TransactionMessage>>.value(unfinishedTransactionsList);
}

@override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -655,5 +655,23 @@ void main() {
expect(transactions.first.appAccountToken, isNotNull);
expect(transactions.first.appAccountToken, 'fake_app_account_token');
});

test('should expose purchased quantity in unfinished transactions', () async {
final List<SK2Transaction> transactions = await SK2Transaction.unfinishedTransactions();

expect(transactions, isNotEmpty);
expect(transactions.first.quantity, 3);
});
});

group('transactions', () {
test('should return transactions', () async {
final List<SK2Transaction> transactions = await SK2Transaction.transactions();

expect(transactions, isNotEmpty);
expect(transactions.first.id, '123');
expect(transactions.first.productId, 'product_id');
expect(transactions.first.quantity, 2);
});
});
}
Loading