189 lines
9.4 KiB
Swift
189 lines
9.4 KiB
Swift
//
|
|
// Created by Marcelo Schroeder on 2/2/17.
|
|
// Copyright (c) 2019 Pavel Tikhonenko. All rights reserved.
|
|
//
|
|
|
|
import XCTest
|
|
@testable import TPInAppReceipt
|
|
|
|
class InAppReceiptTests: XCTestCase
|
|
{
|
|
override func setUp()
|
|
{
|
|
|
|
}
|
|
|
|
func testGetSignature()
|
|
{
|
|
let receipt = try! InAppReceipt(receiptData: defaultDevice.receipt)
|
|
guard let signature = receipt.pkcs7Container.extractSignature() else {
|
|
XCTFail("Unable to extract signature")
|
|
return
|
|
}
|
|
|
|
// Signature length is 256
|
|
XCTAssertEqual(signature.bytes.count, 256)
|
|
}
|
|
|
|
func testGetItunesKey()
|
|
{
|
|
let receipt = try! InAppReceipt(receiptData: defaultDevice.receipt)
|
|
guard let _ = receipt.pkcs7Container.extractiTunesPublicKeyContrainer() else {
|
|
XCTFail("Unable to extract signature")
|
|
return
|
|
}
|
|
}
|
|
|
|
// func testActiveAutoRenewableSubscriptionPurchasesWithoutCancellation()
|
|
// {
|
|
//
|
|
//// // Given
|
|
//// let purchase1 = InAppPurchase(webOrderLineItemID: 1, originalPurchaseDateString: "2017-02-01T07:03:18Z", purchaseDateString: "2017-02-01T07:03:16Z", subscriptionExpirationDateString: "2017-02-01T07:06:16Z", cancellationDateString: "")
|
|
//// let /Users/tikhop/Work/TPInAppReceipt/TPInAppReceiptTests/InAppReceiptTests.swiftpurchase2 = InAppPurchase(webOrderLineItemID: 2, originalPurchaseDateString: "2017-02-01T21:26:12Z", purchaseDateString: "2017-02-01T21:26:11Z", subscriptionExpirationDateString: "2017-02-01T21:29:11Z", cancellationDateString: "")
|
|
//// let purchase3 = InAppPurchase(webOrderLineItemID: 3, originalPurchaseDateString: "2017-02-01T21:28:41Z", purchaseDateString: "2017-02-01T21:29:11Z", subscriptionExpirationDateString: "2017-02-01T21:32:11Z", cancellationDateString: "")
|
|
//// let receiptPayload: InAppReceiptPayload = InAppReceiptPayload(purchases: [purchase1, purchase2, purchase3])
|
|
////
|
|
//// // When
|
|
//// let receipt = InAppReceipt(pkcs7: try! PKCS7WrapperMock())
|
|
////
|
|
//// // Then
|
|
//// XCTAssertNil(receipt.activeAutoRenewableSubscriptionPurchases(ofProductIdentifier: "test-product-identifier", forDate: String("2017-02-01T07:03:15Z").dateFromISO8601!))
|
|
//// XCTAssertNotNil(receipt.activeAutoRenewableSubscriptionPurchases(ofProductIdentifier: "test-product-identifier", forDate: String("2017-02-01T07:03:16Z").dateFromISO8601!))
|
|
//// XCTAssertNotNil(receipt.activeAutoRenewableSubscriptionPurchases(ofProductIdentifier: "test-product-identifier", forDate: String("2017-02-01T07:04:16Z").dateFromISO8601!))
|
|
//// XCTAssertNotNil(receipt.activeAutoRenewableSubscriptionPurchases(ofProductIdentifier: "test-product-identifier", forDate: String("2017-02-01T07:06:15Z").dateFromISO8601!))
|
|
//// XCTAssertNil(receipt.activeAutoRenewableSubscriptionPurchases(ofProductIdentifier: "test-product-identifier", forDate: String("2017-02-01T07:06:16Z").dateFromISO8601!))
|
|
//// XCTAssertNil(receipt.activeAutoRenewableSubscriptionPurchases(ofProductIdentifier: "test-product-identifier", forDate: String("2017-02-01T07:06:17Z").dateFromISO8601!))
|
|
//// XCTAssertNotNil(receipt.activeAutoRenewableSubscriptionPurchases(ofProductIdentifier: "test-product-identifier", forDate: String("2017-02-01T21:27:11Z").dateFromISO8601!))
|
|
//// XCTAssertNotNil(receipt.activeAutoRenewableSubscriptionPurchases(ofProductIdentifier: "test-product-identifier", forDate: String("2017-02-01T21:30:11Z").dateFromISO8601!))
|
|
//// XCTAssertNil(receipt.activeAutoRenewableSubscriptionPurchases(ofProductIdentifier: "test-product-identifier", forDate: String("2017-02-01T21:32:11Z").dateFromISO8601!))
|
|
//
|
|
// }
|
|
//
|
|
// func testEmptyAutoRenewableSubscriptionExpirationDate()
|
|
// {
|
|
//
|
|
// // Given
|
|
// let purchase1 = InAppPurchase(webOrderLineItemID: 1, originalPurchaseDateString: "2017-02-01T07:03:18Z", purchaseDateString: "2017-02-01T07:03:16Z", subscriptionExpirationDateString: "", cancellationDateString: "")
|
|
//
|
|
// XCTAssertNil(purchase1.subscriptionExpirationDate)
|
|
// }
|
|
//
|
|
// func testActiveAutoRenewableSubscriptionPurchasesWithCancellation() {
|
|
//
|
|
// // Given
|
|
// let purchase1 = InAppPurchase(webOrderLineItemID: 1, originalPurchaseDateString: "2017-02-01T07:03:18Z", purchaseDateString: "2017-02-01T07:03:16Z", subscriptionExpirationDateString: "2017-02-01T07:06:16Z", cancellationDateString: "")
|
|
// let purchase2 = InAppPurchase(webOrderLineItemID: 2, originalPurchaseDateString: "2017-02-01T21:26:12Z", purchaseDateString: "2017-02-01T21:26:11Z", subscriptionExpirationDateString: "2017-02-01T21:29:11Z", cancellationDateString: "2017-02-01T21:27:11Z")
|
|
// let purchase3 = InAppPurchase(webOrderLineItemID: 3, originalPurchaseDateString: "2017-02-01T21:28:41Z", purchaseDateString: "2017-02-01T21:29:11Z", subscriptionExpirationDateString: "2017-02-01T21:32:11Z", cancellationDateString: "")
|
|
// let receiptPayload: InAppReceiptPayload = InAppReceiptPayload(purchases: [purchase1, purchase2, purchase3])
|
|
//
|
|
// // When
|
|
// let receipt = InAppReceipt(payload: receiptPayload)
|
|
//
|
|
// // Then
|
|
// XCTAssertNotNil(receipt.activeAutoRenewableSubscriptionPurchases(ofProductIdentifier: "test-product-identifier", forDate: String("2017-02-01T07:04:16Z").dateFromISO8601!))
|
|
// XCTAssertNil(receipt.activeAutoRenewableSubscriptionPurchases(ofProductIdentifier: "test-product-identifier", forDate: String("2017-02-01T21:28:11Z").dateFromISO8601!))
|
|
// XCTAssertNotNil(receipt.activeAutoRenewableSubscriptionPurchases(ofProductIdentifier: "test-product-identifier", forDate: String("2017-02-01T21:30:11Z").dateFromISO8601!))
|
|
//
|
|
// }
|
|
//
|
|
// func testActiveAutoRenewableSubscriptionPurchasesWhenProductIdentifierDoesNotMatch() {
|
|
//
|
|
// // Given
|
|
// let purchase1 = InAppPurchase(webOrderLineItemID: 1, originalPurchaseDateString: "2017-02-01T07:03:18Z", purchaseDateString: "2017-02-01T07:03:16Z", subscriptionExpirationDateString: "2017-02-01T07:06:16Z", cancellationDateString: "")
|
|
// let receiptPayload: InAppReceiptPayload = InAppReceiptPayload(purchases: [purchase1])
|
|
//
|
|
// // When
|
|
// let receipt = InAppReceipt(payload: receiptPayload)
|
|
//
|
|
// // Then
|
|
// XCTAssertNil(receipt.activeAutoRenewableSubscriptionPurchases(ofProductIdentifier: "test-product-identifier-does-not-match", forDate: String("2017-02-01T07:04:16Z").dateFromISO8601!))
|
|
//
|
|
// }
|
|
//
|
|
// func testHasActiveAutoRenewableSubscription() {
|
|
//
|
|
// // Given
|
|
// let purchase1 = InAppPurchase(webOrderLineItemID: 1, originalPurchaseDateString: "2017-02-01T07:03:18Z", purchaseDateString: "2017-02-01T07:03:16Z", subscriptionExpirationDateString: "2017-02-01T07:06:16Z", cancellationDateString: "")
|
|
// let receiptPayload: InAppReceiptPayload = InAppReceiptPayload(purchases: [purchase1])
|
|
//
|
|
// // When
|
|
// let receipt = InAppReceipt(payload: receiptPayload)
|
|
//
|
|
// // Then
|
|
// XCTAssertFalse(receipt.hasActiveAutoRenewableSubscription(ofProductIdentifier: "test-product-identifier", forDate: String("2017-02-01T07:03:15Z").dateFromISO8601!))
|
|
// XCTAssertTrue(receipt.hasActiveAutoRenewableSubscription(ofProductIdentifier: "test-product-identifier", forDate: String("2017-02-01T07:03:16Z").dateFromISO8601!))
|
|
//
|
|
// }
|
|
//
|
|
}
|
|
//
|
|
//fileprivate extension InAppPurchase
|
|
//{
|
|
// init(webOrderLineItemID: Int, originalPurchaseDateString: String, purchaseDateString: String, subscriptionExpirationDateString: String, cancellationDateString: String)
|
|
// {
|
|
// self.init()
|
|
//
|
|
// self.productIdentifier = "test-product-identifier"
|
|
// self.transactionIdentifier = "test-transaction-identifier"
|
|
// self.originalTransactionIdentifier = originalPurchaseDateString
|
|
// self.purchaseDateString = purchaseDateString
|
|
// self.originalPurchaseDateString = ""
|
|
// self.subscriptionExpirationDateString = subscriptionExpirationDateString
|
|
// self.cancellationDateString = cancellationDateString
|
|
// self.webOrderLineItemID = webOrderLineItemID
|
|
// self.quantity = 1
|
|
// }
|
|
//}
|
|
//
|
|
//fileprivate extension InAppReceipt
|
|
//{
|
|
// init(payload: InAppReceiptPayload)
|
|
// {
|
|
// self.init(pkcs7: try! PKCS7WrapperMock(), payload: payload)
|
|
// }
|
|
//}
|
|
//
|
|
//fileprivate extension InAppReceiptPayload
|
|
//{
|
|
// init(purchases: [InAppPurchase])
|
|
// {
|
|
// self.init(bundleIdentifier: "test-bundle-identifier", appVersion: "", originalAppVersion: "", purchases: purchases, expirationDate: "", bundleIdentifierData: Data(), opaqueValue: Data(), receiptHash: Data(), creationDate: "")
|
|
// }
|
|
//}
|
|
//
|
|
//
|
|
//fileprivate class PKCS7WrapperMock: PKCS7Wrapper
|
|
//{
|
|
// init() throws
|
|
// {
|
|
// try super.init(receipt: Data(base64Encoded: "MCcGCSqGSIb3DQEHAqAaMBgCAQExADALBgkqhkiG9w0BBwGgAKEAMQA=")!)
|
|
// }
|
|
//
|
|
//}
|
|
//
|
|
//fileprivate extension Date
|
|
//{
|
|
// static let iso8601Formatter: DateFormatter =
|
|
// {
|
|
// let formatter = DateFormatter()
|
|
// formatter.calendar = Calendar(identifier: .iso8601)
|
|
// formatter.locale = Locale(identifier: "en_US_POSIX")
|
|
// formatter.timeZone = TimeZone(secondsFromGMT: 0)
|
|
// formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssXXXXX"
|
|
// return formatter
|
|
// }()
|
|
//
|
|
// var iso8601: String
|
|
// {
|
|
// return Date.iso8601Formatter.string(from: self)
|
|
// }
|
|
//}
|
|
//
|
|
//fileprivate extension String
|
|
//{
|
|
// var dateFromISO8601: Date?
|
|
// {
|
|
// return Date.iso8601Formatter.date(from: self)
|
|
// }
|
|
//}
|