AutoCat/AutoCatCoreTests/SettingsServiceTests.swift

95 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() async {
self.testUser = User(email: testEmail, token: testToken)
self.defaults = UserDefaults(suiteName: dbName)!
self.defaults.removePersistentDomain(forName: dbName)
self.settingsService = await SettingsService(suiteName: dbName)
}
@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 = await SettingsService(suiteName: dbName)
#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 base url", .serialized, arguments: Constants.Backend.allCases)
func saveBaseUrl(value: Constants.Backend) {
settingsService.backend = value
#expect(defaults.string(forKey: "backendString") == value.rawValue)
}
@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
#expect(defaults.bool(forKey: "recognizeAlternativeOrder") == value)
#expect(defaults.bool(forKey: "recognizeShortenedNumbers") == value)
#expect(defaults.string(forKey: "defaultRegion") == testRegion)
#expect(defaults.bool(forKey: "recordBeep") == value)
#expect(defaults.bool(forKey: "showDebugInfo") == value)
}
}