From e8b89b49aaa8fd6f127249b2ca18954ddcb338ff Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Mon, 5 Nov 2018 02:18:44 -0500 Subject: [PATCH] Updated unit tests --- Sources/CoreModel/InMemoryStore.swift | 39 ++++++++++++++++++++++- Tests/CoreModelTests/CoreModelTests.swift | 3 ++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/Sources/CoreModel/InMemoryStore.swift b/Sources/CoreModel/InMemoryStore.swift index b288950..f7267f8 100644 --- a/Sources/CoreModel/InMemoryStore.swift +++ b/Sources/CoreModel/InMemoryStore.swift @@ -23,7 +23,36 @@ public final class InMemoryStore: StoreProtocol { /// Fetch managed objects. public func fetch(_ fetchRequest: FetchRequest) throws -> [ManagedObject] { - fatalError() + var identifiers = data.keys.filter { $0.entity == fetchRequest.entity } + + if fetchRequest.fetchOffset > 0 { + + identifiers = Array(identifiers.suffix(fetchRequest.fetchOffset)) + } + + if fetchRequest.fetchLimit > 0 { + + identifiers = Array(identifiers.prefix(fetchRequest.fetchLimit)) + } + + var managedObjects = identifiers.map { ManagedObject(identifier: $0, store: self) } + + if let predicate = fetchRequest.predicate { + + managedObjects = try managedObjects.filter { + try $0.evaluate(with: predicate) + } + } + + if fetchRequest.sortDescriptors.isEmpty == false { + + for sort in fetchRequest.sortDescriptors.reversed() { + + //managedObjects.sort(by: { $0. }) + } + } + + return managedObjects } /// Create new managed object. @@ -275,3 +304,11 @@ private extension InMemoryStore { case toMany(Set) } } + +extension InMemoryStore.ManagedObject: PredicateEvaluatable { + + public func evaluate(with predicate: Predicate) throws -> Bool { + + + } +} diff --git a/Tests/CoreModelTests/CoreModelTests.swift b/Tests/CoreModelTests/CoreModelTests.swift index 299ee23..a86bb46 100644 --- a/Tests/CoreModelTests/CoreModelTests.swift +++ b/Tests/CoreModelTests/CoreModelTests.swift @@ -103,6 +103,9 @@ final class CoreModelTests: XCTestCase { XCTAssertFalse(person2.isDeleted) XCTAssertEqual(person1.relationship(for: "events"), .toMany([])) XCTAssertEqual(person2.relationship(for: "events"), .toMany([])) + + XCTAssertEqual(try store.fetch(FetchRequest(entity: "Person")), [person1, person2]) + XCTAssertEqual(try store.fetch(FetchRequest(entity: "Event")), [event]) } catch { XCTFail("\(error)") }