blob: 89a7b2c843806687e3a022b9be481458e15b2139 [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import <XCTest/XCTest.h>
#import "Stubs.h"
@import in_app_purchase_ios;
@interface TranslatorTest : XCTestCase
@property(strong, nonatomic) NSDictionary *periodMap;
@property(strong, nonatomic) NSDictionary *discountMap;
@property(strong, nonatomic) NSMutableDictionary *productMap;
@property(strong, nonatomic) NSDictionary *productResponseMap;
@property(strong, nonatomic) NSDictionary *paymentMap;
@property(strong, nonatomic) NSDictionary *transactionMap;
@property(strong, nonatomic) NSDictionary *errorMap;
@property(strong, nonatomic) NSDictionary *localeMap;
@property(strong, nonatomic) NSDictionary *storefrontMap;
@property(strong, nonatomic) NSDictionary *storefrontAndPaymentTransactionMap;
@end
@implementation TranslatorTest
- (void)setUp {
self.periodMap = @{@"numberOfUnits" : @(0), @"unit" : @(0)};
self.discountMap = @{
@"price" : @"1",
@"priceLocale" : [FIAObjectTranslator getMapFromNSLocale:NSLocale.systemLocale],
@"numberOfPeriods" : @1,
@"subscriptionPeriod" : self.periodMap,
@"paymentMode" : @1
};
self.productMap = [[NSMutableDictionary alloc] initWithDictionary:@{
@"price" : @"1",
@"priceLocale" : [FIAObjectTranslator getMapFromNSLocale:NSLocale.systemLocale],
@"productIdentifier" : @"123",
@"localizedTitle" : @"title",
@"localizedDescription" : @"des",
}];
if (@available(iOS 11.2, *)) {
self.productMap[@"subscriptionPeriod"] = self.periodMap;
self.productMap[@"introductoryPrice"] = self.discountMap;
}
if (@available(iOS 12.0, *)) {
self.productMap[@"subscriptionGroupIdentifier"] = @"com.group";
}
self.productResponseMap =
@{@"products" : @[ self.productMap ], @"invalidProductIdentifiers" : @[]};
self.paymentMap = @{
@"productIdentifier" : @"123",
@"requestData" : @"abcdefghabcdefghabcdefghabcdefghabcdefghabcdefghabcdefghabcdefgh",
@"quantity" : @(2),
@"applicationUsername" : @"app user name",
@"simulatesAskToBuyInSandbox" : @(NO)
};
NSDictionary *originalTransactionMap = @{
@"transactionIdentifier" : @"567",
@"transactionState" : @(SKPaymentTransactionStatePurchasing),
@"payment" : [NSNull null],
@"error" : [FIAObjectTranslator getMapFromNSError:[NSError errorWithDomain:@"test_stub"
code:123
userInfo:@{}]],
@"transactionTimeStamp" : @([NSDate date].timeIntervalSince1970),
@"originalTransaction" : [NSNull null],
};
self.transactionMap = @{
@"transactionIdentifier" : @"567",
@"transactionState" : @(SKPaymentTransactionStatePurchasing),
@"payment" : [NSNull null],
@"error" : [FIAObjectTranslator getMapFromNSError:[NSError errorWithDomain:@"test_stub"
code:123
userInfo:@{}]],
@"transactionTimeStamp" : @([NSDate date].timeIntervalSince1970),
@"originalTransaction" : originalTransactionMap,
};
self.errorMap = @{
@"code" : @(123),
@"domain" : @"test_domain",
@"userInfo" : @{
@"key" : @"value",
}
};
self.storefrontMap = @{
@"countryCode" : @"USA",
@"identifier" : @"unique_identifier",
};
self.storefrontAndPaymentTransactionMap = @{
@"storefront" : self.storefrontMap,
@"transaction" : self.transactionMap,
};
}
- (void)testSKProductSubscriptionPeriodStubToMap {
if (@available(iOS 11.2, *)) {
SKProductSubscriptionPeriodStub *period =
[[SKProductSubscriptionPeriodStub alloc] initWithMap:self.periodMap];
NSDictionary *map = [FIAObjectTranslator getMapFromSKProductSubscriptionPeriod:period];
XCTAssertEqualObjects(map, self.periodMap);
}
}
- (void)testSKProductDiscountStubToMap {
if (@available(iOS 11.2, *)) {
SKProductDiscountStub *discount = [[SKProductDiscountStub alloc] initWithMap:self.discountMap];
NSDictionary *map = [FIAObjectTranslator getMapFromSKProductDiscount:discount];
XCTAssertEqualObjects(map, self.discountMap);
}
}
- (void)testProductToMap {
SKProductStub *product = [[SKProductStub alloc] initWithMap:self.productMap];
NSDictionary *map = [FIAObjectTranslator getMapFromSKProduct:product];
XCTAssertEqualObjects(map, self.productMap);
}
- (void)testProductResponseToMap {
SKProductsResponseStub *response =
[[SKProductsResponseStub alloc] initWithMap:self.productResponseMap];
NSDictionary *map = [FIAObjectTranslator getMapFromSKProductsResponse:response];
XCTAssertEqualObjects(map, self.productResponseMap);
}
- (void)testPaymentToMap {
SKMutablePayment *payment = [FIAObjectTranslator getSKMutablePaymentFromMap:self.paymentMap];
NSDictionary *map = [FIAObjectTranslator getMapFromSKPayment:payment];
XCTAssertEqualObjects(map, self.paymentMap);
}
- (void)testPaymentTransactionToMap {
// payment is not KVC, cannot test payment field.
SKPaymentTransactionStub *paymentTransaction =
[[SKPaymentTransactionStub alloc] initWithMap:self.transactionMap];
NSDictionary *map = [FIAObjectTranslator getMapFromSKPaymentTransaction:paymentTransaction];
XCTAssertEqualObjects(map, self.transactionMap);
}
- (void)testError {
NSErrorStub *error = [[NSErrorStub alloc] initWithMap:self.errorMap];
NSDictionary *map = [FIAObjectTranslator getMapFromNSError:error];
XCTAssertEqualObjects(map, self.errorMap);
}
- (void)testLocaleToMap {
if (@available(iOS 10.0, *)) {
NSLocale *system = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
NSDictionary *map = [FIAObjectTranslator getMapFromNSLocale:system];
XCTAssertEqualObjects(map[@"currencySymbol"], system.currencySymbol);
XCTAssertEqualObjects(map[@"countryCode"], system.countryCode);
}
}
- (void)testSKStorefrontToMap {
if (@available(iOS 13.0, *)) {
SKStorefront *storefront = [[SKStorefrontStub alloc] initWithMap:self.storefrontMap];
NSDictionary *map = [FIAObjectTranslator getMapFromSKStorefront:storefront];
XCTAssertEqualObjects(map, self.storefrontMap);
}
}
- (void)testSKStorefrontAndSKPaymentTransactionToMap {
if (@available(iOS 13.0, *)) {
SKStorefront *storefront = [[SKStorefrontStub alloc] initWithMap:self.storefrontMap];
SKPaymentTransaction *transaction =
[[SKPaymentTransactionStub alloc] initWithMap:self.transactionMap];
NSDictionary *map = [FIAObjectTranslator getMapFromSKStorefront:storefront
andSKPaymentTransaction:transaction];
XCTAssertEqualObjects(map, self.storefrontAndPaymentTransactionMap);
}
}
@end