AutoCat/AutoCatCoreTests/SettingsServiceTests.swift

89 lines
2.8 KiB
Swift

//
// SettingsServiceTests.swift
// AutoCatCoreTests
//
// Created by Selim Mustafaev on 17.08.2024.
// Copyright © 2024 Selim Mustafaev. All rights reserved.
//
import Foundation
import Testing
@testable import AutoCatCore
extension Encodable {
var data: Data? {
let encoder = JSONEncoder()
return try? encoder.encode(self)
}
}
@MainActor
struct SettingsServiceTests {
let testRegion = "xxx"
let testEmail = "test@test.test"
let testToken = "testToken"
let testUser: User
let dbName = UUID().uuidString
let defaults: UserDefaults
var settingsService: SettingsService
init() {
self.testUser = User(email: testEmail, token: testToken)
self.defaults = UserDefaults(suiteName: dbName)!
self.defaults.removePersistentDomain(forName: dbName)
self.settingsService = SettingsService(defaults: defaults)
}
@Test("Creating default user")
func defaultUser() async throws {
#expect(settingsService.user.email == "")
#expect(settingsService.user.token == "")
}
@Test("Loading saved user")
func loadSavedUser() async throws {
let data = try #require(testUser.data)
defaults.setPersistentDomain(["user": data], forName: dbName)
let service = SettingsService(defaults: defaults)
#expect(service.user.email == testEmail)
#expect(service.user.token == testToken)
}
@Test("Save user")
func saveUser() async throws {
settingsService.user = testUser
let userData = try #require(defaults.data(forKey: "user"))
let user = try JSONDecoder().decode(User.self, from: userData)
#expect(user.email == testUser.email)
#expect(user.token == testUser.token)
}
@Test("Save settings", .serialized, arguments: [true, false])
func saveSettings(value: Bool) {
settingsService.recognizeAlternativeOrder = value
settingsService.recognizeShortenedNumbers = value
settingsService.defaultRegion = testRegion
settingsService.recordBeep = value
settingsService.showDebugInfo = value
settingsService.useTestBackend = value
#expect(defaults.bool(forKey: SettingsKey.recognizeAlternativeOrder.rawValue) == value)
#expect(defaults.bool(forKey: SettingsKey.recognizeShortenedNumbers.rawValue) == value)
#expect(defaults.string(forKey: SettingsKey.defaultRegion.rawValue) == testRegion)
#expect(defaults.bool(forKey: SettingsKey.recordBeep.rawValue) == value)
#expect(defaults.bool(forKey: SettingsKey.showDebugInfo.rawValue) == value)
#expect(defaults.bool(forKey: SettingsKey.useTestBackend.rawValue) == value)
}
}