GlucoseRangeTests.swift 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. //
  2. // GlucoseRangeTests.swift
  3. // LoopKitTests
  4. //
  5. // Created by Nathaniel Hamming on 2021-03-16.
  6. // Copyright © 2021 LoopKit Authors. All rights reserved.
  7. //
  8. import XCTest
  9. import HealthKit
  10. @testable import LoopKit
  11. class GlucoseRangeTests: XCTestCase {
  12. private let encoder: JSONEncoder = {
  13. let encoder = JSONEncoder()
  14. encoder.outputFormatting = [.prettyPrinted, .sortedKeys, .withoutEscapingSlashes]
  15. encoder.dateEncodingStrategy = .iso8601
  16. return encoder
  17. }()
  18. private let decoder: JSONDecoder = {
  19. let decoder = JSONDecoder()
  20. decoder.dateDecodingStrategy = .iso8601
  21. return decoder
  22. }()
  23. func testInitializerDouble() throws {
  24. let unit = HKUnit.milligramsPerDeciliter
  25. let glucoseRange = GlucoseRange(
  26. minValue: 75,
  27. maxValue: 90,
  28. unit: unit)
  29. let expectedRange = DoubleRange(minValue: 75, maxValue: 90)
  30. XCTAssertEqual(glucoseRange.range, expectedRange)
  31. XCTAssertEqual(glucoseRange.unit, unit)
  32. }
  33. func testInitializerGlucoseRange() throws {
  34. let unit = HKUnit.milligramsPerDeciliter
  35. let expectedRange = DoubleRange(minValue: 75, maxValue: 90)
  36. let glucoseRange = GlucoseRange(
  37. range: expectedRange,
  38. unit: unit)
  39. XCTAssertEqual(glucoseRange.range, expectedRange)
  40. XCTAssertEqual(glucoseRange.unit, unit)
  41. }
  42. func testQuantityRange() throws {
  43. let unit = HKUnit.milligramsPerDeciliter
  44. let range = DoubleRange(minValue: 75, maxValue: 90)
  45. let glucoseRange = GlucoseRange(
  46. range: range,
  47. unit: unit)
  48. let expectedQuantityRange = range.quantityRange(for: unit)
  49. XCTAssertEqual(glucoseRange.quantityRange, expectedQuantityRange)
  50. }
  51. let encodedString = """
  52. {
  53. "bloodGlucoseUnit" : "mg/dL",
  54. "range" : {
  55. "maxValue" : 90,
  56. "minValue" : 75
  57. }
  58. }
  59. """
  60. func testEncoding() throws {
  61. let glucoseRange = GlucoseRange(
  62. minValue: 75,
  63. maxValue: 90,
  64. unit: .milligramsPerDeciliter)
  65. let data = try encoder.encode(glucoseRange)
  66. XCTAssertEqual(encodedString, String(data: data, encoding: .utf8)!)
  67. }
  68. func testDecoding() throws {
  69. let data = encodedString.data(using: .utf8)!
  70. let decoded = try decoder.decode(GlucoseRange.self, from: data)
  71. let expected = GlucoseRange(
  72. minValue: 75,
  73. maxValue: 90,
  74. unit: .milligramsPerDeciliter)
  75. XCTAssertEqual(expected, decoded)
  76. XCTAssertEqual(decoded.range, expected.range)
  77. XCTAssertEqual(decoded.unit, expected.unit)
  78. }
  79. func testRawValue() throws {
  80. let glucoseRange = GlucoseRange(
  81. minValue: 75,
  82. maxValue: 90,
  83. unit: .milligramsPerDeciliter)
  84. var expectedRawValue: [String:Any] = [:]
  85. expectedRawValue["bloodGlucoseUnit"] = "mg/dL"
  86. expectedRawValue["range"] = DoubleRange(minValue: 75, maxValue: 90).rawValue
  87. XCTAssertEqual(glucoseRange.rawValue["bloodGlucoseUnit"] as? String, expectedRawValue["bloodGlucoseUnit"] as? String)
  88. XCTAssertEqual(glucoseRange.rawValue["range"] as? DoubleRange.RawValue, expectedRawValue["range"] as? DoubleRange.RawValue)
  89. }
  90. func testInitializeFromRawValue() throws {
  91. var rawValue: [String:Any] = [:]
  92. rawValue["bloodGlucoseUnit"] = "mg/dL"
  93. rawValue["range"] = DoubleRange(minValue: 80, maxValue: 100).rawValue
  94. let glucoseRange = GlucoseRange(rawValue: rawValue)
  95. let expectedRange = DoubleRange(minValue: 80, maxValue: 100)
  96. XCTAssertEqual(glucoseRange?.range, expectedRange)
  97. XCTAssertEqual(glucoseRange?.unit, .milligramsPerDeciliter)
  98. }
  99. }