[in_app_purchase] Added country code to sk product wrapper (#4122)

diff --git a/packages/in_app_purchase/in_app_purchase_ios/CHANGELOG.md b/packages/in_app_purchase/in_app_purchase_ios/CHANGELOG.md
index f6acc2b..acbe995 100644
--- a/packages/in_app_purchase/in_app_purchase_ios/CHANGELOG.md
+++ b/packages/in_app_purchase/in_app_purchase_ios/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.1.2
+
+* Added countryCode to the SKPriceLocaleWrapper.
+
 ## 0.1.1+1
 
 * iOS: Fix treating missing App Store receipt as an exception.
diff --git a/packages/in_app_purchase/in_app_purchase_ios/example/ios/RunnerTests/TranslatorTests.m b/packages/in_app_purchase/in_app_purchase_ios/example/ios/RunnerTests/TranslatorTests.m
index 42c51b8..89a7b2c 100644
--- a/packages/in_app_purchase/in_app_purchase_ios/example/ios/RunnerTests/TranslatorTests.m
+++ b/packages/in_app_purchase/in_app_purchase_ios/example/ios/RunnerTests/TranslatorTests.m
@@ -149,9 +149,10 @@
 
 - (void)testLocaleToMap {
   if (@available(iOS 10.0, *)) {
-    NSLocale *system = NSLocale.systemLocale;
+    NSLocale *system = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
     NSDictionary *map = [FIAObjectTranslator getMapFromNSLocale:system];
     XCTAssertEqualObjects(map[@"currencySymbol"], system.currencySymbol);
+    XCTAssertEqualObjects(map[@"countryCode"], system.countryCode);
   }
 }
 
diff --git a/packages/in_app_purchase/in_app_purchase_ios/ios/Classes/FIAObjectTranslator.m b/packages/in_app_purchase/in_app_purchase_ios/ios/Classes/FIAObjectTranslator.m
index 30b0b81..765ef4d 100644
--- a/packages/in_app_purchase/in_app_purchase_ios/ios/Classes/FIAObjectTranslator.m
+++ b/packages/in_app_purchase/in_app_purchase_ios/ios/Classes/FIAObjectTranslator.m
@@ -111,6 +111,7 @@
           forKey:@"currencySymbol"];
   [map setObject:[locale objectForKey:NSLocaleCurrencyCode] ?: [NSNull null]
           forKey:@"currencyCode"];
+  [map setObject:[locale objectForKey:NSLocaleCountryCode] ?: [NSNull null] forKey:@"countryCode"];
   return map;
 }
 
