public void GetUserInfo_ClassDoesntNeedExtraInfo_ShouldNotAskUserForAnything()
        {
            //Assemble
            _classInfo.Properties[0].ValidType = ValidType.Bool;

            //Act
            UserInputService.GetUserInfo(_classInfo, _mockRepo.Object);

            //Assert
            _mockRepo.Verify(
                x => x.GetUserInput(It.IsAny <string>()),
                Times.Never
                );
        }
        public void GetUserInfo_ClassContainsString_ShouldAskUserForLength()
        {
            //Assemble
            _classInfo.Properties[0].ValidType = ValidType.String;

            //Act
            UserInputService.GetUserInfo(_classInfo, _mockRepo.Object);

            //Assert
            _mockRepo.Verify(
                x => x.GetUserInput(UserInputService.GetLengthMessage(
                                        _classInfo.Properties[0].CSharpName
                                        )),
                Times.Once
                );
        }
        public void GetUserInfo_UserGivesInvalidValue_ShouldThrowException()
        {
            //Assemble
            var invalidInput = "invalid input";

            _classInfo.Properties[0].ValidType = ValidType.Decimal;
            _mockRepo
            .Setup(x => x.GetUserInput(It.IsAny <string>()))
            .Returns(invalidInput);

            //Act
            Action act = () => UserInputService.GetUserInfo(_classInfo, _mockRepo.Object);

            //Assert
            act
            .Should()
            .ThrowExactly <InvalidInputException>()
            .WithMessage(
                UserInputService.InvalidInputExceptionBadInput(invalidInput)
                );
        }
        public void GetUserInfo_ClassContainsDouble_ShouldAskUserForPrecisionAndScale()
        {
            //Assemble
            _classInfo.Properties[0].ValidType = ValidType.Double;

            //Act
            UserInputService.GetUserInfo(_classInfo, _mockRepo.Object);

            //Assert
            _mockRepo.Verify(
                x => x.GetUserInput(UserInputService.GetPrecisionMessage(
                                        _classInfo.Properties[0].CSharpName
                                        )),
                Times.Once
                );
            _mockRepo.Verify(
                x => x.GetUserInput(UserInputService.GetScaleMessage(
                                        _classInfo.Properties[0].CSharpName
                                        )),
                Times.Once
                );
        }