aboutsummaryrefslogtreecommitdiff
path: root/Tests/NorgKitTests/Models/NorgTaskTests.swift
diff options
context:
space:
mode:
Diffstat (limited to 'Tests/NorgKitTests/Models/NorgTaskTests.swift')
-rw-r--r--Tests/NorgKitTests/Models/NorgTaskTests.swift33
1 files changed, 33 insertions, 0 deletions
diff --git a/Tests/NorgKitTests/Models/NorgTaskTests.swift b/Tests/NorgKitTests/Models/NorgTaskTests.swift
new file mode 100644
index 0000000..e8707a1
--- /dev/null
+++ b/Tests/NorgKitTests/Models/NorgTaskTests.swift
@@ -0,0 +1,33 @@
+import Foundation
+import Testing
+
+@testable import NorgKit
+
+struct NorgTaskTests {
+
+ private let file = URL(filePath: "/tmp/notes.norg")
+
+ @Test func idCombinesFileURLAndLine() {
+ let task = NorgTask(fileURL: file, line: 7, status: .undone, text: "do it")
+ #expect(task.id == "\(file.absoluteString):7")
+ }
+
+ @Test func idIsStableForSameFileAndLine() {
+ let a = NorgTask(fileURL: file, line: 3, status: .done, text: "a")
+ let b = NorgTask(fileURL: file, line: 3, status: .urgent, text: "b")
+ #expect(a.id == b.id)
+ }
+
+ @Test func differentLinesProduceDifferentIDs() {
+ let a = NorgTask(fileURL: file, line: 1, status: .done, text: "a")
+ let b = NorgTask(fileURL: file, line: 2, status: .done, text: "a")
+ #expect(a.id != b.id)
+ }
+
+ @Test func roundTripsThroughJSON() throws {
+ let task = NorgTask(fileURL: file, line: 4, status: .pending, text: "keep")
+ let data = try JSONEncoder().encode(task)
+ let decoded = try JSONDecoder().decode(NorgTask.self, from: data)
+ #expect(decoded == task)
+ }
+}