public async Task TestAfterSaveChangesAsync()
        {
            using (ShimsContext.Create())
            {
                var connectionString = "connection string";
                var queueName        = "value";
                appSettings.Add(AppSettings.SEARCH_INDEX_QUEUE_NAME_KEY, queueName);
                connectionStrings.Add(new ConnectionStringSettings(AppSettings.AZURE_WEB_JOBS_STORAGE_KEY, connectionString));
                var created = new List <SimpleEntity>();
                created.Add(new SimpleEntity
                {
                    Id = 1,
                });

                saveAction.CreatedEntities.AddRange(created);
                saveAction.DocumentKeys[created.First()] = new DocumentKey(SimpleEntityConfiguration.SIMPLE_ENTITY_DOCUMENT_TYPE_ID, created.First().Id);
                var fakeQueue = new Microsoft.WindowsAzure.Storage.Queue.Fakes.ShimCloudQueue
                {
                    CreateIfNotExistsAsync = () =>
                    {
                        return(Task.FromResult <bool>(true));
                    },
                    AddMessageAsyncCloudQueueMessage = (msg) =>
                    {
                        var deserializedMessage = JsonConvert.DeserializeObject <IndexDocumentBatchMessage>(msg.AsString);
                        Assert.AreEqual(1, deserializedMessage.CreatedDocuments.Count());
                        Assert.AreEqual(0, deserializedMessage.DeletedDocuments.Count());
                        Assert.AreEqual(0, deserializedMessage.ModifiedDocuments.Count());
                        return(Task.FromResult <object>(null));
                    },
                };

                Microsoft.WindowsAzure.Storage.Queue.Fakes.ShimCloudQueueClient.AllInstances.GetQueueReferenceString = (client, qName) =>
                {
                    Assert.AreEqual(queueName, qName);
                    return(fakeQueue);
                };

                Microsoft.WindowsAzure.Storage.Fakes.ShimCloudStorageAccount.AllInstances.CreateCloudQueueClient = (acct) =>
                {
                    return(new Microsoft.WindowsAzure.Storage.Queue.Fakes.ShimCloudQueueClient());
                };

                Microsoft.WindowsAzure.Storage.Fakes.ShimCloudStorageAccount.ParseString = (s) =>
                {
                    Assert.AreEqual(connectionString, s);
                    return(new Microsoft.WindowsAzure.Storage.Fakes.ShimCloudStorageAccount());
                };

                var entityEntry = new System.Data.Entity.Infrastructure.Fakes.ShimDbEntityEntry <SimpleEntity>
                {
                };
                System.Data.Entity.Fakes.ShimDbContext.AllInstances.EntryOf1M0 <SimpleEntity>((ctx, add) =>
                {
                    return(entityEntry);
                });

                await saveAction.AfterSaveChangesAsync((DbContext)context);
            }
        }
