Example #1
0
        public async Task PriceHistory_ValidIdPassed_CorrectAndValidObjectReturned()
        {
            var       context    = new MockStockContext(Data.ProductStocks(), Data.Prices(), null);
            var       controller = new StockController(context, null);
            const int id         = 1;

            var result = await controller.PriceHistory(id);

            var validPrices = Data.Prices().Where(p => p.ProductStockId == id).ToList();

            Assert.IsNotNull(result);
            var objectResult = result.Result as OkObjectResult;

            Assert.IsNotNull(objectResult);
            var returnedResult = objectResult.Value as ProductStockPricingHistoryDto;

            Assert.IsNotNull(returnedResult);

            Assert.AreEqual(returnedResult.ProductID, Data.ProductStocks()[id - 1].ProductId);
            Assert.AreEqual(returnedResult.Stock, Data.ProductStocks()[id - 1].Stock);
            Assert.AreEqual(returnedResult.Prices.Count, validPrices.Count);
            foreach (var prices in returnedResult.Prices)
            {
                Assert.AreEqual(prices.Id, validPrices.FirstOrDefault(p => p.Id == prices.Id)?.Id);
                Assert.AreEqual(prices.Date, validPrices.FirstOrDefault(p => p.Id == prices.Id)?.Date);
                Assert.AreEqual(prices.ProductPrice, validPrices.FirstOrDefault(p => p.Id == prices.Id)?.ProductPrice);
                Assert.AreEqual(prices.ProductStockId, validPrices.FirstOrDefault(p => p.Id == prices.Id)?.ProductStockId);
            }
        }
Example #2
0
        public async Task POSTAdjustCost_ValidIdAndCostPassed_PriceAddedToDatabaseAndPricePointerChanged()
        {
            var          context    = new MockStockContext(Data.ProductStocks(), Data.Prices(), null);
            var          controller = new StockController(context, null);
            const int    id         = 2;
            const double price      = 4.32;

            var previous = Data.ProductStockDtos().FirstOrDefault(ps => ps.ProductStock.Id == id);
            var expected = previous;

            expected.Price = new Price {
                Id = 10, ProductPrice = price, ProductStockId = expected.ProductStock.Id
            };
            expected.ProductStock.PriceId = 10;
            var result = await controller.AdjustCost(id, price);

            var after = await context.GetProductStockAsync(id);

            Assert.IsNotNull(result);
            var okResult = result as OkResult;

            Assert.IsNotNull(okResult);
            Assert.AreEqual(previous.ProductStock.Id, after.ProductStock.Id); //Just check Id to make sure the correct product is returned.
            Assert.AreEqual(expected.Price.Id, after.Price.Id);
            Assert.AreEqual(expected.Price.ProductPrice, after.Price.ProductPrice);
            Assert.AreEqual(expected.Price.ProductStockId, after.Price.ProductStockId);
            Assert.AreEqual(expected.ProductStock.PriceId, after.ProductStock.PriceId);
        }
Example #3
0
        public async Task OrderRequest_IncorrectProductReturned_ReturnInternalServerError()
        {
            const int    id                   = 2;
            const string supplier             = "undercutters";
            var          expectedHttpResponse = Data.VendorProducts().FirstOrDefault(vp => vp.Id == id + 1);
            var          expectedJson         = JsonConvert.SerializeObject(expectedHttpResponse);
            var          expectedResponse     = new HttpResponseMessage
            {
                StatusCode = System.Net.HttpStatusCode.OK,
                Content    = new StringContent(expectedJson,
                                               Encoding.UTF8,
                                               "application/json")
            };
            var httpClient = new HttpClient(CreateHttpMock(expectedResponse).Object);
            var context    = new MockStockContext(Data.ProductStocks(), Data.Prices(), null);
            var controller = new StockController(context, null)
            {
                HttpClient = httpClient
            };

            var result = await controller.OrderRequest(id, supplier);

            Assert.IsNotNull(result);
            var objectResult = result as StatusCodeResult;

            Assert.IsNotNull(objectResult);
            Assert.AreEqual(objectResult.StatusCode, StatusCodes.Status500InternalServerError);
        }
