HKDeviceCodableTests.swift 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. //
  2. // HKDeviceCodableTests.swift
  3. // LoopKitTests
  4. //
  5. // Created by Rick Pasetto on 8/6/21.
  6. // Copyright © 2021 LoopKit Authors. All rights reserved.
  7. //
  8. import HealthKit
  9. import XCTest
  10. @testable import LoopKit
  11. class HKDeviceCodableTests: XCTestCase {
  12. let device1 = HKDevice(name: "NAME1", manufacturer: "MANUFACTURER", model: "MODEL", hardwareVersion: "HARDWAREVERSION", firmwareVersion: "FIRMWAREVERSION", softwareVersion: "SOFTWAREVERSION", localIdentifier: "LOCALIDENTIFIER", udiDeviceIdentifier: "UDIDEVICEIDENTIFIER")
  13. let device1JSON = """
  14. {
  15. "firmwareVersion" : "FIRMWAREVERSION",
  16. "hardwareVersion" : "HARDWAREVERSION",
  17. "localIdentifier" : "LOCALIDENTIFIER",
  18. "manufacturer" : "MANUFACTURER",
  19. "model" : "MODEL",
  20. "name" : "NAME1",
  21. "softwareVersion" : "SOFTWAREVERSION",
  22. "udiDeviceIdentifier" : "UDIDEVICEIDENTIFIER"
  23. }
  24. """
  25. let device2 = HKDevice(name: "NAME2", manufacturer: "MANUFACTURER", model: "MODEL", hardwareVersion: "HARDWAREVERSION", firmwareVersion: "FIRMWAREVERSION", softwareVersion: "SOFTWAREVERSION", localIdentifier: "LOCALIDENTIFIER", udiDeviceIdentifier: "UDIDEVICEIDENTIFIER")
  26. let device2JSON = """
  27. {
  28. "firmwareVersion" : "FIRMWAREVERSION",
  29. "hardwareVersion" : "HARDWAREVERSION",
  30. "localIdentifier" : "LOCALIDENTIFIER",
  31. "manufacturer" : "MANUFACTURER",
  32. "model" : "MODEL",
  33. "name" : "NAME2",
  34. "softwareVersion" : "SOFTWAREVERSION",
  35. "udiDeviceIdentifier" : "UDIDEVICEIDENTIFIER"
  36. }
  37. """
  38. let device3 = HKDevice(name: "NAME3", manufacturer: nil, model: nil, hardwareVersion: nil, firmwareVersion: nil, softwareVersion: nil, localIdentifier: nil, udiDeviceIdentifier: nil)
  39. let device3JSON = """
  40. {
  41. "name" : "NAME3"
  42. }
  43. """
  44. let jsonEncoder: JSONEncoder = {
  45. let val = JSONEncoder()
  46. val.outputFormatting = [.prettyPrinted, .sortedKeys]
  47. return val
  48. }()
  49. let plistEncoder: PropertyListEncoder = {
  50. let val = PropertyListEncoder()
  51. val.outputFormat = .xml
  52. return val
  53. }()
  54. func testEncode() throws {
  55. XCTAssertEqual(device1JSON, String(data: try jsonEncoder.encode(device1), encoding: .utf8))
  56. XCTAssertEqual(device2JSON, String(data: try jsonEncoder.encode(device2), encoding: .utf8))
  57. XCTAssertEqual(device3JSON, String(data: try jsonEncoder.encode(device3), encoding: .utf8))
  58. XCTAssertNotEqual(device2JSON, String(data: try jsonEncoder.encode(device1), encoding: .utf8))
  59. }
  60. func testDecodeJSON() throws {
  61. XCTAssertEqual(device1, try HKDevice(from: device1JSON.data(using: .utf8)!))
  62. XCTAssertEqual(device2, try HKDevice(from: device2JSON.data(using: .utf8)!))
  63. XCTAssertEqual(device3, try HKDevice(from: device3JSON.data(using: .utf8)!))
  64. }
  65. func testDecodePropertyList() throws {
  66. XCTAssertEqual(device1, try HKDevice(from: plistEncoder.encode(device1)))
  67. XCTAssertEqual(device2, try HKDevice(from: plistEncoder.encode(device2)))
  68. XCTAssertEqual(device3, try HKDevice(from: plistEncoder.encode(device3)))
  69. XCTAssertNotEqual(device3, try HKDevice(from: plistEncoder.encode(device1)))
  70. }
  71. func testDecodeInvalidData() throws {
  72. XCTAssertThrowsError(try HKDevice(from: Data()))
  73. }
  74. }