Adding few test for report screen

This commit is contained in:
Selim Mustafaev 2024-12-03 15:52:16 +03:00
parent 22e5ca764e
commit c125f9ffab
4 changed files with 95 additions and 9 deletions

View File

@ -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() }
}
}
}

View File

@ -43,19 +43,15 @@ class ReportViewModel: ACHudContainer {
init(vehicle: VehicleDto) {
self.vehicle = vehicle
self.loadVehicle()
}
func loadVehicle() {
Task {
func loadVehicle() async {
do {
vehicle = try await storageService.loadVehicle(number: vehicle.getNumber())
} catch {
hud = .error(error)
}
}
}
func openEvents() {
coordinator?.openEvents(vehicle: vehicle)
@ -68,4 +64,16 @@ class ReportViewModel: ACHudContainer {
func openOwners() {
coordinator?.openOwners(ownerships: vehicle.ownershipPeriods)
}
func openPhotoGallery() {
}
func openNotes() {
}
func openAds() {
}
}

View File

@ -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
}

View File

@ -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))
}
}