Files
honeyDueKMP/iosApp/CaseraTests/WidgetActionTests.swift
treyt 0c803af9bc Add 4 new unit test suites for greenfield test plan coverage
Add 87 new tests (384 total) covering ValidationRules/ValidationError,
PasswordResetViewModel navigation and client-side validation, WidgetAction
Codable/Equatable/accessors, parseDate, and ThemeID enum properties.
Updates greenfield CSV for AUTH-012/017/018, NOTIF-006/007, WID-003, THEME-002.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 19:29:12 -06:00

103 lines
3.2 KiB
Swift

//
// WidgetActionTests.swift
// CaseraTests
//
// Unit tests for WidgetDataManager.WidgetAction (Codable, Equatable, accessors)
// and WidgetDataManager.parseDate static helper.
//
import Testing
import Foundation
@testable import Casera
// MARK: - WidgetAction Codable Tests
struct WidgetActionCodableTests {
@Test func encodeDecodeRoundTrip() throws {
let original = WidgetDataManager.WidgetAction.completeTask(taskId: 42, taskTitle: "Fix leak")
let data = try JSONEncoder().encode(original)
let decoded = try JSONDecoder().decode(WidgetDataManager.WidgetAction.self, from: data)
#expect(decoded == original)
}
@Test func decodedValuesMatch() throws {
let original = WidgetDataManager.WidgetAction.completeTask(taskId: 99, taskTitle: "Paint walls")
let data = try JSONEncoder().encode(original)
let decoded = try JSONDecoder().decode(WidgetDataManager.WidgetAction.self, from: data)
#expect(decoded.taskId == 99)
#expect(decoded.taskTitle == "Paint walls")
}
}
// MARK: - WidgetAction Equatable Tests
struct WidgetActionEquatableTests {
@Test func sameValuesAreEqual() {
let a = WidgetDataManager.WidgetAction.completeTask(taskId: 1, taskTitle: "Test")
let b = WidgetDataManager.WidgetAction.completeTask(taskId: 1, taskTitle: "Test")
#expect(a == b)
}
@Test func differentTaskIdNotEqual() {
let a = WidgetDataManager.WidgetAction.completeTask(taskId: 1, taskTitle: "Test")
let b = WidgetDataManager.WidgetAction.completeTask(taskId: 2, taskTitle: "Test")
#expect(a != b)
}
@Test func differentTaskTitleNotEqual() {
let a = WidgetDataManager.WidgetAction.completeTask(taskId: 1, taskTitle: "Alpha")
let b = WidgetDataManager.WidgetAction.completeTask(taskId: 1, taskTitle: "Beta")
#expect(a != b)
}
}
// MARK: - WidgetAction Accessor Tests
struct WidgetActionAccessorTests {
@Test func taskIdReturnsCorrectValue() {
let action = WidgetDataManager.WidgetAction.completeTask(taskId: 55, taskTitle: "Mow lawn")
#expect(action.taskId == 55)
}
@Test func taskTitleReturnsCorrectValue() {
let action = WidgetDataManager.WidgetAction.completeTask(taskId: 55, taskTitle: "Mow lawn")
#expect(action.taskTitle == "Mow lawn")
}
}
// MARK: - parseDate Tests
struct ParseDateTests {
@Test func validDateStringReturnsDate() {
let date = WidgetDataManager.parseDate("2024-06-15")
#expect(date != nil)
}
@Test func nilInputReturnsNil() {
let date = WidgetDataManager.parseDate(nil)
#expect(date == nil)
}
@Test func emptyStringReturnsNil() {
let date = WidgetDataManager.parseDate("")
#expect(date == nil)
}
@Test func isoDateTimeExtractsDatePart() {
let date = WidgetDataManager.parseDate("2025-12-26T00:00:00Z")
#expect(date != nil)
// Should parse the same as just the date part
let dateDirect = WidgetDataManager.parseDate("2025-12-26")
#expect(date == dateDirect)
}
@Test func invalidStringReturnsNil() {
let date = WidgetDataManager.parseDate("not-a-date")
#expect(date == nil)
}
}