From d818b34a29eda689f387628f9b024cb6b69dcd13 Mon Sep 17 00:00:00 2001 From: Paulo Henrique Oliveira Souza Date: Tue, 17 Jun 2025 10:07:08 -0300 Subject: [PATCH 1/2] Added new parse to dictionary nullable --- Sources/LMStorage/LMCodable.swift | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Sources/LMStorage/LMCodable.swift b/Sources/LMStorage/LMCodable.swift index d24ecb0..bcfab5d 100644 --- a/Sources/LMStorage/LMCodable.swift +++ b/Sources/LMStorage/LMCodable.swift @@ -137,6 +137,15 @@ extension LMCodable { } return [] } + + /// Returns an optional `LMJSONOptional` if the serialization is successful; otherwise, returns `nil`. + public func dictionaryNullable() -> LMJSONOptional? { + if let jsonData = data(), + let result = try? JSONSerialization.jsonObject(with: jsonData, options: []) as? LMJSONOptional { + return result + } + return nil + } } extension Encodable { From dd3af6c67f533d6b032682b04878df1010854056 Mon Sep 17 00:00:00 2001 From: Paulo Henrique Oliveira Souza Date: Tue, 17 Jun 2025 10:58:41 -0300 Subject: [PATCH 2/2] created unit test --- Tests/LMStorageTests/LMCodableTests.swift | 15 +++++++++++++ Tests/LMStorageTests/Mock/ContentId.swift | 27 +++++++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 Tests/LMStorageTests/Mock/ContentId.swift diff --git a/Tests/LMStorageTests/LMCodableTests.swift b/Tests/LMStorageTests/LMCodableTests.swift index 4d69a29..cbad2c0 100644 --- a/Tests/LMStorageTests/LMCodableTests.swift +++ b/Tests/LMStorageTests/LMCodableTests.swift @@ -87,4 +87,19 @@ final class LMCodableTests: XCTestCase { XCTAssertEqual(movies.first?.title, "Black Panther") XCTAssertEqual(movies.last?.title, "Iron Man") } + + func testParseNullable() { + let contet = ContentId(id: "Movie-ID", seriesTmdb: nil, source: "Amazon Prime") + let dict = contet.dictionaryNullable() + let dictionaryItens = 3 + let keys: [String] = ["id", "seriesTmdb", "source"] + + var itemsCount = 0 + dict?.forEach { key, _ in + itemsCount += 1 + XCTAssertTrue(keys.contains { $0 == key }) + } + + XCTAssertEqual(dictionaryItens, itemsCount) + } } diff --git a/Tests/LMStorageTests/Mock/ContentId.swift b/Tests/LMStorageTests/Mock/ContentId.swift new file mode 100644 index 0000000..7453868 --- /dev/null +++ b/Tests/LMStorageTests/Mock/ContentId.swift @@ -0,0 +1,27 @@ +// +// ContentId.swift +// LMStorage +// +// Created by Paulo Henrique Oliveira Souza on 17/06/25. +// + +@testable import LMStorage + +struct ContentId: LMCodable { + var id: String? + var seriesTmdb: String? + var source: String? + + enum CodingKeys: String, CodingKey { + case id = "id" + case seriesTmdb = "seriesTmdb" + case source = "source" + } + + func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(id, forKey: .id) + try container.encode(seriesTmdb, forKey: .seriesTmdb) + try container.encode(source, forKey: .source) + } +}