diff --git a/AutoCat/Screens/ReportScreen/ReportScreen.swift b/AutoCat/Screens/ReportScreen/ReportScreen.swift index 94bace6..0b4edd8 100644 --- a/AutoCat/Screens/ReportScreen/ReportScreen.swift +++ b/AutoCat/Screens/ReportScreen/ReportScreen.swift @@ -58,8 +58,17 @@ struct ReportScreen: View { .navigationLink(onTap: viewModel.openOsago) LabeledContent("Owners", value: String(viewModel.vehicle.ownershipPeriods.count)) .navigationLink(onTap: viewModel.openOwners) + LabeledContent("Photos", value: String(viewModel.vehicle.photos.count)) + .navigationLink(onTap: viewModel.openPhotoGallery) + LabeledContent("Ads", value: String(viewModel.vehicle.ads.count)) + .navigationLink(onTap: viewModel.openAds) + LabeledContent("Notes", value: String(viewModel.vehicle.notes.count)) + .navigationLink(onTap: viewModel.openNotes) } } + .onAppear { + Task { await viewModel.loadVehicle() } + } } } diff --git a/AutoCat/Screens/ReportScreen/ReportViewModel.swift b/AutoCat/Screens/ReportScreen/ReportViewModel.swift index 4a17b71..34322ec 100644 --- a/AutoCat/Screens/ReportScreen/ReportViewModel.swift +++ b/AutoCat/Screens/ReportScreen/ReportViewModel.swift @@ -43,17 +43,13 @@ class ReportViewModel: ACHudContainer { init(vehicle: VehicleDto) { self.vehicle = vehicle - self.loadVehicle() } - func loadVehicle() { - - Task { - do { - vehicle = try await storageService.loadVehicle(number: vehicle.getNumber()) - } catch { - hud = .error(error) - } + func loadVehicle() async { + do { + vehicle = try await storageService.loadVehicle(number: vehicle.getNumber()) + } catch { + hud = .error(error) } } @@ -68,4 +64,16 @@ class ReportViewModel: ACHudContainer { func openOwners() { coordinator?.openOwners(ownerships: vehicle.ownershipPeriods) } + + func openPhotoGallery() { + + } + + func openNotes() { + + } + + func openAds() { + + } } diff --git a/AutoCatCore/Models/DTO/VehicleDto.swift b/AutoCatCore/Models/DTO/VehicleDto.swift index a4f77ac..055b3d0 100644 --- a/AutoCatCore/Models/DTO/VehicleDto.swift +++ b/AutoCatCore/Models/DTO/VehicleDto.swift @@ -155,6 +155,12 @@ extension VehicleDto: Exportable { extension VehicleDto { + // For testing + public init(number: String, color: String? = nil) { + self.number = number + self.color = color + } + public func getNumber() -> String { return self.number } diff --git a/AutoCatTests/ReportTests.swift b/AutoCatTests/ReportTests.swift new file mode 100644 index 0000000..bb34e5b --- /dev/null +++ b/AutoCatTests/ReportTests.swift @@ -0,0 +1,63 @@ +// +// 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 +struct ReportTests { + + let existingVehicleNumber = "А123АА761" + let nonExistingVehicleNumber = "А999АА761" + let testColor = "testColor" + + var storageServiceMock: MockStorageServiceProtocol + + var viewModel: ReportViewModel + + init() { + storageServiceMock = MockStorageServiceProtocol() + + ServiceContainer.shared.register(StorageServiceProtocol.self, instance: storageServiceMock) + viewModel = ReportViewModel(vehicle: VehicleDto()) + } + + @Test("Load vehicle detail") + func loadVehicleDetail() async throws { + + let incompleteVehicleModel = VehicleDto(number: existingVehicleNumber) + let fullVehicleModel = VehicleDto(number: existingVehicleNumber, color: testColor) + + viewModel.vehicle = incompleteVehicleModel + + #expect(viewModel.vehicle.color == nil) + + given(storageServiceMock) + .loadVehicle(number: .value(existingVehicleNumber)) + .willReturn(fullVehicleModel) + + await viewModel.loadVehicle() + + #expect(viewModel.vehicle.color == testColor) + #expect(viewModel.hud == nil) + } + + @Test("Load vehicle error") + func loadVehicleError() async throws { + + given(storageServiceMock) + .loadVehicle(number: .any) + .willThrow(StorageError.vehicleNotFound) + + await viewModel.loadVehicle() + + #expect(viewModel.hud == .error(StorageError.vehicleNotFound)) + } +}