126 lines
4.5 KiB
Swift
126 lines
4.5 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 = .unrecognizedVehicle.addEvent(.valid)
|
|
|
|
init() {
|
|
|
|
settingsServiceMock = MockSettingsServiceProtocol()
|
|
storageServiceMock = MockStorageServiceProtocol()
|
|
apiServiceMock = MockApiServiceProtocol()
|
|
|
|
viewModel = EventsViewModel(apiService: apiServiceMock,
|
|
storageService: storageServiceMock,
|
|
settingsService: settingsServiceMock,
|
|
vehicle: VehicleDto())
|
|
|
|
given(settingsServiceMock)
|
|
.user.willReturn(User())
|
|
}
|
|
|
|
func makeViewModel(vehicle: VehicleDto) -> EventsViewModel {
|
|
|
|
EventsViewModel(apiService: apiServiceMock,
|
|
storageService: storageServiceMock,
|
|
settingsService: settingsServiceMock,
|
|
vehicle: vehicle)
|
|
}
|
|
|
|
@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)
|
|
.updateVehicle(dto: .value(updatedVehicle), policy: .value(.ifExists))
|
|
.willReturn(true)
|
|
|
|
given(storageServiceMock)
|
|
.add(event: .value(.valid), to: .value(VehicleDto.validNumber))
|
|
.willReturn(unrecognizedVehicleWithEvent)
|
|
|
|
viewModel = makeViewModel(vehicle: isUnrecognized ? .unrecognizedVehicle : .normal)
|
|
await viewModel.addEvent(.valid)
|
|
|
|
verify(apiServiceMock)
|
|
.add(event: .any, to: .any)
|
|
.called(isUnrecognized ? .never : .once)
|
|
|
|
verify(storageServiceMock)
|
|
.updateVehicle(dto: .any, policy: .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)
|
|
}
|
|
|
|
@Test("Delete event", arguments: [true, false])
|
|
mutating func deleteEvent(isUnrecognized: Bool) async throws {
|
|
|
|
let vehicleWithEvent: VehicleDto = isUnrecognized ? unrecognizedVehicleWithEvent : vehicleWithEvent
|
|
let vehicle: VehicleDto = isUnrecognized ? .unrecognizedVehicle : .normal
|
|
|
|
given(apiServiceMock)
|
|
.remove(event: .value(VehicleEventDto.validId))
|
|
.willReturn(.normal)
|
|
|
|
given(storageServiceMock)
|
|
.updateVehicle(dto: .value(vehicle), policy: .value(.ifExists))
|
|
.willReturn(true)
|
|
|
|
given(storageServiceMock)
|
|
.remove(event: .value(VehicleEventDto.validId), from: .value(VehicleDto.validNumber))
|
|
.willReturn(.unrecognizedVehicle)
|
|
|
|
viewModel = makeViewModel(vehicle: vehicleWithEvent)
|
|
await viewModel.deleteEvent(VehicleEventDto.valid.viewModel)
|
|
|
|
verify(apiServiceMock)
|
|
.remove(event: .any)
|
|
.called(isUnrecognized ? .never : .once)
|
|
|
|
verify(storageServiceMock)
|
|
.updateVehicle(dto: .any, policy: .any)
|
|
.called(isUnrecognized ? .never : .once)
|
|
|
|
verify(storageServiceMock)
|
|
.remove(event: .any, from: .any)
|
|
.called(isUnrecognized ? .once : .never)
|
|
|
|
#expect(viewModel.vehicle.events.isEmpty)
|
|
#expect(viewModel.events.isEmpty)
|
|
#expect(viewModel.hud == nil)
|
|
}
|
|
}
|