MockPumpManager+UI.swift 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. //
  2. // MockPumpManager+UI.swift
  3. // LoopKitUI
  4. //
  5. // Created by Michael Pangburn on 11/20/18.
  6. // Copyright © 2018 LoopKit Authors. All rights reserved.
  7. //
  8. import Foundation
  9. import SwiftUI
  10. import LoopKit
  11. import LoopKitUI
  12. import MockKit
  13. extension MockPumpManager: PumpManagerUI {
  14. private var appName: String {
  15. return Bundle.main.object(forInfoDictionaryKey: "CFBundleDisplayName") as! String
  16. }
  17. public var smallImage: UIImage? { return UIImage(named: "Pump Simulator", in: Bundle(for: MockPumpManagerSettingsViewController.self), compatibleWith: nil) }
  18. public static func setupViewController(insulinTintColor: Color, guidanceColors: GuidanceColors, allowedInsulinTypes: [InsulinType]) -> (UIViewController & CompletionNotifying & PumpManagerSetupViewController) {
  19. return MockPumpManagerSetupViewController.instantiateFromStoryboard()
  20. }
  21. public func settingsViewController(insulinTintColor: Color, guidanceColors: GuidanceColors, allowedInsulinTypes: [InsulinType]) -> (UIViewController & CompletionNotifying) {
  22. let settings = MockPumpManagerSettingsViewController(pumpManager: self, supportedInsulinTypes: allowedInsulinTypes)
  23. let nav = SettingsNavigationViewController(rootViewController: settings)
  24. return nav
  25. }
  26. public func deliveryUncertaintyRecoveryViewController(insulinTintColor: Color, guidanceColors: GuidanceColors) -> (UIViewController & CompletionNotifying) {
  27. return DeliveryUncertaintyRecoveryViewController(appName: appName, uncertaintyStartedAt: Date()) {
  28. self.state.deliveryCommandsShouldTriggerUncertainDelivery = false
  29. self.state.deliveryIsUncertain = false
  30. }
  31. }
  32. public func hudProvider(insulinTintColor: Color, guidanceColors: GuidanceColors, allowedInsulinTypes: [InsulinType]) -> HUDProvider? {
  33. return MockHUDProvider(pumpManager: self, allowedInsulinTypes: allowedInsulinTypes)
  34. }
  35. public static func createHUDView(rawValue: HUDProvider.HUDViewRawState) -> LevelHUDView? {
  36. return MockHUDProvider.createHUDView(rawValue: rawValue)
  37. }
  38. }
  39. // MARK: - DeliveryLimitSettingsTableViewControllerSyncSource
  40. extension MockPumpManager {
  41. public func syncDeliveryLimitSettings(for viewController: DeliveryLimitSettingsTableViewController, completion: @escaping (DeliveryLimitSettingsResult) -> Void) {
  42. guard let maximumBasalRatePerHour = viewController.maximumBasalRatePerHour,
  43. let maximumBolus = viewController.maximumBolus else
  44. {
  45. completion(.failure(MockPumpManagerError.missingSettings))
  46. return
  47. }
  48. completion(.success(maximumBasalRatePerHour: maximumBasalRatePerHour, maximumBolus: maximumBolus))
  49. }
  50. public func syncButtonTitle(for viewController: DeliveryLimitSettingsTableViewController) -> String {
  51. return "Save to simulator"
  52. }
  53. public func syncButtonDetailText(for viewController: DeliveryLimitSettingsTableViewController) -> String? {
  54. return nil
  55. }
  56. public func deliveryLimitSettingsTableViewControllerIsReadOnly(_ viewController: DeliveryLimitSettingsTableViewController) -> Bool {
  57. return false
  58. }
  59. }
  60. // MARK: - BasalScheduleTableViewControllerSyncSource
  61. extension MockPumpManager {
  62. public func syncScheduleValues(for viewController: BasalScheduleTableViewController, completion: @escaping (SyncBasalScheduleResult<Double>) -> Void) {
  63. syncBasalRateSchedule(items: viewController.scheduleItems) { result in
  64. switch result {
  65. case .success(let schedule):
  66. completion(.success(scheduleItems: schedule.items, timeZone: schedule.timeZone))
  67. case .failure(let error):
  68. completion(.failure(error))
  69. }
  70. }
  71. }
  72. public func syncButtonTitle(for viewController: BasalScheduleTableViewController) -> String {
  73. return "Save to simulator"
  74. }
  75. public func syncButtonDetailText(for viewController: BasalScheduleTableViewController) -> String? {
  76. return nil
  77. }
  78. public func basalScheduleTableViewControllerIsReadOnly(_ viewController: BasalScheduleTableViewController) -> Bool {
  79. return false
  80. }
  81. }