- 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>
151 lines
3.2 KiB
Swift
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")
|
|
}
|
|
}
|