AutoCat/AutoCatCoreTests/Storage/StorageServiceTests.swift

93 lines
2.7 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// StorageServiceTests.swift
// AutoCatCoreTests
//
// Created by Selim Mustafaev on 13.07.2024.
// Copyright © 2024 Selim Mustafaev. All rights reserved.
//
import Testing
import RealmSwift
import Foundation
import Mockable
@testable import AutoCatCore
struct StorageServiceTests {
let existingVehicleNumber = "А123АА761"
let nonExistingVehicleNumber = "А999АА761"
let noteText = "Test note text"
let testLat: Double = 42
let testLon: Double = 24
let settingsServiceMock: MockSettingsServiceProtocol
let storageService: StorageService
init() async throws {
var config: Realm.Configuration = .defaultConfiguration
config.inMemoryIdentifier = UUID().uuidString
settingsServiceMock = MockSettingsServiceProtocol()
self.storageService = try await StorageService(settingsService: settingsServiceMock, config: config)
try addTestVehicle(config: config)
given(settingsServiceMock)
.user.willReturn(User())
}
func addTestVehicle(config: Realm.Configuration) throws {
let vehicle = Vehicle(existingVehicleNumber)
vehicle.addedDate = 0
vehicle.updatedDate = 0
let realm = try Realm(configuration: config)
try realm.write {
realm.add(vehicle)
}
}
@Test("Load existing vehicle")
func loadExistingVehicle() async throws {
let vehicle = try await storageService.loadVehicle(number: existingVehicleNumber)
#expect(vehicle.number == existingVehicleNumber)
}
@Test("Load non-existent vehicle")
func loadNonExistentVehicle() async throws {
await #expect(throws: StorageError.vehicleNotFound) {
_ = try await storageService.loadVehicle(number: nonExistingVehicleNumber)
}
}
@Test("Update existing vehicle", arguments: DbUpdatePolicy.allCases)
func updateVehicle(policy: DbUpdatePolicy) async throws {
let vehicle = VehicleDto(number: existingVehicleNumber)
let updated = try await storageService.updateVehicle(dto: vehicle, policy: policy)
#expect(updated == true)
}
@Test("Update non-existent vehicle", arguments: DbUpdatePolicy.allCases)
func updateNonExistentVehicle(policy: DbUpdatePolicy) async throws {
let vehicle = VehicleDto(number: nonExistingVehicleNumber)
let updated = try await storageService.updateVehicle(dto: vehicle, policy: policy)
switch policy {
case .always:
#expect(updated == true)
case .ifExists:
#expect(updated == false)
}
}
}