diff --git a/CoreStoreTests/BaseTests/BaseTestCase.swift b/CoreStoreTests/BaseTests/BaseTestCase.swift index f0edb87..305e6c3 100644 --- a/CoreStoreTests/BaseTests/BaseTestCase.swift +++ b/CoreStoreTests/BaseTests/BaseTestCase.swift @@ -71,7 +71,7 @@ class BaseTestCase: XCTestCase { defer { self.waitForExpectationsWithTimeout(0, handler: nil) - CoreStore.logger = DefaultLogger() + CoreStore.logger = TestLogger([:]) } return closure() } diff --git a/CoreStoreTests/FetchTests.swift b/CoreStoreTests/FetchTests.swift index 3dd970d..8c2bdc6 100644 --- a/CoreStoreTests/FetchTests.swift +++ b/CoreStoreTests/FetchTests.swift @@ -144,7 +144,10 @@ final class FetchTests: BaseTestDataTestCase { } XCTAssertNil(object) - let objectID = stack.fetchObjectID(from, fetchClauses) + let objectID = self.expectLogger([.LogWarning]) { + + stack.fetchObjectID(from, fetchClauses) + } XCTAssertNil(objectID) } do { @@ -153,10 +156,16 @@ final class FetchTests: BaseTestDataTestCase { Where("%K < %@", "testNumber", 4), OrderBy(.Descending("testEntityID")) ] - let object = stack.fetchOne(from, fetchClauses) + let object = self.expectLogger([.LogWarning]) { + + stack.fetchOne(from, fetchClauses) + } XCTAssertNil(object) - let objectID = stack.fetchObjectID(from, fetchClauses) + let objectID = self.expectLogger([.LogWarning]) { + + stack.fetchObjectID(from, fetchClauses) + } XCTAssertNil(objectID) } } @@ -318,7 +327,10 @@ final class FetchTests: BaseTestDataTestCase { } XCTAssertNil(object) - let objectID = stack.fetchObjectID(from, fetchClauses) + let objectID = self.expectLogger([.LogWarning]) { + + stack.fetchObjectID(from, fetchClauses) + } XCTAssertNil(objectID) } do { @@ -327,10 +339,16 @@ final class FetchTests: BaseTestDataTestCase { Where("%K < %@", "testNumber", 4), OrderBy(.Descending("testEntityID")) ] - let object = stack.fetchOne(from, fetchClauses) + let object = self.expectLogger([.LogWarning]) { + + stack.fetchOne(from, fetchClauses) + } XCTAssertNil(object) - let objectID = stack.fetchObjectID(from, fetchClauses) + let objectID = self.expectLogger([.LogWarning]) { + + stack.fetchObjectID(from, fetchClauses) + } XCTAssertNil(objectID) } } @@ -643,7 +661,10 @@ final class FetchTests: BaseTestDataTestCase { } XCTAssertNil(objects) - let objectIDs = stack.fetchObjectIDs(from, fetchClauses) + let objectIDs = self.expectLogger([.LogWarning]) { + + stack.fetchObjectIDs(from, fetchClauses) + } XCTAssertNil(objectIDs) } do { @@ -652,10 +673,16 @@ final class FetchTests: BaseTestDataTestCase { Where("testNumber", isEqualTo: 0), OrderBy(.Descending("testEntityID")) ] - let objects = stack.fetchAll(from, fetchClauses) + let objects = self.expectLogger([.LogWarning]) { + + stack.fetchAll(from, fetchClauses) + } XCTAssertNil(objects) - let objectIDs = stack.fetchObjectIDs(from, fetchClauses) + let objectIDs = self.expectLogger([.LogWarning]) { + + stack.fetchObjectIDs(from, fetchClauses) + } XCTAssertNil(objectIDs) } } @@ -884,7 +911,10 @@ final class FetchTests: BaseTestDataTestCase { } XCTAssertNil(objects) - let objectIDs = stack.fetchObjectIDs(from, fetchClauses) + let objectIDs = self.expectLogger([.LogWarning]) { + + stack.fetchObjectIDs(from, fetchClauses) + } XCTAssertNil(objectIDs) } do { @@ -892,10 +922,16 @@ final class FetchTests: BaseTestDataTestCase { let fetchClauses: [FetchClause] = [ OrderBy(.Descending("testEntityID")) ] - let objects = stack.fetchAll(from, fetchClauses) + let objects = self.expectLogger([.LogWarning]) { + + stack.fetchAll(from, fetchClauses) + } XCTAssertNil(objects) - let objectIDs = stack.fetchObjectIDs(from, fetchClauses) + let objectIDs = self.expectLogger([.LogWarning]) { + + stack.fetchObjectIDs(from, fetchClauses) + } XCTAssertNil(objectIDs) } } @@ -1210,11 +1246,14 @@ final class FetchTests: BaseTestDataTestCase { } do { - let count = stack.fetchCount( - from, - Where("testNumber", isEqualTo: 0), - OrderBy(.Descending("testEntityID")) - ) + let count = self.expectLogger([.LogWarning]) { + + stack.fetchCount( + from, + Where("testNumber", isEqualTo: 0), + OrderBy(.Descending("testEntityID")) + ) + } XCTAssertNil(count) } } @@ -1354,11 +1393,14 @@ final class FetchTests: BaseTestDataTestCase { } do { - let count = stack.fetchCount( - from, - Where("testNumber", isEqualTo: 0), - OrderBy(.Descending("testEntityID")) - ) + let count = self.expectLogger([.LogWarning]) { + + stack.fetchCount( + from, + Where("testNumber", isEqualTo: 0), + OrderBy(.Descending("testEntityID")) + ) + } XCTAssertNil(count) } } @@ -1595,7 +1637,10 @@ final class FetchTests: BaseTestDataTestCase { } XCTAssertNil(object) - let objectID = transaction.fetchObjectID(from, fetchClauses) + let objectID = self.expectLogger([.LogWarning]) { + + transaction.fetchObjectID(from, fetchClauses) + } XCTAssertNil(objectID) } do { @@ -1604,10 +1649,16 @@ final class FetchTests: BaseTestDataTestCase { Where("%K < %@", "testNumber", 4), OrderBy(.Descending("testEntityID")) ] - let object = transaction.fetchOne(from, fetchClauses) + let object = self.expectLogger([.LogWarning]) { + + transaction.fetchOne(from, fetchClauses) + } XCTAssertNil(object) - let objectID = transaction.fetchObjectID(from, fetchClauses) + let objectID = self.expectLogger([.LogWarning]) { + + transaction.fetchObjectID(from, fetchClauses) + } XCTAssertNil(objectID) } } @@ -1769,7 +1820,10 @@ final class FetchTests: BaseTestDataTestCase { } XCTAssertNil(object) - let objectID = transaction.fetchObjectID(from, fetchClauses) + let objectID = self.expectLogger([.LogWarning]) { + + transaction.fetchObjectID(from, fetchClauses) + } XCTAssertNil(objectID) } do { @@ -1778,10 +1832,16 @@ final class FetchTests: BaseTestDataTestCase { Where("%K < %@", "testNumber", 4), OrderBy(.Descending("testEntityID")) ] - let object = transaction.fetchOne(from, fetchClauses) + let object = self.expectLogger([.LogWarning]) { + + transaction.fetchOne(from, fetchClauses) + } XCTAssertNil(object) - let objectID = transaction.fetchObjectID(from, fetchClauses) + let objectID = self.expectLogger([.LogWarning]) { + + transaction.fetchObjectID(from, fetchClauses) + } XCTAssertNil(objectID) } } @@ -2094,7 +2154,10 @@ final class FetchTests: BaseTestDataTestCase { } XCTAssertNil(objects) - let objectIDs = transaction.fetchObjectIDs(from, fetchClauses) + let objectIDs = self.expectLogger([.LogWarning]) { + + transaction.fetchObjectIDs(from, fetchClauses) + } XCTAssertNil(objectIDs) } do { @@ -2103,10 +2166,16 @@ final class FetchTests: BaseTestDataTestCase { Where("testNumber", isEqualTo: 0), OrderBy(.Descending("testEntityID")) ] - let objects = transaction.fetchAll(from, fetchClauses) + let objects = self.expectLogger([.LogWarning]) { + + transaction.fetchAll(from, fetchClauses) + } XCTAssertNil(objects) - let objectIDs = transaction.fetchObjectIDs(from, fetchClauses) + let objectIDs = self.expectLogger([.LogWarning]) { + + transaction.fetchObjectIDs(from, fetchClauses) + } XCTAssertNil(objectIDs) } } @@ -2335,7 +2404,10 @@ final class FetchTests: BaseTestDataTestCase { } XCTAssertNil(objects) - let objectIDs = transaction.fetchObjectIDs(from, fetchClauses) + let objectIDs = self.expectLogger([.LogWarning]) { + + transaction.fetchObjectIDs(from, fetchClauses) + } XCTAssertNil(objectIDs) } do { @@ -2343,10 +2415,16 @@ final class FetchTests: BaseTestDataTestCase { let fetchClauses: [FetchClause] = [ OrderBy(.Descending("testEntityID")) ] - let objects = transaction.fetchAll(from, fetchClauses) + let objects = self.expectLogger([.LogWarning]) { + + transaction.fetchAll(from, fetchClauses) + } XCTAssertNil(objects) - let objectIDs = transaction.fetchObjectIDs(from, fetchClauses) + let objectIDs = self.expectLogger([.LogWarning]) { + + transaction.fetchObjectIDs(from, fetchClauses) + } XCTAssertNil(objectIDs) } } @@ -2661,11 +2739,14 @@ final class FetchTests: BaseTestDataTestCase { } do { - let count = transaction.fetchCount( - from, - Where("testNumber", isEqualTo: 0), - OrderBy(.Descending("testEntityID")) - ) + let count = self.expectLogger([.LogWarning]) { + + transaction.fetchCount( + from, + Where("testNumber", isEqualTo: 0), + OrderBy(.Descending("testEntityID")) + ) + } XCTAssertNil(count) } } @@ -2805,11 +2886,14 @@ final class FetchTests: BaseTestDataTestCase { } do { - let count = transaction.fetchCount( - from, - Where("testNumber", isEqualTo: 0), - OrderBy(.Descending("testEntityID")) - ) + let count = self.expectLogger([.LogWarning]) { + + transaction.fetchCount( + from, + Where("testNumber", isEqualTo: 0), + OrderBy(.Descending("testEntityID")) + ) + } XCTAssertNil(count) } } diff --git a/CoreStoreTests/FromTests.swift b/CoreStoreTests/FromTests.swift index 7ba6802..a94f5fa 100644 --- a/CoreStoreTests/FromTests.swift +++ b/CoreStoreTests/FromTests.swift @@ -174,7 +174,10 @@ final class FromTests: BaseTestCase { let from = From() let request = NSFetchRequest() - let storesFound = from.applyToFetchRequest(request, context: dataStack.mainContext) + let storesFound = self.expectLogger([.LogWarning]) { + + from.applyToFetchRequest(request, context: dataStack.mainContext) + } XCTAssertFalse(storesFound) XCTAssertNotNil(request.entity) XCTAssertNotNil(request.affectedStores) @@ -189,7 +192,10 @@ final class FromTests: BaseTestCase { let from = From("Config1") let request = NSFetchRequest() - let storesFound = from.applyToFetchRequest(request, context: dataStack.mainContext) + let storesFound = self.expectLogger([.LogWarning]) { + + from.applyToFetchRequest(request, context: dataStack.mainContext) + } XCTAssertFalse(storesFound) XCTAssertNotNil(request.entity) XCTAssertNotNil(request.affectedStores) @@ -204,7 +210,10 @@ final class FromTests: BaseTestCase { let from = From("Config2") let request = NSFetchRequest() - let storesFound = from.applyToFetchRequest(request, context: dataStack.mainContext) + let storesFound = self.expectLogger([.LogWarning]) { + + from.applyToFetchRequest(request, context: dataStack.mainContext) + } XCTAssertFalse(storesFound) XCTAssertNotNil(request.entity) XCTAssertNotNil(request.affectedStores) @@ -290,7 +299,10 @@ final class FromTests: BaseTestCase { let from = From("Config1") let request = NSFetchRequest() - let storesFound = from.applyToFetchRequest(request, context: dataStack.mainContext) + let storesFound = self.expectLogger([.LogWarning]) { + + from.applyToFetchRequest(request, context: dataStack.mainContext) + } XCTAssertFalse(storesFound) XCTAssertNotNil(request.entity) XCTAssertNotNil(request.affectedStores) @@ -305,7 +317,10 @@ final class FromTests: BaseTestCase { let from = From("Config2") let request = NSFetchRequest() - let storesFound = from.applyToFetchRequest(request, context: dataStack.mainContext) + let storesFound = self.expectLogger([.LogWarning]) { + + from.applyToFetchRequest(request, context: dataStack.mainContext) + } XCTAssertFalse(storesFound) XCTAssertNotNil(request.entity) XCTAssertNotNil(request.affectedStores) @@ -391,7 +406,10 @@ final class FromTests: BaseTestCase { let from = From("Config1") let request = NSFetchRequest() - let storesFound = from.applyToFetchRequest(request, context: dataStack.mainContext) + let storesFound = self.expectLogger([.LogWarning]) { + + from.applyToFetchRequest(request, context: dataStack.mainContext) + } XCTAssertFalse(storesFound) XCTAssertNotNil(request.entity) XCTAssertNotNil(request.affectedStores) diff --git a/CoreStoreTests/Model.xcdatamodeld/Model.xcdatamodel/contents b/CoreStoreTests/Model.xcdatamodeld/Model.xcdatamodel/contents index a32a044..900d3c5 100644 --- a/CoreStoreTests/Model.xcdatamodeld/Model.xcdatamodel/contents +++ b/CoreStoreTests/Model.xcdatamodeld/Model.xcdatamodel/contents @@ -6,6 +6,7 @@ + @@ -15,6 +16,7 @@ + @@ -25,7 +27,7 @@ - - + + \ No newline at end of file diff --git a/CoreStoreTests/QueryTests.swift b/CoreStoreTests/QueryTests.swift index 052b23b..cae3d43 100644 --- a/CoreStoreTests/QueryTests.swift +++ b/CoreStoreTests/QueryTests.swift @@ -1153,4 +1153,125 @@ class QueryTests: BaseTestDataTestCase { } } } + + @objc + dynamic func test_ThatDataStacks_CanQueryAttributes() { + + let configurations: [String?] = [nil] + self.prepareStack(configurations: configurations) { (stack) in + + self.prepareTestDataForStack(stack, configurations: configurations) + + let from = From(configurations) + let queryClauses: [QueryClause] = [ + Where("%K > %@", "testNumber", 3), + OrderBy(.Ascending("testEntityID")) + ] + do { + + let values = stack.queryAttributes( + from, + Select( + "testBoolean", + "testNumber", + "testDecimal", + "testString", + "testData", + "testDate", + "testNil" + ), + queryClauses + ) + XCTAssertNotNil(values) + XCTAssertEqual( + values!, + [ + [ + "testBoolean": NSNumber(bool: false), + "testNumber": NSNumber(integer: 4), + "testDecimal": NSDecimalNumber(string: "4"), + "testString": "nil:TestEntity1:4", + "testData": ("nil:TestEntity1:4" as NSString).dataUsingEncoding(NSUTF8StringEncoding)!, + "testDate": self.dateFormatter.dateFromString("2000-01-04T00:00:00Z")! + ], + [ + "testBoolean": NSNumber(bool: true), + "testNumber": NSNumber(integer: 5), + "testDecimal": NSDecimalNumber(string: "5"), + "testString": "nil:TestEntity1:5", + "testData": ("nil:TestEntity1:5" as NSString).dataUsingEncoding(NSUTF8StringEncoding)!, + "testDate": self.dateFormatter.dateFromString("2000-01-05T00:00:00Z")! + ] + ] + ) + } + } + } + + @objc + dynamic func test_ThatDataStacks_CanQueryAggregates() { + + let configurations: [String?] = [nil] + self.prepareStack(configurations: configurations) { (stack) in + + self.prepareTestDataForStack(stack, configurations: configurations) + + let from = From(configurations) + let queryClauses: [QueryClause] = [] + do { + + let values = stack.queryAttributes( + from, + Select( + .Sum("testBoolean"), + .Count("testNumber"), + .Maximum("testNumber"), + .Minimum("testNumber"), + .Average("testDecimal") + ), + queryClauses + ) + XCTAssertNotNil(values) + XCTAssertEqual( + values!, + [ + [ + "sum(testBoolean)": 3, + "count(testNumber)": 5, + "max(testNumber)": 5, + "min(testNumber)": 1, + "average(testDecimal)": 3, + ] + ] + ) + } + do { + + let values = stack.queryAttributes( + from, + Select( + .Sum("testBoolean", As: "testSum"), + .Count("testNumber", As: "testCount"), + .Maximum("testNumber", As: "testMaximum"), + .Minimum("testNumber", As: "testMinimum"), + .Average("testDecimal", As: "testAverage") + ), + queryClauses + ) + XCTAssertNotNil(values) + XCTAssertEqual( + values!, + [ + [ + "testSum": 3, + "testCount": 5, + "testMaximum": 5, + "testMinimum": 1, + "testAverage": 3, + ] + ] + ) + } + } + } } diff --git a/CoreStoreTests/TestEntities/TestEntity1.swift b/CoreStoreTests/TestEntities/TestEntity1.swift index a8c200d..8f5c302 100644 --- a/CoreStoreTests/TestEntities/TestEntity1.swift +++ b/CoreStoreTests/TestEntities/TestEntity1.swift @@ -35,4 +35,5 @@ class TestEntity1: NSManagedObject { @NSManaged var testBoolean: NSNumber? @NSManaged var testDecimal: NSDecimalNumber? @NSManaged var testData: NSData? + @NSManaged var testNil: String? } diff --git a/CoreStoreTests/TestEntities/TestEntity2.swift b/CoreStoreTests/TestEntities/TestEntity2.swift index 50739d0..3919646 100644 --- a/CoreStoreTests/TestEntities/TestEntity2.swift +++ b/CoreStoreTests/TestEntities/TestEntity2.swift @@ -35,4 +35,5 @@ class TestEntity2: NSManagedObject { @NSManaged var testBoolean: NSNumber? @NSManaged var testDecimal: NSDecimalNumber? @NSManaged var testData: NSData? + @NSManaged var testNil: String? }