public void SetUp()
        {
            Func <IAggregateRootEntity> sutFactory = () => (IAggregateRootEntity)null;
            var givens = new[] { new object(), new object() };
            var result = new object();
            Func <IAggregateRootEntity, object> when = _ => result;
            var then = result;

            _sut = new ResultCentricAggregateQueryTestSpecification(
                sutFactory,
                givens,
                when,
                then);
        }
        public void RunReturnsExpectedResultWhenFailedBecauseDifferentResult()
        {
            var specification = new ResultCentricAggregateQueryTestSpecification(
                () => new FailResultCase(),
                new object[0],
                _ => ((FailResultCase)_).Fail(),
                FailResultCase.TheExpectedResult);

            var result = _sut.Run(specification);

            Assert.That(result.Passed, Is.False);
            Assert.That(result.Failed, Is.True);
            Assert.That(result.ButEvents, Is.EqualTo(Optional <object[]> .Empty));
            Assert.That(result.ButException, Is.EqualTo(Optional <Exception> .Empty));
            Assert.That(result.ButResult, Is.EqualTo(new Optional <int>(FailResultCase.TheActualResult)));
        }
        public void RunReturnsExpectedResultWhenPassed()
        {
            var specification = new ResultCentricAggregateQueryTestSpecification(
                () => new PassCase(),
                new object[0],
                _ => ((PassCase)_).Pass(),
                PassCase.TheResult);

            var result = _sut.Run(specification);

            Assert.That(result.Passed, Is.True);
            Assert.That(result.Failed, Is.False);
            Assert.That(result.ButEvents, Is.EqualTo(Optional <object[]> .Empty));
            Assert.That(result.ButException, Is.EqualTo(Optional <Exception> .Empty));
            Assert.That(result.ButResult, Is.EqualTo(Optional <int> .Empty));
        }
        public void UsingDefaultCtorReturnsInstanceWithExpectedProperties()
        {
            Func <IAggregateRootEntity> sutFactory = () => (IAggregateRootEntity)null;
            var givens = new[] { new object(), new object() };
            var result = new object();
            Func <IAggregateRootEntity, object> when = _ => result;
            var then = result;

            var sut = new ResultCentricAggregateQueryTestSpecification(
                sutFactory,
                givens,
                when,
                then);

            Assert.That(sut.SutFactory, Is.SameAs(sutFactory));
            Assert.That(sut.Givens, Is.EquivalentTo(givens));
            Assert.That(sut.When, Is.SameAs(when));
            Assert.That(sut.Then, Is.SameAs(then));
        }