Exemplo n.º 1
0
        private static string SetupCategoryRelation(string categoryId, string catalogId, ICatalogRepository repository, Item item)
        {
            var retVal = string.Empty;

            if (categoryId != null)
            {
                var category =
                    repository.Categories.Where(
                        cat => cat.CatalogId == catalogId && (cat.CategoryId == categoryId || cat.Code == categoryId))
                    .FirstOrDefault();
                if (category != null)
                {
                    var relation = new CatalogEntityFactory().CreateEntity <CategoryItemRelation>();
                    relation.CatalogId  = catalogId;
                    relation.ItemId     = item.ItemId;
                    relation.CategoryId = category.CategoryId;
                    repository.Add(relation);
                }
                else
                {
                    retVal = string.Format(noCategoryError, categoryId, item.Code);
                }
            }

            return(retVal);
        }
        public void Can_add_pricelist()
        {
            // create ViewModelsFactory ( it should be resolve all view models for the test)
            var overviewVmFactory = new TestCatalogViewModelFactory <IPriceListOverviewStepViewModel>(ServManager.GetUri(ServiceNameEnum.Catalog), ServManager.GetUri(ServiceNameEnum.AppConfig));

            // create Item using EntityFactory
            var entityFactory = new CatalogEntityFactory();
            var item          = entityFactory.CreateEntity <Pricelist>();

            // create Wizard main class. Constructor of the class creates wizard steps with help vmFactory
            var createPriceListViewModel = new CreatePriceListViewModel(overviewVmFactory, item);

            // IsValid of wizard step should be false at the begin.
            Assert.False(createPriceListViewModel.AllRegisteredSteps[0].IsValid);

            var step = createPriceListViewModel.AllRegisteredSteps[0] as PriceListOverviewStepViewModel;

            step.InitializeForOpen();
            step.InnerItem.Name = "New test PriceList";
            Assert.Null(step.AllAvailableCurrencies);
            step.InnerItem.Currency = "USD";
            Assert.True(step.IsValid);
            createPriceListViewModel.PrepareAndSave();

            var priceListRepositoryFactory = new DSRepositoryFactory <IPricelistRepository, DSCatalogClient, CatalogEntityFactory>(ServManager.GetUri(ServiceNameEnum.Catalog));

            using (var repository = priceListRepositoryFactory.GetRepositoryInstance())
            {
                var checkItem = repository.Pricelists.Where(x => x.Name == "New test PriceList").FirstOrDefault();
                Assert.NotNull(checkItem);
            }
        }
        private ICategoryPropertiesStepViewModel CreateCategoryPropertiesStepViewModel(IEnumerable <KeyValuePair <string, object> > parameters)
        {
            var catalogRepositoryFactory = new DSRepositoryFactory <ICatalogRepository, DSCatalogClient, CatalogEntityFactory>(_catalogServiceUri);
            var entityFactory            = new CatalogEntityFactory();
            var item   = parameters.SingleOrDefault(x => x.Key == "itemModel").Value as CategoryStepModel;
            var retVal = new CategoryPropertiesStepViewModel(catalogRepositoryFactory, null, entityFactory, item);

            return(retVal);
        }
