CGMManagerStatusTests.swift 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. //
  2. // CGMManagerStatusTests.swift
  3. // LoopKitTests
  4. //
  5. // Created by Darin Krauss on 11/3/21.
  6. // Copyright © 2021 LoopKit Authors. All rights reserved.
  7. //
  8. import XCTest
  9. import HealthKit
  10. @testable import LoopKit
  11. class CGMManagerStatusCodableTests: XCTestCase {
  12. func testCodable() throws {
  13. let device = HKDevice(name: "Acme Best Device",
  14. manufacturer: "Acme",
  15. model: "Best",
  16. hardwareVersion: "0.1.2",
  17. firmwareVersion: "1.2.3",
  18. softwareVersion: "2.3.4",
  19. localIdentifier: "Locally Identified",
  20. udiDeviceIdentifier: "U0D1I2")
  21. try assertCGMManagerStatusCodable(CGMManagerStatus(hasValidSensorSession: true,
  22. lastCommunicationDate: dateFormatter.date(from: "2020-05-14T15:56:09Z")!,
  23. device: device),
  24. encodesJSON: """
  25. {
  26. "device" : {
  27. "firmwareVersion" : "1.2.3",
  28. "hardwareVersion" : "0.1.2",
  29. "localIdentifier" : "Locally Identified",
  30. "manufacturer" : "Acme",
  31. "model" : "Best",
  32. "name" : "Acme Best Device",
  33. "softwareVersion" : "2.3.4",
  34. "udiDeviceIdentifier" : "U0D1I2"
  35. },
  36. "hasValidSensorSession" : true,
  37. "lastCommunicationDate" : "2020-05-14T15:56:09Z"
  38. }
  39. """
  40. )
  41. }
  42. private func assertCGMManagerStatusCodable(_ original: CGMManagerStatus, encodesJSON string: String) throws {
  43. let data = try encoder.encode(original)
  44. XCTAssertEqual(String(data: data, encoding: .utf8), string)
  45. let decoded = try decoder.decode(CGMManagerStatus.self, from: data)
  46. XCTAssertEqual(decoded, original)
  47. }
  48. private let dateFormatter = ISO8601DateFormatter()
  49. private let encoder: JSONEncoder = {
  50. let encoder = JSONEncoder()
  51. encoder.outputFormatting = [.prettyPrinted, .sortedKeys, .withoutEscapingSlashes]
  52. encoder.dateEncodingStrategy = .iso8601
  53. return encoder
  54. }()
  55. private let decoder: JSONDecoder = {
  56. let decoder = JSONDecoder()
  57. decoder.dateDecodingStrategy = .iso8601
  58. return decoder
  59. }()
  60. }