StoredGlucoseSampleTests.swift 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. //
  2. // StoredGlucoseSampleTests.swift
  3. // LoopKitTests
  4. //
  5. // Created by Darin Krauss on 10/12/20.
  6. // Copyright © 2020 LoopKit Authors. All rights reserved.
  7. //
  8. import XCTest
  9. import HealthKit
  10. @testable import LoopKit
  11. class StoredGlucoseSampleInitializerTests: XCTestCase {
  12. func testQuantitySampleInitializer() {
  13. let type = HKQuantityType.quantityType(forIdentifier: .bloodGlucose)!
  14. let startDate = dateFormatter.date(from: "2020-01-02T03:04:05Z")!
  15. let quantity = HKQuantity(unit: .milligramsPerDeciliter, doubleValue: 123.4)
  16. let metadata: [String: Any] = [
  17. HKMetadataKeySyncIdentifier: "3A95BED9-2633-4D6A-9229-70B07521C561",
  18. HKMetadataKeySyncVersion: 2,
  19. MetadataKeyGlucoseIsDisplayOnly: true,
  20. HKMetadataKeyWasUserEntered: true
  21. ]
  22. let quantitySample = HKQuantitySample(type: type, quantity: quantity, start: startDate, end: startDate, metadata: metadata)
  23. let sample = StoredGlucoseSample(sample: quantitySample)
  24. XCTAssertNotNil(sample.uuid)
  25. XCTAssertEqual(sample.provenanceIdentifier, "")
  26. XCTAssertEqual(sample.syncIdentifier, "3A95BED9-2633-4D6A-9229-70B07521C561")
  27. XCTAssertEqual(sample.syncVersion, 2)
  28. XCTAssertEqual(sample.startDate, startDate)
  29. XCTAssertEqual(sample.quantity, quantity)
  30. XCTAssertEqual(sample.isDisplayOnly, true)
  31. XCTAssertEqual(sample.wasUserEntered, true)
  32. }
  33. func testFullInitializer() {
  34. let uuid = UUID()
  35. let startDate = dateFormatter.date(from: "2020-02-03T04:05:06Z")!
  36. let quantity = HKQuantity(unit: .milligramsPerDeciliter, doubleValue: 134.5)
  37. let trendRate = HKQuantity(unit: .milligramsPerDeciliterPerMinute, doubleValue: 0.0)
  38. let device = HKDevice(name: "NAME", manufacturer: "MANUFACTURER", model: "MODEL", hardwareVersion: "HARDWAREVERSION", firmwareVersion: "FIRMWAREVERSION", softwareVersion: "SOFTWAREVERSION", localIdentifier: "LOCALIDENTIFIER", udiDeviceIdentifier: "UDIDEVICEIDENTIFIER")
  39. let sample = StoredGlucoseSample(uuid: uuid,
  40. provenanceIdentifier: "8A1333E7-79CB-413F-AB7A-5413F14D4531",
  41. syncIdentifier: "E7D34EED-CFEE-48FD-810F-5C8C41FACA83",
  42. syncVersion: 3,
  43. startDate: startDate,
  44. quantity: quantity,
  45. condition: .aboveRange,
  46. trend: .flat,
  47. trendRate: trendRate,
  48. isDisplayOnly: true,
  49. wasUserEntered: false,
  50. device: device,
  51. healthKitEligibleDate: startDate.addingTimeInterval(.hours(3)))
  52. XCTAssertEqual(sample.uuid, uuid)
  53. XCTAssertEqual(sample.provenanceIdentifier, "8A1333E7-79CB-413F-AB7A-5413F14D4531")
  54. XCTAssertEqual(sample.syncIdentifier, "E7D34EED-CFEE-48FD-810F-5C8C41FACA83")
  55. XCTAssertEqual(sample.syncVersion, 3)
  56. XCTAssertEqual(sample.startDate, startDate)
  57. XCTAssertEqual(sample.quantity, quantity)
  58. XCTAssertEqual(sample.condition, .aboveRange)
  59. XCTAssertEqual(sample.trend, .flat)
  60. XCTAssertEqual(sample.trendRate, trendRate)
  61. XCTAssertEqual(sample.isDisplayOnly, true)
  62. XCTAssertEqual(sample.wasUserEntered, false)
  63. XCTAssertEqual(sample.device, device)
  64. XCTAssertEqual(sample.healthKitEligibleDate, startDate.addingTimeInterval(.hours(3)))
  65. }
  66. func testFullInitializerOptional() {
  67. let startDate = dateFormatter.date(from: "2020-03-04T05:06:07Z")!
  68. let quantity = HKQuantity(unit: .millimolesPerLiter, doubleValue: 6.5)
  69. let sample = StoredGlucoseSample(uuid: nil,
  70. provenanceIdentifier: "95F800A3-A59D-4419-B8F2-611BED0962CF",
  71. syncIdentifier: nil,
  72. syncVersion: nil,
  73. startDate: startDate,
  74. quantity: quantity,
  75. condition: nil,
  76. trend: nil,
  77. trendRate: nil,
  78. isDisplayOnly: false,
  79. wasUserEntered: true,
  80. device: nil,
  81. healthKitEligibleDate: nil)
  82. XCTAssertNil(sample.uuid)
  83. XCTAssertEqual(sample.provenanceIdentifier, "95F800A3-A59D-4419-B8F2-611BED0962CF")
  84. XCTAssertNil(sample.syncIdentifier)
  85. XCTAssertNil(sample.syncVersion)
  86. XCTAssertEqual(sample.startDate, startDate)
  87. XCTAssertEqual(sample.quantity, quantity)
  88. XCTAssertNil(sample.condition)
  89. XCTAssertNil(sample.trend)
  90. XCTAssertNil(sample.trendRate)
  91. XCTAssertEqual(sample.isDisplayOnly, false)
  92. XCTAssertEqual(sample.wasUserEntered, true)
  93. XCTAssertNil(sample.device)
  94. XCTAssertNil(sample.healthKitEligibleDate)
  95. }
  96. private let dateFormatter = ISO8601DateFormatter()
  97. }
  98. class StoredGlucoseSampleManagedObjectInitializerTests: PersistenceControllerTestCase {
  99. func testManagedObjectInitializer() {
  100. cacheStore.managedObjectContext.performAndWait {
  101. let uuid = UUID()
  102. let startDate = dateFormatter.date(from: "2020-04-05T06:07:08Z")!
  103. let managedObject = CachedGlucoseObject(context: cacheStore.managedObjectContext)
  104. let device = HKDevice(name: "NAME", manufacturer: "MANUFACTURER", model: "MODEL", hardwareVersion: "HARDWAREVERSION", firmwareVersion: "FIRMWAREVERSION", softwareVersion: "SOFTWAREVERSION", localIdentifier: "LOCALIDENTIFIER", udiDeviceIdentifier: "UDIDEVICEIDENTIFIER")
  105. managedObject.uuid = uuid
  106. managedObject.provenanceIdentifier = "C198186D-F15C-4D0F-B8A1-83B28626DB3A"
  107. managedObject.syncIdentifier = "A313021C-4B11-448A-9266-B01321CA0BCC"
  108. managedObject.syncVersion = 4
  109. managedObject.value = 145.6
  110. managedObject.unitString = HKUnit.milligramsPerDeciliter.unitString
  111. managedObject.startDate = startDate
  112. managedObject.isDisplayOnly = true
  113. managedObject.wasUserEntered = true
  114. managedObject.device = device
  115. managedObject.condition = .aboveRange
  116. managedObject.trend = .downDownDown
  117. managedObject.trendRateUnit = HKUnit.milligramsPerDeciliterPerMinute.unitString
  118. managedObject.trendRateValue = -4.0
  119. managedObject.healthKitEligibleDate = startDate.addingTimeInterval(.hours(3))
  120. let sample = StoredGlucoseSample(managedObject: managedObject)
  121. XCTAssertEqual(sample.uuid, uuid)
  122. XCTAssertEqual(sample.provenanceIdentifier, "C198186D-F15C-4D0F-B8A1-83B28626DB3A")
  123. XCTAssertEqual(sample.syncIdentifier, "A313021C-4B11-448A-9266-B01321CA0BCC")
  124. XCTAssertEqual(sample.syncVersion, 4)
  125. XCTAssertEqual(sample.startDate, startDate)
  126. XCTAssertEqual(sample.quantity, HKQuantity(unit: .milligramsPerDeciliter, doubleValue: 145.6))
  127. XCTAssertEqual(sample.isDisplayOnly, true)
  128. XCTAssertEqual(sample.wasUserEntered, true)
  129. XCTAssertEqual(sample.device, device)
  130. XCTAssertEqual(sample.condition, .aboveRange)
  131. XCTAssertEqual(sample.trend, .downDownDown)
  132. XCTAssertEqual(sample.trendRate, HKQuantity(unit: .milligramsPerDeciliterPerMinute, doubleValue: -4.0))
  133. XCTAssertEqual(sample.healthKitEligibleDate, startDate.addingTimeInterval(.hours(3)))
  134. }
  135. }
  136. func testManagedObjectOptional() {
  137. cacheStore.managedObjectContext.performAndWait {
  138. let quantity = HKQuantity(unit: .millimolesPerLiter, doubleValue: 7.6)
  139. let startDate = dateFormatter.date(from: "2020-05-06T07:08:09Z")!
  140. let managedObject = CachedGlucoseObject(context: cacheStore.managedObjectContext)
  141. managedObject.provenanceIdentifier = "9A6AF580-7584-4FB1-90A2-ACCB96DF1D58"
  142. managedObject.value = quantity.doubleValue(for: .millimolesPerLiter)
  143. managedObject.unitString = HKUnit.millimolesPerLiter.unitString
  144. managedObject.startDate = startDate
  145. managedObject.isDisplayOnly = true
  146. managedObject.wasUserEntered = true
  147. let sample = StoredGlucoseSample(managedObject: managedObject)
  148. XCTAssertNil(sample.uuid)
  149. XCTAssertEqual(sample.provenanceIdentifier, "9A6AF580-7584-4FB1-90A2-ACCB96DF1D58")
  150. XCTAssertNil(sample.syncIdentifier)
  151. XCTAssertNil(sample.syncVersion)
  152. XCTAssertEqual(sample.startDate, startDate)
  153. XCTAssertEqual(sample.quantity, HKQuantity(unit: .millimolesPerLiter, doubleValue: 7.6))
  154. XCTAssertEqual(sample.isDisplayOnly, true)
  155. XCTAssertEqual(sample.wasUserEntered, true)
  156. XCTAssertNil(sample.device)
  157. XCTAssertNil(sample.condition)
  158. XCTAssertNil(sample.trend)
  159. XCTAssertNil(sample.trendRate)
  160. XCTAssertNil(sample.healthKitEligibleDate)
  161. }
  162. }
  163. private let dateFormatter = ISO8601DateFormatter()
  164. }