public void Filter_Given_null_Throws_NotEnoughEngineersException()
        {
            //arrange
            var sut = new ChooseTwoRandomEngineersFilter();

            //act and assert
            Assert.Throws <NotEnoughEngineersException>(() => sut.Filter(null));
        }
        public void Filter_Given_LessThanTwoEngineers_Throws_NotEnoughEngineersException(int engineersNumber)
        {
            //arrange
            var engineers = new SupportEngineerMocksBuilder()
                            .WithEngineersWhoDidntHadShiftYesterday(engineersNumber)
                            .Build();
            var sut = new ChooseTwoRandomEngineersFilter();

            //act and assert
            Assert.Throws <NotEnoughEngineersException>(() => sut.Filter(engineers));
        }
        public void Filter_Given_MoreThanOneEngineer_Returns_TwoRandomEngineers()
        {
            //arrange
            var engineers = new SupportEngineerMocksBuilder()
                            .WithEngineersWhoDidntHadShiftYesterday(2)
                            .Build();
            var sut = new ChooseTwoRandomEngineersFilter();

            //act
            var chosenOnes = sut.Filter(engineers);

            //assert
            engineers.ShouldContain(chosenOnes.First());
            engineers.ShouldContain(chosenOnes.Last());
        }
        public void Filter_Given_MoreThanTwoEngineersAndSuccessor_Calls_Successor()
        {
            //arrange
            var engineers = new SupportEngineerMocksBuilder()
                            .WithEngineersWhoHadShiftYesterday(10)
                            .Build();
            var successor = A.Fake <ISupportEngineersFilterChain>();

            var sut = new ChooseTwoRandomEngineersFilter(successor);

            //act
            var result = sut.Filter(engineers);


            //assert
            A.CallTo(() => successor.Filter(A <IEnumerable <ISupportEngineer> > ._))
            .MustHaveHappened(Repeated.Exactly.Once);
        }