@@ -119,6 +119,28 @@ class EKSerializerTestCase: XCTestCase {
119
119
XCTAssertEqual ( car ? [ " year " ] as? String , " 2013 " )
120
120
}
121
121
122
+ func testSerializesManagedObjectWithRootPath( ) {
123
+ ManagedPhone . register ( ManagedMappingProvider . phoneMapping ( ) )
124
+ ManagedCar . register ( ManagedMappingProvider . carMapping ( ) )
125
+ ManagedPerson . register ( ManagedMappingProvider . personMapping ( ) )
126
+ defer {
127
+ ManagedCar . register ( nil )
128
+ ManagedPerson . register ( nil )
129
+ ManagedPhone . register ( nil )
130
+ }
131
+
132
+ let info = FixtureLoader . dictionary ( fromFileNamed: " Person.json " )
133
+ let person = EKManagedObjectMapper . object ( fromExternalRepresentation: info, with: ManagedMappingProvider . personMapping ( ) , in: Storage . shared. context) as? ManagedPerson
134
+
135
+ let serialized = EKSerializer . serializeObject ( person!. car!, with: ManagedMappingProvider . carWithRootKeyMapping ( ) , from: Storage . shared. context)
136
+
137
+ let data = serialized [ " data " ] as? [ String : Any ]
138
+ let car = data ? [ " car " ] as? [ String : Any ]
139
+
140
+ XCTAssertEqual ( car ? [ " model " ] as? String , " i30 " )
141
+ XCTAssertEqual ( car ? [ " year " ] as? String , " 2013 " )
142
+ }
143
+
122
144
func testSerializerShouldSerializeNestedKeypaths( ) {
123
145
let sut = EKSerializer . serializeObject ( Car . i30, with: MappingProvider . carNestedAttributesMapping ( ) )
124
146
@@ -292,4 +314,53 @@ class EKSerializerRelationshipsTestCase: XCTestCase {
292
314
XCTAssertEqual ( sut [ " email " ] as? String , " [email protected] " )
293
315
XCTAssertEqual ( sut [ " gender " ] as? String , " male " )
294
316
}
317
+
318
+ func testSerializationOfNonNestedManagedObjects( ) {
319
+ ManagedCar . register ( ManagedMappingProvider . carMapping ( ) )
320
+ ManagedPhone . register ( ManagedMappingProvider . phoneMapping ( ) )
321
+ ManagedPerson . register ( ManagedMappingProvider . personMapping ( ) )
322
+ defer {
323
+ ManagedCar . register ( nil )
324
+ ManagedPhone . register ( nil )
325
+ ManagedPerson . register ( nil )
326
+ }
327
+ let info = FixtureLoader . dictionary ( fromFileNamed: " Person.json " )
328
+ let person = EKManagedObjectMapper . object ( fromExternalRepresentation: info,
329
+ with: ManagedMappingProvider . personMapping ( ) ,
330
+ in: Storage . shared. context) as? ManagedPerson
331
+ let sut = EKSerializer . serializeObject ( person!, with: ManagedMappingProvider . personNonNestedMapping ( ) , from: Storage . shared. context)
332
+
333
+ XCTAssertEqual ( sut [ " carId " ] as? Int , 3 )
334
+ XCTAssertEqual ( sut [ " carModel " ] as? String , " i30 " )
335
+ XCTAssertEqual ( sut [ " carYear " ] as? String , " 2013 " )
336
+
337
+ XCTAssertEqual ( sut [ " name " ] as? String , " Lucas " )
338
+ XCTAssertEqual ( sut [ " email " ] as? String , " [email protected] " )
339
+ XCTAssertEqual ( sut [ " gender " ] as? String , " male " )
340
+ }
341
+
342
+ func testSerializeCollectionOfHasManyObjects( ) {
343
+ ManagedCar . register ( ManagedMappingProvider . carMapping ( ) )
344
+ ManagedPhone . register ( ManagedMappingProvider . phoneMapping ( ) )
345
+ ManagedPerson . register ( ManagedMappingProvider . personMapping ( ) )
346
+ defer {
347
+ ManagedCar . register ( nil )
348
+ ManagedPhone . register ( nil )
349
+ ManagedPerson . register ( nil )
350
+ }
351
+ let info = FixtureLoader . dictionary ( fromFileNamed: " Person.json " )
352
+ let person = EKManagedObjectMapper . object ( fromExternalRepresentation: info,
353
+ with: ManagedMappingProvider . personMapping ( ) ,
354
+ in: Storage . shared. context) as? ManagedPerson
355
+ let sut = EKSerializer . serializeObject ( person!,
356
+ with: ManagedMappingProvider . personMapping ( ) ,
357
+ from: Storage . shared. context)
358
+
359
+ guard let phones = sut [ " phones " ] as? [ [ String : Any ] ] else { XCTFail ( ) ; return }
360
+
361
+ XCTAssertEqual ( phones. count, 2 )
362
+ let numbers = phones. map { $0 [ " number " ] as? String }
363
+ XCTAssert ( numbers. contains ( where: { $0 == " 1111-1111 " } ) )
364
+ XCTAssert ( numbers. contains ( where: { $0 == " 2222-222 " } ) )
365
+ }
295
366
}
0 commit comments