public void ValidateCurrency_ReturnsSuccessState_WhenCurrencySupported()
        {
            //Arrange
            var mockLogger = new Mock <ILogger <ClientCValidationService> >();

            var sut = new ClientCValidationService(mockLogger.Object);

            //Act
            var result = sut.ValidateCurrency("USD");

            //Assert
            Assert.Equal(ValidationState.Success, result);
        }
        public void ValidateDestination_ReturnsSuccessState_WhenTypeSupported_WithDestination(OrderType orderType, string destination)
        {
            //Arrange
            var mockLogger = new Mock <ILogger <ClientCValidationService> >();

            var sut = new ClientCValidationService(mockLogger.Object);

            //Act
            var result = sut.ValidateDestination(destination, orderType);

            //Assert
            Assert.Equal(ValidationState.Success, result);
        }
        public void ValidateDestination_ReturnsUnsupportedTypeState_WhenTypeUnsupported()
        {
            //Arrange
            var mockLogger = new Mock <ILogger <ClientCValidationService> >();

            var sut = new ClientCValidationService(mockLogger.Object);

            //Act
            var result = sut.ValidateDestination(It.IsAny <string>(), OrderType.None);

            //Assert
            Assert.Equal(ValidationState.UnsupportedType, result);
        }
        public void ValidateCurrency_ReturnsUnsupportedCurrencyState_WhenCurrencyUnsupported()
        {
            //Arrange
            var mockLogger = new Mock <ILogger <ClientCValidationService> >();

            var sut      = new ClientCValidationService(mockLogger.Object);
            var currency = Guid.NewGuid().ToString().Substring(0, 2);

            //Act
            var result = sut.ValidateCurrency(currency);

            //Assert
            Assert.Equal(ValidationState.UnsupportedCurrency, result);
        }
        public void ValidatePortfolioNotionalAmount_ReturnsSuccessState_WhenMaximumStockNotionalAmountNotMet(decimal amount)
        {
            //Arrange
            var mockLogger = new Mock <ILogger <ClientCValidationService> >();

            var sut = new ClientCValidationService(mockLogger.Object);

            var notionalAmount = 10000 - amount;

            //Act
            var result = sut.ValidatePortfolioNotionalAmount(notionalAmount);

            //Assert
            Assert.Equal(ValidationState.Success, result);
        }
        public void ValidatePortfolioNotionalAmount_ReturnsMaximumPortfolioNotionalAmountNotMetState_WhenMaximumPortfolioNotionalAmountExceeded(decimal amount)
        {
            //Arrange
            var mockLogger = new Mock <ILogger <ClientCValidationService> >();

            var sut = new ClientCValidationService(mockLogger.Object);

            var notionalAmount = amount + 100000;

            //Act
            var result = sut.ValidatePortfolioNotionalAmount(notionalAmount);

            //Assert
            Assert.Equal(ValidationState.MaximumPortfolioNotionalAmountNotMet, result);
        }
        public void ValidateStock_ReturnsSuccessStateWhenAll_ValidationReturnsSuccessState(OrderType orderType, string destination, decimal amount)
        {
            //Arrange
            var mockLogger = new Mock <ILogger <ClientCValidationService> >();

            var sut = new ClientCValidationService(mockLogger.Object);

            var stock = new Stock()
            {
                Currency       = "USD",
                Destination    = destination,
                NotionalAmount = amount,
                OrderType      = orderType
            };

            //Act
            var result = sut.ValidateStock(stock);

            //Assert
            Assert.Equal(ValidationState.Success, result);
        }