Пример #2
0
        public async Task TestBeforeSaveChanges_NonAddedEntity()
        {
            using (ShimsContext.Create())
            {
                var created = new SimpleEntity
                {
                    Id = 1
                };
                saveAction.CreatedEntities.Add(created);
                var dbPropertyValues = new System.Data.Entity.Infrastructure.Fakes.ShimDbPropertyValues();
                dbPropertyValues.GetValueOf1String <int>((propertyName) =>
                {
                    Assert.AreEqual(PropertyHelper.GetPropertyName <SimpleEntity>(x => x.Id), propertyName);
                    return(created.Id);
                });
                var typedEntityEntry = new System.Data.Entity.Infrastructure.Fakes.ShimDbEntityEntry <SimpleEntity>
                {
                    EntityGet              = () => created,
                    StateGet               = () => EntityState.Modified,
                    GetDatabaseValues      = () => dbPropertyValues,
                    GetDatabaseValuesAsync = () =>
                    {
                        return(Task.FromResult <DbPropertyValues>(dbPropertyValues));
                    }
                };
                var entityEntry = new System.Data.Entity.Infrastructure.Fakes.ShimDbEntityEntry
                {
                    EntityGet = () => created,
                    StateGet  = () => EntityState.Modified,
                };
                System.Data.Entity.Infrastructure.Fakes.ShimDbChangeTracker.AllInstances.Entries = (tracker) =>
                {
                    var entries = new List <DbEntityEntry>();
                    entries.Add(entityEntry);
                    return(entries);
                };
                System.Data.Entity.Fakes.ShimDbContext.AllInstances.EntryOf1M0 <SimpleEntity>((ctx, e) =>
                {
                    return(typedEntityEntry);
                });

                Action testAndReset = () =>
                {
                    Assert.AreEqual(1, saveAction.RelatedEntityDocumentKeys.Count);
                    var expectedDocumentKey = new DocumentKey(SimpleEntityConfiguration.SIMPLE_ENTITY_DOCUMENT_TYPE_ID, created.Id);
                    Assert.AreEqual(expectedDocumentKey, saveAction.RelatedEntityDocumentKeys.First());
                    saveAction.RelatedEntityDocumentKeys.Clear();
                };

                saveAction.BeforeSaveChanges(context);
                testAndReset();

                await saveAction.BeforeSaveChangesAsync(context);

                testAndReset();
            }
        }
        public void TestGetBatchMessage()
        {
            using (ShimsContext.Create())
            {
                var entityEntry = new System.Data.Entity.Infrastructure.Fakes.ShimDbEntityEntry <SimpleEntity>
                {
                };
                System.Data.Entity.Fakes.ShimDbContext.AllInstances.EntryOf1M0 <SimpleEntity>((ctx, add) =>
                {
                    return(entityEntry);
                });


                var created = new List <SimpleEntity>();
                created.Add(new SimpleEntity
                {
                    Id = 1,
                });

                var modified = new List <SimpleEntity>();
                modified.Add(new SimpleEntity
                {
                    Id = 2
                });

                var deleted = new List <SimpleEntity>();
                deleted.Add(new SimpleEntity
                {
                    Id = 3
                });

                var createdKey  = new DocumentKey(SimpleEntityConfiguration.SIMPLE_ENTITY_DOCUMENT_TYPE_ID, created.First().Id);
                var deletedKey  = new DocumentKey(SimpleEntityConfiguration.SIMPLE_ENTITY_DOCUMENT_TYPE_ID, deleted.First().Id);
                var modifiedKey = new DocumentKey(SimpleEntityConfiguration.SIMPLE_ENTITY_DOCUMENT_TYPE_ID, modified.First().Id);

                saveAction.CreatedEntities.AddRange(created);
                saveAction.DeletedEntities.AddRange(deleted);
                saveAction.ModifiedEntities.AddRange(modified);

                saveAction.DocumentKeys[created.First()]  = createdKey;
                saveAction.DocumentKeys[modified.First()] = modifiedKey;
                saveAction.DocumentKeys[deleted.First()]  = deletedKey;

                var message = saveAction.GetBatchMessage();
                Assert.AreEqual(1, message.CreatedDocuments.Count());
                Assert.AreEqual(1, message.DeletedDocuments.Count());
                Assert.AreEqual(1, message.ModifiedDocuments.Count());

                Assert.AreEqual(createdKey.ToString(), message.CreatedDocuments.First());
                Assert.AreEqual(deletedKey.ToString(), message.DeletedDocuments.First());
                Assert.AreEqual(modifiedKey.ToString(), message.ModifiedDocuments.First());
            }
        }
 public async Task TestSaveChangesAsync_CheckConcurrency_MutlipleEntitiesWithEqualIds()
 {
     using (ShimsContext.Create())
     {
         var exceptionCaught   = false;
         var concurrentEntity1 = new ConcurrentEntity
         {
             Id = 1,
         };
         var concurrentEntity2 = new ConcurrentEntity
         {
             Id = 1,
         };
         var shimEntry1 = new System.Data.Entity.Infrastructure.Fakes.ShimDbEntityEntry
         {
             EntityGet = () =>
             {
                 return(concurrentEntity1);
             }
         };
         var shimEntry2 = new System.Data.Entity.Infrastructure.Fakes.ShimDbEntityEntry
         {
             EntityGet = () =>
             {
                 return(concurrentEntity2);
             }
         };
         try
         {
             System.Data.Entity.Infrastructure.Fakes.ShimDbUpdateException.AllInstances.EntriesGet = (exc) =>
             {
                 var list = new List <DbEntityEntry> {
                     shimEntry1, shimEntry2
                 };
                 return(list);
             };
             System.Data.Entity.Fakes.ShimDbContext.AllInstances.SaveChangesAsync = (c) =>
             {
                 throw new DbUpdateConcurrencyException();
             };
             var service = new DbContextService <ConcurrentDbContext>(new ConcurrentDbContext());
             await service.SaveChangesAsync();
         }
         catch (NotSupportedException e)
         {
             exceptionCaught = true;
         }
         Assert.IsTrue(exceptionCaught);
     }
 }
