コード例 #1
0
        public DTO.SubCategory CreateSubCategory(DataAccess.SubCategory subCategory, bool includeOnlyActive = true)
        {
            CheckHelper.ArgumentNotNull(subCategory, "subCategory");
            CheckHelper.ArgumentWithinCondition(!subCategory.IsNew(), "!subCategory.IsNew()");

            return
                (_dtoCache.Get(
                     subCategory,
                     sc =>
            {
                var result =
                    new DTO.SubCategory
                {
                    Id = sc.Id,
                    Name = sc.Name,
                    Active = sc.Active
                };

                CopyTrackableFields(result, sc);

                return result;
            },
                     (scDto, sc) =>
                     scDto.Category = CreateCategory(sc.Category, includeOnlyActive)));
        }
コード例 #2
0
        public void UpdateSubCategory_Should_Throw_Exception_When_Current_User_Is_Not_Seller()
        {
            // Arrange
            var container       = ContainerMockFactory.Create();
            var securityService = container.Get <ISecurityService>();

            securityService.LogIn(UserMockFactory.Olesya.Login, EncryptServiceMockFactory.OlesyaPasswordData.Password);

            var updatedSubCategory =
                new DTO.SubCategory
            {
                Id       = SubCategoryMockFactory.Girls_5_12.Id,
                Name     = "New SubCategory",
                Category = container.Get <IDtoService>().CreateCategory(CategoryMockFactory.Men),
                Active   = true
            };

            var categoryService = container.Get <ICategoryService>();

            // Act
            // Assert
            ExceptionAssert.Throw <InvalidOperationException>(
                () => categoryService.UpdateSubCategory(updatedSubCategory),
                "Only seller can change subcategory.");
        }
コード例 #3
0
        public void CreateSubCategory(DTO.SubCategory createdSubCategory)
        {
            CheckHelper.ArgumentNotNull(createdSubCategory, "createdSubCategory");
            CheckHelper.ArgumentWithinCondition(createdSubCategory.IsNew(), "SubCategory is not new.");
            Container.Get <IValidateService>().CheckIsValid(createdSubCategory);
            CheckHelper.ArgumentWithinCondition(!createdSubCategory.Category.IsNew(), "Category of SubCategory is new.");

            CheckHelper.WithinCondition(SecurityService.IsLoggedIn, "User is not logged in.");
            CheckHelper.WithinCondition(SecurityService.IsCurrentUserSeller, "Only seller can create subcategory.");

            var persistentService = Container.Get <IPersistentService>();

            var doesAnotherSubCategoryWithTheSameNameWithinTheSameCategoryExist =
                persistentService
                .GetEntitySet <SubCategory>()
                .Any(sc =>
                     sc.Name == createdSubCategory.Name &&
                     sc.CategoryId == createdSubCategory.Category.Id);

            if (doesAnotherSubCategoryWithTheSameNameWithinTheSameCategoryExist)
            {
                throw new CategoryServiceException("Подкатегория с заданным названием уже существует в данной категории.");
            }

            var category = persistentService.GetEntityById <DataAccess.Category>(createdSubCategory.Category.Id);

            CheckHelper.NotNull(category, "Category does not exist.");

            var subCategory =
                new SubCategory
            {
                Name       = createdSubCategory.Name,
                CategoryId = category.Id,
                Category   = category,
                Active     = createdSubCategory.Active
            };

            subCategory.UpdateTrackFields(Container);
            persistentService.Add(subCategory);

            persistentService.SaveChanges();

            createdSubCategory.Id         = subCategory.Id;
            createdSubCategory.CreateDate = subCategory.CreateDate;
            createdSubCategory.CreateUser = subCategory.CreatedBy.GetFullName();
            createdSubCategory.ChangeDate = subCategory.ChangeDate;
            createdSubCategory.ChangeUser = subCategory.ChangedBy.GetFullName();
        }
