diff --git a/Parse/PFObject.m b/Parse/PFObject.m index 2f78d7883..258c99c10 100644 --- a/Parse/PFObject.m +++ b/Parse/PFObject.m @@ -870,7 +870,6 @@ + (void)_assertValidInstanceClassName:(NSString *)className { PFParameterAssert(![className hasPrefix:@"_"], @"Invalid class name. Class names cannot start with an underscore."); } - ///-------------------------------------- #pragma mark - Serialization helpers ///-------------------------------------- @@ -2123,9 +2122,10 @@ - (void)fetch:(NSError **)error { } - (BFTask *)fetchInBackground { - //TODO: (nlutsenko) Replace with an error? - @synchronized (lock) { - PFParameterAssert(self._state.objectId, @"Can't refresh an object that hasn't been saved to the server."); + if (!self._state.objectId) { + NSError *error = [PFErrorUtilities errorWithCode:kPFErrorMissingObjectId + message:@"Can't refresh an object that hasn't been saved to the server."]; + return [BFTask taskWithError:error]; } return [self.taskQueue enqueue:^BFTask *(BFTask *toAwait) { return [self fetchAsync:toAwait]; diff --git a/Tests/Unit/ObjectUnitTests.m b/Tests/Unit/ObjectUnitTests.m index 894c240a8..18f99bd5e 100644 --- a/Tests/Unit/ObjectUnitTests.m +++ b/Tests/Unit/ObjectUnitTests.m @@ -182,4 +182,20 @@ - (void)testKeyValueCoding { XCTAssertEqualObjects([object valueForKey:@"yarr"], @"yolo"); } +#pragma mark Fetch + +- (void)testFetchObjectWithoutObjectIdError { + PFObject *object = [PFObject objectWithClassName:@"Test"]; + + XCTestExpectation *expectation = [self currentSelectorTestExpectation]; + [[object fetchInBackground] continueWithBlock:^id(BFTask *task) { + XCTAssertNotNil(task.error); + XCTAssertEqualObjects(task.error.domain, PFParseErrorDomain); + XCTAssertEqual(task.error.code, kPFErrorMissingObjectId); + [expectation fulfill]; + return nil; + }]; + [self waitForTestExpectations]; +} + @end