From c9682a7c0c1b617bcf07a25f9143cab1980e511c Mon Sep 17 00:00:00 2001 From: magray Date: Wed, 13 Oct 2021 03:25:38 +1100 Subject: [PATCH] Update OCKDSTU2ScheduleCoder.swift (#629) * Update OCKDSTU2ScheduleCoder.swift Additional check when DateComponent is 0 and nil * OCKSchedule description of the time the element represents into 'Timing' 'when' variable during convert * Revert "OCKSchedule description of the time the element represents into 'Timing' 'when' variable during convert" This reverts commit 7bdf4fa26197f73548b4f99af7dcf6f1368f634e. * Tests added added two tests to check for zero and nil DateComponents passing through Timing convert * Update DSTU2MedicationOrderConverterTests.swift changed to suggested XCTAssertNotNil method --- .../contents.xcworkspacedata | 7 +++++++ .../xcshareddata/IDEWorkspaceChecks.plist | 8 ++++++++ .../xcshareddata/swiftpm/Package.resolved | 16 +++++++++++++++ .../Tasks/OCKDSTU2ScheduleCoder.swift | 4 ++-- .../DSTU2MedicationOrderConverterTests.swift | 20 +++++++++++++++++++ 5 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 CareKitFHIR/CareKitFHIR.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 CareKitFHIR/CareKitFHIR.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 CareKitFHIR/CareKitFHIR.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved diff --git a/CareKitFHIR/CareKitFHIR.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/CareKitFHIR/CareKitFHIR.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..919434a62 --- /dev/null +++ b/CareKitFHIR/CareKitFHIR.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/CareKitFHIR/CareKitFHIR.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/CareKitFHIR/CareKitFHIR.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/CareKitFHIR/CareKitFHIR.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/CareKitFHIR/CareKitFHIR.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/CareKitFHIR/CareKitFHIR.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 000000000..b7af22e2d --- /dev/null +++ b/CareKitFHIR/CareKitFHIR.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,16 @@ +{ + "object": { + "pins": [ + { + "package": "FHIRModels", + "repositoryURL": "https://github.com/apple/FHIRModels.git", + "state": { + "branch": null, + "revision": "c91e5bb74397136f79656bebdfda76a523d3e88c", + "version": "0.3.2" + } + } + ] + }, + "version": 1 +} diff --git a/CareKitFHIR/CareKitFHIR/Tasks/OCKDSTU2ScheduleCoder.swift b/CareKitFHIR/CareKitFHIR/Tasks/OCKDSTU2ScheduleCoder.swift index c859fbff2..e64e53d85 100644 --- a/CareKitFHIR/CareKitFHIR/Tasks/OCKDSTU2ScheduleCoder.swift +++ b/CareKitFHIR/CareKitFHIR/Tasks/OCKDSTU2ScheduleCoder.swift @@ -90,7 +90,7 @@ struct OCKDSTU2ScheduleCoder: OCKFHIRResourceCoder { var nonZeroComponentCount = 0 let keypaths: [KeyPath] = [\.second, \.minute, \.hour, \.day, \.weekOfYear, \.month, \.year] for path in keypaths { - if element.interval[keyPath: path] != nil { + if element.interval[keyPath: path] != nil && element.interval[keyPath: path] != 0 { nonZeroComponentCount += 1 } } @@ -102,7 +102,7 @@ struct OCKDSTU2ScheduleCoder: OCKFHIRResourceCoder { } // Reject components not support by FHIR. - if element.interval.year != nil { + if element.interval.year != nil && element.interval.year != 0 { throw OCKFHIRCodingError.unrepresentableContent("OCKScheduleElements with an interval in units of years are not supported in FHIR.") } diff --git a/CareKitFHIR/CareKitFHIRTests/Unit Tests/DSTU2MedicationOrderConverterTests.swift b/CareKitFHIR/CareKitFHIRTests/Unit Tests/DSTU2MedicationOrderConverterTests.swift index 7138d8ac4..941d65fa4 100644 --- a/CareKitFHIR/CareKitFHIRTests/Unit Tests/DSTU2MedicationOrderConverterTests.swift +++ b/CareKitFHIR/CareKitFHIRTests/Unit Tests/DSTU2MedicationOrderConverterTests.swift @@ -88,4 +88,24 @@ class DSTU2MedicationOrderConverterTest: XCTestCase { XCTAssert(period.start?.value?.foundationDate == startDate) XCTAssert(period.end?.value?.foundationDate == endDate) } + + func testOCKScheduleWithDateComponentsNilToTiming() throws { + let start = Date() + let interval = DateComponents(year: nil, month: nil, day: 1, hour: nil, minute: nil, second: nil) + let element = OCKScheduleElement(start: start, end: nil, interval: interval) + let schedule = OCKSchedule(composing: [element]) + + let timing = try OCKDSTU2ScheduleCoder().convert(entity: schedule) + XCTAssertNotNil(timing.repeat) + } + + func testOCKScheduleWithDateComponentsZeroToTiming() throws { + let start = Date() + let interval = DateComponents(year: 0, month: 0, day: 1, hour: 0, minute: 0, second: 0) + let element = OCKScheduleElement(start: start, end: nil, interval: interval) + let schedule = OCKSchedule(composing: [element]) + + let timing = try OCKDSTU2ScheduleCoder().convert(entity: schedule) + XCTAssertNotNil(timing.repeat) + } }