public void ShouldOpen3rdDoor()
        {
            var gameStage        = new GameStage();
            var mockRandomNumber = Substitute.For <IRandomNumberGenerator>();

            mockRandomNumber.Generate(0, 2).Returns(1);
            var doorSelector = new DoorSelector(mockRandomNumber);

            gameStage.AllDoors[0].Winner = true;
            gameStage.AllDoors[0].Chosen = true;

            doorSelector.SetOpenDoor(gameStage.AllDoors);

            Assert.True(gameStage.AllDoors[2].Open);  //third door should be open
            Assert.False(gameStage.AllDoors[0].Open); //checking that winnning/chosen door should not be open
        }
        public void ShouldChoseDoor3()
        {
            var gameStage        = new GameStage();
            var mockRandomNumber = Substitute.For <IRandomNumberGenerator>();

            mockRandomNumber.Generate(1, 3).Returns(2);
            var doorSelector   = new DoorSelector(mockRandomNumber);
            var changeStrategy = new ChangeStrategy();

            gameStage.AllDoors[0].Chosen = true;
            gameStage.AllDoors[1].Open   = true;

            changeStrategy.ChangeSelection(gameStage.AllDoors);

            Assert.True(gameStage.AllDoors[2].Chosen);
            Assert.False(gameStage.AllDoors[0].Chosen);
        }
        public void ShouldChangeDoorChosenToTrue()
        {
            var gameStage        = new GameStage();
            var mockRandomNumber = Substitute.For <IRandomNumberGenerator>();

            mockRandomNumber.Generate().Returns(3);
            var doorSelector = new DoorSelector(mockRandomNumber);

            //pick a door, check that it's winner = false
            var thirdDoor = gameStage.AllDoors.Find(door => door.Number == 3);

            Assert.False(thirdDoor.Chosen);

            //run the method
            doorSelector.SetChosenDoor(gameStage.AllDoors);

            //winner should now be true
            Assert.True(thirdDoor.Chosen);
        }