@@ -148,8 +148,10 @@ class LCObjectTestCase: BaseTestCase {
148148 newObject = LCObject . init ( className: LCObjectTestCase . className, objectId: object. objectId!)
149149 newObject. setObject ( 1888 , forKey: TestField . integer. rawValue)
150150 newObject. setObject ( false , forKey: TestField . boolean. rawValue)
151+ let option = LCObjectFetchOption ( )
152+ option. selectKeys = [ TestField . double. rawValue, TestField . string. rawValue]
151153 expecting { exp in
152- newObject. fetchInBackground ( withKeys : [ TestField . double . rawValue , TestField . string . rawValue ] ) { object, error in
154+ newObject. fetchInBackground ( with : option ) { object, error in
153155 XCTAssertNotNil ( object)
154156 XCTAssertNil ( error)
155157 exp. fulfill ( )
@@ -467,6 +469,86 @@ class LCObjectTestCase: BaseTestCase {
467469 }
468470
469471
472+ func testFetch( ) {
473+ let objectWithInvalidID = LCObject ( objectId: uuid)
474+ XCTAssertFalse ( objectWithInvalidID. fetch ( ) )
475+ do {
476+ try objectWithInvalidID. fetchAndThrows ( )
477+ XCTFail ( )
478+ } catch {
479+ XCTAssertEqual ( ( error as NSError ) . code, kLCErrorObjectNotFound)
480+ }
481+ do {
482+ try objectWithInvalidID. fetch ( with: nil )
483+ XCTFail ( )
484+ } catch {
485+ XCTAssertEqual ( ( error as NSError ) . code, kLCErrorObjectNotFound)
486+ }
487+ do {
488+ try LCObject . fetchAll ( [ objectWithInvalidID] , error: ( ) )
489+ XCTFail ( )
490+ } catch {
491+ XCTAssertNotNil ( error)
492+ }
493+
494+ let validObject = LCObject ( )
495+ let childObject = LCObject ( )
496+ let key = " childObject "
497+ validObject [ key] = childObject
498+ XCTAssertTrue ( validObject. save ( ) )
499+
500+ guard let objectId = validObject. objectId else {
501+ XCTFail ( )
502+ return
503+ }
504+
505+ expecting { exp in
506+ let object = LCObject ( objectId: objectId)
507+ object. fetchInBackground { obj, error in
508+ XCTAssertTrue ( Thread . isMainThread)
509+ XCTAssertTrue ( obj === object)
510+ XCTAssertNil ( error)
511+ let child = object [ key] as? LCObject
512+ XCTAssertEqual ( child? . objectId, childObject. objectId)
513+ XCTAssertNil ( child? . createdAt)
514+ XCTAssertNil ( child? . updatedAt)
515+ exp. fulfill ( )
516+ }
517+ }
518+
519+ expecting { exp in
520+ let object = LCObject ( objectId: objectId)
521+ let option = LCObjectFetchOption ( )
522+ option. selectKeys = [ key]
523+ option. includeKeys = [ key]
524+ object. fetchInBackground ( with: option) { obj, error in
525+ XCTAssertTrue ( Thread . isMainThread)
526+ XCTAssertTrue ( obj === object)
527+ XCTAssertNil ( error)
528+ let child = object [ key] as? LCObject
529+ XCTAssertEqual ( child? . objectId, childObject. objectId)
530+ XCTAssertNotNil ( child? . createdAt)
531+ XCTAssertNotNil ( child? . updatedAt)
532+ exp. fulfill ( )
533+ }
534+ }
535+
536+ expecting { exp in
537+ let object = LCObject ( objectId: objectId)
538+ LCObject . fetchAll ( inBackground: [ object] ) { objects, error in
539+ XCTAssertTrue ( Thread . isMainThread)
540+ XCTAssertEqual ( objects? . count, 1 )
541+ let child = ( objects? . first as? LCObject ) ? [ key] as? LCObject
542+ XCTAssertEqual ( child? . objectId, childObject. objectId)
543+ XCTAssertNil ( child? . createdAt)
544+ XCTAssertNil ( child? . updatedAt)
545+ XCTAssertNil ( error)
546+ exp. fulfill ( )
547+ }
548+ }
549+ }
550+
551+
470552}
471553
472554
0 commit comments