Path: blob/main/Signal/test/ViewControllers/BadgeIssueSheetStateTest.swift
1 views
//
// Copyright 2022 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//
import SignalServiceKit
import XCTest
@testable import Signal
class BadgeIssueSheetStateTest: XCTestCase {
typealias State = BadgeIssueSheetState
private func getSubscriptionBadge(populateAssets: Bool = true) -> ProfileBadge {
let result = try! ProfileBadge(jsonDictionary: [
"id": "R_MED",
"category": "donor",
"name": "Subscriber X",
"description": "A subscriber badge!",
"sprites6": ["ldpi.png", "mdpi.png", "hdpi.png", "xhdpi.png", "xxhdpi.png", "xxxhdpi.png"],
])
if populateAssets {
result._testingOnly_populateAssets()
}
return result
}
private func getBoostBadge(populateAssets: Bool = true) -> ProfileBadge {
let result = try! ProfileBadge(jsonDictionary: [
"id": "BOOST",
"category": "donor",
"name": "A Boost",
"description": "A boost badge!",
"sprites6": ["ldpi.png", "mdpi.png", "hdpi.png", "xhdpi.png", "xxhdpi.png", "xxxhdpi.png"],
])
if populateAssets {
result._testingOnly_populateAssets()
}
return result
}
private func getGiftBadge(populateAssets: Bool = true) -> ProfileBadge {
let result = try! ProfileBadge(jsonDictionary: [
"id": "GIFT",
"category": "donor",
"name": "A Gift",
"description": "A gift badge!",
"sprites6": ["ldpi.png", "mdpi.png", "hdpi.png", "xhdpi.png", "xxhdpi.png", "xxxhdpi.png"],
])
if populateAssets {
result._testingOnly_populateAssets()
}
return result
}
func testBadge() throws {
let badge = getSubscriptionBadge()
let state = State(
badge: badge,
mode: .subscriptionBankPaymentProcessing,
canDonate: true,
)
XCTAssertIdentical(state.badge, badge)
}
func testActionButton() throws {
let dismissButtonStates: [State] = [
.init(
badge: getGiftBadge(),
mode: .giftBadgeExpired(hasCurrentSubscription: true),
canDonate: true,
),
.init(
badge: getGiftBadge(),
mode: .giftBadgeExpired(hasCurrentSubscription: true),
canDonate: true,
),
.init(
badge: getBoostBadge(),
mode: .boostExpired(hasCurrentSubscription: true),
canDonate: false,
),
.init(
badge: getGiftBadge(),
mode: .giftNotRedeemed(fullName: ""),
canDonate: true,
),
.init(
badge: getBoostBadge(),
mode: .boostBankPaymentProcessing,
canDonate: true,
),
.init(
badge: getSubscriptionBadge(),
mode: .subscriptionBankPaymentProcessing,
canDonate: true,
),
]
for state in dismissButtonStates {
XCTAssertEqual(state.actionButton.action, .dismiss)
XCTAssertFalse(state.actionButton.hasNotNow)
}
let donateButtonStates: [State] = [
.init(
badge: getSubscriptionBadge(),
mode: .subscriptionExpiredBecauseOfChargeFailure(chargeFailureCode: nil, paymentMethod: nil),
canDonate: true,
),
.init(
badge: getBoostBadge(),
mode: .boostExpired(hasCurrentSubscription: false),
canDonate: true,
),
.init(
badge: getBoostBadge(),
mode: .boostExpired(hasCurrentSubscription: true),
canDonate: true,
),
.init(
badge: getGiftBadge(),
mode: .giftBadgeExpired(hasCurrentSubscription: false),
canDonate: true,
),
.init(
badge: getSubscriptionBadge(),
mode: .bankPaymentFailed(chargeFailureCode: nil),
canDonate: true,
),
]
for state in donateButtonStates {
XCTAssertEqual(state.actionButton.action, .openDonationView)
XCTAssertTrue(state.actionButton.hasNotNow)
}
}
}