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 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 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 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 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 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);
                //}
            }
        }