Skip to content

Commit

Permalink
tests
Browse files Browse the repository at this point in the history
  • Loading branch information
jessesquires committed Jan 10, 2024
1 parent eec18a3 commit c76f8a4
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 1 deletion.
2 changes: 1 addition & 1 deletion Sources/UserDefaultsSerializable.swift
Original file line number Diff line number Diff line change
Expand Up @@ -182,7 +182,7 @@ extension UserDefaultsSerializable where Self: Codable {
}
}

public init?(storedValue: Data?) throws {
public init?(storedValue: Data?) {
do {
self = try JSONDecoder().decode(Self.self, from: storedValue ?? Data())
} catch {
Expand Down
9 changes: 9 additions & 0 deletions Tests/IntegrationTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -163,4 +163,13 @@ final class IntegrationTests: XCTestCase {
let expectedValue = ["key1": TestFruit.apple.rawValue, "key2": TestFruit.orange.rawValue]
XCTAssertEqual(TestSettings.store.fetch("customRawRepresented"), expectedValue)
}

func test_Integration_Codable() {
let defaultValue = self.settings.user
XCTAssertNil(defaultValue)

let newValue = User(id: 42, name: "John Doe", highScore: 9_999.0, lastLogin: Date())
self.settings.user = newValue
XCTAssertEqual(self.settings.user, newValue)
}
}
20 changes: 20 additions & 0 deletions Tests/TestSettings.swift
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,20 @@ struct TestCustomRepresented: RawRepresentable, UserDefaultsSerializable {
}
}

struct User: Hashable, Codable, UserDefaultsSerializable {
let id: Int
let name: String
let highScore: Double
let lastLogin: Date
}

struct Session: Hashable, Codable, UserDefaultsSerializable {
static var `default`: Self { Self(id: UUID(), lastActivity: .distantPast) }

let id: UUID
let lastActivity: Date
}

final class TestSettings: NSObject {
static let suiteName = UUID().uuidString

Expand Down Expand Up @@ -87,4 +101,10 @@ final class TestSettings: NSObject {

@WrappedDefaultOptional(key: "userId", userDefaults: store)
@objc dynamic var userId: String?

@WrappedDefaultOptional(key: "user", userDefaults: store)
var user: User?

@WrappedDefault(key: "session", userDefaults: store)
var session = Session.default
}
34 changes: 34 additions & 0 deletions Tests/WrappedDefaultTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -318,4 +318,38 @@ final class WrappedDefaultTests: XCTestCase {
XCTAssertNil(defaultValue)
XCTAssertNil(model.wrappedValue)
}

func test_WrappedValue_Codable_Optional() {
let key = "key_\(#function)"
var model = WrappedDefaultOptional<User>(key: key, userDefaults: self.testDefaults)

let defaultValue: User? = self.testDefaults.fetchOptional(key)
XCTAssertNil(defaultValue)
XCTAssertNil(model.wrappedValue)

let newValue = User(id: 42, name: "John Doe", highScore: 9_000.0, lastLogin: Date())
model.wrappedValue = newValue
XCTAssertEqual(self.testDefaults.fetch(key), newValue)
XCTAssertEqual(model.wrappedValue, newValue)

model.wrappedValue = nil
XCTAssertNil(model.wrappedValue)

let fetchedValue: User? = self.testDefaults.fetchOptional(key)
XCTAssertNil(fetchedValue)
}

func test_WrappedValue_Codable_NonOptional() {
let key = "key_\(#function)"
let defaultValue = Session.default
var model = WrappedDefault<Session>(wrappedValue: defaultValue, key: key, userDefaults: self.testDefaults)

XCTAssertEqual(self.testDefaults.fetch(key), defaultValue)
XCTAssertEqual(model.wrappedValue, defaultValue)

let newValue = Session(id: UUID(), lastActivity: Date())
model.wrappedValue = newValue
XCTAssertEqual(self.testDefaults.fetch(key), newValue)
XCTAssertEqual(model.wrappedValue, newValue)
}
}

0 comments on commit c76f8a4

Please sign in to comment.