2026-02-10 02:22:41 +00:00
|
|
|
import Foundation
|
|
|
|
|
import SwiftUI
|
|
|
|
|
import Testing
|
|
|
|
|
|
|
|
|
|
@testable import Todos
|
|
|
|
|
|
|
|
|
|
@Suite("TodoGroup enumeration tests")
|
|
|
|
|
struct TodoGroupTests {
|
|
|
|
|
|
|
|
|
|
// MARK: Computed tests
|
|
|
|
|
|
2026-02-11 13:00:46 +00:00
|
|
|
@Test(
|
|
|
|
|
"canShowCompleted returns correct values",
|
|
|
|
|
arguments: zip(
|
|
|
|
|
TodoGroup.allCases,
|
|
|
|
|
[true, true, true, false]
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
func canShowCompleted(
|
|
|
|
|
for group: TodoGroup,
|
|
|
|
|
expects expectation: Bool
|
|
|
|
|
) {
|
|
|
|
|
// GIVEN
|
|
|
|
|
// WHEN
|
|
|
|
|
let canShowCompleted = group.canShowCompleted
|
|
|
|
|
|
|
|
|
|
// THEN
|
|
|
|
|
#expect(canShowCompleted == expectation)
|
|
|
|
|
}
|
|
|
|
|
|
2026-02-11 15:28:22 +00:00
|
|
|
@Test(
|
|
|
|
|
"canReorder returns correct values",
|
|
|
|
|
arguments: zip(
|
|
|
|
|
TodoGroup.allCases,
|
|
|
|
|
[true, true, true, false]
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
func canReorder(
|
|
|
|
|
for group: TodoGroup,
|
|
|
|
|
expects expectation: Bool
|
|
|
|
|
) {
|
|
|
|
|
// GIVEN
|
|
|
|
|
// WHEN
|
|
|
|
|
let canReorder = group.canReorder
|
|
|
|
|
|
|
|
|
|
// THEN
|
|
|
|
|
#expect(canReorder == expectation)
|
|
|
|
|
}
|
|
|
|
|
|
2026-02-10 02:22:41 +00:00
|
|
|
@Test(
|
|
|
|
|
"group color match expected values",
|
|
|
|
|
arguments: zip(
|
|
|
|
|
TodoGroup.allCases,
|
|
|
|
|
[Color.blue, .green, .red, .gray]
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
func color(
|
|
|
|
|
for group: TodoGroup,
|
|
|
|
|
expects expectation: Color
|
|
|
|
|
) {
|
|
|
|
|
// GIVEN
|
|
|
|
|
// WHEN
|
|
|
|
|
let color = group.color
|
|
|
|
|
|
|
|
|
|
// THEN
|
|
|
|
|
#expect(color == expectation)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test(
|
|
|
|
|
"group icon names match expected values",
|
|
|
|
|
arguments: zip(
|
|
|
|
|
TodoGroup.allCases,
|
|
|
|
|
["calendar.badge.clock", "calendar", "calendar.badge.exclamationmark", "checkmark.circle.fill"]
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
func iconName(
|
|
|
|
|
for group: TodoGroup,
|
|
|
|
|
expects expectation: String
|
|
|
|
|
) {
|
|
|
|
|
// GIVEN
|
|
|
|
|
// WHEN
|
|
|
|
|
let iconName = group.iconName
|
|
|
|
|
|
|
|
|
|
// THEN
|
|
|
|
|
#expect(iconName == expectation)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test(
|
|
|
|
|
"group titles match expected values",
|
|
|
|
|
arguments: zip(
|
|
|
|
|
TodoGroup.allCases,
|
|
|
|
|
["today", "upcoming", "overdue", "completed"]
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
func title(
|
|
|
|
|
for group: TodoGroup,
|
|
|
|
|
expects expectation: String
|
|
|
|
|
) {
|
|
|
|
|
// GIVEN
|
|
|
|
|
let key = "enumeration.todo-group.title." + expectation
|
|
|
|
|
|
|
|
|
|
// WHEN
|
|
|
|
|
let title = group.title
|
|
|
|
|
|
|
|
|
|
// THEN
|
|
|
|
|
#expect(title == .init(key))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// MARK: Case Iteration Tests
|
|
|
|
|
|
|
|
|
|
@Test("all cases contains all cases, in correct order")
|
|
|
|
|
func allCases() {
|
|
|
|
|
// GIVEN
|
|
|
|
|
// WHEN
|
|
|
|
|
let allCases = TodoGroup.allCases
|
|
|
|
|
|
|
|
|
|
// THEN
|
|
|
|
|
#expect(allCases.count == 4)
|
|
|
|
|
#expect(allCases[0] == .today)
|
|
|
|
|
#expect(allCases[1] == .upcoming)
|
|
|
|
|
#expect(allCases[2] == .overdue)
|
|
|
|
|
#expect(allCases[3] == .completed)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// MARK: Identifiable Tests
|
|
|
|
|
|
|
|
|
|
@Test("id returns an identity of a case", arguments: TodoGroup.allCases)
|
|
|
|
|
func id(for group: TodoGroup) {
|
|
|
|
|
// GIVEN
|
|
|
|
|
// WHEN
|
|
|
|
|
let id = group.id
|
|
|
|
|
|
|
|
|
|
// THEN
|
|
|
|
|
#expect(id == group)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|