AutoCat/AutoCatCoreTests/StorageServiceTests.swift

131 lines
4.2 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
@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)
}
}
@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)
}
}
}