116 lines
3.7 KiB
Swift
116 lines
3.7 KiB
Swift
//
|
||
// StorageServiceTests.swift
|
||
// AutoCatCoreTests
|
||
//
|
||
// Created by Selim Mustafaev on 13.07.2024.
|
||
// Copyright © 2024 Selim Mustafaev. All rights reserved.
|
||
//
|
||
|
||
import Testing
|
||
import RealmSwift
|
||
import Foundation
|
||
|
||
@testable import AutoCatCore
|
||
|
||
struct StorageServiceTests {
|
||
|
||
let existingVehicleNumber = "А123АА761"
|
||
let nonExistingVehicleNumber = "А999АА761"
|
||
let noteText = "Test note text"
|
||
|
||
let storageService: StorageService
|
||
|
||
init() async throws {
|
||
|
||
var config: Realm.Configuration = .defaultConfiguration
|
||
config.inMemoryIdentifier = UUID().uuidString
|
||
|
||
self.storageService = try await StorageService(config: config)
|
||
|
||
try addTestVehicle(config: config)
|
||
}
|
||
|
||
func addTestVehicle(config: Realm.Configuration) throws {
|
||
let realm = try Realm(configuration: config)
|
||
try realm.write {
|
||
realm.add(Vehicle(existingVehicleNumber))
|
||
}
|
||
}
|
||
|
||
@Test("Add note to vehicle")
|
||
func addNote() async throws {
|
||
|
||
let vehicle = try await storageService.addNote(text: noteText, to: existingVehicleNumber)
|
||
|
||
#expect(vehicle.number == existingVehicleNumber)
|
||
#expect(vehicle.notes.contains { $0.text == noteText })
|
||
}
|
||
|
||
@Test("Adding note to non-existent vehicle")
|
||
func addNoteError() async throws {
|
||
|
||
await #expect(throws: StorageError.vehicleNotFound) {
|
||
_ = try await storageService.addNote(text: noteText, to: nonExistingVehicleNumber)
|
||
}
|
||
}
|
||
|
||
@Test("Edit note")
|
||
func editNote() async throws {
|
||
|
||
let newNoteText = "New test text"
|
||
|
||
var vehicle = try await storageService.addNote(text: noteText, to: existingVehicleNumber)
|
||
let note = try #require(vehicle.notes.first { $0.text == noteText })
|
||
|
||
vehicle = try await storageService.editNote(id: note.id, text: newNoteText, for: existingVehicleNumber)
|
||
|
||
#expect(vehicle.number == existingVehicleNumber)
|
||
#expect(vehicle.notes.contains { $0.text == newNoteText })
|
||
#expect(!vehicle.notes.contains { $0.text == noteText })
|
||
}
|
||
|
||
@Test("Edit note of non-existent vehicle")
|
||
func addNoteNonExistentVehicle() async throws {
|
||
|
||
await #expect(throws: StorageError.vehicleNotFound) {
|
||
_ = try await storageService.editNote(id: "", text: "", for: nonExistingVehicleNumber)
|
||
}
|
||
}
|
||
|
||
@Test("Edit non-existent note")
|
||
func editNonExistentNote() async throws {
|
||
|
||
await #expect(throws: StorageError.noteNotFound) {
|
||
_ = try await storageService.editNote(id: "", text: "", for: existingVehicleNumber)
|
||
}
|
||
}
|
||
|
||
@Test("Delete note")
|
||
func deleteNote() async throws {
|
||
|
||
var vehicle = try await storageService.addNote(text: noteText, to: existingVehicleNumber)
|
||
let note = try #require(vehicle.notes.first { $0.text == noteText })
|
||
|
||
vehicle = try await storageService.deleteNote(id: note.id, for: existingVehicleNumber)
|
||
|
||
#expect(vehicle.number == existingVehicleNumber)
|
||
#expect(!vehicle.notes.contains { $0.text == noteText })
|
||
}
|
||
|
||
@Test("Delete note from non-existent vehicle")
|
||
func deleteNoteNonExistentVehicle() async throws {
|
||
|
||
await #expect(throws: StorageError.vehicleNotFound) {
|
||
_ = try await storageService.deleteNote(id: "", for: nonExistingVehicleNumber)
|
||
}
|
||
}
|
||
|
||
@Test("Delete non-existent note")
|
||
func deleteNonExistentNote() async throws {
|
||
|
||
await #expect(throws: StorageError.noteNotFound) {
|
||
_ = try await storageService.deleteNote(id: "", for: existingVehicleNumber)
|
||
}
|
||
}
|
||
}
|