// // 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(userDefaults: self.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(userDefaults: 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 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) } }