Example #4
0
        public void Low_OutOfBoundsCountPassed_AllValuesReturnedCorrectly()
        {
            var       context    = new MockStockContext(Data.ProductStocks(), Data.Prices(), null);
            var       controller = new StockController(context, null);
            const int count      = OutOfBoundsId;

            var result         = controller.Low(OutOfBoundsId);
            var expectedResult = Data.ProductStockDtos().OrderBy(ps => ps.ProductStock.Stock).Take(count).ToList();

            Assert.IsNotNull(result);
            var priceResult = result.Result as ViewResult;

            Assert.IsNotNull(priceResult);
            var objectResult = priceResult.Model as IEnumerable <ProductStockDto>;

            Assert.IsNotNull(objectResult);
            var returnedListResult = objectResult.ToList();

            Assert.AreEqual(returnedListResult.Count, expectedResult.Count);

            for (int i = 0; i < expectedResult.Count; i++)
            {
                Assert.AreEqual(returnedListResult[i].Price.Date, expectedResult[i].Price.Date);
                Assert.AreEqual(returnedListResult[i].Price.Id, expectedResult[i].Price.Id);
                Assert.AreEqual(returnedListResult[i].Price.ProductPrice, expectedResult[i].Price.ProductPrice);
                Assert.AreEqual(returnedListResult[i].Price.ProductStockId, expectedResult[i].Price.ProductStockId);

                Assert.AreEqual(returnedListResult[i].ProductStock.Id, expectedResult[i].ProductStock.Id);
                Assert.AreEqual(returnedListResult[i].ProductStock.Stock, expectedResult[i].ProductStock.Stock);
                Assert.AreEqual(returnedListResult[i].ProductStock.PriceId, expectedResult[i].ProductStock.PriceId);
                Assert.AreEqual(returnedListResult[i].ProductStock.ProductId, expectedResult[i].ProductStock.ProductId);
            }
        }
Example #5
0
        public async Task GetAll_AllValid_AllReturned()
        {
            var context    = new MockStockContext(Data.ProductStocks(), Data.Prices(), null);
            var controller = new StockController(context, null);

            var result = await controller.ProductStocks();

            Assert.IsNotNull(result);
            var objectResult = result.Result as OkObjectResult;

            Assert.IsNotNull(objectResult);
            var enumerableResult = objectResult.Value as IEnumerable <ProductStockDto>;

            Assert.IsNotNull(enumerableResult);
            var listResult = enumerableResult.ToList();

            foreach (var p in listResult)
            {
                Assert.AreEqual(p.Price.Date, Data.Prices()[p.Price.Id - 1].Date);
                Assert.AreEqual(p.Price.Id, Data.Prices()[p.Price.Id - 1].Id);
                Assert.AreEqual(p.Price.ProductPrice, Data.Prices()[p.Price.Id - 1].ProductPrice);
                Assert.AreEqual(p.Price.ProductStockId, Data.Prices()[p.Price.Id - 1].ProductStockId);

                Assert.AreEqual(p.ProductStock.Id, Data.ProductStocks()[p.ProductStock.Id - 1].Id);
                Assert.AreEqual(p.ProductStock.Stock, Data.ProductStocks()[p.ProductStock.Id - 1].Stock);
                Assert.AreEqual(p.ProductStock.PriceId, Data.ProductStocks()[p.ProductStock.Id - 1].PriceId);
                Assert.AreEqual(p.ProductStock.ProductId, Data.ProductStocks()[p.ProductStock.Id - 1].ProductId);
            }
        }
Example #6
0
        public void Low_OutOfBoundsNegativePassed_NotFoundReturned()
        {
            var       context    = new MockStockContext(Data.ProductStocks(), Data.Prices(), null);
            var       controller = new StockController(context, null);
            const int count      = NegativeId;

            var result = controller.Low(count);

            Assert.IsNotNull(result);
            var priceResult = result.Result as NotFoundResult;

            Assert.IsNotNull(priceResult);
        }
