public async void CanUpdateCar()
        {
            var documentRepository = new InMemoryDocumentRepository();
            var inMemoryDb         = documentRepository.Aggregates;
            var dataStore          = new DataStore(documentRepository);

            var carId = Guid.NewGuid();

            //Given
            inMemoryDb.Add(
                new Car
            {
                id   = carId,
                Make = "Toyota"
            });

            //When
            await dataStore.UpdateById <Car>(carId, car => car.Make = "Ford");

            await dataStore.CommitChanges();

            //Then

            //We have executed an update operation
            Assert.NotNull(dataStore.ExecutedOperations.SingleOrDefault(e => e is UpdateOperation <Car>));

            //We have no queued update operations
            Assert.Null(dataStore.QueuedOperations.SingleOrDefault(e => e is QueuedUpdateOperation <Car>));

            //The dataStore reads the changes correctly
            Assert.Equal("Ford", dataStore.ReadActiveById <Car>(carId).Result.Make);
        }
        public async void WhenUpdateCarButDontCommitChangesOnlyTheLocalCacheIsAffected()
        {
            var documentRepository = new InMemoryDocumentRepository();
            var inMemoryDb         = documentRepository.Aggregates;
            var dataStore          = new DataStore(documentRepository);

            var carId = Guid.NewGuid();

            //Given
            inMemoryDb.Add(
                new Car
            {
                id   = carId,
                Make = "Toyota"
            });

            //When
            await dataStore.UpdateById <Car>(carId, car => car.Make = "Ford");

            //await dataStore.CommitChanges(); don't commit

            //Then

            //We have a queued update operation
            Assert.NotNull(dataStore.QueuedOperations.SingleOrDefault(e => e is QueuedUpdateOperation <Car>));

            //We have not execute any update operations
            Assert.Null(dataStore.ExecutedOperations.SingleOrDefault(e => e is UpdateOperation <Car>));

            //The underlying database has NOT changed
            Assert.Equal("Toyota", inMemoryDb.OfType <Car>().Single(car => car.id == carId).Make);

            //The DataStore instance picks up the change, because it has applied
            //all the previous changes made during this session to any query.
            Assert.Equal("Ford", dataStore.ReadActiveById <Car>(carId).Result.Make);
        }
Пример #3
0
 private InMemoryTestHarness()
 {
     DocumentRepository = new InMemoryDocumentRepository();
     DataStore          = new DataStore(DocumentRepository, this.messageAggregator);
 }