SwiftLinkTests.swift 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. ////////////////////////////////////////////////////////////////////////////
  2. //
  3. // Copyright 2014 Realm Inc.
  4. //
  5. // Licensed under the Apache License, Version 2.0 (the "License");
  6. // you may not use this file except in compliance with the License.
  7. // You may obtain a copy of the License at
  8. //
  9. // http://www.apache.org/licenses/LICENSE-2.0
  10. //
  11. // Unless required by applicable law or agreed to in writing, software
  12. // distributed under the License is distributed on an "AS IS" BASIS,
  13. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. // See the License for the specific language governing permissions and
  15. // limitations under the License.
  16. //
  17. ////////////////////////////////////////////////////////////////////////////
  18. import XCTest
  19. import RealmSwift
  20. class SwiftLinkTests: TestCase {
  21. func testBasicLink() {
  22. let realm = realmWithTestPath()
  23. let owner = SwiftOwnerObject()
  24. owner.name = "Tim"
  25. owner.dog = SwiftDogObject()
  26. owner.dog!.dogName = "Harvie"
  27. try! realm.write { realm.add(owner) }
  28. let owners = realm.objects(SwiftOwnerObject.self)
  29. let dogs = realm.objects(SwiftDogObject.self)
  30. XCTAssertEqual(owners.count, Int(1), "Expecting 1 owner")
  31. XCTAssertEqual(dogs.count, Int(1), "Expecting 1 dog")
  32. XCTAssertEqual(owners[0].name, "Tim", "Tim is named Tim")
  33. XCTAssertEqual(dogs[0].dogName, "Harvie", "Harvie is named Harvie")
  34. XCTAssertEqual(owners[0].dog!.dogName, "Harvie", "Tim's dog should be Harvie")
  35. }
  36. func testMultipleOwnerLink() {
  37. let realm = realmWithTestPath()
  38. let owner = SwiftOwnerObject()
  39. owner.name = "Tim"
  40. owner.dog = SwiftDogObject()
  41. owner.dog!.dogName = "Harvie"
  42. try! realm.write { realm.add(owner) }
  43. XCTAssertEqual(realm.objects(SwiftOwnerObject.self).count, Int(1), "Expecting 1 owner")
  44. XCTAssertEqual(realm.objects(SwiftDogObject.self).count, Int(1), "Expecting 1 dog")
  45. realm.beginWrite()
  46. let fiel = realm.create(SwiftOwnerObject.self, value: ["Fiel", NSNull()])
  47. fiel.dog = owner.dog
  48. try! realm.commitWrite()
  49. XCTAssertEqual(realm.objects(SwiftOwnerObject.self).count, Int(2), "Expecting 2 owners")
  50. XCTAssertEqual(realm.objects(SwiftDogObject.self).count, Int(1), "Expecting 1 dog")
  51. }
  52. func testLinkRemoval() {
  53. let realm = realmWithTestPath()
  54. let owner = SwiftOwnerObject()
  55. owner.name = "Tim"
  56. owner.dog = SwiftDogObject()
  57. owner.dog!.dogName = "Harvie"
  58. try! realm.write { realm.add(owner) }
  59. XCTAssertEqual(realm.objects(SwiftOwnerObject.self).count, Int(1), "Expecting 1 owner")
  60. XCTAssertEqual(realm.objects(SwiftDogObject.self).count, Int(1), "Expecting 1 dog")
  61. try! realm.write { realm.delete(owner.dog!) }
  62. XCTAssertNil(owner.dog, "Dog should be nullified when deleted")
  63. // refresh owner and check
  64. let owner2 = realm.objects(SwiftOwnerObject.self).first!
  65. XCTAssertNotNil(owner2, "Should have 1 owner")
  66. XCTAssertNil(owner2.dog, "Dog should be nullified when deleted")
  67. XCTAssertEqual(realm.objects(SwiftDogObject.self).count, Int(0), "Expecting 0 dogs")
  68. }
  69. func testLinkingObjects() {
  70. let realm = realmWithTestPath()
  71. let owner = SwiftOwnerObject()
  72. owner.name = "Tim"
  73. owner.dog = SwiftDogObject()
  74. owner.dog!.dogName = "Harvie"
  75. XCTAssertEqual(0, owner.dog!.owners.count, "Linking objects are not available until the object is persisted")
  76. try! realm.write {
  77. realm.add(owner)
  78. }
  79. let owners = owner.dog!.owners
  80. XCTAssertEqual(1, owners.count)
  81. XCTAssertEqual(owner.name, owners.first!.name)
  82. try! realm.write {
  83. owner.dog = nil
  84. }
  85. XCTAssertEqual(0, owners.count)
  86. }
  87. }