Skip to content

Commit

Permalink
Use http client in validateReceiptIos (#322)
Browse files Browse the repository at this point in the history
* Use http client in validateReceiptIos

* Refactor nullable variable to late variable
  • Loading branch information
dev-yakuza authored Nov 14, 2021
1 parent 4097b7c commit 12a7ccb
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 6 deletions.
10 changes: 5 additions & 5 deletions lib/flutter_inapp_purchase.dart
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,10 @@ class FlutterInappPurchase {
static MethodChannel get channel => _channel;

final Platform _pf;
final http.Client? _httpClient;
late http.Client _httpClient;

static Platform get _platform => instance._pf;
static http.Client? get _client => instance._httpClient;
static http.Client get _client => instance._httpClient;

factory FlutterInappPurchase(FlutterInappPurchase _instance) {
instance = _instance;
Expand All @@ -53,7 +53,7 @@ class FlutterInappPurchase {
@visibleForTesting
FlutterInappPurchase.private(Platform platform, {http.Client? client})
: _pf = platform,
_httpClient = client;
_httpClient = client ?? http.Client();

/// Returns the platform version on `Android` and `iOS`.
///
Expand Down Expand Up @@ -549,7 +549,7 @@ class FlutterInappPurchase {
final String url = isTest
? 'https://sandbox.itunes.apple.com/verifyReceipt'
: 'https://buy.itunes.apple.com/verifyReceipt';
return await http.post(
return await _client.post(
Uri.parse(url),
headers: {
'Accept': 'application/json',
Expand Down Expand Up @@ -585,7 +585,7 @@ class FlutterInappPurchase {
final String type = isSubscription ? 'subscriptions' : 'products';
final String url =
'https://www.googleapis.com/androidpublisher/v3/applications/$packageName/purchases/$type/$productId/tokens/$productToken?access_token=$accessToken';
return await _client!.get(
return await _client.get(
Uri.parse(url),
headers: {
'Accept': 'application/json',
Expand Down
54 changes: 53 additions & 1 deletion test/flutter_inapp_purchase_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -1400,7 +1400,7 @@ void main() {
});

FlutterInappPurchase(FlutterInappPurchase.private(
FakePlatform(operatingSystem: "ios"),
FakePlatform(operatingSystem: "android"),
client: mockClient));
});

Expand Down Expand Up @@ -1443,5 +1443,57 @@ void main() {
"https://www.googleapis.com/androidpublisher/v3/applications/$packageName/purchases/$type/$productId/tokens/$productToken?access_token=$accessToken");
});
});

group('validateReceiptIos', () {
final receiptBody = {
'receipt-data': 'purchasedItem.transactionReceipt',
'password': 'apple_password'
};

setUp(() {
http.Client mockClient = MockClient((request) async {
return Response(json.encode({'status': 0}), 200);
});

FlutterInappPurchase(FlutterInappPurchase.private(
FakePlatform(operatingSystem: "ios"),
client: mockClient,
));
});

tearDown(() {
FlutterInappPurchase.channel.setMethodCallHandler(null);
});

test('returns correct http request url in sandbox', () async {
final response = await FlutterInappPurchase.instance.validateReceiptIos(
receiptBody: receiptBody,
isTest: true,
);

expect(
response.request!.url.toString(),
"https://sandbox.itunes.apple.com/verifyReceipt",
);
expect(response.statusCode, 200);
final data = jsonDecode(response.body);
expect(data['status'], 0);
});

test('returns correct http request url in production', () async {
final response = await FlutterInappPurchase.instance.validateReceiptIos(
receiptBody: receiptBody,
isTest: false,
);

expect(
response.request!.url.toString(),
"https://buy.itunes.apple.com/verifyReceipt",
);
expect(response.statusCode, 200);
final data = jsonDecode(response.body);
expect(data['status'], 0);
});
});
});
}

0 comments on commit 12a7ccb

Please sign in to comment.