diff --git a/packages/in_app_purchase/in_app_purchase_ios/lib/src/store_kit_wrappers/sk_product_wrapper.dart b/packages/in_app_purchase/in_app_purchase_ios/lib/src/store_kit_wrappers/sk_product_wrapper.dart
index ef0e667..1b681f2 100644
--- a/packages/in_app_purchase/in_app_purchase_ios/lib/src/store_kit_wrappers/sk_product_wrapper.dart
+++ b/packages/in_app_purchase/in_app_purchase_ios/lib/src/store_kit_wrappers/sk_product_wrapper.dart
@@ -335,15 +335,19 @@
 @JsonSerializable()
 class SKPriceLocaleWrapper {
   /// Creates a new price locale for `currencySymbol` and `currencyCode`.
-  SKPriceLocaleWrapper(
-      {required this.currencySymbol, required this.currencyCode});
+  SKPriceLocaleWrapper({
+    required this.currencySymbol,
+    required this.currencyCode,
+    required this.countryCode,
+  });
 
   /// Constructing an instance from a map from the Objective-C layer.
   ///
   /// This method should only be used with `map` values returned by [SKProductWrapper.fromJson] and [SKProductDiscountWrapper.fromJson].
   factory SKPriceLocaleWrapper.fromJson(Map<String, dynamic>? map) {
     if (map == null) {
-      return SKPriceLocaleWrapper(currencyCode: '', currencySymbol: '');
+      return SKPriceLocaleWrapper(
+          currencyCode: '', currencySymbol: '', countryCode: '');
     }
     return _$SKPriceLocaleWrapperFromJson(map);
   }
@@ -356,6 +360,10 @@
   @JsonKey(defaultValue: '')
   final String currencyCode;
 
+  ///The country code for the locale, e.g. US for US locale.
+  @JsonKey(defaultValue: '')
+  final String countryCode;
+
   @override
   bool operator ==(Object other) {
     if (identical(other, this)) {
diff --git a/packages/in_app_purchase/in_app_purchase_ios/lib/src/store_kit_wrappers/sk_product_wrapper.g.dart b/packages/in_app_purchase/in_app_purchase_ios/lib/src/store_kit_wrappers/sk_product_wrapper.g.dart
index 8c2eed3..66f4b78 100644
--- a/packages/in_app_purchase/in_app_purchase_ios/lib/src/store_kit_wrappers/sk_product_wrapper.g.dart
+++ b/packages/in_app_purchase/in_app_purchase_ios/lib/src/store_kit_wrappers/sk_product_wrapper.g.dart
@@ -112,6 +112,7 @@
   return SKPriceLocaleWrapper(
     currencySymbol: json['currencySymbol'] as String? ?? '',
     currencyCode: json['currencyCode'] as String? ?? '',
+    countryCode: json['countryCode'] as String? ?? '',
   );
 }
 
@@ -120,4 +121,5 @@
     <String, dynamic>{
       'currencySymbol': instance.currencySymbol,
       'currencyCode': instance.currencyCode,
+      'countryCode': instance.countryCode,
     };
diff --git a/packages/in_app_purchase/in_app_purchase_ios/pubspec.yaml b/packages/in_app_purchase/in_app_purchase_ios/pubspec.yaml
index d06e5fe..b73ad84 100644
--- a/packages/in_app_purchase/in_app_purchase_ios/pubspec.yaml
+++ b/packages/in_app_purchase/in_app_purchase_ios/pubspec.yaml
@@ -2,7 +2,7 @@
 description: An implementation for the iOS platform of the Flutter `in_app_purchase` plugin. This uses the iOS StoreKit Framework.
 repository: https://github.com/flutter/plugins/tree/master/packages/in_app_purchase/in_app_purchase_ios
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+in_app_purchase%22
-version: 0.1.1+1
+version: 0.1.2
 
 environment:
   sdk: ">=2.12.0 <3.0.0"
diff --git a/packages/in_app_purchase/in_app_purchase_ios/test/store_kit_wrappers/sk_methodchannel_apis_test.dart b/packages/in_app_purchase/in_app_purchase_ios/test/store_kit_wrappers/sk_methodchannel_apis_test.dart
index 7bfddaa..892b9d3 100644
--- a/packages/in_app_purchase/in_app_purchase_ios/test/store_kit_wrappers/sk_methodchannel_apis_test.dart
+++ b/packages/in_app_purchase/in_app_purchase_ios/test/store_kit_wrappers/sk_methodchannel_apis_test.dart
@@ -48,6 +48,10 @@
         'USD',
       );
       expect(
+        productResponseWrapper.products.first.priceLocale.countryCode,
+        'US',
+      );
+      expect(
         productResponseWrapper.invalidProductIdentifiers,
         isNotEmpty,
       );
diff --git a/packages/in_app_purchase/in_app_purchase_ios/test/store_kit_wrappers/sk_product_test.dart b/packages/in_app_purchase/in_app_purchase_ios/test/store_kit_wrappers/sk_product_test.dart
index 9454a9d..6233a71 100644
--- a/packages/in_app_purchase/in_app_purchase_ios/test/store_kit_wrappers/sk_product_test.dart
+++ b/packages/in_app_purchase/in_app_purchase_ios/test/store_kit_wrappers/sk_product_test.dart
@@ -44,8 +44,13 @@
       final SKProductDiscountWrapper wrapper =
           SKProductDiscountWrapper.fromJson(<String, dynamic>{});
       expect(wrapper.price, '');
-      expect(wrapper.priceLocale,
-          SKPriceLocaleWrapper(currencyCode: '', currencySymbol: ''));
+      expect(
+          wrapper.priceLocale,
+          SKPriceLocaleWrapper(
+            currencyCode: '',
+            currencySymbol: '',
+            countryCode: '',
+          ));
       expect(wrapper.numberOfPeriods, 0);
       expect(wrapper.paymentMode, SKProductDiscountPaymentMode.payAsYouGo);
       expect(
@@ -69,8 +74,13 @@
       expect(wrapper.productIdentifier, '');
       expect(wrapper.localizedTitle, '');
       expect(wrapper.localizedDescription, '');
-      expect(wrapper.priceLocale,
-          SKPriceLocaleWrapper(currencyCode: '', currencySymbol: ''));
+      expect(
+          wrapper.priceLocale,
+          SKPriceLocaleWrapper(
+            currencyCode: '',
+            currencySymbol: '',
+            countryCode: '',
+          ));
       expect(wrapper.subscriptionGroupIdentifier, null);
       expect(wrapper.price, '');
       expect(wrapper.subscriptionPeriod, null);
diff --git a/packages/in_app_purchase/in_app_purchase_ios/test/store_kit_wrappers/sk_test_stub_objects.dart b/packages/in_app_purchase/in_app_purchase_ios/test/store_kit_wrappers/sk_test_stub_objects.dart
index d6c2446..435dd44 100644
--- a/packages/in_app_purchase/in_app_purchase_ios/test/store_kit_wrappers/sk_test_stub_objects.dart
+++ b/packages/in_app_purchase/in_app_purchase_ios/test/store_kit_wrappers/sk_test_stub_objects.dart
@@ -33,8 +33,11 @@
   error: dummyError,
 );
 
-final SKPriceLocaleWrapper dummyLocale =
-    SKPriceLocaleWrapper(currencySymbol: '\$', currencyCode: 'USD');
+final SKPriceLocaleWrapper dummyLocale = SKPriceLocaleWrapper(
+  currencySymbol: '\$',
+  currencyCode: 'USD',
+  countryCode: 'US',
+);
 
 final SKProductSubscriptionPeriodWrapper dummySubscription =
     SKProductSubscriptionPeriodWrapper(
@@ -70,7 +73,8 @@
 Map<String, dynamic> buildLocaleMap(SKPriceLocaleWrapper local) {
   return {
     'currencySymbol': local.currencySymbol,
-    'currencyCode': local.currencyCode
+    'currencyCode': local.currencyCode,
+    'countryCode': local.countryCode,
   };
 }