diff --git a/Sources/DatabaseClient/Internal/Rooms.swift b/Sources/DatabaseClient/Internal/Rooms.swift index ef8470e..f673ddb 100644 --- a/Sources/DatabaseClient/Internal/Rooms.swift +++ b/Sources/DatabaseClient/Internal/Rooms.swift @@ -27,6 +27,9 @@ extension DatabaseClient.Rooms: TestDependencyKey { model.rectangularSizes?.removeAll { $0.id == rectangularDuctID } + if model.rectangularSizes?.count == 0 { + model.rectangularSizes = nil + } if model.hasChanges { try await model.save(on: database) } diff --git a/Tests/DatabaseClientTests/RoomTests.swift b/Tests/DatabaseClientTests/RoomTests.swift new file mode 100644 index 0000000..70446b1 --- /dev/null +++ b/Tests/DatabaseClientTests/RoomTests.swift @@ -0,0 +1,66 @@ +import DatabaseClient +import Dependencies +import Foundation +import ManualDCore +import Testing + +@Suite +struct RoomTests { + + @Test + func happyPath() async throws { + try await withTestUserAndProject { _, project in + @Dependency(\.database.rooms) var rooms + + let room = try await rooms.create( + .init(projectID: project.id, name: "Test", heatingLoad: 1234, coolingTotal: 1234) + ) + + let fetched = try await rooms.fetch(project.id) + #expect(fetched == [room]) + + let got = try await rooms.get(room.id) + #expect(got == room) + + let updated = try await rooms.update( + room.id, + .init(rectangularSizes: [.init(id: UUID(0), register: 1, height: 8)]) + ) + #expect(updated.id == room.id) + + let updatedSize = try await rooms.updateRectangularSize( + room.id, .init(id: UUID(0), register: 1, height: 10) + ) + #expect(updatedSize.id == room.id) + + let deletedSize = try await rooms.deleteRectangularSize(room.id, UUID(0)) + #expect(deletedSize.rectangularSizes == nil) + + try await rooms.delete(room.id) + + } + } + + @Test + func notFound() async throws { + try await withDatabase { + @Dependency(\.database.rooms) var rooms + + await #expect(throws: NotFoundError.self) { + try await rooms.delete(UUID(0)) + } + + await #expect(throws: NotFoundError.self) { + try await rooms.deleteRectangularSize(UUID(0), UUID(1)) + } + + await #expect(throws: NotFoundError.self) { + try await rooms.update(UUID(0), .init()) + } + + await #expect(throws: NotFoundError.self) { + try await rooms.updateRectangularSize(UUID(0), .init(height: 8)) + } + } + } +}