public void ValidateStock_ReturnsNegativeStockWeightState_WhenStockWeightIsNegative()
        {
            //Arrange
            var mockLogger = new Mock <ILogger <GlobalValidationService> >();
            var mockCurrencyValidationService = new Mock <ICurrencyValidationService>(MockBehavior.Strict);
            var mockStockIdValidationService  = new Mock <IStockIdValidationService>(MockBehavior.Strict);
            var stock = new Stock()
            {
                Currency = It.IsAny <string>(), OrderId = $"QF-{DateTime.Now}-{It.IsAny<int>()}", Weight = -1, Symbol = "$"
            };

            mockCurrencyValidationService.Setup(x => x.ValidateCurrency(It.IsAny <string>()))
            .Returns(ValidationState.Success);

            mockStockIdValidationService.Setup(x => x.ValidateOrderId(It.IsAny <string>(), It.IsAny <int>()))
            .Returns(ValidationState.InvalidOrderId);

            var sut = new GlobalValidationService(mockLogger.Object, mockCurrencyValidationService.Object, mockStockIdValidationService.Object);

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

            //Assert
            Assert.Equal(ValidationState.NegativeStockWeight, result);
        }
        public void ValidateStock_ReturnsInvalidCurrencySymbolState_WhenCurrencySymbolIsNotSupported()
        {
            //Arrange
            var mockLogger = new Mock <ILogger <GlobalValidationService> >();
            var mockCurrencyValidationService = new Mock <ICurrencyValidationService>(MockBehavior.Strict);
            var mockStockIdValidationService  = new Mock <IStockIdValidationService>(MockBehavior.Strict);
            var stock = new Stock()
            {
                Currency = It.IsAny <string>(), OrderId = $"QF-{DateTime.Now}-{It.IsAny<int>()}", Weight = It.Is <int>(x => x > 0), NotionalAmount = -1, Symbol = $"{Guid.NewGuid().ToString()}"
            };

            mockCurrencyValidationService.Setup(x => x.ValidateCurrency(It.IsAny <string>()))
            .Returns(ValidationState.Success);

            mockStockIdValidationService.Setup(x => x.ValidateOrderId(It.IsAny <string>(), It.IsAny <int>()))
            .Returns(ValidationState.Success);

            var sut = new GlobalValidationService(mockLogger.Object, mockCurrencyValidationService.Object, mockStockIdValidationService.Object);

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

            //Assert
            Assert.Equal(ValidationState.InvalidCurrencySymbol, result);
        }
        public void ValidatePortfolioHasStock_ReturnsEmptyPortfolioState_WhenNoStocksInPortfolio()
        {
            //Arrange
            var portfolio = new Portfolio()
            {
                new List <Stock>()
            };
            var mockLogger = new Mock <ILogger <GlobalValidationService> >();
            var mockCurrencyValidationService = new Mock <ICurrencyValidationService>(MockBehavior.Strict);
            var mockStockIdValidationService  = new Mock <IStockIdValidationService>(MockBehavior.Strict);


            var sut = new GlobalValidationService(mockLogger.Object, mockCurrencyValidationService.Object, mockStockIdValidationService.Object);

            //Act
            var result = sut.ValidatePortfolioHasStock(portfolio);

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