func testPullFilter1000() throws { Database.log.console.level = .debug // Add a document to db database so that it can pull the deleted docs from: let doc0 = MutableDocument(id: "doc0") doc0.setString("Cat", forKey: "species") try db.saveDocument(doc0) // Create documents: let content = "I'm a tiger.".data(using: .utf8)! let blob = Blob(contentType: "text/plain", data: content) for i in 1...200 { let doc = MutableDocument(id: "doc1\(i)") doc.setString("Tiger", forKey: "species") doc.setString("Hobbes", forKey: "pattern") doc.setBlob(blob, forKey: "photo") try self.otherDB.saveDocument(doc) } for i in 1...200 { let doc2 = MutableDocument(id: "doc2\(i)") doc2.setString("Tiger", forKey: "species") doc2.setString("Striped", forKey: "pattern") doc2.setBlob(blob, forKey: "photo") try self.otherDB.saveDocument(doc2) } // Create replicator with pull filter: let docIds = NSMutableSet() let target = DatabaseEndpoint(database: otherDB) let config = self.config(target: target, type: .pull, continuous: false) config.pullFilter = { (doc, flags) in XCTAssertNotNil(doc.id) let isDeleted = flags.contains(.deleted) XCTAssert(doc.id.prefix(4) == "doc3" ? isDeleted : !isDeleted) if !isDeleted { // Check content: XCTAssertNotNil(doc.value(forKey: "pattern")) XCTAssertEqual(doc.string(forKey: "species")!, "Tiger") // Check blob: let photo = doc.blob(forKey: "photo") XCTAssertNotNil(photo) // Note: Cannot access content because there is no actual blob file saved on disk. // XCTAssertEqual(photo!.content, blob.content) } else { XCTAssert(doc.toDictionary() == [:]) } // Gather document ID: docIds.add(doc.id) // Reject doc2: return doc.id.prefix(4) == "doc2" ? false : true } // Run the replicator: run(config: config, expectedError: nil) }