Пример #5
0
        public async Task TestBeforeSaveChanges_AddedEntity()
        {
            using (ShimsContext.Create())
            {
                var created = new SimpleEntity
                {
                    Id = 1
                };
                saveAction.CreatedEntities.Add(created);
                var typedEntityEntry = new System.Data.Entity.Infrastructure.Fakes.ShimDbEntityEntry <SimpleEntity>
                {
                    EntityGet = () => created,
                    StateGet  = () => EntityState.Added
                };
                var entityEntry = new System.Data.Entity.Infrastructure.Fakes.ShimDbEntityEntry
                {
                    EntityGet = () => created,
                    StateGet  = () => EntityState.Added
                };
                System.Data.Entity.Infrastructure.Fakes.ShimDbChangeTracker.AllInstances.Entries = (tracker) =>
                {
                    var entries = new List <DbEntityEntry>();
                    entries.Add(entityEntry);
                    return(entries);
                };
                System.Data.Entity.Fakes.ShimDbContext.AllInstances.EntryOf1M0 <SimpleEntity>((ctx, e) =>
                {
                    return(typedEntityEntry);
                });

                Action testAndReset = () =>
                {
                    Assert.AreEqual(1, saveAction.RelatedEntityDocumentKeys.Count);
                    var expectedDocumentKey = new DocumentKey(SimpleEntityConfiguration.SIMPLE_ENTITY_DOCUMENT_TYPE_ID, created.Id);
                    Assert.AreEqual(expectedDocumentKey, saveAction.RelatedEntityDocumentKeys.First());
                    saveAction.RelatedEntityDocumentKeys.Clear();
                };

                saveAction.BeforeSaveChanges(context);
                testAndReset();

                await saveAction.BeforeSaveChangesAsync(context);

                testAndReset();
            }
        }
 public async Task TestSaveChangesAsync_CheckConcurrency()
 {
     using (ShimsContext.Create())
     {
         var exceptionCaught  = false;
         var concurrentEntity = new ConcurrentEntity
         {
             Id = 1,
         };
         var shimEntry = new System.Data.Entity.Infrastructure.Fakes.ShimDbEntityEntry
         {
             EntityGet = () =>
             {
                 return(concurrentEntity);
             }
         };
         try
         {
             System.Data.Entity.Infrastructure.Fakes.ShimDbUpdateException.AllInstances.EntriesGet = (exc) =>
             {
                 var list = new List <DbEntityEntry> {
                     shimEntry
                 };
                 return(list);
             };
             System.Data.Entity.Fakes.ShimDbContext.AllInstances.SaveChangesAsync = (c) =>
             {
                 throw new DbUpdateConcurrencyException();
             };
             var service = new DbContextService <ConcurrentDbContext>(new ConcurrentDbContext());
             await service.SaveChangesAsync();
         }
         catch (EcaDbUpdateConcurrencyException e)
         {
             exceptionCaught = true;
             var entries = e.Entries;
             Assert.AreEqual(1, entries.Count());
             Assert.AreEqual(1, e.ConcurrentEntities.Count());
             Assert.IsTrue(Object.ReferenceEquals(concurrentEntity, e.ConcurrentEntities.First()));
         }
         Assert.IsTrue(exceptionCaught);
     }
 }