public async Task RestoreAsync_WithCategoryId_ShouldRestoreCategory()
        {
            // Arrange
            FitStoreDbContext database = this.Database;

            DatabaseHelper.SeedData(database);

            Category category = database.Categories.Find(firstDeletedCategoryId);

            foreach (Subcategory subcategory in category.Subcategories)
            {
                foreach (Supplement supplement in subcategory.Supplements)
                {
                    supplement.Manufacturer.IsDeleted = true;
                    supplement.Manufacturer.IsDeleted = false;

                    foreach (Review review in supplement.Reviews)
                    {
                        review.IsDeleted.Should().Be(true);
                    }

                    foreach (Comment comment in supplement.Comments)
                    {
                        comment.IsDeleted.Should().Be(true);
                    }
                }

                database.SaveChanges();
            }

            IManagerCategoryService managerCategoryService = new ManagerCategoryService(database);

            // Act
            await managerCategoryService.RestoreAsync(firstDeletedCategoryId);

            // Assert
            category.IsDeleted.Should().Be(false);

            foreach (Subcategory subcategory in category.Subcategories)
            {
                subcategory.IsDeleted.Should().Be(false);

                foreach (Supplement supplement in subcategory.Supplements)
                {
                    supplement.IsDeleted.Should().Be(false);

                    foreach (Review review in supplement.Reviews)
                    {
                        review.IsDeleted.Should().Be(false);
                    }

                    foreach (Comment comment in supplement.Comments)
                    {
                        comment.IsDeleted.Should().Be(false);
                    }
                }
            }
        }
        public async Task IsCategoryModified_WithCategoryIdAndName_ShouldReturnFalse()
        {
            // Arrange
            FitStoreDbContext database = this.Database;

            DatabaseHelper.SeedData(database);

            IManagerCategoryService managerCategoryService = new ManagerCategoryService(database);

            // Act
            bool result = await managerCategoryService.IsCategoryModified(firstNotDeletedCategoryId, firstNotDeletedCategoryName);

            // Assert
            result.Should().Be(false);
        }
        public async Task GetEditModelAsync_WithCategoryId_ShouldReturnValidServiceModel()
        {
            // Arrange
            FitStoreDbContext database = this.Database;

            DatabaseHelper.SeedData(database);

            IManagerCategoryService managerCategoryService = new ManagerCategoryService(database);

            // Act
            CategoryBasicServiceModel result = await managerCategoryService.GetEditModelAsync(firstNotDeletedCategoryId);

            // Assert
            result.Id.Should().Be(firstNotDeletedCategoryId);
            result.Name.Should().Be(firstNotDeletedCategoryName);
        }
        public async Task CreateAsync_WithName_ShouldCreateNewCategory()
        {
            // Arrange
            FitStoreDbContext database = this.Database;

            IManagerCategoryService managerCategoryService = new ManagerCategoryService(database);

            // Act
            await managerCategoryService.CreateAsync(categoryName);

            // Assert
            Category category = database.Categories.Find(1);

            category.Id.Should().Be(1);
            category.Name.Should().Be(categoryName);
        }
        public async Task EditAsync_WithCategoryIdAndName_ShouldEditCategory()
        {
            // Arrange
            FitStoreDbContext database = this.Database;

            DatabaseHelper.SeedData(database);

            IManagerCategoryService managerCategoryService = new ManagerCategoryService(database);

            // Act
            await managerCategoryService.EditAsync(firstNotDeletedCategoryId, categoryName);

            // Assert
            Category category = database.Categories.Find(firstNotDeletedCategoryId);

            category.Id.Should().Be(firstNotDeletedCategoryId);
            category.Name.Should().Be(categoryName);
        }
        public async Task GetAllPagedListingAsync_WithSearchTokenAndIsDeletedTrue_ShouldReturnPagedDeletedCategories()
        {
            // Arrange
            FitStoreDbContext database = this.Database;

            DatabaseHelper.SeedData(database);

            IManagerCategoryService managerCategoryService = new ManagerCategoryService(database);

            // Act
            IEnumerable <CategoryAdvancedServiceModel> result = await managerCategoryService.GetAllPagedListingAsync(true, "category", page);

            // Assert
            result.Count().Should().Be(3);
            result.First().Id.Should().Be(firstDeletedCategoryId);
            result.First().Name.Should().Be(firstDeletedCategoryName);
            result.Last().Id.Should().Be(lastDeletedCategoryId);
            result.Last().Name.Should().Be(lastDeletedCategoryName);
        }
        public async Task GetAllBasicListingWithAnySubcategoriesAsync_WithIsDeletedTrue_ShouldReturnAllDeletedCategories()
        {
            // Arrange
            FitStoreDbContext database = this.Database;

            DatabaseHelper.SeedData(database);

            IManagerCategoryService managerCategoryService = new ManagerCategoryService(database);

            // Act
            IEnumerable <CategoryBasicServiceModel> result = await managerCategoryService.GetAllBasicListingWithAnySubcategoriesAsync(true);

            // Assert
            result.Count().Should().Be(5);
            result.First().Id.Should().Be(firstDeletedCategoryId);
            result.First().Name.Should().Be(firstDeletedCategoryName);
            result.Last().Id.Should().Be(8);
            result.Last().Name.Should().Be("Category 8");
        }
        public async Task TotalCountAsync_WithSearchTokenAndIsDeletedFalse_ShouldReturnCategoriesCount()
        {
            // Arrange
            FitStoreDbContext database = this.Database;

            DatabaseHelper.SeedData(database);

            database.Categories.Add(new Category {
                Id = 100, Name = otherName
            });
            database.SaveChanges();

            IManagerCategoryService managerCategoryService = new ManagerCategoryService(database);

            // Act
            int result = await managerCategoryService.TotalCountAsync(false, otherName);

            // Assert
            result.Should().Be(1);
        }
        public async Task DeleteAsync_WithCategoryId_ShouldDeleteCategory()
        {
            // Arrange
            FitStoreDbContext database = this.Database;

            DatabaseHelper.SeedData(database);

            IManagerCategoryService managerCategoryService = new ManagerCategoryService(database);

            // Act
            await managerCategoryService.DeleteAsync(firstNotDeletedCategoryId);

            // Assert
            Category category = database.Categories.Find(firstNotDeletedCategoryId);

            category.IsDeleted.Should().Be(true);

            foreach (Subcategory subcategory in category.Subcategories)
            {
                subcategory.IsDeleted.Should().Be(true);

                foreach (Supplement supplement in subcategory.Supplements)
                {
                    supplement.IsDeleted.Should().Be(true);

                    foreach (Review review in supplement.Reviews)
                    {
                        review.IsDeleted.Should().Be(true);
                    }

                    foreach (Comment comment in supplement.Comments)
                    {
                        comment.IsDeleted.Should().Be(true);
                    }
                }
            }
        }