Skip to content

Commit

Permalink
Add test cases
Browse files Browse the repository at this point in the history
  • Loading branch information
shimastripe committed Mar 17, 2024
1 parent 3fd0d08 commit 11683ef
Showing 1 changed file with 139 additions and 6 deletions.
145 changes: 139 additions & 6 deletions Tests/AppStoreServerLibraryTests/SignedModelTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ final class SignedModelTests: XCTestCase {
let signedNotification = TestingUtility.createSignedDataFromJson("resources/models/signedNotification.json")

let verifiedNotification = await TestingUtility.getSignedDataVerifier().verifyAndDecodeNotification(signedPayload: signedNotification)

guard case .valid(let notification) = verifiedNotification else {
XCTAssertTrue(false)
return
Expand All @@ -36,11 +36,37 @@ final class SignedModelTests: XCTestCase {
XCTAssertEqual(1, notification.data!.rawStatus)
}

public func testNotificationDecodingThrowing() async throws {
let signedNotification = TestingUtility.createSignedDataFromJson("resources/models/signedNotification.json")

let notification = try await TestingUtility.getSignedDataVerifier().verifyAndDecodeNotificationThrowing(signedPayload: signedNotification)

XCTAssertEqual(NotificationTypeV2.subscribed, notification.notificationType)
XCTAssertEqual("SUBSCRIBED", notification.rawNotificationType)
XCTAssertEqual(Subtype.initialBuy, notification.subtype)
XCTAssertEqual("INITIAL_BUY", notification.rawSubtype)
XCTAssertEqual("002e14d5-51f5-4503-b5a8-c3a1af68eb20", notification.notificationUUID)
XCTAssertEqual("2.0", notification.version)
XCTAssertEqual(Date(timeIntervalSince1970: 1698148900), notification.signedDate)
XCTAssertNotNil(notification.data)
XCTAssertNil(notification.summary)
XCTAssertNil(notification.externalPurchaseToken)
XCTAssertEqual(Environment.localTesting, notification.data!.environment)
XCTAssertEqual("LocalTesting", notification.data!.rawEnvironment)
XCTAssertEqual(41234, notification.data!.appAppleId)
XCTAssertEqual("com.example", notification.data!.bundleId)
XCTAssertEqual("1.2.3", notification.data!.bundleVersion)
XCTAssertEqual("signed_transaction_info_value", notification.data!.signedTransactionInfo)
XCTAssertEqual("signed_renewal_info_value", notification.data!.signedRenewalInfo)
XCTAssertEqual(Status.active, notification.data!.status)
XCTAssertEqual(1, notification.data!.rawStatus)
}

public func testSummaryNotificationDecoding() async throws {
let signedNotification = TestingUtility.createSignedDataFromJson("resources/models/signedSummaryNotification.json")

let verifiedNotification = await TestingUtility.getSignedDataVerifier().verifyAndDecodeNotification(signedPayload: signedNotification)

guard case .valid(let notification) = verifiedNotification else {
XCTAssertTrue(false)
return
Expand All @@ -67,6 +93,32 @@ final class SignedModelTests: XCTestCase {
XCTAssertEqual(2, notification.summary!.failedCount)
}

public func testSummaryNotificationDecodingThrowing() async throws {
let signedNotification = TestingUtility.createSignedDataFromJson("resources/models/signedSummaryNotification.json")

let notification = try await TestingUtility.getSignedDataVerifier().verifyAndDecodeNotificationThrowing(signedPayload: signedNotification)

XCTAssertEqual(NotificationTypeV2.renewalExtension, notification.notificationType)
XCTAssertEqual("RENEWAL_EXTENSION", notification.rawNotificationType)
XCTAssertEqual(Subtype.summary, notification.subtype)
XCTAssertEqual("SUMMARY", notification.rawSubtype)
XCTAssertEqual("002e14d5-51f5-4503-b5a8-c3a1af68eb20", notification.notificationUUID)
XCTAssertEqual("2.0", notification.version)
XCTAssertEqual(Date(timeIntervalSince1970: 1698148900), notification.signedDate)
XCTAssertNil(notification.data)
XCTAssertNotNil(notification.summary)
XCTAssertNil(notification.externalPurchaseToken)
XCTAssertEqual(Environment.localTesting, notification.summary!.environment)
XCTAssertEqual("LocalTesting", notification.summary!.rawEnvironment)
XCTAssertEqual(41234, notification.summary!.appAppleId)
XCTAssertEqual("com.example", notification.summary!.bundleId)
XCTAssertEqual("com.example.product", notification.summary!.productId)
XCTAssertEqual("efb27071-45a4-4aca-9854-2a1e9146f265", notification.summary!.requestIdentifier)
XCTAssertEqual(["CAN", "USA", "MEX"], notification.summary!.storefrontCountryCodes)
XCTAssertEqual(5, notification.summary!.succeededCount)
XCTAssertEqual(2, notification.summary!.failedCount)
}

public func testExternalPurchaseTokenNotificationDecoding() async throws {
let signedNotification = TestingUtility.createSignedDataFromJson("resources/models/signedExternalPurchaseTokenNotification.json")

Expand All @@ -76,7 +128,7 @@ final class SignedModelTests: XCTestCase {
XCTAssertEqual(.production, environment)
return nil
}

guard case .valid(let notification) = verifiedNotification else {
XCTAssertTrue(false)
return
Expand Down Expand Up @@ -107,7 +159,7 @@ final class SignedModelTests: XCTestCase {
XCTAssertEqual(.sandbox, environment)
return nil
}

guard case .valid(let notification) = verifiedNotification else {
XCTAssertTrue(false)
return
Expand All @@ -133,7 +185,7 @@ final class SignedModelTests: XCTestCase {
let signedTransaction = TestingUtility.createSignedDataFromJson("resources/models/signedTransaction.json")

let verifiedTransaction = await TestingUtility.getSignedDataVerifier().verifyAndDecodeTransaction(signedTransaction: signedTransaction)

guard case .valid(let transaction) = verifiedTransaction else {
XCTAssertTrue(false)
return
Expand Down Expand Up @@ -170,11 +222,47 @@ final class SignedModelTests: XCTestCase {
XCTAssertEqual("LocalTesting", transaction.rawEnvironment)
}

public func testTransactionDecodingThrowing() async throws {
let signedTransaction = TestingUtility.createSignedDataFromJson("resources/models/signedTransaction.json")

let transaction = try await TestingUtility.getSignedDataVerifier().verifyAndDecodeTransactionThrowing(signedTransaction: signedTransaction)

XCTAssertEqual("12345", transaction.originalTransactionId)
XCTAssertEqual("23456", transaction.transactionId)
XCTAssertEqual("34343", transaction.webOrderLineItemId)
XCTAssertEqual("com.example", transaction.bundleId)
XCTAssertEqual("com.example.product", transaction.productId)
XCTAssertEqual("55555", transaction.subscriptionGroupIdentifier)
XCTAssertEqual(Date(timeIntervalSince1970: 1698148800), transaction.originalPurchaseDate)
XCTAssertEqual(Date(timeIntervalSince1970: 1698148900), transaction.purchaseDate)
XCTAssertEqual(Date(timeIntervalSince1970: 1698148950), transaction.revocationDate)
XCTAssertEqual(Date(timeIntervalSince1970: 1698149000), transaction.expiresDate)
XCTAssertEqual(1, transaction.quantity)
XCTAssertEqual(ProductType.autoRenewableSubscription, transaction.type)
XCTAssertEqual("Auto-Renewable Subscription", transaction.rawType)
XCTAssertEqual(UUID(uuidString: "7e3fb20b-4cdb-47cc-936d-99d65f608138"), transaction.appAccountToken)
XCTAssertEqual(InAppOwnershipType.purchased, transaction.inAppOwnershipType)
XCTAssertEqual("PURCHASED", transaction.rawInAppOwnershipType)
XCTAssertEqual(Date(timeIntervalSince1970: 1698148900), transaction.signedDate)
XCTAssertEqual(RevocationReason.refundedDueToIssue, transaction.revocationReason)
XCTAssertEqual(1, transaction.rawRevocationReason)
XCTAssertEqual("abc.123", transaction.offerIdentifier)
XCTAssertEqual(true, transaction.isUpgraded)
XCTAssertEqual(OfferType.introductoryOffer, transaction.offerType)
XCTAssertEqual(1, transaction.rawOfferType)
XCTAssertEqual("USA", transaction.storefront)
XCTAssertEqual("143441", transaction.storefrontId)
XCTAssertEqual(TransactionReason.purchase, transaction.transactionReason)
XCTAssertEqual("PURCHASE", transaction.rawTransactionReason)
XCTAssertEqual(Environment.localTesting, transaction.environment)
XCTAssertEqual("LocalTesting", transaction.rawEnvironment)
}

public func testRenewalInfoDecoding() async throws {
let signedRenewalInfo = TestingUtility.createSignedDataFromJson("resources/models/signedRenewalInfo.json")

let verifiedRenewalInfo = await TestingUtility.getSignedDataVerifier().verifyAndDecodeRenewalInfo(signedRenewalInfo: signedRenewalInfo)

guard case .valid(let renewalInfo) = verifiedRenewalInfo else {
XCTAssertTrue(false)
return
Expand All @@ -201,6 +289,32 @@ final class SignedModelTests: XCTestCase {
XCTAssertEqual(Date(timeIntervalSince1970: 1698148850), renewalInfo.renewalDate)
}

public func testRenewalInfoDecodingThrowing() async throws {
let signedRenewalInfo = TestingUtility.createSignedDataFromJson("resources/models/signedRenewalInfo.json")

let renewalInfo = try await TestingUtility.getSignedDataVerifier().verifyAndDecodeRenewalInfoThrowing(signedRenewalInfo: signedRenewalInfo)

XCTAssertEqual(ExpirationIntent.customerCancelled, renewalInfo.expirationIntent)
XCTAssertEqual(1, renewalInfo.rawExpirationIntent)
XCTAssertEqual("12345", renewalInfo.originalTransactionId)
XCTAssertEqual("com.example.product.2", renewalInfo.autoRenewProductId)
XCTAssertEqual("com.example.product", renewalInfo.productId)
XCTAssertEqual(AutoRenewStatus.on, renewalInfo.autoRenewStatus)
XCTAssertEqual(1, renewalInfo.rawAutoRenewStatus)
XCTAssertEqual(true, renewalInfo.isInBillingRetryPeriod)
XCTAssertEqual(PriceIncreaseStatus.customerHasNotResponded, renewalInfo.priceIncreaseStatus)
XCTAssertEqual(0, renewalInfo.rawPriceIncreaseStatus)
XCTAssertEqual(Date(timeIntervalSince1970: 1698148900), renewalInfo.gracePeriodExpiresDate)
XCTAssertEqual(OfferType.promotionalOffer, renewalInfo.offerType)
XCTAssertEqual(2, renewalInfo.rawOfferType)
XCTAssertEqual("abc.123", renewalInfo.offerIdentifier)
XCTAssertEqual(Date(timeIntervalSince1970: 1698148800), renewalInfo.signedDate)
XCTAssertEqual(Environment.localTesting, renewalInfo.environment)
XCTAssertEqual("LocalTesting", renewalInfo.rawEnvironment)
XCTAssertEqual(Date(timeIntervalSince1970: 1698148800), renewalInfo.recentSubscriptionStartDate)
XCTAssertEqual(Date(timeIntervalSince1970: 1698148850), renewalInfo.renewalDate)
}

public func testAppTransactionDecoding() async throws {
let signedAppTransaction = TestingUtility.createSignedDataFromJson("resources/models/appTransaction.json")

Expand All @@ -225,6 +339,25 @@ final class SignedModelTests: XCTestCase {
XCTAssertEqual(Date(timeIntervalSince1970: 1698148700), appTransaction.preorderDate)
}

public func testAppTransactionDecodingThrowing() async throws {
let signedAppTransaction = TestingUtility.createSignedDataFromJson("resources/models/appTransaction.json")

let appTransaction = try await TestingUtility.getSignedDataVerifier().verifyAndDecodeAppTransactionThrowing(signedAppTransaction: signedAppTransaction)

XCTAssertEqual(Environment.localTesting, appTransaction.receiptType)
XCTAssertEqual("LocalTesting", appTransaction.rawReceiptType)
XCTAssertEqual(531412, appTransaction.appAppleId)
XCTAssertEqual("com.example", appTransaction.bundleId)
XCTAssertEqual("1.2.3", appTransaction.applicationVersion)
XCTAssertEqual(512, appTransaction.versionExternalIdentifier)
XCTAssertEqual(Date(timeIntervalSince1970: 1698148900), appTransaction.receiptCreationDate)
XCTAssertEqual(Date(timeIntervalSince1970: 1698148800), appTransaction.originalPurchaseDate)
XCTAssertEqual("1.1.2", appTransaction.originalApplicationVersion)
XCTAssertEqual("device_verification_value", appTransaction.deviceVerification)
XCTAssertEqual(UUID(uuidString: "48ccfa42-7431-4f22-9908-7e88983e105a"), appTransaction.deviceVerificationNonce)
XCTAssertEqual(Date(timeIntervalSince1970: 1698148700), appTransaction.preorderDate)
}

// Xcode-generated dates are not well formed, therefore we only compare to ms precision
private func compareXcodeDates(_ first: Date, _ second: Date?) {
XCTAssertEqual(floor((first.timeIntervalSince1970 * 1000)), floor(((second?.timeIntervalSince1970 ?? 0.0) * 1000)))
Expand Down

0 comments on commit 11683ef

Please sign in to comment.