Example #7
0
        public async Task PriceHistory_OutOfBoundsNegativeId_NotFoundReturned()
        {
            var       context    = new MockStockContext(Data.ProductStocks(), Data.Prices(), null);
            var       controller = new StockController(context, null);
            const int id         = NegativeId;

            var result = await controller.PriceHistory(id);

            Assert.IsNotNull(result);
            var objectResult = result.Result as NotFoundResult;

            Assert.IsNotNull(objectResult);
        }
Example #8
0
        public async Task GetDetails_OutOfBoundsPositiveId_NotFoundReturned()
        {
            var       context    = new MockStockContext(Data.ProductStocks(), Data.Prices(), null);
            var       controller = new StockController(context, null);
            const int id         = OutOfBoundsId;

            var result = await controller.Details(id);

            Assert.IsNotNull(result);
            var objectResult = result.Result as NotFoundResult;

            Assert.IsNotNull(objectResult);
        }
Example #9
0
        public async Task VendorProducts_EmtpySupplierPassed_ReturnNotFound()
        {
            var          context    = new MockStockContext(Data.ProductStocks(), Data.Prices(), null);
            var          controller = new StockController(context, null);
            const string supplier   = "";

            var result = await controller.VendorProducts(supplier);

            Assert.IsNotNull(result);
            var objectResult = result as NotFoundResult;

            Assert.IsNotNull(objectResult);
        }
Example #10
0
        public async Task POSTAdjustCost_ZeroCostPassed_ReturnBadRequest()
        {
            var          context    = new MockStockContext(Data.ProductStocks(), Data.Prices(), null);
            var          controller = new StockController(context, null);
            const int    id         = 2;
            const double price      = 0;

            var result = await controller.AdjustCost(id, price);

            Assert.IsNotNull(result);
            var objectResult = result as BadRequestResult;

            Assert.IsNotNull(objectResult);
        }
Example #11
0
        public async Task OrderRequest_NegativeIdPassed_ReturnNotFound()
        {
            var          context    = new MockStockContext(Data.ProductStocks(), Data.Prices(), null);
            var          controller = new StockController(context, null);
            const int    id         = NegativeId;
            const string supplier   = "undercutters";

            var result = await controller.OrderRequest(id, supplier);

            Assert.IsNotNull(result);
            var objectResult = result as NotFoundResult;

            Assert.IsNotNull(objectResult);
        }
Example #12
0
        public async Task VendorProducts_ValidSupplierPassed_ReturnAllSupplierProducts()
        {
            var expectedHttpResponse = Data.VendorProducts();
            var expectedJson         = JsonConvert.SerializeObject(expectedHttpResponse);
            var expectedResponse     = new HttpResponseMessage
            {
                StatusCode = System.Net.HttpStatusCode.OK,
                Content    = new StringContent(expectedJson,
                                               Encoding.UTF8,
                                               "application/json")
            };
            var httpClient = new HttpClient(CreateHttpMock(expectedResponse).Object);
            var context    = new MockStockContext(Data.ProductStocks(), Data.Prices(), null);
            var controller = new StockController(context, null)
            {
                HttpClient = httpClient
            };
            const string supplier = "undercutters";

            var expected = Data.VendorProducts();
            var result   = await controller.VendorProducts(supplier);

            Assert.IsNotNull(result);
            var objectResult = result as ViewResult;

            Assert.IsNotNull(objectResult);
            var viewResult = objectResult.Model as VendorProductIndexModel;

            Assert.IsNotNull(viewResult);
            var productsResult = viewResult.Products.ToList();

            Assert.IsNotNull(productsResult);

            Assert.AreEqual(expected.Count, productsResult.Count);
            for (int i = 0; i < expected.Count; i++)
            {
                Assert.AreEqual(expected[i].Id, productsResult[i].Id);
                Assert.AreEqual(expected[i].BrandId, productsResult[i].BrandId);
                Assert.AreEqual(expected[i].BrandName, productsResult[i].BrandName);
                Assert.AreEqual(expected[i].CategoryId, productsResult[i].CategoryId);
                Assert.AreEqual(expected[i].CategoryName, productsResult[i].CategoryName);
                Assert.AreEqual(expected[i].Description, productsResult[i].Description);
                Assert.AreEqual(expected[i].Ean, productsResult[i].Ean);
                Assert.AreEqual(expected[i].ExpectedRestock, productsResult[i].ExpectedRestock);
                Assert.AreEqual(expected[i].InStock, productsResult[i].InStock);
                Assert.AreEqual(expected[i].Name, productsResult[i].Name);
                Assert.AreEqual(expected[i].Price, productsResult[i].Price);
            }
        }
