Signal-iOS/Signal/test/subscriptions/SubscriptionManagerTest.swift
Evan Hahn d2836235af Show additional details for subscription charge failures
In c5bdf6c094, we started to show errors
when a subscription failed to renew because of a charge failure.

Now, we show additional text depending on what the charge failure was.
For example, if you had an invalid card number, we show a special string
for that.
2022-05-25 18:17:53 +00:00

88 lines
3.2 KiB
Swift

//
// Copyright (c) 2022 Open Whisper Systems. All rights reserved.
//
import XCTest
class SubscriptionChargeFailureTest: XCTestCase {
typealias ChargeFailure = Subscription.ChargeFailure
func testNilInit() {
let chargeFailure = ChargeFailure()
XCTAssertNil(chargeFailure.code)
}
func testStringInit() {
let chargeFailure = ChargeFailure(code: "foo bar")
XCTAssertEqual(chargeFailure.code, "foo bar")
}
func testJsonInit() {
let chargeFailure = ChargeFailure(jsonDictionary: ["code": "foo"])
XCTAssertEqual(chargeFailure.code, "foo")
let strangeInputs: [[String: Any]] = [[:], ["no code": "missing"], ["code": 123]]
for jsonDictionary in strangeInputs {
let chargeFailure = ChargeFailure(jsonDictionary: jsonDictionary)
XCTAssertNil(chargeFailure.code)
}
}
}
class SubscriptionTest: XCTestCase {
let subscriptionDict: [String: Any] = {
let endOfCurrentPeriodRawValue: Double = 1618881836
let billingCycleAnchorRawValue: Double = 1587345836
return [
"level": 123,
"currency": "USD",
"amount": 500,
"endOfCurrentPeriod": endOfCurrentPeriodRawValue,
"billingCycleAnchor": billingCycleAnchorRawValue,
"active": true,
"cancelAtPeriodEnd": false,
"status": "active"
]
}()
func testJsonInit() throws {
let subscription = try Subscription(subscriptionDict: subscriptionDict,
chargeFailureDict: nil)
XCTAssertEqual(subscription.level, 123)
XCTAssertEqual(subscription.currency, "USD")
XCTAssertEqual(subscription.amount, 500)
XCTAssertEqual(subscription.endOfCurrentPeriod, 1618881836)
XCTAssertEqual(subscription.billingCycleAnchor, 1587345836)
XCTAssertTrue(subscription.active)
XCTAssertFalse(subscription.cancelAtEndOfPeriod)
XCTAssertEqual(subscription.status, .active)
XCTAssertNil(subscription.chargeFailure)
}
func testJsonInitWithUnexpectedStatus() throws {
var subscriptionDictWithUnexpectedStatus = subscriptionDict
subscriptionDictWithUnexpectedStatus["status"] = "unexpected!!"
let subscription = try Subscription(subscriptionDict: subscriptionDictWithUnexpectedStatus,
chargeFailureDict: nil)
XCTAssertEqual(subscription.status, .unknown)
XCTAssertNil(subscription.chargeFailure)
}
func testChargeFailure() throws {
let subscription = try Subscription(subscriptionDict: subscriptionDict,
chargeFailureDict: ["code": "foo bar"])
XCTAssertEqual(subscription.chargeFailure?.code, "foo bar")
let strangeChargeFailures: [[String: Any]] = [[:], ["no code": "missing"], ["code": 123]]
for chargeFailureDict in strangeChargeFailures {
let subscription = try Subscription(subscriptionDict: subscriptionDict,
chargeFailureDict: chargeFailureDict)
XCTAssertNotNil(subscription.chargeFailure)
XCTAssertNil(subscription.chargeFailure?.code)
}
}
}