Add support for currency selection

This commit is contained in:
2024-09-07 05:55:34 +03:00
parent cb0397ba98
commit edb10c48e6
11 changed files with 164 additions and 87 deletions

View File

@@ -8,6 +8,7 @@
// Created by Terry Yiu on 2/19/24.
//
import Foundation
import XCTest
@testable import SatsPrice
@@ -15,52 +16,88 @@ final class SatsViewModelTests: XCTestCase {
func testSatsViewModel() {
let satsViewModel = SatsViewModel()
satsViewModel.btcToUsdString = "54321"
satsViewModel.btcToCurrencyString = "54321"
// Test BTC updates.
satsViewModel.btcString = "1"
#if !SKIP
XCTAssertEqual(satsViewModel.btc, Decimal(string: "1"))
XCTAssertEqual(satsViewModel.btcString, "1")
XCTAssertEqual(satsViewModel.sats, Decimal(string: "100000000"))
XCTAssertEqual(satsViewModel.currencyValue, Decimal(string: "54321"))
#else
XCTAssertEqual(satsViewModel.btc, Decimal("1"))
XCTAssertEqual(satsViewModel.sats, Decimal("100000000"))
XCTAssertEqual(satsViewModel.currencyValue, Decimal("54321"))
#endif
XCTAssertEqual(satsViewModel.btcString, "1")
XCTAssertEqual(satsViewModel.satsString, "100000000")
XCTAssertEqual(satsViewModel.usd, Decimal(string: "54321"))
XCTAssertEqual(satsViewModel.usdString, "54321")
XCTAssertEqual(satsViewModel.currencyValueString, "54321")
// Test Sats updates.
satsViewModel.satsString = "200000000"
#if !SKIP
XCTAssertEqual(satsViewModel.btc, Decimal(string: "2"))
XCTAssertEqual(satsViewModel.btcString, "2")
XCTAssertEqual(satsViewModel.sats, Decimal(string: "200000000"))
XCTAssertEqual(satsViewModel.currencyValue, Decimal(string: "108642"))
#else
XCTAssertEqual(satsViewModel.btc, Decimal("2"))
XCTAssertEqual(satsViewModel.sats, Decimal("200000000"))
XCTAssertEqual(satsViewModel.currencyValue, Decimal("108642"))
#endif
XCTAssertEqual(satsViewModel.btcString, "2")
XCTAssertEqual(satsViewModel.satsString, "200000000")
XCTAssertEqual(satsViewModel.usd, Decimal(string: "108642"))
XCTAssertEqual(satsViewModel.usdString, "108642")
XCTAssertEqual(satsViewModel.currencyValueString, "108642")
// Test USD updates.
satsViewModel.usdString = "162963"
// Test currency value updates.
satsViewModel.currencyValueString = "162963"
#if !SKIP
XCTAssertEqual(satsViewModel.btc, Decimal(string: "3"))
XCTAssertEqual(satsViewModel.btcString, "3")
XCTAssertEqual(satsViewModel.sats, Decimal(string: "300000000"))
XCTAssertEqual(satsViewModel.currencyValue, Decimal(string: "162963"))
#else
XCTAssertEqual(satsViewModel.btc, Decimal("3"))
XCTAssertEqual(satsViewModel.sats, Decimal("300000000"))
XCTAssertEqual(satsViewModel.currencyValue, Decimal("162963"))
#endif
XCTAssertEqual(satsViewModel.btcString, "3")
XCTAssertEqual(satsViewModel.satsString, "300000000")
XCTAssertEqual(satsViewModel.usd, Decimal(string: "162963"))
XCTAssertEqual(satsViewModel.usdString, "162963")
XCTAssertEqual(satsViewModel.currencyValueString, "162963")
// Test fractional amounts.
satsViewModel.usdString = "1"
// Precision between platforms on this calculation is different so we have different assertions for each.
satsViewModel.currencyValueString = "1"
#if !SKIP
XCTAssertEqual(satsViewModel.btc, Decimal(string: "0.00001840908672520756245282671526665562"))
XCTAssertEqual(satsViewModel.btcString, "0.00001840908672520756245282671526665562")
XCTAssertEqual(satsViewModel.sats, Decimal(string: "1840.908672520756245282671526665562"))
XCTAssertEqual(satsViewModel.satsString, "1840.908672520756245282671526665562")
XCTAssertEqual(satsViewModel.usd, Decimal(string: "1"))
XCTAssertEqual(satsViewModel.usdString, "1")
XCTAssertEqual(satsViewModel.currencyValue, Decimal(string: "1"))
#else
XCTAssertEqual(satsViewModel.btc, Decimal("0.00001840908672520756"))
XCTAssertEqual(satsViewModel.btcString, "0.00001840908672520756")
XCTAssertEqual(satsViewModel.sats, Decimal("1840.908672520756"))
XCTAssertEqual(satsViewModel.satsString, "1840.908672520756")
XCTAssertEqual(satsViewModel.currencyValue, Decimal("1"))
#endif
XCTAssertEqual(satsViewModel.currencyValueString, "1")
// Test large amounts that exceed the cap of 21M BTC.
satsViewModel.usdString = "11407419999999"
// Precision between platforms on this calculation is different so we have different assertions for each.
satsViewModel.currencyValueString = "11407419999999"
#if !SKIP
XCTAssertEqual(satsViewModel.btc, Decimal(string: "210000184.09084884298889932070469983984"))
XCTAssertEqual(satsViewModel.btcString, "210000184.09084884298889932070469983984")
XCTAssertEqual(satsViewModel.sats, Decimal(string: "21000018409084884.298889932070469983984"))
XCTAssertEqual(satsViewModel.satsString, "21000018409084884.298889932070469983984")
XCTAssertEqual(satsViewModel.usd, Decimal(string: "11407419999999"))
XCTAssertEqual(satsViewModel.usdString, "11407419999999")
XCTAssertEqual(satsViewModel.currencyValue, Decimal(string: "11407419999999"))
#else
XCTAssertEqual(satsViewModel.btc, Decimal("210000184.0908488429888993207"))
XCTAssertEqual(satsViewModel.btcString, "210000184.0908488429888993207")
XCTAssertEqual(satsViewModel.sats, Decimal("21000018409084884.29888993207"))
XCTAssertEqual(satsViewModel.satsString, "21000018409084884.29888993207")
XCTAssertEqual(satsViewModel.currencyValue, Decimal("11407419999999"))
#endif
XCTAssertEqual(satsViewModel.currencyValueString, "11407419999999")
}
}