Files
honeyDueKMP/iosApp/CaseraTests/DoubleExtensionsTests.swift
treyt fc0e0688eb Add comprehensive iOS unit and UI test suites for greenfield test plan
- Create unit tests: DataLayerTests (27 tests for DATA-001–007), DataManagerExtendedTests
  (20 tests for TASK-005, TASK-012, TCOMP-003, THEME-001, QA-002), plus ValidationHelpers,
  TaskMetrics, StringExtensions, DoubleExtensions, DateUtils, DocumentHelpers, ErrorMessageParser
- Create UI tests: AuthenticationTests, PasswordResetTests, OnboardingTests, TaskIntegration,
  ContractorIntegration, ResidenceIntegration, DocumentIntegration, DataLayer, Stability
- Add UI test framework: AuthenticatedTestCase, ScreenObjects, TestFlows, TestAccountManager,
  TestAccountAPIClient, TestDataCleaner, TestDataSeeder
- Add accessibility identifiers to password reset views for UI test support
- Add greenfield test plan CSVs and update automated column for 27 test IDs
- All 297 unit tests pass across 60 suites

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 15:37:56 -06:00

151 lines
3.2 KiB
Swift

//
// DoubleExtensionsTests.swift
// CaseraTests
//
// Unit tests for Double, Int number formatting extensions.
//
import Testing
@testable import Casera
// MARK: - Double.toCurrency Tests
struct DoubleCurrencyTests {
@Test func wholeNumberCurrency() {
let result = 100.0.toCurrency()
#expect(result.contains("100"))
#expect(result.contains("$"))
}
@Test func decimalCurrency() {
let result = 49.99.toCurrency()
#expect(result.contains("49.99"))
}
@Test func zeroCurrency() {
let result = 0.0.toCurrency()
#expect(result.contains("0"))
#expect(result.contains("$"))
}
@Test func largeNumberCurrency() {
let result = 1234567.89.toCurrency()
#expect(result.contains("1,234,567"))
}
}
// MARK: - Double.toFileSize Tests
struct FileSizeTests {
@Test func bytesSize() {
let result = 512.0.toFileSize()
#expect(result == "512.0 B")
}
@Test func kilobytesSize() {
let result = 2048.0.toFileSize()
#expect(result == "2.0 KB")
}
@Test func megabytesSize() {
let result = (5.0 * 1024 * 1024).toFileSize()
#expect(result == "5.0 MB")
}
@Test func gigabytesSize() {
let result = (2.5 * 1024 * 1024 * 1024).toFileSize()
#expect(result == "2.5 GB")
}
@Test func zeroBytes() {
let result = 0.0.toFileSize()
#expect(result == "0.0 B")
}
}
// MARK: - Double.rounded Tests
struct DoubleRoundedTests {
@Test func roundToTwoPlaces() {
#expect(3.14159.rounded(to: 2) == 3.14)
}
@Test func roundToZeroPlaces() {
#expect(3.7.rounded(to: 0) == 4.0)
}
@Test func roundToOnePlaceDown() {
#expect(3.14.rounded(to: 1) == 3.1)
}
@Test func roundToOnePlaceUp() {
#expect(3.15.rounded(to: 1) == 3.2)
}
@Test func zeroRoundsToZero() {
#expect(0.0.rounded(to: 3) == 0.0)
}
}
// MARK: - Double.toPercentage Tests
struct PercentageTests {
@Test func fiftyPercent() {
let result = 50.0.toPercentage()
#expect(result.contains("50"))
#expect(result.contains("%"))
}
@Test func zeroPercent() {
let result = 0.0.toPercentage()
#expect(result.contains("0"))
#expect(result.contains("%"))
}
@Test func hundredPercent() {
let result = 100.0.toPercentage()
#expect(result.contains("100"))
}
}
// MARK: - Int.pluralSuffix Tests
struct PluralSuffixTests {
@Test func singularNoSuffix() {
#expect(1.pluralSuffix() == "")
}
@Test func pluralDefaultSuffix() {
#expect(2.pluralSuffix() == "s")
}
@Test func zeroIsPlural() {
#expect(0.pluralSuffix() == "s")
}
@Test func customSuffixes() {
#expect(1.pluralSuffix("y", "ies") == "y")
#expect(3.pluralSuffix("y", "ies") == "ies")
}
}
// MARK: - Int.toFileSize Tests
struct IntFileSizeTests {
@Test func intBytesToFileSize() {
let result = 1024.toFileSize()
#expect(result == "1.0 KB")
}
@Test func intZeroBytes() {
let result = 0.toFileSize()
#expect(result == "0.0 B")
}
}