Example #13
0
        public async Task GetAll_EmptyModel_EmptyListReturned()
        {
            var context    = new MockStockContext(new List <ProductStock>(), new List <Price>(), null);
            var controller = new StockController(context, null);

            var result = await controller.ProductStocks();

            Assert.IsNotNull(result);
            var objectResult = result.Result as OkObjectResult;

            Assert.IsNotNull(objectResult);
            var enumerableResult = objectResult.Value as IEnumerable <ProductStockDto>;

            Assert.IsNotNull(enumerableResult);
            var listResult = enumerableResult.ToList();

            Assert.AreEqual(listResult.Count, 0);
        }
Example #14
0
        public async Task GETAdjustCost_InvalidIdPassed_NotFoundReturned()
        {
            var context    = new MockStockContext(Data.ProductStocks(), Data.Prices(), null);
            var controller = new StockController(context, null);

            var resultOutOfBounds = await controller.AdjustCost(OutOfBoundsId);

            var resultNegative = await controller.AdjustCost(NegativeId);

            Assert.IsNotNull(resultOutOfBounds);
            var objectResultOutOfBounds = resultOutOfBounds.Result as NotFoundResult;

            Assert.IsNotNull(objectResultOutOfBounds);

            Assert.IsNotNull(resultNegative);
            var objectResultNegative = resultNegative.Result as NotFoundResult;

            Assert.IsNotNull(objectResultNegative);
        }
        public void ShouldHaveBuyWhenTotalAccountIs2000([Values(2.85, 12.45, 2.95)] decimal preco, [Range(120, 120, 120)] int qte)
        {
            var context        = MockStockContext.GenerateContext(InternalUserId, 2000);
            var firstOperation = context.Operations.FirstOrDefault();

            firstOperation.CurrentPrice = preco;
            firstOperation.Quantity     = qte;

            var     user  = context.Users.FirstOrDefault(f => f.Id == InternalUserId);
            decimal total = context.Operations.Where(f => f.OperationType == OperationTypeEnum.Buy).ToList().Sum(f => f.TotalValue);

            _mockUserService.Setup(f => f.CanBuy(It.IsAny <User>(), total)).Returns(true);
            var canBuy = _mockUserService.Object.CanBuy(user, total);

            var result = service.CanBuy(user, total);

            Assert.IsTrue(result);
            Assert.AreEqual(canBuy, result);
        }
        public void ShouldNotBuyWhenTotalAccountIsLtTotalBalance(int totalBalance)
        {
            List <Acao> acoes = new List <Acao>()
            {
                new Acao()
                {
                    Quantity = 120, Value = 2.85M, Operation = OperationTypeEnum.Buy
                },
                new Acao()
                {
                    Quantity = 43, Value = 2.85M, Operation = OperationTypeEnum.Buy
                },
                new Acao()
                {
                    Quantity = 18, Value = 2.85M, Operation = OperationTypeEnum.Buy
                },
                new Acao()
                {
                    Quantity = 25, Value = 2.85M, Operation = OperationTypeEnum.Buy
                },
                new Acao()
                {
                    Quantity = 32, Value = 2.85M, Operation = OperationTypeEnum.Buy
                },
                new Acao()
                {
                    Quantity = 44, Value = 2.85M, Operation = OperationTypeEnum.Buy
                },
            };

            var     context = MockStockContext.GenerateContext(InternalUserId, totalBalance, acoes);
            var     user    = context.Users.FirstOrDefault(f => f.Id == InternalUserId);
            decimal total   = context.Operations.Where(f => f.OperationType == OperationTypeEnum.Buy).ToList().Sum(f => f.TotalValue);

            _mockUserService.Setup(f => f.CanBuy(It.IsAny <User>(), total)).Returns(false);
            var canBuy = _mockUserService.Object.CanBuy(user, total);

            var verif  = new Mock <IUserService>().Object;
            var result = verif.CanBuy(user, total);

            Assert.IsFalse(result);
            Assert.AreEqual(canBuy, result);
        }
        public void ShouldNotSellWhenHaveMinusTradesThanRequested()
        {
            List <Acao> acoes = new List <Acao>()
            {
                new Acao()
                {
                    Quantity = 120, Value = 2.85M, Operation = OperationTypeEnum.Sell
                },
                new Acao()
                {
                    Quantity = 43, Value = 2.85M, Operation = OperationTypeEnum.Sell
                },
                new Acao()
                {
                    Quantity = 18, Value = 2.85M, Operation = OperationTypeEnum.Sell
                },
                new Acao()
                {
                    Quantity = 25, Value = 2.85M, Operation = OperationTypeEnum.Sell
                },
                new Acao()
                {
                    Quantity = 32, Value = 2.85M, Operation = OperationTypeEnum.Sell
                },
                new Acao()
                {
                    Quantity = 44, Value = 2.85M, Operation = OperationTypeEnum.Sell
                },
            };

            int quantity = 200;
            var context  = MockStockContext.GenerateContext(InternalUserId, 2000);
            var user     = context.Users.FirstOrDefault(f => f.Id == InternalUserId);

            _mockUserService.Setup(f => f.CanSell(It.IsAny <User>(), It.IsAny <string>(), quantity)).Returns(false);

            var canBuy = _mockUserService.Object.CanSell(user, "VAL3", quantity);
            var result = service.CanSell(user, "VAL3", quantity);

            Assert.IsFalse(result);
            Assert.AreEqual(canBuy, result);
        }
