AutoCat/AutoCatTests/EventsTests.swift
2024-12-21 23:56:00 +03:00

81 lines
2.8 KiB
Swift

//
// EventsTests.swift
// AutoCatTests
//
// Created by Selim Mustafaev on 18.12.2024.
// Copyright © 2024 Selim Mustafaev. All rights reserved.
//
import Testing
import Mockable
import AutoCatCore
@testable import AutoCat
@MainActor
struct EventsTests {
var settingsServiceMock: MockSettingsServiceProtocol
var storageServiceMock: MockStorageServiceProtocol
var apiServiceMock: MockApiServiceProtocol
var viewModel: EventsViewModel
lazy var vehicleWithEvent: VehicleDto = .normal.addEvent(.valid)
lazy var unrecognizedVehicleWithEvent: VehicleDto = .unrecognized.addEvent(.valid)
init() {
settingsServiceMock = MockSettingsServiceProtocol()
storageServiceMock = MockStorageServiceProtocol()
apiServiceMock = MockApiServiceProtocol()
ServiceContainer.shared.register(SettingsServiceProtocol.self, instance: settingsServiceMock)
ServiceContainer.shared.register(StorageServiceProtocol.self, instance: storageServiceMock)
ServiceContainer.shared.register(ApiServiceProtocol.self, instance: apiServiceMock)
viewModel = EventsViewModel(vehicle: VehicleDto())
given(settingsServiceMock)
.user.willReturn(User())
}
@Test("Add event", arguments: [true, false])
mutating func addEvent(isUnrecognized: Bool) async throws {
let updatedVehicle: VehicleDto = isUnrecognized ? unrecognizedVehicleWithEvent : vehicleWithEvent
given(apiServiceMock)
.add(event: .value(.valid), to: .value(VehicleDto.validNumber))
.willReturn(vehicleWithEvent)
given(storageServiceMock)
.updateVehicleIfExists(dto: .value(updatedVehicle))
.willReturn()
given(storageServiceMock)
.add(event: .value(.valid), to: .value(VehicleDto.validNumber))
.willReturn(unrecognizedVehicleWithEvent)
viewModel = EventsViewModel(vehicle: isUnrecognized ? .unrecognized : .normal)
await viewModel.addEvent(.valid)
verify(apiServiceMock)
.add(event: .any, to: .any)
.called(isUnrecognized ? .never : .once)
verify(storageServiceMock)
.updateVehicleIfExists(dto: .any)
.called(isUnrecognized ? .never : .once)
verify(storageServiceMock)
.add(event: .any, to: .any)
.called(isUnrecognized ? .once : .never)
#expect(viewModel.vehicle.events.count == 1)
#expect(viewModel.vehicle.events.first?.id == VehicleEventDto.validId)
#expect(viewModel.events.count == 1)
#expect(viewModel.events.first?.id == VehicleEventDto.validId)
#expect(viewModel.hud == nil)
}
}