//===----------------------------------------------------------------------===// // // This source file is part of the SwiftLibs open source project // // Copyright (c) 2023 Röck+Cöde VoF. and the SwiftLibs project authors // Licensed under the EUPL 1.2 or later. // // See LICENSE.txt for license information // See CONTRIBUTORS.txt for the list of SwiftLibs project authors // //===----------------------------------------------------------------------===// import Foundation import XCTest @testable import SwiftLibsFoundation final class LossyCodableList_EncodableTests: XCTestCase { // MARK: Properties private let decoder = JSONDecoder() private let encoder = JSONEncoder() private var dataToDecode: Data! private var encodedData: Data! private var list: TestCodableList! // MARK: Setup override func setUpWithError() throws { // This setting is used to guarantee that the properties of the model are being generated by sorted keys order. encoder.outputFormatting = .sortedKeys } // MARK: Tests func test_encode_whenAllKeysHaveIntValues() throws { // GIVEN dataToDecode = .Seed.itemsWithAllKeysHavingIntValues list = try decoder.decode(TestCodableList.self, from: dataToDecode) // WHEN encodedData = try encoder.encode(list) // THEN XCTAssertNotNil(encodedData) XCTAssertTrue(encodedData.isNotEmpty) XCTAssertEqual(encodedData, .Result.allItemsNotFilteredOut) } func test_encode_whenSomeKeysAndValuesAreNil() throws { // GIVEN dataToDecode = .Seed.itemsWithSomeKeysAndValuesAreNil list = try decoder.decode(TestCodableList.self, from: dataToDecode) // WHEN encodedData = try encoder.encode(list) // THEN XCTAssertNotNil(encodedData) XCTAssertTrue(encodedData.isNotEmpty) XCTAssertEqual(encodedData, .Result.someItemsFilteredOut) } func test_encode_whenAllKeysAndValuesAreNil() throws { // GIVEN dataToDecode = .Seed.itemsWithAllKeysAndValuesAreNil list = try decoder.decode(TestCodableList.self, from: dataToDecode) // WHEN encodedData = try encoder.encode(list) // THEN XCTAssertNotNil(encodedData) XCTAssertTrue(encodedData.isNotEmpty) XCTAssertEqual(encodedData, .Result.allItemsFilteredOut) } }