Add WorkoutsTests unit test target

No unit test target existed (testTargets: [] in scheme). Adds a
bundle.unit-test target wired into the Workouts scheme, with a smoke test
that round-trips SplitDocument through IndieSync's DocumentCoder — the
same codec DocumentFileStore uses for every iCloud document.
This commit is contained in:
2026-07-05 10:23:08 -04:00
parent 6c01942406
commit ddd5631ef2
2 changed files with 62 additions and 1 deletions
@@ -0,0 +1,45 @@
import Foundation
import Testing
import IndieSync
@testable import Workouts
/// Round-trips `SplitDocument` through `DocumentCoder` the exact JSON codec
/// (ISO-8601 dates, sorted keys, pretty-printed) `DocumentFileStore` uses to
/// write and read every document in this app's iCloud container.
struct SplitDocumentCodableTests {
/// A whole-second epoch so ISO-8601 round-trips (no fractional-second loss).
private static let stableTimestamp = Date(timeIntervalSince1970: 1_700_000_000)
@Test func encodeDecodeRoundTrip() throws {
let exercise = ExerciseDocument(
id: ULID.make(),
name: "Bench Press",
order: 0,
sets: 4,
reps: 10,
weight: 135,
loadType: 0,
durationSeconds: 0,
weightLastUpdated: Self.stableTimestamp,
weightReminderWeeks: 4
)
let original = SplitDocument(
schemaVersion: SplitDocument.currentSchemaVersion,
id: ULID.make(),
name: "Push Day",
color: "blue",
systemImage: "dumbbell.fill",
order: 0,
createdAt: Self.stableTimestamp,
updatedAt: Self.stableTimestamp,
exercises: [exercise],
activityType: nil
)
let data = try DocumentCoder.encode(original)
let decoded = try DocumentCoder.decode(SplitDocument.self, from: data)
#expect(decoded == original)
#expect(decoded.relativePath == "Splits/\(original.id).json")
}
}