public void WhenTransactionExists_AndTransactionHandlerUsed_AndTransactionRollback_ShouldInvokeHandler()
            {
                // arrange
                var sut = Create();
                TransactionStatus? transactionStatus = null;

                // act
                using (TransactionScopes.ReadCommitted())
                {
                    sut.OnTransactionCompleted(
                        e => transactionStatus = e.Transaction.TransactionInformation.Status);
                }

                // assert
                Expect(transactionStatus).To.Equal(TransactionStatus.Aborted);
            }
            public void ShouldNotThrowIfAvailable()
            {
                // Arrange
                var names    = GetRandomArray <string>(5);
                var cache    = new NoCache();
                var executor = new CommandExecutor(
                    new QueryExecutor(cache),
                    cache
                    );
                var result = new List <int>();

                Expect(TimeSpan.Zero.Ticks)
                .To.Equal(0, () => $"WTF: expected TimeSpan.Zero to be zero, but it's {TimeSpan.Zero}");
                // Act
                using (var scope =
                           TransactionScopes.ReadCommitted(TransactionScopeOption.RequiresNew
                                                           )
                       )
                {
                    Expect(() =>
                    {
                        result.AddRange(executor.Execute(new CreatePeople(names)));
                    }).Not.To.Throw();

                    scope.Complete();
                }

                // Assert
                Expect(result).Not.To.Be.Empty();
                Expect(result).To.Contain.Exactly(names.Length).Items();
                var queryExecutor = new QueryExecutor(cache);

                result.ForEach(id =>
                {
                    var inDb = queryExecutor.Execute(new FindPersonById(id));
                    Expect(names).To.Contain(inDb.Name);
                });
            }