Example #18
0
        public async Task POSTAdjustCost_OutOfBoundsAndNegativeIdPassed_ReturnNotFound()
        {
            var          context    = new MockStockContext(Data.ProductStocks(), Data.Prices(), null);
            var          controller = new StockController(context, null);
            const double price      = 4.32;

            var resultOutOfBounds = await controller.AdjustCost(OutOfBoundsId, price);

            var resultNegative = await controller.AdjustCost(NegativeId, price);

            Assert.IsNotNull(resultOutOfBounds);
            var objectResultOutOfBounds = resultOutOfBounds as NotFoundResult;

            Assert.IsNotNull(objectResultOutOfBounds);

            Assert.IsNotNull(resultNegative);
            var objectResultNegative = resultNegative as NotFoundResult;

            Assert.IsNotNull(objectResultNegative);
        }
Example #19
0
        public async Task GetDetails_ValidIdPassed_CorrectAndValidObjectReturned()
        {
            var       context    = new MockStockContext(Data.ProductStocks(), Data.Prices(), null);
            var       controller = new StockController(context, null);
            const int id         = 2;

            var result = await controller.Details(id);

            Assert.IsNotNull(result);
            var objectResult = result.Result as OkObjectResult;

            Assert.IsNotNull(objectResult);
            var returnedResult = objectResult.Value as ProductStockDetailsDto;

            Assert.IsNotNull(returnedResult);

            Assert.AreEqual(returnedResult.ProductID, Data.ProductStocks()[id - 1].ProductId);
            Assert.AreEqual(returnedResult.Price, Data.Prices().FirstOrDefault(p => p.Id == Data.ProductStocks()[id - 1].PriceId)?.ProductPrice);
            Assert.AreEqual(returnedResult.Stock, Data.ProductStocks()[id - 1].Stock);
        }