Exemplo n.º 4
0
        private static IEnumerable <ItemPropertyValue> InitializeProperties(PropertySetProperty[] props, IEnumerable <ImportItem> customValues, string itemId)
        {
            var retVal = new List <ItemPropertyValue>();

            foreach (var item in customValues)
            {
                if (item.Value != null)
                {
                    var val         = new CatalogEntityFactory().CreateEntity <ItemPropertyValue>();
                    var propSetProp = props.FirstOrDefault(x => x.Property.Name == item.Name);
                    val.ItemId    = itemId;
                    val.ValueType = propSetProp.Property.PropertyValueType;
                    val.Name      = item.Name;
                    val.Locale    = item.Locale;

                    if (propSetProp.Property.IsEnum)
                    {
                        var propVal = propSetProp.Property.PropertyValues.FirstOrDefault(value => value.ToString() == item.Value);
                        val.KeyValue = propVal != null ? propVal.PropertyValueId : null;
                    }
                    else
                    {
                        switch ((PropertyValueType)val.ValueType)
                        {
                        case PropertyValueType.DateTime:
                            val.DateTimeValue = DateTime.Parse(item.Value);
                            break;

                        case PropertyValueType.Integer:
                            val.IntegerValue = Convert.ToInt32(item.Value.Replace(',', '.'), CultureInfo.InvariantCulture.NumberFormat);
                            break;

                        case PropertyValueType.Decimal:
                            val.DecimalValue = Convert.ToDecimal(item.Value.Replace(',', '.'), CultureInfo.InvariantCulture.NumberFormat);
                            break;

                        case PropertyValueType.ShortString:
                            val.ShortTextValue = item.Value;
                            break;

                        case PropertyValueType.LongString:
                            val.LongTextValue = item.Value;
                            break;

                        case PropertyValueType.Boolean:
                            val.BooleanValue = Convert.ToBoolean(item.Value);
                            break;
                        }
                    }
                    retVal.Add(val);
                }
            }
            return(retVal.ToArray());
        }
        private ICatalogOverviewStepViewModel CreateCatalogOverviewStepViewModel(IEnumerable <KeyValuePair <string, object> > parameters)
        {
            var catalogRepositoryFactory   = new DSRepositoryFactory <ICatalogRepository, DSCatalogClient, CatalogEntityFactory>(_catalogServiceUri);
            var appConfigRepositoryFactory = new DSRepositoryFactory <IAppConfigRepository, DSAppConfigClient, AppConfigEntityFactory>(_appConfigServiceUri);

            var entityFactory = new CatalogEntityFactory();
            var item          = parameters.SingleOrDefault(x => x.Key == "item").Value;
            var retVal        = new CatalogOverviewStepViewModel(catalogRepositoryFactory, appConfigRepositoryFactory, entityFactory, item as Catalog);

            return(retVal);
        }
Exemplo n.º 6
0
        private object InitializeItem(object item, IEnumerable <ImportItem> systemValues)
        {
            if (item == null)
            {
                item = new CatalogEntityFactory().CreateEntityForType(Name);
            }
            var itemProperties = item.GetType().GetProperties();

            systemValues.ToList().ForEach(x => SetPropertyValue(item, itemProperties.FirstOrDefault(y => y.Name == x.Name), x.Value));

            return(item);
        }
        private IPriceListOverviewStepViewModel CeratePriceListOverviewStep(params KeyValuePair <string, object>[] parameters)
        {
            var priceListRepositoryFactory = new DSRepositoryFactory <IPricelistRepository, DSCatalogClient, CatalogEntityFactory>(_catalogServiceUri);
            var appConfigRepositoryFactory = new DSRepositoryFactory <IAppConfigRepository, DSAppConfigClient, AppConfigEntityFactory>(_appConfigServiceUri);

            ICatalogEntityFactory  entityFactory = new CatalogEntityFactory();
            IAuthenticationContext authContext   = new TestAuthenticationContext();
            var item   = parameters.SingleOrDefault(x => x.Key == "item").Value;
            var retVal = new PriceListOverviewStepViewModel(priceListRepositoryFactory, appConfigRepositoryFactory, entityFactory,
                                                            authContext, item as Pricelist);

            return(retVal);
        }
