Files
sats-price/Tests/SatsPriceTests/SatsViewModelTests.swift

106 lines
5.0 KiB
Swift

// This is free software: you can redistribute and/or modify it
// under the terms of the GNU General Public License 3.0
// as published by the Free Software Foundation https://fsf.org
//
// SatsViewModelTests.swift
// SatsPriceTests
//
// Created by Terry Yiu on 2/19/24.
//
import Foundation
import XCTest
@testable import SatsPrice
final class SatsViewModelTests: XCTestCase {
let currency = Locale.Currency("USD")
func testSatsViewModel() throws {
let satsPriceModel = try XCTUnwrap(SatsPriceModel(url: nil))
let satsViewModel = SatsViewModel(model: satsPriceModel)
satsViewModel.btcToCurrencyString(for: currency).wrappedValue = "54321"
// Test BTC updates.
satsViewModel.btcString = "1"
#if !SKIP
XCTAssertEqual(satsViewModel.btc, Decimal(string: "1"))
XCTAssertEqual(satsViewModel.sats, Decimal(string: "100000000"))
XCTAssertEqual(satsViewModel.currencyValue(for: currency), Decimal(string: "54321"))
#else
XCTAssertEqual(satsViewModel.btc, Decimal("1"))
XCTAssertEqual(satsViewModel.sats, Decimal("100000000"))
XCTAssertEqual(satsViewModel.currencyValue(for: currency), Decimal("54321"))
#endif
XCTAssertEqual(satsViewModel.btcString, "1")
XCTAssertEqual(satsViewModel.satsString, "100,000,000")
XCTAssertEqual(satsViewModel.currencyValueString(for: currency).wrappedValue, "54,321.00")
// Test Sats updates.
satsViewModel.satsString = "200000000"
#if !SKIP
XCTAssertEqual(satsViewModel.btc, Decimal(string: "2"))
XCTAssertEqual(satsViewModel.sats, Decimal(string: "200000000"))
XCTAssertEqual(satsViewModel.currencyValue(for: currency), Decimal(string: "108642"))
#else
XCTAssertEqual(satsViewModel.btc, Decimal("2"))
XCTAssertEqual(satsViewModel.sats, Decimal("200000000"))
XCTAssertEqual(satsViewModel.currencyValue(for: currency), Decimal("108642"))
#endif
XCTAssertEqual(satsViewModel.btcString, "2")
XCTAssertEqual(satsViewModel.satsString, "200,000,000")
XCTAssertEqual(satsViewModel.currencyValueString(for: currency).wrappedValue, "108,642.00")
// Test currency value updates.
satsViewModel.currencyValueString(for: currency).wrappedValue = "162963"
#if !SKIP
XCTAssertEqual(satsViewModel.btc, Decimal(string: "3"))
XCTAssertEqual(satsViewModel.sats, Decimal(string: "300000000"))
XCTAssertEqual(satsViewModel.currencyValue(for: currency), Decimal(string: "162963"))
#else
XCTAssertEqual(satsViewModel.btc, Decimal("3"))
XCTAssertEqual(satsViewModel.sats, Decimal("300000000"))
XCTAssertEqual(satsViewModel.currencyValue(for: currency), Decimal("162963"))
#endif
XCTAssertEqual(satsViewModel.btcString, "3")
XCTAssertEqual(satsViewModel.satsString, "300,000,000")
XCTAssertEqual(satsViewModel.currencyValueString(for: currency).wrappedValue, "162,963.00")
// Test fractional amounts.
// Precision between platforms on this calculation is different so we have different assertions for each.
satsViewModel.currencyValueString(for: currency).wrappedValue = "1"
#if !SKIP
XCTAssertEqual(satsViewModel.btc, Decimal(string: "0.00001841"))
XCTAssertEqual(satsViewModel.btcString, "0.00001841")
XCTAssertEqual(satsViewModel.sats, Decimal(string: "1841"))
XCTAssertEqual(satsViewModel.satsString, "1,841")
XCTAssertEqual(satsViewModel.currencyValue(for: currency), Decimal(string: "1"))
#else
XCTAssertEqual(satsViewModel.btc, Decimal("0.00001841"))
XCTAssertEqual(satsViewModel.btcString, "0.00001841")
XCTAssertEqual(satsViewModel.sats, Decimal("1841"))
XCTAssertEqual(satsViewModel.satsString, "1,841")
XCTAssertEqual(satsViewModel.currencyValue(for: currency), Decimal("1"))
#endif
XCTAssertEqual(satsViewModel.currencyValueString(for: currency).wrappedValue, "1.00")
// Test large amounts that exceed the cap of 21M BTC.
satsViewModel.currencyValueString(for: currency).wrappedValue = "11407419999999"
#if !SKIP
XCTAssertEqual(satsViewModel.btc, Decimal(string: "210000184.09084884"))
XCTAssertEqual(satsViewModel.btcString, "210,000,184.09084884")
XCTAssertEqual(satsViewModel.sats, Decimal(string: "21000018409084884"))
XCTAssertEqual(satsViewModel.satsString, "21,000,018,409,084,884")
XCTAssertEqual(satsViewModel.currencyValue(for: currency), Decimal(string: "11407419999999"))
#else
XCTAssertEqual(satsViewModel.btc, Decimal("210000184.09084884"))
XCTAssertEqual(satsViewModel.btcString, "210000184.09084884")
XCTAssertEqual(satsViewModel.sats, Decimal("21000018409084884"))
XCTAssertEqual(satsViewModel.satsString, "21000018409084884")
XCTAssertEqual(satsViewModel.currencyValue, Decimal("11407419999999"))
#endif
XCTAssertEqual(satsViewModel.currencyValueString(for: currency).wrappedValue, "11,407,419,999,999.00")
}
}