Example #20
0
        public async Task OrderRequest_OutOfBoundsIdPassed_ReturnNotFound()
        {
            const int    id               = 10000;
            const string supplier         = "undercutters";
            var          expectedResponse = new HttpResponseMessage
            {
                StatusCode = System.Net.HttpStatusCode.NotFound
            };
            var httpClient = new HttpClient(CreateHttpMock(expectedResponse).Object);
            var context    = new MockStockContext(Data.ProductStocks(), Data.Prices(), null);
            var controller = new StockController(context, null)
            {
                HttpClient = httpClient
            };

            var result = await controller.OrderRequest(id, supplier);

            Assert.IsNotNull(result);
            var objectResult = result as NotFoundResult;

            Assert.IsNotNull(objectResult);
        }
Example #21
0
        public void GETAdjustCost_ValidIdPassed_CorrectDataReturnedToView()
        {
            const int id = 2;
            var       expectedHttpResponse = new ProductDto {
                Id = id, Name = "NameTest", Description = "DescriptionTest"
            };
            var expectedJson     = JsonConvert.SerializeObject(expectedHttpResponse);
            var expectedResponse = new HttpResponseMessage
            {
                StatusCode = System.Net.HttpStatusCode.OK,
                Content    = new StringContent(expectedJson,
                                               Encoding.UTF8,
                                               "application/json")
            };
            var httpClient = new HttpClient(CreateHttpMock(expectedResponse).Object);
            var context    = new MockStockContext(Data.ProductStocks(), Data.Prices(), null);
            var controller = new StockController(context, null)
            {
                HttpClient = httpClient
            };

            var expectedResult = Data.ProductStockDtos().FirstOrDefault(psd => psd.ProductStock.Id == id);
            var result         = controller.AdjustCost(id);

            Assert.IsNotNull(result);
            var adjustResult = result.Result.Result as ViewResult;

            Assert.IsNotNull(adjustResult);
            var adjustProductStock = adjustResult.Model as AdjustCostViewModel;

            Assert.IsNotNull(adjustProductStock);

            Assert.AreEqual(expectedResult.ProductStock.Id, adjustProductStock.Id);
            Assert.AreEqual(expectedResult.Price.ProductPrice, adjustProductStock.Cost);
            Assert.AreEqual(expectedHttpResponse.Name, adjustProductStock.Name);
            Assert.AreEqual(expectedHttpResponse.Description, adjustProductStock.Description);
        }
Example #22
0
        public async Task OrderRequest_ValidIdAndSupplierPassed_ReturnCorrectAndValidModel()
        {
            const int    id                   = 2;
            const string supplier             = "undercutters";
            var          expectedHttpResponse = Data.VendorProducts().FirstOrDefault(vp => vp.Id == id);
            var          expectedJson         = JsonConvert.SerializeObject(expectedHttpResponse);
            var          expectedResponse     = new HttpResponseMessage
            {
                StatusCode = System.Net.HttpStatusCode.OK,
                Content    = new StringContent(expectedJson,
                                               Encoding.UTF8,
                                               "application/json")
            };
            var httpClient = new HttpClient(CreateHttpMock(expectedResponse).Object);
            var context    = new MockStockContext(Data.ProductStocks(), Data.Prices(), null);
            var controller = new StockController(context, null)
            {
                HttpClient = httpClient
            };

            var expected = expectedHttpResponse;
            var result   = await controller.OrderRequest(id, supplier);

            Assert.IsNotNull(result);
            var objectResult = result as ViewResult;

            Assert.IsNotNull(objectResult);
            var viewResult = objectResult.Model as OrderRequestModel;

            Assert.IsNotNull(viewResult);

            Assert.AreEqual(id, viewResult.Id);
            Assert.AreEqual(expected.Name, viewResult.Name);
            Assert.AreEqual(expected.Id, viewResult.Id);
            Assert.AreEqual(supplier, viewResult.Supplier);
            Assert.AreEqual(expected.Description, viewResult.Description);
        }