Adding StorageService methods for events
This commit is contained in:
parent
b36620eba0
commit
b3bbea408e
@ -23,4 +23,39 @@ public extension StorageService {
|
|||||||
|
|
||||||
return vehicle.dto
|
return vehicle.dto
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func remove(event id: String, from number: String) async throws -> VehicleDto {
|
||||||
|
|
||||||
|
guard let vehicle = realm.object(ofType: Vehicle.self, forPrimaryKey: number) else {
|
||||||
|
throw StorageError.vehicleNotFound
|
||||||
|
}
|
||||||
|
|
||||||
|
try await realm.asyncWrite {
|
||||||
|
if let index = vehicle.events.firstIndex(where: { $0.id == id }) {
|
||||||
|
vehicle.events.remove(at: index)
|
||||||
|
vehicle.updatedDate = Date().timeIntervalSince1970
|
||||||
|
} else {
|
||||||
|
throw StorageError.eventNotFound
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return vehicle.dto
|
||||||
|
}
|
||||||
|
|
||||||
|
func edit(event: VehicleEventDto, for number: String) async throws -> VehicleDto {
|
||||||
|
|
||||||
|
guard let vehicle = realm.object(ofType: Vehicle.self, forPrimaryKey: number) else {
|
||||||
|
throw StorageError.vehicleNotFound
|
||||||
|
}
|
||||||
|
|
||||||
|
try await realm.asyncWrite {
|
||||||
|
if let index = vehicle.events.firstIndex(where: { $0.id == event.id }) {
|
||||||
|
vehicle.events[index] = VehicleEvent(dto: event)
|
||||||
|
} else {
|
||||||
|
throw StorageError.eventNotFound
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return vehicle.dto
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -13,11 +13,13 @@ public enum StorageError: LocalizedError {
|
|||||||
|
|
||||||
case vehicleNotFound
|
case vehicleNotFound
|
||||||
case noteNotFound
|
case noteNotFound
|
||||||
|
case eventNotFound
|
||||||
|
|
||||||
public var errorDescription: String? {
|
public var errorDescription: String? {
|
||||||
switch self {
|
switch self {
|
||||||
case .vehicleNotFound: "Vehicle not found in realm database"
|
case .vehicleNotFound: "Vehicle not found in realm database"
|
||||||
case .noteNotFound: "Vehicle note not found in realm database"
|
case .noteNotFound: "Vehicle note not found in realm database"
|
||||||
|
case .eventNotFound: "Event not found in realm database"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -17,6 +17,6 @@ public protocol StorageServiceProtocol: Sendable {
|
|||||||
func updateVehicleIfExists(dto: VehicleDto) async throws
|
func updateVehicleIfExists(dto: VehicleDto) async throws
|
||||||
func loadVehicle(number: String) async throws -> VehicleDto
|
func loadVehicle(number: String) async throws -> VehicleDto
|
||||||
func add(event: VehicleEventDto, to number: String) async throws -> VehicleDto
|
func add(event: VehicleEventDto, to number: String) async throws -> VehicleDto
|
||||||
// func remove(event id: String) async throws -> VehicleDto
|
func remove(event id: String, from number: String) async throws -> VehicleDto
|
||||||
// func edit(event: VehicleEventDto) async throws -> VehicleDto
|
func edit(event: VehicleEventDto, for number: String) async throws -> VehicleDto
|
||||||
}
|
}
|
||||||
|
|||||||
81
AutoCatCoreTests/Storage/StorageServiceTests+Events.swift
Normal file
81
AutoCatCoreTests/Storage/StorageServiceTests+Events.swift
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
//
|
||||||
|
// StorageServiceTests+Events.swift
|
||||||
|
// AutoCatCoreTests
|
||||||
|
//
|
||||||
|
// Created by Selim Mustafaev on 13.12.2024.
|
||||||
|
// Copyright © 2024 Selim Mustafaev. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Testing
|
||||||
|
import AutoCatCore
|
||||||
|
|
||||||
|
extension StorageServiceTests {
|
||||||
|
|
||||||
|
@Test("Add event")
|
||||||
|
func addEvent() async throws {
|
||||||
|
|
||||||
|
let event = VehicleEventDto(lat: testLat, lon: testLon)
|
||||||
|
|
||||||
|
let vehicle = try await storageService.add(event: event, to: existingVehicleNumber)
|
||||||
|
|
||||||
|
#expect(vehicle.events.count == 1)
|
||||||
|
#expect(vehicle.events.first?.latitude == testLat)
|
||||||
|
#expect(vehicle.events.first?.longitude == testLon)
|
||||||
|
#expect(vehicle.updatedDate != 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test("Add event to non-existent vehicle")
|
||||||
|
func addEventToNonExistentVehicle() async throws {
|
||||||
|
|
||||||
|
let event = VehicleEventDto(lat: testLat, lon: testLon)
|
||||||
|
|
||||||
|
await #expect(throws: StorageError.vehicleNotFound) {
|
||||||
|
_ = try await storageService.add(event: event, to: nonExistingVehicleNumber)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test("Remove event")
|
||||||
|
func removeEvent() async throws {
|
||||||
|
|
||||||
|
let event = VehicleEventDto(lat: testLat, lon: testLon)
|
||||||
|
var vehicle = try await storageService.add(event: event, to: existingVehicleNumber)
|
||||||
|
let id = try #require(vehicle.events.first { $0.latitude == testLat && $0.longitude == testLon }?.id)
|
||||||
|
|
||||||
|
vehicle = try await storageService.remove(event: id, from: existingVehicleNumber)
|
||||||
|
|
||||||
|
#expect(vehicle.events.isEmpty)
|
||||||
|
#expect(vehicle.updatedDate != 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test("Remove event from non-existent vehicle")
|
||||||
|
func removeEventFromNonExistentVehicle() async throws {
|
||||||
|
|
||||||
|
await #expect(throws: StorageError.vehicleNotFound) {
|
||||||
|
_ = try await storageService.remove(event: "", from: nonExistingVehicleNumber)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test("Remove non-existent event")
|
||||||
|
func removeNonExistentEvent() async throws {
|
||||||
|
|
||||||
|
await #expect(throws: StorageError.eventNotFound) {
|
||||||
|
_ = try await storageService.remove(event: "", from: existingVehicleNumber)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test("Edit event")
|
||||||
|
func editEvent() async throws {
|
||||||
|
|
||||||
|
let event = VehicleEventDto(lat: 0, lon: 0)
|
||||||
|
var vehicle = try await storageService.add(event: event, to: existingVehicleNumber)
|
||||||
|
let id = try #require(vehicle.events.first?.id)
|
||||||
|
|
||||||
|
let editedEvent = VehicleEventDto(lat: testLat, lon: testLon)
|
||||||
|
vehicle = try await storageService.edit(event: editedEvent, for: existingVehicleNumber)
|
||||||
|
|
||||||
|
let resultEcent = try #require(vehicle.events.first { $0.id == id }!)
|
||||||
|
#expect(resultEcent.latitude == testLat && resultEcent.longitude == testLon)
|
||||||
|
#expect(vehicle.events.count == 1)
|
||||||
|
#expect(vehicle.updatedDate != 0)
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -17,6 +17,8 @@ struct StorageServiceTests {
|
|||||||
let existingVehicleNumber = "А123АА761"
|
let existingVehicleNumber = "А123АА761"
|
||||||
let nonExistingVehicleNumber = "А999АА761"
|
let nonExistingVehicleNumber = "А999АА761"
|
||||||
let noteText = "Test note text"
|
let noteText = "Test note text"
|
||||||
|
let testLat: Double = 42
|
||||||
|
let testLon: Double = 24
|
||||||
|
|
||||||
let storageService: StorageService
|
let storageService: StorageService
|
||||||
|
|
||||||
@ -31,9 +33,14 @@ struct StorageServiceTests {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func addTestVehicle(config: Realm.Configuration) throws {
|
func addTestVehicle(config: Realm.Configuration) throws {
|
||||||
|
|
||||||
|
var vehicle = Vehicle(existingVehicleNumber)
|
||||||
|
vehicle.addedDate = 0
|
||||||
|
vehicle.updatedDate = 0
|
||||||
|
|
||||||
let realm = try Realm(configuration: config)
|
let realm = try Realm(configuration: config)
|
||||||
try realm.write {
|
try realm.write {
|
||||||
realm.add(Vehicle(existingVehicleNumber))
|
realm.add(vehicle)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Loading…
Reference in New Issue
Block a user