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