CarbValueTests.swift 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. //
  2. // CarbValueTests.swift
  3. // LoopKitTests
  4. //
  5. // Created by Darin Krauss on 5/4/20.
  6. // Copyright © 2020 LoopKit Authors. All rights reserved.
  7. //
  8. import XCTest
  9. import HealthKit
  10. @testable import LoopKit
  11. class CarbValueCodableTests: XCTestCase {
  12. func testCodable() throws {
  13. try assertCarbValueCodable(CarbValue(startDate: dateFormatter.date(from: "2020-05-14T12:18:14Z")!,
  14. endDate: dateFormatter.date(from: "2020-05-14T13:18:14Z")!,
  15. value: 34.5),
  16. encodesJSON: """
  17. {
  18. "endDate" : "2020-05-14T13:18:14Z",
  19. "startDate" : "2020-05-14T12:18:14Z",
  20. "value" : 34.5
  21. }
  22. """
  23. )
  24. }
  25. private func assertCarbValueCodable(_ original: CarbValue, encodesJSON string: String) throws {
  26. let data = try encoder.encode(original)
  27. XCTAssertEqual(String(data: data, encoding: .utf8), string)
  28. let decoded = try decoder.decode(CarbValue.self, from: data)
  29. XCTAssertEqual(decoded, original)
  30. }
  31. private let dateFormatter = ISO8601DateFormatter()
  32. private let encoder: JSONEncoder = {
  33. let encoder = JSONEncoder()
  34. encoder.outputFormatting = [.prettyPrinted, .sortedKeys, .withoutEscapingSlashes]
  35. encoder.dateEncodingStrategy = .iso8601
  36. return encoder
  37. }()
  38. private let decoder: JSONDecoder = {
  39. let decoder = JSONDecoder()
  40. decoder.dateDecodingStrategy = .iso8601
  41. return decoder
  42. }()
  43. }