MySentryPumpStatusMessageBodyTests.swift 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. //
  2. // MySentryPumpStatusMessageBodyTests.swift
  3. // Naterade
  4. //
  5. // Created by Nathan Racklyeft on 9/6/15.
  6. // Copyright © 2015 Nathan Racklyeft. All rights reserved.
  7. //
  8. import XCTest
  9. @testable import MinimedKit
  10. class MySentryPumpStatusMessageBodyTests: XCTestCase {
  11. func testValidPumpStatusMessage() {
  12. let message = PumpMessage(rxData: Data(hexadecimalString: "a2594040042f511727070f09050184850000cd010105b03e0a0a1a009d030000711726000f09050000")!)
  13. if let message = message {
  14. XCTAssertTrue(message.messageBody is MySentryPumpStatusMessageBody)
  15. } else {
  16. XCTFail("\(String(describing: message)) is nil")
  17. }
  18. }
  19. func testGlucoseTrendFlat() {
  20. XCTAssertEqual(GlucoseTrend.flat, GlucoseTrend(byte: 0b00000000))
  21. XCTAssertEqual(GlucoseTrend.flat, GlucoseTrend(byte: 0b11110001))
  22. XCTAssertEqual(GlucoseTrend.flat, GlucoseTrend(byte: 0b11110001))
  23. XCTAssertEqual(GlucoseTrend.flat, GlucoseTrend(byte: 0b000))
  24. XCTAssertEqual(GlucoseTrend.flat, GlucoseTrend(byte: 0x51))
  25. }
  26. func testMidnightSensor() {
  27. let message = PumpMessage(rxData: Data(hexadecimalString: "a2594040049c510003310f090501393700025b0101068d262208150034000000700003000f09050000")!)!
  28. let body = message.messageBody as! MySentryPumpStatusMessageBody
  29. switch body.glucose {
  30. case .active(glucose: let glucose):
  31. XCTAssertEqual(114, glucose)
  32. default:
  33. XCTFail("\(body.glucose) is not .Active")
  34. }
  35. switch body.previousGlucose {
  36. case .active(glucose: let glucose):
  37. XCTAssertEqual(110, glucose)
  38. default:
  39. XCTFail("\(body.previousGlucose) is not .Active")
  40. }
  41. var dateComponents = DateComponents()
  42. dateComponents.calendar = Calendar(identifier: Calendar.Identifier.gregorian)
  43. dateComponents.year = 2015
  44. dateComponents.month = 9
  45. dateComponents.day = 5
  46. dateComponents.hour = 0
  47. dateComponents.minute = 3
  48. dateComponents.second = 49
  49. XCTAssertEqual(dateComponents, body.pumpDateComponents)
  50. dateComponents.second = 0
  51. XCTAssertEqual(dateComponents, body.glucoseDateComponents)
  52. XCTAssertEqual(GlucoseTrend.flat, body.glucoseTrend)
  53. }
  54. func testActiveSensor() {
  55. let message = PumpMessage(rxData: Data(hexadecimalString: "a2594040042f511727070f09050184850000cd010105b03e0a0a1a009d030000711726000f09050000")!)!
  56. let body = message.messageBody as! MySentryPumpStatusMessageBody
  57. switch body.glucose {
  58. case .active(glucose: let glucose):
  59. XCTAssertEqual(265, glucose)
  60. default:
  61. XCTFail("\(body.glucose) is not .Active")
  62. }
  63. switch body.previousGlucose {
  64. case .active(glucose: let glucose):
  65. XCTAssertEqual(267, glucose)
  66. default:
  67. XCTFail("\(body.previousGlucose) is not .Active")
  68. }
  69. var dateComponents = DateComponents()
  70. dateComponents.calendar = Calendar(identifier: Calendar.Identifier.gregorian)
  71. dateComponents.year = 2015
  72. dateComponents.month = 9
  73. dateComponents.day = 5
  74. dateComponents.hour = 23
  75. dateComponents.minute = 39
  76. dateComponents.second = 7
  77. XCTAssertEqual(dateComponents, body.pumpDateComponents)
  78. dateComponents.minute = 38
  79. dateComponents.second = 0
  80. XCTAssertEqual(dateComponents, body.glucoseDateComponents)
  81. XCTAssertEqual(GlucoseTrend.flat, body.glucoseTrend)
  82. }
  83. func testSensorEndEmptyReservoir() {
  84. let message = PumpMessage(rxData: Data(hexadecimalString: "a259404004fb511205000f090601050502000004000000ff00ffff0040000000711205000f09060000")!)!
  85. let body = message.messageBody as! MySentryPumpStatusMessageBody
  86. switch body.glucose {
  87. case .ended:
  88. break
  89. default:
  90. XCTFail("\(body.glucose) is not .Ended")
  91. }
  92. switch body.previousGlucose {
  93. case .ended:
  94. break
  95. default:
  96. XCTFail("\(body.previousGlucose) is not .Ended")
  97. }
  98. var dateComponents = DateComponents()
  99. dateComponents.calendar = Calendar(identifier: Calendar.Identifier.gregorian)
  100. dateComponents.year = 2015
  101. dateComponents.month = 9
  102. dateComponents.day = 6
  103. dateComponents.hour = 18
  104. dateComponents.minute = 5
  105. dateComponents.second = 0
  106. XCTAssertEqual(dateComponents, body.pumpDateComponents)
  107. XCTAssertEqual(dateComponents, body.glucoseDateComponents)
  108. XCTAssertEqual(GlucoseTrend.flat, body.glucoseTrend)
  109. }
  110. func testSensorOffEmptyReservoir() {
  111. let message = PumpMessage(rxData: Data(hexadecimalString: "a259404004ff501219000f09060100000000000400000000000000005e000000720000000000000000")!)!
  112. let body = message.messageBody as! MySentryPumpStatusMessageBody
  113. switch body.glucose {
  114. case .off:
  115. break
  116. default:
  117. XCTFail("\(body.glucose) is not .Off")
  118. }
  119. switch body.previousGlucose {
  120. case .off:
  121. break
  122. default:
  123. XCTFail("\(body.previousGlucose) is not .Off")
  124. }
  125. var dateComponents = DateComponents()
  126. dateComponents.calendar = Calendar(identifier: Calendar.Identifier.gregorian)
  127. dateComponents.year = 2015
  128. dateComponents.month = 9
  129. dateComponents.day = 6
  130. dateComponents.hour = 18
  131. dateComponents.minute = 25
  132. dateComponents.second = 0
  133. XCTAssertEqual(dateComponents, body.pumpDateComponents)
  134. XCTAssertNil(body.glucoseDateComponents)
  135. XCTAssertEqual(GlucoseTrend.flat, body.glucoseTrend)
  136. }
  137. func testSensorOffEmptyReservoirSuspended() {
  138. let message = PumpMessage(rxData: Data(hexadecimalString: "a25940400401501223000f090601000000000004000000000000000059000000720000000000000000")!)!
  139. let body = message.messageBody as! MySentryPumpStatusMessageBody
  140. switch body.glucose {
  141. case .off:
  142. break
  143. default:
  144. XCTFail("\(body.glucose) is not .Off")
  145. }
  146. switch body.previousGlucose {
  147. case .off:
  148. break
  149. default:
  150. XCTFail("\(body.previousGlucose) is not .Off")
  151. }
  152. var dateComponents = DateComponents()
  153. dateComponents.calendar = Calendar(identifier: Calendar.Identifier.gregorian)
  154. dateComponents.year = 2015
  155. dateComponents.month = 9
  156. dateComponents.day = 6
  157. dateComponents.hour = 18
  158. dateComponents.minute = 35
  159. dateComponents.second = 0
  160. XCTAssertEqual(dateComponents, body.pumpDateComponents)
  161. XCTAssertNil(body.glucoseDateComponents)
  162. XCTAssertEqual(GlucoseTrend.flat, body.glucoseTrend)
  163. }
  164. func testClockType24Hour() {
  165. let message = PumpMessage(rxData: Data(hexadecimalString: "a295099004b6d5971f1510070a013f3a0002dd020105bd08880825000502000755171e0010070a0000")!)!
  166. let body = message.messageBody as! MySentryPumpStatusMessageBody
  167. var dateComponents = DateComponents()
  168. dateComponents.calendar = Calendar(identifier: Calendar.Identifier.gregorian)
  169. dateComponents.year = 2016
  170. dateComponents.month = 7
  171. dateComponents.day = 10
  172. dateComponents.hour = 23
  173. dateComponents.minute = 31
  174. dateComponents.second = 21
  175. XCTAssertEqual(dateComponents, body.pumpDateComponents)
  176. var glucoseDateComponents = DateComponents()
  177. glucoseDateComponents.calendar = Calendar(identifier: Calendar.Identifier.gregorian)
  178. glucoseDateComponents.year = 2016
  179. glucoseDateComponents.month = 7
  180. glucoseDateComponents.day = 10
  181. glucoseDateComponents.hour = 23
  182. glucoseDateComponents.minute = 30
  183. glucoseDateComponents.second = 0
  184. XCTAssertEqual(glucoseDateComponents, body.glucoseDateComponents)
  185. XCTAssertEqual(ClockType.twentyFourHour, body.clockType)
  186. }
  187. }