Exemplo n.º 8
0
        private TaxCategory InitializeItem(TaxCategory item, IEnumerable <ImportItem> systemValues)
        {
            if (item == null)
            {
                item = new CatalogEntityFactory().CreateEntity <TaxCategory>();
            }
            var itemProperties = item.GetType().GetProperties();

            if (string.IsNullOrEmpty(systemValues.First(x => x.Name == "TaxCategoryId").Value))
            {
                systemValues.First(x => x.Name == "TaxCategoryId").Value = item.TaxCategoryId;
            }
            systemValues.ToList().ForEach(x => SetPropertyValue(item, itemProperties.FirstOrDefault(y => y.Name == x.Name), x.Value));

            return(item);
        }
        public void Can_create_catalogviewmodel_in_wizardmode()
        {
            var vmFactory = new TestCatalogViewModelFactory <ICatalogOverviewStepViewModel>(
                ServManager.GetUri(ServiceNameEnum.Catalog), ServManager.GetUri(ServiceNameEnum.AppConfig));

            var repositoryFactory =
                new DSRepositoryFactory <ICatalogRepository, DSCatalogClient, CatalogEntityFactory>(
                    ServManager.GetUri(ServiceNameEnum.Catalog));

            //create item using entity factory
            var entityFactory = new CatalogEntityFactory();
            var item          = entityFactory.CreateEntity <Catalog>();

            var createViewModel   = new CreateCatalogViewModel(vmFactory, item);
            var overviewViewModel = createViewModel.AllRegisteredSteps[0] as ViewModelDetailAndWizardBase <Catalog>;

            overviewViewModel.InitializeForOpen();

            //check the default values in stepViewModel
            Assert.False(createViewModel.AllRegisteredSteps[0].IsValid);

            // step 1
            //fill the properties for the first step
            overviewViewModel.InnerItem.CatalogId = "TestCatalog";
            overviewViewModel.InnerItem.Name      = "TestName";
            overviewViewModel.InnerItem.CatalogLanguages.Add(new CatalogLanguage()
            {
                Language  = "ru-ru",
                CatalogId = overviewViewModel.InnerItem.CatalogId
            });
            overviewViewModel.InnerItem.DefaultLanguage = "ru-ru";

            Assert.True(createViewModel.AllRegisteredSteps[0].IsValid);

            // final actions: save
            createViewModel.PrepareAndSave();

            using (var repository = repositoryFactory.GetRepositoryInstance())
            {
                var itemFromDb = repository.Catalogs.Where(s => s.CatalogId == item.CatalogId).OfType <Catalog>().Expand(x => x.CatalogLanguages).SingleOrDefault();

                Assert.NotNull(itemFromDb);
                Assert.True(itemFromDb.Name == "TestName");
                Assert.True(itemFromDb.DefaultLanguage == "ru-ru");
                Assert.True(itemFromDb.CatalogLanguages.Any(x => x.Language == "ru-ru"));
            }
        }
        private IPriceListViewModel CreatePriceList(params KeyValuePair <string, object>[] parameters)
        {
            var priceListRepositoryFactory = new DSRepositoryFactory <IPricelistRepository, DSCatalogClient, CatalogEntityFactory>(_catalogServiceUri);
            var appConfigRepositoryFactory = new DSRepositoryFactory <IAppConfigRepository, DSAppConfigClient, AppConfigEntityFactory>(_appConfigServiceUri);

            // create Item using EntityFactory
            var entityFactory = new CatalogEntityFactory();

            IAuthenticationContext authenticationContext = new TestAuthenticationContext();
            var navigationManager = new TestNavigationManager();

            var item   = parameters.SingleOrDefault(x => x.Key == "item").Value;
            var retVal = new PriceListViewModel(priceListRepositoryFactory, appConfigRepositoryFactory, null, entityFactory,
                                                navigationManager, authenticationContext, item as Pricelist);

            return(retVal);
        }
        private static Price InitializeItem(Price item, IEnumerable <ImportItem> systemValues)
        {
            if (item == null)
            {
                item = new CatalogEntityFactory().CreateEntity <Price>();
            }
            var priceId = systemValues.FirstOrDefault(price => price.Name == "PriceId");

            if (priceId != null)
            {
                systemValues.FirstOrDefault(price => price.Name == "PriceId").Value = priceId.Value ?? item.PriceId;
            }
            var itemProperties = item.GetType().GetProperties();

            systemValues.ToList().ForEach(x => SetPropertyValue(item, itemProperties.FirstOrDefault(y => y.Name == x.Name), x.Value));

            return(item);
        }
