protected override void Given() { entity1 = new Employee { Name = "Bob", Login = "******" }; entity1Type = entity1.GetType(); identityProperty = entity1Type.GetProperty("Id"); identityType = identityProperty.PropertyType; id = Guid.NewGuid(); documentConvention = Fake <ICouchDocumentConvention>(); documentConvention.GetIdentityPropertyFor(entity1Type).Returns(identityProperty); documentConvention.GenerateIdentityFor(identityType).Returns(id); bulkDocsResults = new BulkDocsResult[1]; bulkDocsResults[0] = new BulkDocsResult { Id = id.ToString(), Rev = "123456" }; couchProxy = Fake <ICouchProxy>(); couchProxy.Execute <BulkDocsResult[]>(Arg.Any <BulkDocsCommand>()).Returns(bulkDocsResults); couchDatabase = Fake <ICouchDatabase>(); couchDatabase.CouchDocumentConvention.Returns(documentConvention); couchDatabase.Name.Returns("ottoman-test-database"); couchDatabase.CouchProxy.Returns(couchProxy); }
protected override void Given() { documentId = Guid.NewGuid(); entity1Type = typeof(Employee); identityProperty = entity1Type.GetProperty("Id"); documentConvention = Fake <ICouchDocumentConvention>(); documentConvention.GetIdentityPropertyFor(entity1Type).Returns(identityProperty); var couchDocument = new CouchDocument(); couchDocument.Add("_id", documentId.ToString()); couchDocument.Add("_rev", "123456"); couchDocument.Add("Type", entity1Type.Name); couchDocument.Add("Name", "Bob"); couchDocument.Add("Login", "boblogin"); bulkDocsResults = new BulkDocsResult[1]; bulkDocsResults[0] = new BulkDocsResult { Id = documentId.ToString(), Rev = "123456" }; couchProxy = Fake <ICouchProxy>(); couchProxy.Execute <CouchDocument>(Arg.Any <GetDocumentCommand>()).Returns(couchDocument); couchProxy.Execute <BulkDocsResult[]>(Arg.Any <BulkDocsCommand>()).Returns(bulkDocsResults); couchDatabase = Fake <ICouchDatabase>(); couchDatabase.Name.Returns("ottoman-test-database"); couchDatabase.CouchProxy.Returns(couchProxy); couchDatabase.CouchDocumentConvention.Returns(documentConvention); }
public void SaveChanges() { var docs = new List <CouchDocument>(); var entities = new List <object>(); foreach (var entity in DeletedEntities) { EntityMetadata entityMetadata; if (EntityMetadataMap.TryGetValue(entity, out entityMetadata)) { EntityMetadataMap.Remove(entity); IdentityMap.Remove(entityMetadata.Key); Type entityType = entity.GetType(); PropertyInfo identityProperty = CouchDatabase.CouchDocumentConvention.GetIdentityPropertyFor(entityType); docs.Add(CouchDocument.Dehydrate(entity, identityProperty, entityMetadata.Revision, true)); entities.Add(entity); } } DeletedEntities.Clear(); foreach (var entity in EntityMetadataMap.Where(pair => IsEntityDirty(pair.Key, pair.Value))) { Type entityType = entity.Key.GetType(); PropertyInfo identityProperty = CouchDatabase.CouchDocumentConvention.GetIdentityPropertyFor(entityType); docs.Add(CouchDocument.Dehydrate(entity.Key, identityProperty, entity.Value.Revision, false)); entities.Add(entity.Key); } if (docs.Count == 0 && entities.Count == 0) { return; } var bulkDocsMessage = new BulkDocsMessage(docs); var bulkDocsCommand = new BulkDocsCommand(CouchDatabase.Name, bulkDocsMessage); BulkDocsResult[] results = CouchDatabase.CouchProxy.Execute <BulkDocsResult[]>(bulkDocsCommand); for (int index = 0; index < results.Length; index++) { BulkDocsResult result = results[index]; object entity = entities[index]; EntityMetadata entityMetadata; if (EntityMetadataMap.TryGetValue(entity, out entityMetadata) == false) { continue; } IdentityMap[result.Id] = entity; entityMetadata.Revision = result.Rev; entityMetadata.OriginalEntity = entity; } }