Signal-iOS/Signal/test/subscriptions/SubscriptionManagerTest.swift
Max Radermacher 807ea6e034
Simplify …BadgeIds.contains(_:)
There’s no need to use `allCases` -- we can accomplish the same thing
using the automatically-provided `init(rawValue:)` initializer.
2022-06-28 17:15:14 -07:00

120 lines
4.1 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)
}
}
}
class BadgeIdsTest: XCTestCase {
func testSubscriptionContains() {
let testCases: [(String, Bool)] = [
("R_LOW", true),
("R_MED", true),
("R_HIGH", true),
("BOOST", false),
("GIFT", false),
("OTHER", false),
("", false)
]
for (badgeId, shouldMatch) in testCases {
XCTAssertEqual(SubscriptionBadgeIds.contains(badgeId), shouldMatch, "\(badgeId)")
}
}
func testBoostContains() {
let testCases: [(String, Bool)] = [
("R_LOW", false),
("R_MED", false),
("R_HIGH", false),
("BOOST", true),
("GIFT", false),
("OTHER", false),
("", false)
]
for (badgeId, shouldMatch) in testCases {
XCTAssertEqual(BoostBadgeIds.contains(badgeId), shouldMatch, "\(badgeId)")
}
}
}