public void BehaviourInterface_HandleUserNeedCallChainResolution()
        {
            //Arrange
            var spy = A.Fake<IInputOutputDriver>();
            A.CallTo(() => spy.Input()).Returns(A.Dummy<string>());
            var doc = A.Fake<BaseCommandInterpreter>();
            BehaviourInterface sut = new BehaviourInterface(doc, spy);

            //Act
            var dummy = sut.HandleUserNeeds();

            //Assert
            A.CallTo(() => doc.HandleCommand(A<string>.Ignored)).MustHaveHappened(Repeated.Exactly.Once);
        }
        public void BehaviourInterface_HandleUserNeedsResistsInputFailures()
        {
            //Arrange
            var spy = A.Fake<IInputOutputDriver>();
            A.CallTo(() => spy.Input()).Throws<Exception>();
            var doc = A.Fake<BaseCommandInterpreter>();
            BehaviourInterface sut = new BehaviourInterface(doc, spy);

            //Act
            var keepRun = sut.HandleUserNeeds();

            //Assert
            keepRun.Should().BeTrue();
        }
        public void BehaviourInterface_HandleUserNeedsLogsInputFailures()
        {
            //Arrange
            var spy = A.Fake<IInputOutputDriver>();
            var expectedMessage = String.Format(UI.Properties.Resources.Error, "Test");
            A.CallTo(() => spy.Input()).Throws(new Exception("Test"));
            var doc = A.Fake<BaseCommandInterpreter>();
            BehaviourInterface sut = new BehaviourInterface(doc, spy);

            //Act
            var dummy = sut.HandleUserNeeds();

            //Assert
            A.CallTo(() => spy.Output(expectedMessage)).MustHaveHappened(Repeated.Exactly.Once);
        }