コード例 #4
0
        public void CreateSubCategory_Should_Create_SubCategory_When_SubCategory_With_The_Same_Name_In_Another_Category_Already_Exists()
        {
            // Arrange
            var container       = ContainerMockFactory.Create();
            var securityService = container.Get <ISecurityService>();

            securityService.LogIn(UserMockFactory.Diana.Login, EncryptServiceMockFactory.DianaPasswordData.Password);

            var createdSubCategory =
                new DTO.SubCategory
            {
                Name     = SubCategoryMockFactory.Girls_5_12.Name,
                Category = container.Get <IDtoService>().CreateCategory(CategoryMockFactory.Men),
                Active   = true
            };

            var categoryService   = container.Get <ICategoryService>();
            var persistentService = container.Get <IPersistentService>();
            var timeService       = container.Get <ITimeService>();

            // Act
            categoryService.CreateSubCategory(createdSubCategory);

            // Assert
            var actualSubCategory =
                persistentService
                .GetEntitySet <SubCategory>()
                .Single(sc =>
                        sc.Name == SubCategoryMockFactory.Girls_5_12.Name &&
                        sc.CategoryId == CategoryMockFactory.Men.Id);

            Assert.IsTrue(actualSubCategory.Id > 0);
            Assert.AreEqual(SubCategoryMockFactory.Girls_5_12.Name, actualSubCategory.Name);
            Assert.AreEqual(CategoryMockFactory.Men.Id, actualSubCategory.Category.Id);
            Assert.AreEqual(CategoryMockFactory.Men.Name, actualSubCategory.Category.Name);
            Assert.AreEqual(CategoryMockFactory.Men.Active, actualSubCategory.Category.Active);
            Assert.IsTrue(actualSubCategory.Active);
            Assert.AreEqual(timeService.UtcNow, actualSubCategory.CreateDate);
            Assert.AreEqual(timeService.UtcNow, actualSubCategory.ChangeDate);
            Assert.AreEqual(UserMockFactory.Diana, actualSubCategory.CreatedBy);
            Assert.AreEqual(UserMockFactory.Diana, actualSubCategory.ChangedBy);

            Assert.AreEqual(createdSubCategory, container.Get <IDtoService>().CreateSubCategory(actualSubCategory));
        }
コード例 #5
0
        public void CreateSubCategory_Should_Create_SubCategory()
        {
            // Arrange
            var container       = ContainerMockFactory.Create();
            var securityService = container.Get <ISecurityService>();

            securityService.LogIn(UserMockFactory.Diana.Login, EncryptServiceMockFactory.DianaPasswordData.Password);

            const string NEW_SUBCATEGORY_NAME = "New SubCategory";

            var createdSubCategory =
                new DTO.SubCategory
            {
                Name     = NEW_SUBCATEGORY_NAME,
                Category = container.Get <IDtoService>().CreateCategory(CategoryMockFactory.Men),
                Active   = true
            };

            var categoryService   = container.Get <ICategoryService>();
            var persistentService = container.Get <IPersistentService>();
            var timeService       = container.Get <ITimeService>();

            // Act
            categoryService.CreateSubCategory(createdSubCategory);

            // Assert
            var actualSubCategory =
                persistentService
                .GetEntitySet <SubCategory>()
                .Single(sc => sc.Name == NEW_SUBCATEGORY_NAME);

            Assert.IsTrue(actualSubCategory.Id > 0);
            Assert.AreEqual(NEW_SUBCATEGORY_NAME, actualSubCategory.Name);
            Assert.AreEqual(CategoryMockFactory.Men.Id, actualSubCategory.Category.Id);
            Assert.AreEqual(CategoryMockFactory.Men.Name, actualSubCategory.Category.Name);
            Assert.AreEqual(CategoryMockFactory.Men.Active, actualSubCategory.Category.Active);
            Assert.IsTrue(actualSubCategory.Active);
            Assert.AreEqual(timeService.UtcNow, actualSubCategory.CreateDate);
            Assert.AreEqual(timeService.UtcNow, actualSubCategory.ChangeDate);
            Assert.AreEqual(UserMockFactory.Diana, actualSubCategory.CreatedBy);
            Assert.AreEqual(UserMockFactory.Diana, actualSubCategory.ChangedBy);

            Assert.AreEqual(createdSubCategory, container.Get <IDtoService>().CreateSubCategory(actualSubCategory));
        }
コード例 #6
0
ファイル: ProductService.cs プロジェクト: chyuck/us-clothes
        public DTO.Product[] GetActiveProductsBySubCategory(DTO.SubCategory subCategory)
        {
            CheckHelper.ArgumentNotNull(subCategory, "subCategory");
            CheckHelper.ArgumentWithinCondition(!subCategory.IsNew(), "!subCategory.IsNew()");

            CheckHelper.WithinCondition(SecurityService.IsLoggedIn, "User is not logged in.");

            var persistentService = Container.Get<IPersistentService>();
            var dtoService = Container.Get<IDtoService>();

            return
                persistentService
                    .GetActiveEntities<DataAccess.Product>()
                    .Where(p => p.SubCategoryId == subCategory.Id)
                    .OrderByDescending(p => p.ChangeDate)
                    .AsEnumerable()
                    .Select(p => dtoService.CreateProduct(p))
                    .ToArray();
        }
