private async Task DeleteItemsAsync(IEnumerable <ReceiptModel> models)
 {
     foreach (var model in models)
     {
         await ReceiptsService.DeleteReceiptAsync(model);
     }
 }
 private async Task <IList <ReceiptModel> > GetItemsAsync()
 {
     if (!ViewModelArgs.IsEmpty)
     {
         DataRequest <Data.Receipt> request = BuildDataRequest();
         return(await ReceiptsService.GetReceiptsAsync(request));
     }
     return(new List <ReceiptModel>());
 }
        public async Task CreateReceiptAsync_PassWrongProdcutName_ExpectedInvaldParameter()
        {
            //Arrange
            var service = new ReceiptsService(null, null, null);

            //Act
            Func <Task> task = async() => await service.CreateReceiptAsync(new string[] { new string('*', 51) });

            //Assert
            await Assert.ThrowsAsync <InvalidParameterException>(task);
        }
        public async Task GetAllReceiptsAsync_PassWrongCount_ExpectedInvaldParameter()
        {
            //Arrange
            var service = new ReceiptsService(null, null, null);

            //Act
            Func <Task> task = async() => await service.GetAllAsync <ReceiptViewModel>(-5);

            //Assert
            await Assert.ThrowsAsync <InvalidParameterException>(task);
        }
        public async Task CreateReceiptAsync_PassEmptyArray_ExpectedInvaldParameter()
        {
            //Arrange
            var service = new ReceiptsService(null, null, null);

            //Act
            Func <Task> task = async() => await service.CreateReceiptAsync(Array.Empty <string>());

            //Assert
            await Assert.ThrowsAsync <InvalidParameterException>(task);
        }
        public async Task GetAllReceiptsAsync_PassCorrectCount_ExpectedCorrectNumber()
        {
            //Arrange
            var receipts = new List <Receipt>
            {
                new Receipt
                {
                    Id                     = 1,
                    TotalPrice             = 50,
                    Discount               = 0,
                    TotalPriceWithDiscount = 50,
                    Products               = new List <ProductReceipt>
                    {
                        new ProductReceipt
                        {
                            Product = new Product
                            {
                                Id    = 1,
                                Name  = "apple",
                                Price = 50,
                            }
                        }
                    }
                }, new Receipt(), new Receipt(), new Receipt(), new Receipt(), new Receipt()
            }.AsQueryable();

            var receiptMock = receipts.BuildMock();

            this.repositoryMock
            .Setup(s => s.AllAsNoTracking())
            .Returns(receiptMock.Object);

            AutoMapperConfig.RegisterMappings(Assembly.Load(GlobalConstants.AutoMapperAssemblyName));

            var service = new ReceiptsService(this.repositoryMock.Object, null, null);

            //Act
            var response = await service.GetAllAsync <ReceiptViewModel>(5);

            var model = response.FirstOrDefault();

            //Assert
            Assert.True(response.Count() == 5);
            Assert.IsType <ReceiptViewModel>(model);
            Assert.True(model.Products.Any());
            Assert.True(model.Id == 1);
            Assert.True(model.TotalPrice == "50 clouds");
            Assert.True(model.Discount == "0 clouds");
            Assert.True(model.TotalPriceWithDiscount == "50 clouds");
            Assert.True(model.Products.FirstOrDefault().Name == "apple");
            Assert.True(model.Products.FirstOrDefault().Price == "50 clouds");
        }
        public void TestAddReceipt_WithTestData_ShoudAddNewPackageInToDb()
        {
            var factory  = new PandaDbContextFactory();
            var context  = factory.CreatePandaDbContext();
            var services = new ReceiptsService(context);

            services.AddReceipt(new Receipt());


            var actualData = context.Receipts.Count();

            Assert.True(actualData == 1, "PackagesService AddPackage() method does not work porperly!");
        }
        public async Task CreateReceiptAsync_PassCorrectValues_ExpectedCorrectModel()
        {
            //Arrange
            Product product = new Product
            {
                Id    = 1,
                Name  = "apple",
                Price = 50,
            };

            IEnumerable <Deal> deals = new List <Deal>
            {
                new Deal
                {
                    Name = "2 for 3",
                },
                new Deal
                {
                    Name = "buy 1 get 1 half price",
                },
            };

            this.productsServiceMock
            .Setup(s => s.GetByNameAsync(It.IsAny <string>()))
            .Returns(Task.FromResult(product));

            this.dealsServiceMock
            .Setup(s => s.GetAllAsync(It.IsAny <int>()))
            .Returns(Task.FromResult(deals));

            AutoMapperConfig.RegisterMappings(Assembly.Load(GlobalConstants.AutoMapperAssemblyName));

            var service = new ReceiptsService(this.repositoryMock.Object, this.productsServiceMock.Object, this.dealsServiceMock.Object);

            //Act
            var response = await service.CreateReceiptAsync(new string[] { "apple" });

            //Assert
            Assert.IsType <ReceiptViewModel>(response);
            Assert.True(response.Products.Any());
            Assert.True(response.TotalPrice == "50 clouds");
            Assert.True(response.Discount == "0 clouds");
            Assert.True(response.TotalPriceWithDiscount == "50 clouds");
            Assert.True(response.Products.FirstOrDefault().Name == "apple");
            Assert.True(response.Products.FirstOrDefault().Price == "50 clouds");
        }
        public async Task CreateReceiptAsync_PassNonExistentProductName_ExpectedObjectNotFound()
        {
            //Arrange
            Product product = null;

            this.productsServiceMock
            .Setup(s => s.GetByNameAsync(It.IsAny <string>()))
            .Returns(Task.FromResult(product));

            var service = new ReceiptsService(null, this.productsServiceMock.Object, null);

            //Act
            Func <Task> task = async() => await service.CreateReceiptAsync(new string[] { "apple" });

            //Assert
            await Assert.ThrowsAsync <ObjectNotFoundException>(task);
        }
        public void GetAllReceiptsWithRecipientAndPackage_WithTestData_ShoudGetAllReceiptsWithRecipientAndPackage()
        {
            var factory  = new PandaDbContextFactory();
            var context  = factory.CreatePandaDbContext();
            var services = new ReceiptsService(context);

            var expectedData = context.Receipts
                               .Include(receipt => receipt.Package)
                               .Include(receipt => receipt.Recipient)
                               .ToList();

            var actualData = services.GetAllReceiptsWithRecipientAndPackage();


            foreach (var receipt in actualData)
            {
                Assert.Contains(expectedData, x => x.Package.Id == receipt.Package.Id &&
                                x.Recipient.Id == receipt.Recipient.Id);
            }
        }
        public async Task GetReceiptByIdAsync_PassWrongId_ExpectedObjectNotFound()
        {
            //Arrange
            var receipts = new List <Receipt>().AsQueryable();

            var receiptMock = receipts.BuildMock();

            repositoryMock
            .Setup(s => s.AllAsNoTracking())
            .Returns(receiptMock.Object);

            AutoMapperConfig.RegisterMappings(Assembly.Load(GlobalConstants.AutoMapperAssemblyName));

            var service = new ReceiptsService(this.repositoryMock.Object, null, null);

            //Act
            Func <Task> task = async() => await service.GetByIdAsync <ReceiptViewModel>(1);

            //Assert
            await Assert.ThrowsAsync <ObjectNotFoundException>(task);
        }
        public void TestGetAllReceiptsWithRecipient_WithTestData_ShoudGetAllReceiptsWithRecipient()
        {
            var factory  = new PandaDbContextFactory();
            var context  = factory.CreatePandaDbContext();
            var services = new ReceiptsService(context);

            SeedDbWithReceipts(context);
            SeedDbWithRecipients(context);
            MakeConnectionBetweenTheEntities(context);

            var actualData   = services.GetAllReceiptsWithRecipient().ToList();
            var expectedData = context.Receipts
                               .Include(receipt => receipt.Recipient)
                               .ToList();

            foreach (var receipt in expectedData)
            {
                Assert.Contains(actualData, x =>
                                x.Recipient.UserName == receipt.Recipient.UserName &&
                                x.Recipient.Email == x.Recipient.Email);
            }
        }