public async Task <IActionResult> MakePurchase([FromBody] object purchaseData)
        {
            if (Account.isLoggedIn(User))
            {
                Dictionary <string, string> dictPurchaseData = JsonConvert.DeserializeObject <Dictionary <string, string> >(purchaseData.ToString());

                string reference = "Purchase of " + dictPurchaseData["amount"] + " parts of jewelry " + dictPurchaseData["jewelryName"] + ". Total: " + dictPurchaseData["price"] + "$";

                Purchase purchase = new Purchase {
                    Amount = double.Parse(dictPurchaseData["amount"]), Date = DateTime.Now, JewelryId = int.Parse(dictPurchaseData["jewelryId"]), UserId = Account.GetCurrAccountId(User), Reference = reference
                };

                PurchasesController newPurchase = new PurchasesController(new ColmanInternetiotContext());

                try
                {
                    string country = await countrycode();

                    purchase.Country = country;
                    newPurchase.Create(purchase);
                }
                catch
                {
                    return(NotFound());
                }

                return(NoContent());
            }
            else
            {
                return(NotFound());
            }
        }
Ejemplo n.º 2
0
        public PurchasesControllerTests()
        {
            var dbName  = $"Purchases{Guid.NewGuid().ToString()}";
            var options = new DbContextOptionsBuilder <ApiDbContext>().UseInMemoryDatabase(databaseName: dbName).Options;

            _context = new ApiDbContext(options);
            _context.Items.Add(new Item
            {
                Id             = _itemId,
                Name           = "Sulfuras, Hand of Ragnaros",
                Price          = 10,
                AvailableUnits = 50
            });
            _context.SaveChanges();

            _controller = new PurchasesController(new ShopService(_context));
            _controller.ControllerContext = new ControllerContext
            {
                HttpContext = new DefaultHttpContext
                {
                    User = new ClaimsPrincipal(new ClaimsIdentity(new Claim[]
                    {
                        new Claim("sub", "testuser")
                    }))
                }
            };
        }
        public async Task GetPurchaseTest_Valid()
        {
            // Arrange
            var repo = new FakePurchaseRepo(TestData.Purchases());
            var productRepo = new FakeProductService(TestData.Products());
            using (var controller = new PurchasesController(repo, productRepo, null, null))
            {
                var purchaseId = 1;

                // Act
                var result = await controller.Details(purchaseId);

                // Assert
                Assert.IsNotNull(result);
                var objResult = result.Result as OkObjectResult;
                Assert.IsNotNull(objResult);
                var retResult = objResult.Value as PurchaseDetailsDto;
                Assert.IsNotNull(retResult);

                Assert.AreEqual(TestData.Purchases()[purchaseId - 1].ProductId, retResult.Id);
                Assert.AreEqual(TestData.Purchases()[purchaseId - 1].ProductId, retResult.ProductId);
                Assert.AreEqual(TestData.Purchases()[purchaseId - 1].Qty, retResult.Qty);
                Assert.AreEqual(TestData.Purchases()[purchaseId - 1].AddressId, retResult.AddressId);
                Assert.AreEqual(TestData.Purchases()[purchaseId - 1].AccountId, retResult.AccountId);
                Assert.AreEqual(TestData.Purchases()[purchaseId - 1].OrderStatus, retResult.OrderStatus);
                Assert.AreEqual(TestData.Purchases()[purchaseId - 1].TimeStamp, retResult.TimeStamp);
            }
        }
        public async void Detail_ReturnNotFound(int?id)
        {
            // Arrange

            var mockRepo     = new Mock <IAsyncRepository <Purchase> >();
            var mockMediator = new Mock <IMediator>();

            mockRepo.Setup(repo => repo.GetByIdAsync(id)).ReturnsAsync(GetPurchases().Find(i => i.PurchId == id));

            mockMediator
            .Setup(m => m.Send(It.IsAny <GetPurchaseCheck>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(new PurchaseCheckViewModel()
            {
                Purchase = GetPurchases().Find(i => i.PurchId == id)
            })
            .Verifiable();

            var controller = new PurchasesController(mockRepo.Object, mockMediator.Object);

            // Act

            var result = await controller.Details(id);

            // Assert

            Assert.IsType <NotFoundResult>(result);
        }
        public Dictionary <string, double> GetProfit(int month, int year, int numOfMonthes)
        {
            string[] lstMonthes = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };

            Dictionary <string, double> profitPerMonth = new Dictionary <string, double>();

            // Start with the month and year given as input
            DateTime dt = new DateTime(year, month, 1);

            PurchasesController purchases = new PurchasesController(new ColmanInternetiotContext());

            // For the last "numOfMonthes" before the month given as input
            for (int i = (numOfMonthes - 1); i >= 0; i--)
            {
                // Get the current month in the loop
                DateTime currDate = dt.AddMonths(-i);

                // Get the monthly profit of the current month
                double monthlyProfit = purchases.GetMonthlyProfit(currDate.Month, currDate.Year);

                // Build the display name of current month and year in the loop
                string strMonthYear = lstMonthes[currDate.Month - 1] + " " + currDate.Year;

                // Set the value of the profit of the current month
                profitPerMonth[strMonthYear] = monthlyProfit;
            }

            // Return the dictionary
            return(profitPerMonth);
        }
Ejemplo n.º 6
0
        public PurchaseControllerTest()
        {
            _exchangeController = A.Fake <ExchangeController>();
            _purchaseService    = A.Fake <PurchaseService>();
            _logger             = A.Fake <ILoggerManager>();
            _sut = new PurchasesController(_purchaseService, _exchangeController, _logger);

            _fixture = new Fixture();
        }
 public PurchasesControllerTest()
 {
     _purchaseDAO.Setup(f => f.getPurchase(1, 1))
     .Returns(new Purchase()
     {
         id   = 1, userId = 1, name = "purchase_name",
         cost = 1337, purchaseTime = new DateTime(2011, 11, 11, 11, 11, 11)
     });
     _purchaseDAO.Setup(f => f.getPurchase(1, 0))
     .Returns((Purchase)null);
     _pController = new PurchasesController(_purchaseDAO.Object, _userDAO.Object);
 }
        public void isShopRequestValidReturnsTrue()
        {
            var dbMock     = new Mock <IPurchaseRepository>();
            var controller = new PurchasesController(dbMock.Object);
            var request    = new ShopAdminRequest()
            {
                Password = "******",
                ShopId   = 3
            };

            var result = controller.isShopRequestValid(request);

            Assert.True(result);
        }
Ejemplo n.º 9
0
        public async Task UserCanViewAllPurchasesOnDate(int purchasesToAdd)
        {
            var user = Helper.GenerateRandomUser();
            var date = DateTime.Now;


            var purchases = new List <Purchase>();

            for (int i = 0; i < purchasesToAdd; i++)
            {
                purchases.Add(new Purchase {
                    UserId = user.UserId, Date = date
                });
            }

            Mock <IPurchasesRepository> mock    = new();
            PurchasesService            service = new(mock.Object);

            mock.Setup(x => x.AllForUserOnDateAsync(user.UserId, date))
            .ReturnsAsync(purchases.Where(x => x.Date == date).ToList());

            var controller = new PurchasesController(service)
            {
                ControllerContext = new ControllerContext
                {
                    HttpContext = new DefaultHttpContext
                    {
                        User = new ClaimsPrincipal(new ClaimsIdentity(new[]
                        {
                            new Claim("id", user.UserId.ToString())
                        }))
                    }
                }
            };

            var response = await controller.GetAllOnDate(date);

            if (purchasesToAdd > 0)
            {
                Assert.IsType <OkObjectResult>(response.Result);
                var actual = (response.Result as OkObjectResult)?.Value as List <Purchase>;
                Assert.Equal(purchases.Count, actual?.Count);
            }
            else
            {
                Assert.IsType <NoContentResult>(response.Result);
            }
        }
        public async Task GetOrderHistory_OutOfBounds()
        {
            // Arrange
            var repo = new FakePurchaseRepo(TestData.Purchases());
            var productRepo = new FakeProductService(TestData.Products());
            using (var controller = new PurchasesController(repo, productRepo, null, null))
            {
                var accId = -6;

                // Act
                var result = await controller.OrderHistory(accId);

                // Assert
                Assert.IsInstanceOfType(result.Result, typeof(BadRequestResult));
            }
        }
        public async Task GetPurchaseDetailsTest_OutOfBoundsID()
        {
            // Arrange
            var repo = new FakePurchaseRepo(TestData.Purchases());
            var productRepo = new FakeProductService(TestData.Products());
            using (var controller = new PurchasesController(repo, productRepo, null, null))
            {
                var purchaseId = -6;

                //Act
                var result = await controller.Details(purchaseId);

                // Assert
                Assert.IsInstanceOfType(result.Result, typeof(NotFoundResult));
            }
        }
        public async Task GetAll_Success()
        {
            // Arrange
            var repo = new FakePurchaseRepo(TestData.Purchases());
            var productRepo = new FakeProductService(TestData.Products());
            using (var controller = new PurchasesController(repo, productRepo, null, null))
            {
                // Act
                var result = await controller.GetAll();

                // Assert
                Assert.IsInstanceOfType(result.Result, typeof(OkObjectResult));
                var objResult = result.Result as OkObjectResult;
                Assert.IsNotNull(objResult);
            }
        }
        public async Task DeletePurchase_OutOfBounds()
        {
            // Arrange
            var repo = new FakePurchaseRepo(TestData.Purchases());
            var productRepo = new FakeProductService(TestData.Products());
            using (var controller = new PurchasesController(repo, productRepo, null, null))
            {
                var purchaseId = -6;

                // Act
                var result = await controller.DeleteConfirmed(purchaseId);

                // Assert
                Assert.IsInstanceOfType(result, typeof(BadRequestResult));
            }
        }
        public void GetChecksReturns403()
        {
            var request = new ShopAdminRequest();
            var dbMock  = new Mock <IPurchaseRepository>();

            dbMock.Setup(f => f.isShopPasswordRight(request)).Returns(false);

            var controllerMock = new Mock <PurchasesController>(dbMock.Object);

            controllerMock.Setup(f => f.isShopRequestValid(request)).Returns(true);
            PurchasesController controller = controllerMock.Object;

            var result = controller.GetChecks(request);

            Assert.Equal(403, result.StatusCode);
        }
        public async Task DeletePurchase_Success()
        {
            // Arrange
            var repo = new FakePurchaseRepo(TestData.Purchases());
            var productRepo = new FakeProductService(TestData.Products());
            using (var controller = new PurchasesController(repo, productRepo, null, null))
            {
                var purchaseId = 1;

                // Act
                await controller.DeleteConfirmed(purchaseId);

                // Assert
                var purchase = await controller.Details(purchaseId);
                Assert.IsInstanceOfType(purchase.Result, typeof(NotFoundResult));
            }
        }
        public void MakePurchaseReturnsCode409()
        {
            CheckDTO returnedCheck = null;
            var      request       = new PurchaseRequest();
            var      dbMock        = new Mock <IPurchaseRepository>();

            dbMock.Setup(f => f.isUserAndShopExists(request)).Returns(true);
            dbMock.Setup(f => f.MakePurchase(request)).Returns(returnedCheck);

            var controllerMock = new Mock <PurchasesController>(dbMock.Object);

            controllerMock.Setup(f => f.isPurchaseRequestValid(request)).Returns(true);
            PurchasesController controller = controllerMock.Object;

            var result = controller.MakePurchase(request);

            Assert.Equal(409, result.StatusCode);
        }
        public void isPurchaseRequestValidReturnsTrue()
        {
            var dbMock     = new Mock <IPurchaseRepository>();
            var controller = new PurchasesController(dbMock.Object);
            var request    = new PurchaseRequest()
            {
                UserId        = 1,
                ShopId        = 2,
                PaymentMethod = "card",
                Products      = new System.Collections.Generic.List <ProductDTO>()
                {
                    new ProductDTO()
                }
            };

            var result = controller.isPurchaseRequestValid(request);

            Assert.True(result);
        }
        public async Task GetOrderHistoryTest_Success()
        {
            // Arrange
            var repo = new FakePurchaseRepo(TestData.Purchases());
            var productRepo = new FakeProductService(TestData.Products());
            using (var controller = new PurchasesController(repo, productRepo, null, null))
            {
                var accId = 1;

                // Act
                var result = await controller.OrderHistory(accId);

                // Assert
                Assert.IsNotNull(result);
                var objResult = result.Result as OkObjectResult;
                Assert.IsNotNull(objResult);
                var retResult = objResult.Value as List<Purchase>;
                Assert.IsNotNull(retResult);
                //foreach (Purchase purchase in retResult)
                //{
                //    Assert.AreEqual(await repo.GetPurchase(purchase.Id), purchase);
                //}
            }
        }