diff --git a/Sources/SQLiteData/Internal/ISO8601.swift b/Sources/SQLiteData/Internal/ISO8601.swift index 451d16c0..1e9ce773 100644 --- a/Sources/SQLiteData/Internal/ISO8601.swift +++ b/Sources/SQLiteData/Internal/ISO8601.swift @@ -3,10 +3,16 @@ import Foundation extension Date { @usableFromInline var iso8601String: String { + let nextUpDate = Date(timeIntervalSinceReferenceDate: timeIntervalSinceReferenceDate.nextUp) if #available(iOS 15, macOS 12, tvOS 15, watchOS 8, *) { - return formatted(.iso8601.currentTimestamp(includingFractionalSeconds: true)) + return + nextUpDate + .formatted( + .iso8601.currentTimestamp(includingFractionalSeconds: true) + ) } else { - return DateFormatter.iso8601(includingFractionalSeconds: true).string(from: self) + return DateFormatter.iso8601(includingFractionalSeconds: true) + .string(from: nextUpDate) } } diff --git a/Tests/SQLiteDataTests/CloudKitTests/PreviewTests.swift b/Tests/SQLiteDataTests/CloudKitTests/PreviewTests.swift index 10dffa67..1a30bcd7 100644 --- a/Tests/SQLiteDataTests/CloudKitTests/PreviewTests.swift +++ b/Tests/SQLiteDataTests/CloudKitTests/PreviewTests.swift @@ -43,9 +43,8 @@ } } - @Test @available(iOS 17, macOS 14, tvOS 17, watchOS 10, *) - func delete() async throws { + @Test func delete() async throws { @FetchAll(RemindersList.all, database: userDatabase.database) var remindersLists try await userDatabase.userWrite { db in diff --git a/Tests/SQLiteDataTests/DateTests.swift b/Tests/SQLiteDataTests/DateTests.swift new file mode 100644 index 00000000..5415a916 --- /dev/null +++ b/Tests/SQLiteDataTests/DateTests.swift @@ -0,0 +1,51 @@ +import DependenciesTestSupport +import Foundation +import SQLiteData +import SQLiteDataTestSupport +import Testing + +@Suite(.dependency(\.defaultDatabase, try .database())) +struct DateTests { + @Dependency(\.defaultDatabase) var database + + @Test func roundtrip() throws { + let date = Date(timeIntervalSinceReferenceDate: 793109282.061) + let insertedRecord = try database.write { db in + try Record.insert { Record.Draft(date: date) } + .returning(\.self) + .fetchOne(db)! + } + let updatedRecord = try database.write { db in + try Record + .update(insertedRecord) + .returning(\.self) + .fetchOne(db)! + } + #expect(insertedRecord.date == date) + #expect(insertedRecord.date == updatedRecord.date) + } +} + +@Table +private struct Record: Equatable { + let id: Int + var date: Date +} + +extension DatabaseWriter where Self == DatabaseQueue { + fileprivate static func database() throws -> DatabaseQueue { + let database = try DatabaseQueue() + try database.write { db in + try #sql( + """ + CREATE TABLE "records" ( + "id" INTEGER PRIMARY KEY AUTOINCREMENT, + "date" TEXT NOT NULL + ) STRICT + """ + ) + .execute(db) + } + return database + } +}