Exemplo n.º 12
0
        private Item SetupItem(Item item, string containerId, string propertySetId, ImportItem[] systemValues, IEnumerable <ImportItem> customValues, ICatalogRepository repository, string taxCategory)
        {
            var retVal = (Item)InitializeItem(item, systemValues);

            retVal.CatalogId = containerId;
            var propSet  = repository.PropertySets.Expand("PropertySetProperties/Property/PropertyValues").Where(x => x.PropertySetId == propertySetId).First();
            var resProps = InitializeProperties(propSet.PropertySetProperties.ToArray(), customValues, retVal.ItemId);

            retVal.ItemPropertyValues.Add(resProps);
            retVal.PropertySetId = propSet.PropertySetId;

            if (!string.IsNullOrEmpty(taxCategory))
            {
                var cat =
                    repository.TaxCategories.Where(x => x.TaxCategoryId == taxCategory || x.Name == taxCategory).FirstOrDefault();
                retVal.TaxCategory = cat != null ? cat.TaxCategoryId : null;
            }

            if (!string.IsNullOrEmpty(systemValues.First(x => x.Name == "ItemAsset").Value))
            {
                var itemAsset = new ItemAsset
                {
                    AssetType = "image",
                    ItemId    = retVal.ItemId,
                    AssetId   = systemValues.First(x => x.Name == "ItemAsset").Value,
                    GroupName = "primaryimage"
                };
                retVal.ItemAssets.Add(itemAsset);
            }

            if (!string.IsNullOrEmpty(systemValues.First(x => x.Name == "EditorialReview").Value))
            {
                var editorial = new CatalogEntityFactory().CreateEntity <EditorialReview>();
                editorial.ReviewState = (int)ReviewState.Active;
                editorial.Content     = systemValues.First(x => x.Name == "EditorialReview").Value;
                editorial.ItemId      = retVal.ItemId;
                retVal.EditorialReviews.Add(editorial);
            }

            return(retVal);
        }
        public void Can_add_update_delete_item_property_values()
        {
            var catalogName    = "Test catalog";
            var catalogBuilder = CatalogBuilder.BuildCatalog(catalogName).WithCategory("category").WithProducts(1);
            var catalog        = catalogBuilder.GetCatalog() as Catalog;
            var item           = catalogBuilder.GetItems()[0];

            var property1 = new Property {
                Name = "bool", PropertyValueType = PropertyValueType.Boolean.GetHashCode()
            };
            var property2 = new Property {
                Name = "datetime", PropertyValueType = PropertyValueType.DateTime.GetHashCode()
            };
            var property3 = new Property {
                Name = "Decimal", PropertyValueType = PropertyValueType.Decimal.GetHashCode()
            };
            var property4 = new Property {
                Name = "int", PropertyValueType = PropertyValueType.Integer.GetHashCode()
            };
            var property5 = new Property {
                Name = "longstr", PropertyValueType = PropertyValueType.LongString.GetHashCode()
            };
            var property6 = new Property {
                Name = "shorttext", PropertyValueType = PropertyValueType.ShortString.GetHashCode()
            };

            var propertySet = catalog.PropertySets[0];

            propertySet.PropertySetProperties.Add(new PropertySetProperty {
                Property = property1
            });
            propertySet.PropertySetProperties.Add(new PropertySetProperty {
                Property = property2
            });
            propertySet.PropertySetProperties.Add(new PropertySetProperty {
                Property = property3
            });
            propertySet.PropertySetProperties.Add(new PropertySetProperty {
                Property = property4
            });
            propertySet.PropertySetProperties.Add(new PropertySetProperty {
                Property = property5
            });
            propertySet.PropertySetProperties.Add(new PropertySetProperty {
                Property = property6
            });
            propertySet.PropertySetProperties.ToList().ForEach(x =>
            {
                x.Property.IsRequired = true;
                x.Property.CatalogId  = catalogName;
            });

            var repositoryFactory = new DSRepositoryFactory <ICatalogRepository, DSCatalogClient, CatalogEntityFactory>(ServManager.GetUri(ServiceNameEnum.Catalog));

            using (var repository = repositoryFactory.GetRepositoryInstance())
            {
                repository.Add(catalog);
                repository.Add(item);
                repository.UnitOfWork.Commit();
            }

            IRepositoryFactory <IPricelistRepository>           pricelistRepositoryFactory    = new DSRepositoryFactory <IPricelistRepository, DSCatalogClient, CatalogEntityFactory>(ServManager.GetUri(ServiceNameEnum.Catalog));
            IViewModelsFactory <IPropertyValueBaseViewModel>    propertyValueVmFactory        = new TestCatalogViewModelFactory <IPropertyValueBaseViewModel>(ServManager.GetUri(ServiceNameEnum.Catalog), ServManager.GetUri(ServiceNameEnum.AppConfig));
            IViewModelsFactory <IPriceViewModel>                priceVmFactory                = new TestCatalogViewModelFactory <IPriceViewModel>(ServManager.GetUri(ServiceNameEnum.Catalog), ServManager.GetUri(ServiceNameEnum.AppConfig));
            IViewModelsFactory <IItemAssetViewModel>            assetVmFactory                = new TestCatalogViewModelFactory <IItemAssetViewModel>(ServManager.GetUri(ServiceNameEnum.Catalog), ServManager.GetUri(ServiceNameEnum.AppConfig));
            IViewModelsFactory <IAssociationGroupEditViewModel> associationGroupEditVmFactory = new TestCatalogViewModelFactory <IAssociationGroupEditViewModel>(ServManager.GetUri(ServiceNameEnum.Catalog), ServManager.GetUri(ServiceNameEnum.AppConfig));
            IViewModelsFactory <IAssociationGroupViewModel>     associationGroupVmFactory     = new TestCatalogViewModelFactory <IAssociationGroupViewModel>(ServManager.GetUri(ServiceNameEnum.Catalog), ServManager.GetUri(ServiceNameEnum.AppConfig));
            IViewModelsFactory <IItemRelationViewModel>         itemRelationVmFactory         = new TestCatalogViewModelFactory <IItemRelationViewModel>(ServManager.GetUri(ServiceNameEnum.Catalog), ServManager.GetUri(ServiceNameEnum.AppConfig));
            IViewModelsFactory <IEditorialReviewViewModel>      reviewVmFactory               = new TestCatalogViewModelFactory <IEditorialReviewViewModel>(ServManager.GetUri(ServiceNameEnum.Catalog), ServManager.GetUri(ServiceNameEnum.AppConfig));
            IViewModelsFactory <ICategoryItemRelationViewModel> categoryVmFactory             = new TestCatalogViewModelFactory <ICategoryItemRelationViewModel>(ServManager.GetUri(ServiceNameEnum.Catalog), ServManager.GetUri(ServiceNameEnum.AppConfig));
            ICatalogEntityFactory  entityFactory = new CatalogEntityFactory();
            IAuthenticationContext authContext   = new TestAuthenticationContext();
            INavigationManager     navManager    = new TestNavigationManager();

            var itemViewModel = new ItemViewModel(null, null, repositoryFactory, pricelistRepositoryFactory, propertyValueVmFactory, priceVmFactory, assetVmFactory, associationGroupEditVmFactory, associationGroupVmFactory, itemRelationVmFactory, reviewVmFactory, categoryVmFactory, entityFactory, item, authContext, navManager);

            itemViewModel.InitializeForOpen();

            // property change should set IsModified to true
            itemViewModel.InnerItem.EndDate = DateTime.UtcNow;
            Assert.True(itemViewModel.IsModified);

            Assert.False(itemViewModel.PropertyValueEditCommand.CanExecute(null));
            Assert.True(itemViewModel.PropertyValueEditCommand.CanExecute(itemViewModel.PropertiesAndValues[0]));

            itemViewModel.CommonConfirmRequest.Raised += EditValueSetConfirmation;

            foreach (var propItem in itemViewModel.PropertiesAndValues)
            {
                itemViewModel.PropertyValueEditCommand.Execute(propItem);
            }

            itemViewModel.SaveChangesCommand.Execute(null);
            Thread.Sleep(1000);            // waiting for SaveChangesCommand to finish in background thread

            using (var repository = repositoryFactory.GetRepositoryInstance())
            {
                var itemFromDb = repository.Items.Expand(x => x.ItemPropertyValues).Single();

                Assert.True(itemFromDb.ItemPropertyValues.Count > 0);
                Assert.Equal(itemViewModel.PropertiesAndValues.Count, itemFromDb.ItemPropertyValues.Count);
            }

            // test if values are saved when updated in UI
            DecimalValue = 123123m;
            var valueToEdit =
                itemViewModel.PropertiesAndValues.First(x => x.Property.PropertyValueType == PropertyValueType.Decimal.GetHashCode());

            itemViewModel.PropertyValueEditCommand.Execute(valueToEdit);

            LongTextValue = "other long text";
            valueToEdit   = itemViewModel.PropertiesAndValues.First(x => x.Property.PropertyValueType == PropertyValueType.LongString.GetHashCode());
            itemViewModel.PropertyValueEditCommand.Execute(valueToEdit);

            itemViewModel.SaveChangesCommand.Execute(null);
            Thread.Sleep(1000);            // waiting for SaveChangesCommand to finish in background thread

            using (var repository = repositoryFactory.GetRepositoryInstance())
            {
                var itemFromDb = repository.Items.Expand(x => x.ItemPropertyValues).Single();

                Assert.Equal(DecimalValue, itemFromDb.ItemPropertyValues.First(x => x.ValueType == PropertyValueType.Decimal.GetHashCode()).DecimalValue);
                Assert.Equal(LongTextValue, itemFromDb.ItemPropertyValues.First(x => x.ValueType == PropertyValueType.LongString.GetHashCode()).LongTextValue);
            }

            // check if item can be saved without required property value
            var valueToDelete =
                itemViewModel.PropertiesAndValues.First(x => x.Property.PropertyValueType == PropertyValueType.Decimal.GetHashCode());

            itemViewModel.PropertyValueDeleteCommand.Execute(valueToDelete);

            itemViewModel.SaveChangesCommand.CanExecute(null);
            Thread.Sleep(1000);            // waiting for SaveChangesCommand to finish in background thread

            //Assert True as the last Save command execution failed as the validation failed
            Assert.True(itemViewModel.IsModified);
        }
        public void Can_create_categoryviewmodel_in_wizardmode()
        {
            var repositoryFactory =
                new DSRepositoryFactory <ICatalogRepository, DSCatalogClient, CatalogEntityFactory>(ServManager.GetUri(ServiceNameEnum.Catalog));

            const string catalogId      = "testcatalog";
            var          catalogBuilder = CatalogBuilder.BuildCatalog(catalogId);
            var          catalog        = catalogBuilder.GetCatalog() as Catalog;

            using (var repository = repositoryFactory.GetRepositoryInstance())
            {
                repository.Add(catalog);
                repository.UnitOfWork.Commit();
            }

            var propertiesVmFactory = new TestCatalogViewModelFactory <ICategoryPropertiesStepViewModel>(ServManager.GetUri(ServiceNameEnum.Catalog), ServManager.GetUri(ServiceNameEnum.AppConfig));
            var overviewVmFactory   = new TestCatalogViewModelFactory <ICategoryOverviewStepViewModel>(ServManager.GetUri(ServiceNameEnum.Catalog), ServManager.GetUri(ServiceNameEnum.AppConfig));

            //create item using entity factory
            var entityFactory = new CatalogEntityFactory();
            var item          = entityFactory.CreateEntity <Category>();

            item.CatalogId = catalogId;
            item.Catalog   = catalog;

            var createViewModel   = new CreateCategoryViewModel(propertiesVmFactory, overviewVmFactory, item);
            var overviewViewModel = createViewModel.AllRegisteredSteps[0] as CategoryViewModel;

            overviewViewModel.InitializeForOpen();
            var propertyValuesViewModel = createViewModel.AllRegisteredSteps[1] as CategoryViewModel;

            propertyValuesViewModel.InitializeForOpen();

            //check the default values in stepViewModel
            Assert.False(createViewModel.AllRegisteredSteps[0].IsValid);
            Assert.True(createViewModel.AllRegisteredSteps[1].IsValid);

            // step 1
            //fill the properties for the first step
            overviewViewModel.InnerItem.Name = "TestName";
            overviewViewModel.InnerItem.Code = "TestCode";
            var propertySet = overviewViewModel.AvailableCategoryTypes.First();

            overviewViewModel.InnerItem.PropertySet   = propertySet;
            overviewViewModel.InnerItem.PropertySetId = propertySet.PropertySetId;

            Assert.True(createViewModel.AllRegisteredSteps[0].IsValid);

            // step 2
            //fill the values for the property values step
            propertyValuesViewModel.PropertiesAndValues[0].Value = new CategoryPropertyValue()
            {
                ShortTextValue = "short text",
                Name           = propertyValuesViewModel.PropertiesAndValues[0].Property.Name,
                ValueType      = propertyValuesViewModel.PropertiesAndValues[0].Property.PropertyValueType
            };
            propertyValuesViewModel.InnerItem.CategoryPropertyValues.Add((CategoryPropertyValue)propertyValuesViewModel.PropertiesAndValues[0].Value);

            Assert.True(createViewModel.AllRegisteredSteps[1].IsValid);

            // final actions: save
            propertyValuesViewModel.InnerItem.Catalog = null;
            createViewModel.PrepareAndSave();

            using (var repository = repositoryFactory.GetRepositoryInstance())
            {
                var itemFromDb = repository.Categories.Where(s => s.CategoryId == item.CategoryId).OfType <Category>().ExpandAll().SingleOrDefault();

                Assert.NotNull(itemFromDb);
                Assert.True(itemFromDb.Name == "TestName");
                Assert.True(itemFromDb.CategoryPropertyValues.Any(x => x.ShortTextValue == "short text"));
            }
        }
        public void Can_delete_pricelist()
        {
            #region Init parameters for PriceListHomeViewModel

            var priceListRepositoryFactory =
                new DSRepositoryFactory <IPricelistRepository, DSCatalogClient, CatalogEntityFactory>(
                    ServManager.GetUri(ServiceNameEnum.Catalog));
            IAuthenticationContext authenticationContext = new TestAuthenticationContext();
            var navigationManager = new TestNavigationManager();

            // create ViewModelsFactory ( it should be resolve all view models for the test)
            var itemVmFactory = new TestCatalogViewModelFactory <IPriceListViewModel>(ServManager.GetUri(ServiceNameEnum.Catalog),
                                                                                      ServManager.GetUri(ServiceNameEnum.AppConfig));

            var wizardVmFactory = new TestCatalogViewModelFactory <ICreatePriceListViewModel>(ServManager.GetUri(ServiceNameEnum.Catalog),
                                                                                              ServManager.GetUri(ServiceNameEnum.AppConfig));

            // create Item using EntityFactory
            var entityFactory = new CatalogEntityFactory();

            #endregion

            #region Add price list to DB

            using (var repository = priceListRepositoryFactory.GetRepositoryInstance())
            {
                var pricelist = entityFactory.CreateEntity <Pricelist>();
                pricelist.Name     = "Test price (Can_delete_pricelist)";
                pricelist.Currency = "USD";

                repository.Add(pricelist);
                repository.UnitOfWork.Commit();
            }

            #endregion

            #region VM test

            var priceListHomeViewModel = new PriceListHomeViewModel(entityFactory, itemVmFactory, wizardVmFactory,
                                                                    priceListRepositoryFactory, authenticationContext,
                                                                    navigationManager, null);
            priceListHomeViewModel.InitializeForOpen();

            Thread.Sleep(3000);             // waiting for InitializeForOpen to finish in background thread

            priceListHomeViewModel.CommonConfirmRequest.Raised += DeletePriceListConfirmation;
            priceListHomeViewModel.ListItemsSource.MoveCurrentToFirst();
            var item          = priceListHomeViewModel.ListItemsSource.CurrentItem as VirtualListItem <IPriceListViewModel>;
            var itemsToDelete = new List <VirtualListItem <IPriceListViewModel> >()
            {
                item
            };
            priceListHomeViewModel.ItemDeleteCommand.Execute(itemsToDelete);

            Thread.Sleep(1000);            // waiting for ItemDeleteCommand to finish in background thread

            #endregion

            #region Check

            using (var repository = priceListRepositoryFactory.GetRepositoryInstance())
            {
                var checkItem = repository.Pricelists.Where(x => x.Name == "Test price (Can_delete_pricelist)").SingleOrDefault();
                Assert.Null(checkItem);
            }

            #endregion
        }