StoredInsulinModelTests.swift 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. //
  2. // StoredInsulinModelTests.swift
  3. // LoopKitTests
  4. //
  5. // Created by Darin Krauss on 8/26/20.
  6. // Copyright © 2020 LoopKit Authors. All rights reserved.
  7. //
  8. import XCTest
  9. @testable import LoopKit
  10. class StoredInsulinModelCodableTests: XCTestCase {
  11. func testCodable() throws {
  12. let storedInsulinModel = StoredInsulinModel(modelType: .rapidAdult, actionDuration: .hours(6), peakActivity: .hours(3))
  13. try! assertStoredInsulinModelCodable(storedInsulinModel, encodesJSON: """
  14. {
  15. "actionDuration" : 21600,
  16. "modelType" : "rapidAdult",
  17. "peakActivity" : 10800
  18. }
  19. """
  20. )
  21. }
  22. func testCodableOptional() throws {
  23. let storedInsulinModel = StoredInsulinModel(modelType: .rapidChild, actionDuration: .hours(5))
  24. try! assertStoredInsulinModelCodable(storedInsulinModel, encodesJSON: """
  25. {
  26. "actionDuration" : 18000,
  27. "modelType" : "rapidChild"
  28. }
  29. """
  30. )
  31. }
  32. private func assertStoredInsulinModelCodable(_ original: StoredInsulinModel, encodesJSON string: String) throws {
  33. let data = try encoder.encode(original)
  34. XCTAssertEqual(String(data: data, encoding: .utf8), string)
  35. let decoded = try decoder.decode(StoredInsulinModel.self, from: data)
  36. XCTAssertEqual(decoded, original)
  37. }
  38. private let encoder: JSONEncoder = {
  39. let encoder = JSONEncoder()
  40. encoder.outputFormatting = [.prettyPrinted, .sortedKeys, .withoutEscapingSlashes]
  41. encoder.dateEncodingStrategy = .iso8601
  42. return encoder
  43. }()
  44. private let decoder: JSONDecoder = {
  45. let decoder = JSONDecoder()
  46. decoder.dateDecodingStrategy = .iso8601
  47. return decoder
  48. }()
  49. }