mirror of
https://github.com/zhigang1992/RxRealm.git
synced 2026-04-30 13:42:48 +08:00
136 lines
3.9 KiB
Swift
136 lines
3.9 KiB
Swift
//
|
|
// RxRealmListTests.swift
|
|
// RxRealm
|
|
//
|
|
// Created by Marin Todorov on 5/1/16.
|
|
// Copyright © 2016 CocoaPods. All rights reserved.
|
|
//
|
|
|
|
//
|
|
// RxRealmCollectionsTests.swift
|
|
// RxRealm
|
|
//
|
|
// Created by Marin Todorov on 4/30/16.
|
|
// Copyright © 2016 CocoaPods. All rights reserved.
|
|
//
|
|
|
|
import XCTest
|
|
|
|
import RxSwift
|
|
import RealmSwift
|
|
import RxRealm
|
|
import RxTests
|
|
|
|
class RxRealmListTests: XCTestCase {
|
|
|
|
private func realmInMemory(name: String) -> Realm {
|
|
var conf = Realm.Configuration()
|
|
conf.inMemoryIdentifier = name
|
|
return try! Realm(configuration: conf)
|
|
}
|
|
|
|
private func clearRealm(realm: Realm) {
|
|
try! realm.write {
|
|
realm.deleteAll()
|
|
}
|
|
}
|
|
|
|
func testListType() {
|
|
let expectation1 = expectationWithDescription("List<User> first")
|
|
|
|
let realm = realmInMemory(#function)
|
|
clearRealm(realm)
|
|
let bag = DisposeBag()
|
|
|
|
let scheduler = TestScheduler(initialClock: 0)
|
|
let observer = scheduler.createObserver(List<User>)
|
|
|
|
let message = Message("first")
|
|
try! realm.write {
|
|
realm.add(message)
|
|
}
|
|
|
|
let users$ = message.recipients.asObservable().shareReplay(1)
|
|
users$.scan(0, accumulator: {acc, _ in return acc+1})
|
|
.filter { $0 == 3 }.map {_ in ()}.subscribeNext(expectation1.fulfill).addDisposableTo(bag)
|
|
users$
|
|
.subscribe(observer).addDisposableTo(bag)
|
|
|
|
//interact with Realm here
|
|
delay(0.1) {
|
|
try! realm.write {
|
|
message.recipients.append(User("user1"))
|
|
}
|
|
}
|
|
delay(0.2) {
|
|
try! realm.write {
|
|
message.recipients.removeAtIndex(0)
|
|
}
|
|
}
|
|
|
|
scheduler.start()
|
|
|
|
waitForExpectationsWithTimeout(0.5) {error in
|
|
//do tests here
|
|
|
|
XCTAssertTrue(error == nil)
|
|
XCTAssertEqual(observer.events.count, 3)
|
|
XCTAssertEqual(message.recipients.count, 0)
|
|
}
|
|
}
|
|
|
|
func testLustTypeChangeset() {
|
|
let expectation1 = expectationWithDescription("List<User> first")
|
|
|
|
let realm = realmInMemory(#function)
|
|
clearRealm(realm)
|
|
let bag = DisposeBag()
|
|
|
|
let scheduler = TestScheduler(initialClock: 0)
|
|
let observer = scheduler.createObserver(String)
|
|
|
|
let message = Message("first")
|
|
try! realm.write {
|
|
realm.add(message)
|
|
}
|
|
|
|
let users$ = message.recipients.asObservableChangeset().shareReplay(1)
|
|
users$.scan(0, accumulator: {acc, _ in return acc+1})
|
|
.filter { $0 == 3 }.map {_ in ()}.subscribeNext(expectation1.fulfill).addDisposableTo(bag)
|
|
users$
|
|
.map {list, changes in
|
|
if let changes = changes {
|
|
return "i:\(changes.inserted) d:\(changes.deleted) u:\(changes.updated)"
|
|
} else {
|
|
return "initial"
|
|
}
|
|
}
|
|
.subscribe(observer).addDisposableTo(bag)
|
|
|
|
//interact with Realm here
|
|
delay(0.1) {
|
|
try! realm.write {
|
|
message.recipients.append(User("user1"))
|
|
}
|
|
}
|
|
delay(0.2) {
|
|
try! realm.write {
|
|
message.recipients.removeAtIndex(0)
|
|
}
|
|
}
|
|
|
|
scheduler.start()
|
|
|
|
waitForExpectationsWithTimeout(0.5) {error in
|
|
//do tests here
|
|
|
|
XCTAssertTrue(error == nil)
|
|
XCTAssertEqual(observer.events.count, 3)
|
|
XCTAssertEqual(observer.events[0].value.element!, "initial")
|
|
XCTAssertEqual(observer.events[1].value.element!, "i:[0] d:[] u:[]")
|
|
XCTAssertEqual(observer.events[2].value.element!, "i:[] d:[0] u:[]")
|
|
}
|
|
}
|
|
|
|
}
|