コード例 #7
0
        public void UpdateSubCategory_Should_Update_SubCategory_When_Name_Is_Not_Changed()
        {
            // Arrange
            var container       = ContainerMockFactory.Create();
            var securityService = container.Get <ISecurityService>();

            securityService.LogIn(UserMockFactory.Diana.Login, EncryptServiceMockFactory.DianaPasswordData.Password);

            var name       = SubCategoryMockFactory.Girls_5_12.Name;
            var createDate = SubCategoryMockFactory.Girls_5_12.CreateDate;
            var createdBy  = SubCategoryMockFactory.Girls_5_12.CreatedBy;

            var updatedSubCategory =
                new DTO.SubCategory
            {
                Id       = SubCategoryMockFactory.Girls_5_12.Id,
                Name     = SubCategoryMockFactory.Girls_5_12.Name,
                Category = container.Get <IDtoService>().CreateCategory(CategoryMockFactory.Children),
                Active   = false
            };

            var categoryService   = container.Get <ICategoryService>();
            var persistentService = container.Get <IPersistentService>();
            var timeService       = container.Get <ITimeService>();

            // Act
            categoryService.UpdateSubCategory(updatedSubCategory);

            // Assert
            var actualSubCategory = persistentService.GetEntityById <SubCategory>(SubCategoryMockFactory.Girls_5_12.Id);

            Assert.AreEqual(name, actualSubCategory.Name);
            Assert.AreEqual(CategoryMockFactory.Children.Id, actualSubCategory.Category.Id);
            Assert.AreEqual(CategoryMockFactory.Children.Name, actualSubCategory.Category.Name);
            Assert.AreEqual(CategoryMockFactory.Children.Active, actualSubCategory.Category.Active);
            Assert.IsFalse(actualSubCategory.Active);
            Assert.AreEqual(createDate, actualSubCategory.CreateDate);
            Assert.AreEqual(timeService.UtcNow, actualSubCategory.ChangeDate);
            Assert.AreEqual(createdBy, actualSubCategory.CreatedBy);
            Assert.AreEqual(UserMockFactory.Diana, actualSubCategory.ChangedBy);

            Assert.AreEqual(updatedSubCategory, container.Get <IDtoService>().CreateSubCategory(actualSubCategory));
        }
コード例 #8
0
        public DTO.Size[] GetActiveSizes(DTO.SubCategory subCategory, DTO.Brand brand)
        {
            CheckHelper.ArgumentNotNull(subCategory, "subCategory");
            CheckHelper.ArgumentWithinCondition(!subCategory.IsNew(), "!subCategory.IsNew()");

            CheckHelper.ArgumentNotNull(brand, "brand");
            CheckHelper.ArgumentWithinCondition(!brand.IsNew(), "!brand.IsNew()");

            CheckHelper.WithinCondition(SecurityService.IsLoggedIn, "User is not logged in.");

            var persistentService = Container.Get <IPersistentService>();
            var dtoService        = Container.Get <IDtoService>();

            return
                (persistentService
                 .GetActiveEntities <DataAccess.Size>()
                 .Where(s => s.SubCategoryId == subCategory.Id && s.BrandId == brand.Id)
                 .OrderBy(s => s.Name)
                 .AsEnumerable()
                 .Select(s => dtoService.CreateSize(s))
                 .ToArray());
        }
コード例 #9
0
        public DTO.Size[] GetSizes(DTO.SubCategory subCategory, DTO.Brand brand, string filter)
        {
            CheckHelper.ArgumentNotNull(subCategory, "subCategory");
            CheckHelper.ArgumentWithinCondition(!subCategory.IsNew(), "!subCategory.IsNew()");
            CheckHelper.ArgumentNotNull(brand, "brand");
            CheckHelper.ArgumentWithinCondition(!brand.IsNew(), "!brand.IsNew()");

            CheckHelper.WithinCondition(SecurityService.IsLoggedIn, "User is not logged in.");
            CheckHelper.WithinCondition(SecurityService.IsCurrentUserSeller, "Only seller can get all sizes.");

            var query =
                Container
                .Get <IPersistentService>()
                .GetEntitySet <DataAccess.Size>()
                .Where(s => s.SubCategoryId == subCategory.Id && s.BrandId == brand.Id)
                .AsQueryable();

            if (!string.IsNullOrWhiteSpace(filter))
            {
                query =
                    query
                    .Where(s =>
                           s.Name.Contains(filter) ||
                           s.Height.Contains(filter) ||
                           s.Weight.Contains(filter));
            }

            var dtoService = Container.Get <IDtoService>();

            return
                (query
                 .OrderBy(s => s.Id)
                 .ToArray()
                 .Select(s => dtoService.CreateSize(s, false))
                 .ToArray());
        }
コード例 #10
0
        public void UpdateSubCategory_Should_Throw_Exception_When_SubCategory_With_The_Same_Name_In_The_Same_Category_Already_Exists()
        {
            var container       = ContainerMockFactory.Create();
            var securityService = container.Get <ISecurityService>();

            securityService.LogIn(UserMockFactory.Diana.Login, EncryptServiceMockFactory.DianaPasswordData.Password);

            var updatedSubCategory =
                new DTO.SubCategory
            {
                Id       = SubCategoryMockFactory.Girls_5_12.Id,
                Name     = SubCategoryMockFactory.Boys_2_5.Name,
                Category = container.Get <IDtoService>().CreateCategory(CategoryMockFactory.Children),
                Active   = true
            };

            var categoryService = container.Get <ICategoryService>();

            // Act
            // Assert
            ExceptionAssert.Throw <CategoryServiceException>(
                () => categoryService.UpdateSubCategory(updatedSubCategory),
                "Подкатегория с заданным названием уже существует в данной категории.");
        }