// // ReportTests.swift // AutoCatTests // // Created by Selim Mustafaev on 02.12.2024. // Copyright © 2024 Selim Mustafaev. All rights reserved. // import Testing import Mockable import AutoCatCore @testable import AutoCat @MainActor class ReportTests { let existingVehicleNumber = "А123АА761" let nonExistingVehicleNumber = "А999АА761" let testColor = "testColor" var storageServiceMock: MockStorageServiceProtocol var settingsServiceMock: MockSettingsServiceProtocol var viewModel: ReportViewModel init() { storageServiceMock = MockStorageServiceProtocol() settingsServiceMock = MockSettingsServiceProtocol() ServiceContainer.shared.register(StorageServiceProtocol.self, instance: storageServiceMock) ServiceContainer.shared.register(SettingsServiceProtocol.self, instance: settingsServiceMock) viewModel = ReportViewModel(vehicle: VehicleDto(), isPersistent: true) } @Test("Load vehicle detail") func loadVehicleDetail() async throws { let incompleteVehicleModel = VehicleDto(number: existingVehicleNumber) let fullVehicleModel = VehicleDto(number: existingVehicleNumber, color: testColor) viewModel = ReportViewModel(vehicle: incompleteVehicleModel, isPersistent: true) #expect(viewModel.vehicle.color == nil) given(storageServiceMock) .loadVehicle(number: .value(existingVehicleNumber)) .willReturn(fullVehicleModel) await viewModel.onAppear() verify(storageServiceMock) .loadVehicle(number: .value(existingVehicleNumber)) .called(.once) #expect(viewModel.vehicle.color == testColor) #expect(viewModel.hud == nil) } @Test("Load vehicle error") func loadVehicleError() async throws { viewModel = ReportViewModel(vehicle: VehicleDto(), isPersistent: true) given(storageServiceMock) .loadVehicle(number: .any) .willThrow(StorageError.vehicleNotFound) await viewModel.onAppear() verify(storageServiceMock) .loadVehicle(number: .any) .called(.once) #expect(viewModel.hud == .error(StorageError.vehicleNotFound)) } @Test("Show debug info", arguments: [true, false]) func showDebugInfo(value: Bool) async throws { viewModel = ReportViewModel(vehicle: VehicleDto(), isPersistent: false) given(settingsServiceMock) .showDebugInfo.willReturn(value) #expect(viewModel.showDebugInfo == value) } }