mirror of
https://github.com/zhigang1992/MagicalRecord.git
synced 2026-01-12 22:48:38 +08:00
203 lines
6.8 KiB
Objective-C
203 lines
6.8 KiB
Objective-C
//
|
|
// SaveTests.m
|
|
// Magical Record
|
|
//
|
|
// Created by Stephen J Vanterpool on 9/6/12.
|
|
// Copyright (c) 2012 Magical Panda Software LLC. All rights reserved.
|
|
//
|
|
|
|
#define EXP_SHORTHAND
|
|
#import "Expecta.h"
|
|
#import "SaveTests.h"
|
|
#import "SingleEntityWithNoRelationships.h"
|
|
|
|
@implementation SaveTests
|
|
|
|
- (void) setUpClass
|
|
{
|
|
[NSManagedObjectModel MR_setDefaultManagedObjectModel:[NSManagedObjectModel MR_managedObjectModelNamed:@"TestModel.momd"]];
|
|
}
|
|
|
|
- (void) setUp
|
|
{
|
|
NSLog(@"Creating stack");
|
|
[MagicalRecord setupCoreDataStackWithInMemoryStore];
|
|
}
|
|
|
|
- (void) tearDown
|
|
{
|
|
[MagicalRecord cleanUp];
|
|
}
|
|
|
|
- (void)testAsynchronousSaveCallsCompletionHandler
|
|
{
|
|
__block BOOL completionHandlerCalled = NO;
|
|
|
|
dispatch_group_t group = dispatch_group_create();
|
|
|
|
dispatch_group_enter(group);
|
|
|
|
[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) {
|
|
expect(localContext).toNot.beNil();
|
|
[SingleEntityWithNoRelationships MR_createInContext:localContext];
|
|
} completion:^(BOOL success, NSError *error) {
|
|
// Ignore the success state — we only care that this block is executed
|
|
completionHandlerCalled = YES;
|
|
dispatch_group_leave(group);
|
|
}];
|
|
|
|
dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
|
|
expect(completionHandlerCalled).will.beTruthy();
|
|
}
|
|
|
|
- (void)testAsynchronousSavesActuallySave
|
|
{
|
|
__block BOOL saveSuccessState = NO;
|
|
__block NSManagedObjectID *objectId;
|
|
__block NSManagedObject *fetchedObject;
|
|
|
|
dispatch_group_t group = dispatch_group_create();
|
|
|
|
dispatch_group_enter(group);
|
|
|
|
[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) {
|
|
NSManagedObject *inserted = [SingleEntityWithNoRelationships MR_createInContext:localContext];
|
|
expect([inserted hasChanges]).to.beTruthy();
|
|
[localContext obtainPermanentIDsForObjects:@[inserted] error:nil];
|
|
objectId = inserted.objectID;
|
|
} completion:^(BOOL success, NSError *error) {
|
|
saveSuccessState = success;
|
|
fetchedObject = [[NSManagedObjectContext MR_rootSavingContext] objectWithID:objectId];
|
|
dispatch_group_leave(group);
|
|
}];
|
|
|
|
dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
|
|
expect(saveSuccessState).to.beTruthy();
|
|
expect(fetchedObject).toNot.beNil();
|
|
expect([fetchedObject hasChanges]).to.beFalsy();
|
|
}
|
|
|
|
- (void)testSynchronousSavesActuallySave
|
|
{
|
|
__block NSManagedObjectID *objectId;
|
|
__block NSManagedObject *fetchedObject;
|
|
|
|
[MagicalRecord saveWithBlockAndWait:^(NSManagedObjectContext *localContext) {
|
|
NSManagedObject *inserted = [SingleEntityWithNoRelationships MR_createInContext:localContext];
|
|
expect([inserted hasChanges]).to.beTruthy();
|
|
[localContext obtainPermanentIDsForObjects:@[inserted] error:nil];
|
|
objectId = inserted.objectID;
|
|
}];
|
|
|
|
fetchedObject = [[NSManagedObjectContext MR_rootSavingContext] objectWithID:objectId];
|
|
|
|
expect(fetchedObject).toNot.beNil();
|
|
expect([fetchedObject hasChanges]).to.beFalsy();
|
|
}
|
|
|
|
- (void)testCurrentThreadContextAsynchronousSavesActuallySave
|
|
{
|
|
__block NSManagedObjectID *objectId;
|
|
__block NSManagedObject *fetchedObject;
|
|
|
|
dispatch_group_t group = dispatch_group_create();
|
|
|
|
dispatch_group_enter(group);
|
|
|
|
[MagicalRecord saveUsingCurrentContextWithBlock:^(NSManagedObjectContext *localContext) {
|
|
NSManagedObject *inserted = [SingleEntityWithNoRelationships MR_createInContext:localContext];
|
|
expect([inserted hasChanges]).to.beTruthy();
|
|
[localContext obtainPermanentIDsForObjects:@[inserted] error:nil];
|
|
objectId = inserted.objectID;
|
|
} completion:^(BOOL success, NSError *error) {
|
|
expect(success).to.beTruthy();
|
|
dispatch_group_leave(group);
|
|
}];
|
|
|
|
dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
|
|
fetchedObject = [[NSManagedObjectContext MR_rootSavingContext] objectWithID:objectId];
|
|
expect(fetchedObject).toNot.beNil();
|
|
expect([fetchedObject hasChanges]).to.beFalsy();
|
|
}
|
|
|
|
- (void)testCurrentThreadContextSynchronousSavesActuallySave
|
|
{
|
|
__block NSManagedObjectID *objectId;
|
|
__block NSManagedObject *fetchedObject;
|
|
|
|
[MagicalRecord saveUsingCurrentContextWithBlockAndWait:^(NSManagedObjectContext *localContext) {
|
|
NSManagedObject *inserted = [SingleEntityWithNoRelationships MR_createInContext:localContext];
|
|
expect([inserted hasChanges]).to.beTruthy();
|
|
[localContext obtainPermanentIDsForObjects:@[inserted] error:nil];
|
|
objectId = inserted.objectID;
|
|
}];
|
|
|
|
fetchedObject = [[NSManagedObjectContext MR_rootSavingContext] objectWithID:objectId];
|
|
expect(fetchedObject).toNot.beNil();
|
|
expect([fetchedObject hasChanges]).to.beFalsy();
|
|
}
|
|
|
|
#pragma mark - Test deprecated methods still work as expected
|
|
|
|
- (void)testDeprecatedSimpleSynchronousSaveActuallySaves
|
|
{
|
|
NSManagedObjectContext *managedObjectContext = [NSManagedObjectContext MR_defaultContext];
|
|
NSManagedObject *inserted = [SingleEntityWithNoRelationships MR_createEntity];
|
|
|
|
expect([inserted hasChanges]).to.beTruthy();
|
|
[managedObjectContext obtainPermanentIDsForObjects:@[inserted] error:nil];
|
|
NSManagedObjectID *objectId = inserted.objectID;
|
|
|
|
[managedObjectContext MR_save];
|
|
|
|
NSManagedObject *fetchedObject = [[NSManagedObjectContext MR_rootSavingContext] objectWithID:objectId];
|
|
expect(fetchedObject).toNot.beNil();
|
|
expect([fetchedObject hasChanges]).to.beFalsy();
|
|
}
|
|
|
|
- (void)testDeprecatedBackgroundSaveCallsCompletionHandler
|
|
{
|
|
__block BOOL didSave = NO;
|
|
|
|
dispatch_group_t group = dispatch_group_create();
|
|
|
|
dispatch_group_enter(group);
|
|
|
|
[MagicalRecord saveInBackgroundWithBlock:^(NSManagedObjectContext *localContext) {
|
|
expect(localContext).toNot.beNil();
|
|
[SingleEntityWithNoRelationships MR_createInContext:localContext];
|
|
} completion:^{
|
|
didSave = YES;
|
|
dispatch_group_leave(group);
|
|
}];
|
|
|
|
dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
|
|
expect(didSave).will.beTruthy();
|
|
}
|
|
|
|
- (void)testDeprecatedBackgroundSavesActuallySave
|
|
{
|
|
__block NSManagedObjectID *objectId;
|
|
__block NSManagedObject *fetchedObject;
|
|
|
|
dispatch_group_t group = dispatch_group_create();
|
|
|
|
dispatch_group_enter(group);
|
|
|
|
[MagicalRecord saveInBackgroundWithBlock:^(NSManagedObjectContext *localContext) {
|
|
NSManagedObject *inserted = [SingleEntityWithNoRelationships MR_createInContext:localContext];
|
|
expect([inserted hasChanges]).to.beTruthy();
|
|
[localContext obtainPermanentIDsForObjects:@[inserted] error:nil];
|
|
objectId = inserted.objectID;
|
|
} completion:^{
|
|
fetchedObject = [[NSManagedObjectContext MR_rootSavingContext] objectWithID:objectId];
|
|
dispatch_group_leave(group);
|
|
}];
|
|
|
|
dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
|
|
expect(fetchedObject).toNot.beNil();
|
|
expect([fetchedObject hasChanges]).to.beFalsy();
|
|
}
|
|
|
|
@end
|