Beispiel #1
0
        private ICatalogPromotionExpressionStepViewModel CreateCatalogPromotionExpressionStepViewModel(
            params KeyValuePair <string, object>[] parameters)
        {
            var repositoryFactory =
                new DSRepositoryFactory <IMarketingRepository, DSMarketingClient, MarketingEntityFactory>(
                    _marketingServiceUri);

            var appConfigRepositoryFactory =
                new DSRepositoryFactory <IAppConfigRepository, DSAppConfigClient, AppConfigEntityFactory>(
                    _appConfigServiceUri);

            var shippingRepositoryFactory =
                new DSRepositoryFactory <IShippingRepository, DSOrderClient, OrderEntityFactory>(
                    _orderServiceUri);

            var searchCategoryVmFactory =
                new TestCatalogViewModelFactory <ISearchCategoryViewModel>(_catalogServiceUri, _appConfigServiceUri);

            var searchItemVmFactory =
                new TestCatalogViewModelFactory <ISearchItemViewModel>(_catalogServiceUri, _appConfigServiceUri);

            var entityFactory = new MarketingEntityFactory();
            var item          = parameters.SingleOrDefault(x => x.Key == "item").Value as CartPromotion;

            var retval = new CatalogPromotionExpressionStepViewModel(appConfigRepositoryFactory, repositoryFactory, searchCategoryVmFactory, searchItemVmFactory, shippingRepositoryFactory, entityFactory, item);

            return(retval);
        }
        public void AddCurrencies()
        {
            // create Setting from factory
            var entityFactory = new AppConfigEntityFactory();
            var setting       = entityFactory.CreateEntity <Setting>();

            setting.Name             = "Currencies";
            setting.SettingValueType = "ShortText";
            setting.IsMultiValue     = true;
            setting.IsSystem         = true;

            // add currencies
            var id = setting.SettingId;

            setting.SettingValues.Add(new SettingValue()
            {
                ValueType = "ShortText", ShortTextValue = "USD", SettingId = id
            });
            setting.SettingValues.Add(new SettingValue()
            {
                ValueType = "ShortText", ShortTextValue = "EUR", SettingId = id
            });


            var appConfigFactory = new DSRepositoryFactory <IAppConfigRepository, DSAppConfigClient, AppConfigEntityFactory>(ServManager.GetUri(ServiceNameEnum.AppConfig));

            using (var appConfigRepository = appConfigFactory.GetRepositoryInstance())
            {
                appConfigRepository.Add(setting);
                appConfigRepository.UnitOfWork.Commit();
            }
        }
        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 IContentPublishingConditionsStepViewModel CreateContentPublishingConditionsStepViewModel(
            params KeyValuePair <string, object>[] parameters)
        {
            var repositoryFactory =
                new DSRepositoryFactory <IDynamicContentRepository, DSDynamicContentClient, DynamicContentEntityFactory>(
                    _dynamicContentServiceUri);

            var storeRepositoryFactory =
                new DSRepositoryFactory <IStoreRepository, DSDynamicContentClient, DynamicContentEntityFactory>(
                    _dynamicContentServiceUri);

            var countryRepositoryFactory =
                new DSRepositoryFactory <ICountryRepository, DSDynamicContentClient, DynamicContentEntityFactory>(
                    _dynamicContentServiceUri);

            var appConfigRepositoryFactory =
                new DSRepositoryFactory <IAppConfigRepository, DSDynamicContentClient, DynamicContentEntityFactory>(
                    _dynamicContentServiceUri);

            var searchCategoryVmFactory =
                new TestDynamicContentViewModelFactory <ISearchCategoryViewModel>(
                    _dynamicContentServiceUri);

            IDynamicContentEntityFactory entityFactory = new DynamicContentEntityFactory();
            var item = parameters.SingleOrDefault(x => x.Key == "item").Value as DynamicContentPublishingGroup;

            var retval = new ContentPublishingConditionsStepViewModel(appConfigRepositoryFactory, countryRepositoryFactory, searchCategoryVmFactory, storeRepositoryFactory, repositoryFactory, entityFactory, item);

            return(retval);
        }
        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);
        }
        private IStoreSettingStepViewModel CreateSettingStepViewModel(params KeyValuePair <string, object>[] parameters)
        {
            var storeRepositoryFactory = new DSRepositoryFactory <IStoreRepository, DSStoreClient, StoreEntityFactory>(_storeServiceUri);

            IStoreEntityFactory entityFactory = new StoreEntityFactory();
            var item   = parameters.Single(x => x.Key == "item").Value as Store;
            var retVal = new StoreSettingsStepViewModel(entityFactory, item, storeRepositoryFactory, this as IViewModelsFactory <IStoreSettingViewModel>);

            return(retVal);
        }
        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);
        }
        private IStorePaymentsStepViewModel CreatePaymentsStepViewModel(params KeyValuePair <string, object>[] parameters)
        {
            var storeRepositoryFactory    = new DSRepositoryFactory <IStoreRepository, DSStoreClient, StoreEntityFactory>(_storeServiceUri);
            var paymentsRepositoryFactory =
                new DSRepositoryFactory <IPaymentMethodRepository, DSOrderClient, OrderEntityFactory>(_orderServiceUri);

            IStoreEntityFactory entityFactory = new StoreEntityFactory();
            var item   = parameters.Single(x => x.Key == "item").Value as Store;
            var retVal = new StorePaymentsStepViewModel(entityFactory, item, storeRepositoryFactory, paymentsRepositoryFactory);

            return(retVal);
        }
        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);
        }
        private IStoreLocalizationStepViewModel CreateStoreLocalizationStepViewModel(
            params KeyValuePair <string, object>[] parameters)
        {
            var storeRepositoryFactory     = new DSRepositoryFactory <IStoreRepository, DSStoreClient, StoreEntityFactory>(_storeServiceUri);
            var appConfigRepositoryFactory =
                new DSRepositoryFactory <IAppConfigRepository, DSAppConfigClient, AppConfigEntityFactory>(_appconfigServiceUri);

            IStoreEntityFactory entityFactory = new StoreEntityFactory();
            var item   = parameters.Single(x => x.Key == "item").Value as Store;
            var retVal = new StoreLocalizationStepViewModel(entityFactory, item, storeRepositoryFactory,
                                                            appConfigRepositoryFactory);

            return(retVal);
        }
Beispiel #11
0
        private ICartPromotionCouponStepViewModel CreatePromotionCouponStepViewModel(
            params KeyValuePair <string, object>[] parameters)
        {
            var repositoryFactory =
                new DSRepositoryFactory <IMarketingRepository, DSMarketingClient, MarketingEntityFactory>(
                    _marketingServiceUri);

            var entityFactory = new MarketingEntityFactory();
            var item          = parameters.SingleOrDefault(x => x.Key == "item").Value as CartPromotion;

            var retval = new CartPromotionCouponStepViewModel(repositoryFactory, entityFactory, item);

            return(retval);
        }
        private IContentPublishingDynamicContentStepViewModel CreateContentPublishingDynamicContentStepViewModel(
            params KeyValuePair <string, object>[] parameters)
        {
            var repositoryFactory =
                new DSRepositoryFactory <IDynamicContentRepository, DSDynamicContentClient, DynamicContentEntityFactory>(
                    _dynamicContentServiceUri);

            IDynamicContentEntityFactory entityFactory = new DynamicContentEntityFactory();
            var item = parameters.SingleOrDefault(x => x.Key == "item").Value as DynamicContentPublishingGroup;

            var retval = new ContentPublishingDynamicContentStepViewModel(repositoryFactory, entityFactory, item);

            return(retval);
        }
        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"));
            }
        }
		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 IStoreOverviewStepViewModel CreateStoreOverviewStep(params KeyValuePair <string, object>[] parameters)
        {
            var storeRepositoryFactory   = new DSRepositoryFactory <IStoreRepository, DSStoreClient, StoreEntityFactory>(_storeServiceUri);
            var catalogRepositoryFactory =
                new DSRepositoryFactory <ICatalogRepository, DSCatalogClient, CatalogEntityFactory>(_catalogServiceUri);
            var fulfillmentRepositoryFactory =
                new DSRepositoryFactory <IFulfillmentCenterRepository, DSStoreClient, StoreEntityFactory>(_storeServiceUri);
            var countryRepositoryFactory =
                new DSRepositoryFactory <ICountryRepository, DSOrderClient, OrderEntityFactory>(_orderServiceUri);


            IStoreEntityFactory entityFactory = new StoreEntityFactory();
            var item   = parameters.SingleOrDefault(x => x.Key == "item").Value as Store;
            var retVal = new StoreOverviewStepViewModel(entityFactory, item, storeRepositoryFactory,
                                                        catalogRepositoryFactory, countryRepositoryFactory, fulfillmentRepositoryFactory);

            return(retVal);
        }
		public void AddCurrencies()
		{
			// create Setting from factory
			var entityFactory = new AppConfigEntityFactory();
			var setting = entityFactory.CreateEntity<Setting>();
			setting.Name = "Currencies";
			setting.SettingValueType = "ShortText";
			setting.IsMultiValue = true;
			setting.IsSystem = true;

			// add currencies
			var id = setting.SettingId;
			setting.SettingValues.Add(new SettingValue() { ValueType = "ShortText", ShortTextValue = "USD", SettingId = id });
			setting.SettingValues.Add(new SettingValue() { ValueType = "ShortText", ShortTextValue = "EUR", SettingId = id });


			var appConfigFactory = new DSRepositoryFactory<IAppConfigRepository, DSAppConfigClient, AppConfigEntityFactory>(ServManager.GetUri(ServiceNameEnum.AppConfig));
			using (var appConfigRepository = appConfigFactory.GetRepositoryInstance())
			{
				appConfigRepository.Add(setting);
				appConfigRepository.UnitOfWork.Commit();
			}
		}
		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
		}
Beispiel #19
0
        public void Can_create_contentpublishingitemviewmodel_in_wizardmode()
        {
            var overviewVmFactory   = new TestDynamicContentViewModelFactory <IContentPublishingOverviewStepViewModel>(ServManager.GetUri(ServiceNameEnum.DynamicContent));
            var placeVmFactory      = new TestDynamicContentViewModelFactory <IContentPublishingContentPlacesStepViewModel>(ServManager.GetUri(ServiceNameEnum.DynamicContent));
            var contentVmFactory    = new TestDynamicContentViewModelFactory <IContentPublishingDynamicContentStepViewModel>(ServManager.GetUri(ServiceNameEnum.DynamicContent));
            var conditionsVmFactory = new TestDynamicContentViewModelFactory <IContentPublishingConditionsStepViewModel>(ServManager.GetUri(ServiceNameEnum.DynamicContent));
            var repositoryFactory   =
                new DSRepositoryFactory <IDynamicContentRepository, DSDynamicContentClient, DynamicContentEntityFactory>(ServManager.GetUri(ServiceNameEnum.DynamicContent));

            //creating additional objects
            DynamicContentPlace[] contentPlaces;
            DynamicContentItem[]  contentItems;
            using (var repository = repositoryFactory.GetRepositoryInstance())
            {
                contentItems  = TestContentItemsBuilder.BuildsContentItems().GetItems().ToArray();
                contentPlaces = TestContentPlacesBuilder.BuildContentPlaces().GetPlaces().ToArray();

                RepositoryHelper.AddItemToRepository(repository, contentItems.AsEnumerable());
                RepositoryHelper.AddItemToRepository(repository, contentPlaces.AsEnumerable());
            }

            var entityFactory = new DynamicContentEntityFactory();
            var item          = entityFactory.CreateEntity <DynamicContentPublishingGroup>();

            //create viewmodel in wizardmode
            var createContentPublishngItemViewModel = new CreateContentPublishingItemViewModel(overviewVmFactory, placeVmFactory, contentVmFactory, conditionsVmFactory, item);

            Assert.NotNull(createContentPublishngItemViewModel);
            Assert.False(createContentPublishngItemViewModel.AllRegisteredSteps[0].IsValid);
            Assert.False(createContentPublishngItemViewModel.AllRegisteredSteps[1].IsValid);
            Assert.False(createContentPublishngItemViewModel.AllRegisteredSteps[2].IsValid);
            Assert.True(createContentPublishngItemViewModel.AllRegisteredSteps[3].IsValid);

            //fill the first step
            var firstStep = createContentPublishngItemViewModel.AllRegisteredSteps[0] as ContentPublishingOverviewStepViewModel;

            Assert.NotNull(firstStep);
            firstStep.InitializeForOpen();
            firstStep.InnerItem.Name        = "NewTestName";
            firstStep.InnerItem.Description = "NewTestDescription";
            firstStep.InnerItem.Priority    = 0;

            Assert.True(firstStep.IsValid);

            //fill the 2 step
            var secondStep =
                createContentPublishngItemViewModel.AllRegisteredSteps[1] as ContentPublishingContentPlacesStepViewModel;

            Assert.NotNull(secondStep);
            secondStep.InitializeForOpen();


            secondStep.InnerItemContentPlaces.Add(contentPlaces[0]);

            Assert.True(secondStep.IsValid);


            //fill the 3 step
            var thirdStep =
                createContentPublishngItemViewModel.AllRegisteredSteps[2] as
                ContentPublishingDynamicContentStepViewModel;

            Assert.NotNull(thirdStep);
            thirdStep.InitializeForOpen();
            thirdStep.InnerItemDynamicContent.Add(contentItems[0]);

            Assert.True(thirdStep.IsValid);

            //fill the 4 step
            var fourthStep =
                createContentPublishngItemViewModel.AllRegisteredSteps[3] as ContentPublishingConditionsStepViewModel;

            Assert.NotNull(fourthStep);
            fourthStep.InitializeForOpen();

            var expression = TestContentPublishingExpressionBuilder.BuildContentPublishingExpressionBuilder(
                fourthStep.ExpressionElementBlock.Children[0])
                             .AddCartTotalElement(fourthStep.ExpressionElementBlock.ExpressionViewModel)
                             .AddConditionAddOrBlock(fourthStep.ExpressionElementBlock.ExpressionViewModel).GetChild();

            fourthStep.ExpressionElementBlock.Children[0] = expression;

            Assert.True(fourthStep.IsValid);

            createContentPublishngItemViewModel.PrepareAndSave();

            using (var repository = repositoryFactory.GetRepositoryInstance())
            {
                var itemFromDb =
                    repository.PublishingGroups.Where(
                        s => s.DynamicContentPublishingGroupId == firstStep.InnerItem.DynamicContentPublishingGroupId)
                    .Expand(cpg => cpg.ContentItems).Expand(cpg => cpg.ContentPlaces)
                    .SingleOrDefault();

                Assert.True(itemFromDb.Name == "NewTestName");
                Assert.True(itemFromDb.Description == "NewTestDescription");
                Assert.NotNull(itemFromDb.ConditionExpression);
                Assert.NotNull(itemFromDb.PredicateVisualTreeSerialized);
            }
        }
Beispiel #20
0
        public void Can_create_cartpromotionviewmodel_in_wizardmode()
        {
            var overviewVmFactory   = new TestMarketingViewModelFactory <ICartPromotionOverviewStepViewModel>(ServManager.GetUri(ServiceNameEnum.Marketing), ServManager.GetUri(ServiceNameEnum.Catalog), ServManager.GetUri(ServiceNameEnum.Store), ServManager.GetUri(ServiceNameEnum.Order), ServManager.GetUri(ServiceNameEnum.AppConfig));
            var couponsVmFactory    = new TestMarketingViewModelFactory <ICartPromotionCouponStepViewModel>(ServManager.GetUri(ServiceNameEnum.Marketing), ServManager.GetUri(ServiceNameEnum.Catalog), ServManager.GetUri(ServiceNameEnum.Store), ServManager.GetUri(ServiceNameEnum.Order), ServManager.GetUri(ServiceNameEnum.AppConfig));
            var conditionsVmFactory = new TestMarketingViewModelFactory <ICartPromotionExpressionStepViewModel>(ServManager.GetUri(ServiceNameEnum.Marketing), ServManager.GetUri(ServiceNameEnum.Catalog), ServManager.GetUri(ServiceNameEnum.Store), ServManager.GetUri(ServiceNameEnum.Order), ServManager.GetUri(ServiceNameEnum.AppConfig));

            var repositoryFactory =
                new DSRepositoryFactory <IMarketingRepository, DSMarketingClient, MarketingEntityFactory>(
                    ServManager.GetUri(ServiceNameEnum.Marketing));


            var entityFactory = new MarketingEntityFactory();
            var item          = entityFactory.CreateEntity <CartPromotion>();

            //create viewmodel in wizardmode
            var createCartPromotionViewModel = new CreateCartPromotionViewModel(overviewVmFactory, conditionsVmFactory, couponsVmFactory, item);

            Assert.NotNull(createCartPromotionViewModel);
            Assert.False(createCartPromotionViewModel.AllRegisteredSteps[0].IsValid);
            Assert.False(createCartPromotionViewModel.AllRegisteredSteps[1].IsValid);
            Assert.True(createCartPromotionViewModel.AllRegisteredSteps[2].IsValid);

            //fill the first step
            var firstStep = createCartPromotionViewModel.AllRegisteredSteps[0] as CartPromotionOverviewStepViewModel;

            Assert.NotNull(firstStep);
            firstStep.InitializeForOpen();
            (firstStep.InnerItem as CartPromotion).StoreId = "TestStore";
            firstStep.InnerItem.StartDate   = DateTime.UtcNow;
            firstStep.InnerItem.Name        = "NewTestName";
            firstStep.InnerItem.Description = "NewTestDescription";
            firstStep.InnerItem.Priority    = 0;

            Assert.True(firstStep.IsValid);

            //fill the 2 step (expression builder)
            var secondStep =
                createCartPromotionViewModel.AllRegisteredSteps[1] as CartPromotionExpressionStepViewModel;

            Assert.NotNull(secondStep);
            secondStep.InitializeForOpen();
            var expression = CartPromotionExpressionBuilderHelper.BuildCartPromotionExpressionBuilder(
                (CartPromotionExpressionBlock)secondStep.ExpressionElementBlock)
                             .AddEveryoneEligibility(secondStep)
                             .AddNumItemsInCartElement(secondStep, false).GetChild();

            //.AddConditionAddOrBlock(secondStep).GetChild();

            secondStep.ExpressionElementBlock.Children[0] = expression;

            Assert.False(secondStep.IsValid);

            //fill the 3 step
            var thirdStep =
                createCartPromotionViewModel.AllRegisteredSteps[2] as
                CartPromotionCouponStepViewModel;

            Assert.NotNull(thirdStep);
            thirdStep.InitializeForOpen();
            thirdStep.HasCoupon = true;
            Assert.False(createCartPromotionViewModel.AllRegisteredSteps[2].IsValid);
            thirdStep.InnerItem.Coupon = new Coupon()
            {
                Code = "testCoupon"
            };
            Assert.True(createCartPromotionViewModel.AllRegisteredSteps[2].IsValid);

            Assert.True(thirdStep.IsValid);

            createCartPromotionViewModel.PrepareAndSave();

            using (var repository = repositoryFactory.GetRepositoryInstance())
            {
                var itemFromDb =
                    repository.Promotions.Where(
                        s => s.PromotionId == firstStep.InnerItem.PromotionId)
                    .Expand(cpg => cpg.Rewards)
                    .SingleOrDefault();

                Assert.True(itemFromDb.Name == "NewTestName");
                Assert.True(itemFromDb.Description == "NewTestDescription");
                Assert.NotNull(itemFromDb.PredicateSerialized);
                Assert.NotNull(itemFromDb.PredicateVisualTreeSerialized);
            }
        }
		public void create_storeviewmodel_in_detailmode_and_edit()
		{
			var overviewVmFactory = new TestFulfillmentViewModelFactory<IStoreOverviewStepViewModel>(
				ServManager.GetUri(ServiceNameEnum.Store), ServManager.GetUri(ServiceNameEnum.Catalog),
				ServManager.GetUri(ServiceNameEnum.Order), ServManager.GetUri(ServiceNameEnum.AppConfig));

			var navigationVmFactory = new TestFulfillmentViewModelFactory<IStoreNavigationStepViewModel>(
				ServManager.GetUri(ServiceNameEnum.Store), ServManager.GetUri(ServiceNameEnum.Catalog),
				ServManager.GetUri(ServiceNameEnum.Order), ServManager.GetUri(ServiceNameEnum.AppConfig));

			var localizationVmFactory = new TestFulfillmentViewModelFactory<IStoreLocalizationStepViewModel>(
				ServManager.GetUri(ServiceNameEnum.Store), ServManager.GetUri(ServiceNameEnum.Catalog),
				ServManager.GetUri(ServiceNameEnum.Order), ServManager.GetUri(ServiceNameEnum.AppConfig));

			var taxesVmFactory = new TestFulfillmentViewModelFactory<IStoreTaxesStepViewModel>(
				ServManager.GetUri(ServiceNameEnum.Store), ServManager.GetUri(ServiceNameEnum.Catalog),
				ServManager.GetUri(ServiceNameEnum.Order), ServManager.GetUri(ServiceNameEnum.AppConfig));

			var paymentsVmFactory = new TestFulfillmentViewModelFactory<IStorePaymentsStepViewModel>(
				ServManager.GetUri(ServiceNameEnum.Store), ServManager.GetUri(ServiceNameEnum.Catalog),
				ServManager.GetUri(ServiceNameEnum.Order), ServManager.GetUri(ServiceNameEnum.AppConfig));

			var linkedStoresVmFactory = new TestFulfillmentViewModelFactory<IStoreLinkedStoresStepViewModel>(
				ServManager.GetUri(ServiceNameEnum.Store), ServManager.GetUri(ServiceNameEnum.Catalog),
				ServManager.GetUri(ServiceNameEnum.Order), ServManager.GetUri(ServiceNameEnum.AppConfig));

			var settingVmFactory = new TestFulfillmentViewModelFactory<IStoreSettingStepViewModel>(
				ServManager.GetUri(ServiceNameEnum.Store), ServManager.GetUri(ServiceNameEnum.Catalog),
				ServManager.GetUri(ServiceNameEnum.Order), ServManager.GetUri(ServiceNameEnum.AppConfig));

			var entityFactory = new StoreEntityFactory();
			var item = entityFactory.CreateEntity<Store>();

			var repositoryFactory =
				new DSRepositoryFactory<IStoreRepository, DSStoreClient, StoreEntityFactory>(
					ServManager.GetUri(ServiceNameEnum.Store));

			var navigationManager = new TestNavigationManager();



			//fill the properties of InnerItem;
			item.Name = "testName";
			item.Catalog = "testcatalog";
			item.Languages.Add(new StoreLanguage() { LanguageCode = "ru-ru", StoreId = item.StoreId });
			item.DefaultLanguage = "ru-ru";
			item.Currencies.Add(new StoreCurrency() { CurrencyCode = "RUR", StoreId = item.StoreId });
			item.DefaultCurrency = "RUR";

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


			var detailStoreViewModel = new StoreViewModel(repositoryFactory, entityFactory, overviewVmFactory, localizationVmFactory, taxesVmFactory, paymentsVmFactory, navigationVmFactory, settingVmFactory, linkedStoresVmFactory, null, null,
				navigationManager, item);
			Assert.NotNull(detailStoreViewModel);
			detailStoreViewModel.InitializeForOpen();


			//edit various properties
			detailStoreViewModel.InnerItem.Name = "EditingName";
			detailStoreViewModel.InnerItem.Catalog = "EditedCatalog";


			detailStoreViewModel.InnerItem.Languages.Add(new StoreLanguage()
			{
				LanguageCode = "de-de",
				StoreId = detailStoreViewModel.InnerItem.StoreId
			});
			detailStoreViewModel.InnerItem.DefaultLanguage = "de-de";

			detailStoreViewModel.InnerItem.Currencies.Add(new StoreCurrency()
			{
				CurrencyCode = "USD",
				StoreId = detailStoreViewModel.InnerItem.StoreId
			});


			detailStoreViewModel.TaxesStepViewModel.AvailableTaxCodes[0].IsChecked = true;
			detailStoreViewModel.TaxesStepViewModel.AvailableTaxCodes[1].IsChecked = true;
			detailStoreViewModel.TaxesStepViewModel.AvailableTaxJurisdictions[0].IsChecked = true;

			detailStoreViewModel.PaymentsStepViewModel.AvailableStoreCardTypes[0].IsChecked = true;

			(detailStoreViewModel.NavigationStepViewModel as StoreNavigationStepViewModel).SettingFilteredNavigation
				.LongTextValue = "NewNavigationText";

			detailStoreViewModel.SaveWithoutUIChanges();


			Store storeFromDb = null;
			using (var repository = repositoryFactory.GetRepositoryInstance())
			{
				storeFromDb =
					repository.Stores.Where(s => s.StoreId == detailStoreViewModel.InnerItem.StoreId).SingleOrDefault();

				Assert.NotNull(storeFromDb);
				Assert.True(storeFromDb.Name == "EditingName");
			}


			//edit various properties

			var detailStoreViewModel2 = new StoreViewModel(repositoryFactory, entityFactory, overviewVmFactory, localizationVmFactory, taxesVmFactory, paymentsVmFactory, navigationVmFactory, settingVmFactory, linkedStoresVmFactory, null, null,
			   navigationManager, item);
			Assert.NotNull(detailStoreViewModel2);
			detailStoreViewModel2.InitializeForOpen();

			detailStoreViewModel.InnerItem.Name = "2 edit";
			detailStoreViewModel.TaxesStepViewModel.AvailableTaxCodes[0].IsChecked = false;
			detailStoreViewModel.TaxesStepViewModel.AvailableTaxCodes[1].IsChecked = false;

			detailStoreViewModel.InnerItem.Settings.Add(new StoreSetting()
			{
				Name = "testSettings",
				ValueType = "0",
				ShortTextValue = "ShortTextValue",
				StoreId = detailStoreViewModel.InnerItem.StoreId
			});


			detailStoreViewModel.SaveWithoutUIChanges();


			using (var repository = repositoryFactory.GetRepositoryInstance())
			{
				var itemFromDb =
					repository.Stores.Where(s => s.StoreId == detailStoreViewModel.InnerItem.StoreId).Expand(s => s.Settings).SingleOrDefault();

				Assert.NotNull(itemFromDb);
				Assert.True(itemFromDb.Name == "2 edit");


				var setting = itemFromDb.Settings.SingleOrDefault(ss => ss.Name == "testSettings");
				Assert.NotNull(setting);

			}

		}
        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_storeviewmodel_in_wizardmode()
		{
			var overviewVmFactory = new TestFulfillmentViewModelFactory<IStoreOverviewStepViewModel>(
				ServManager.GetUri(ServiceNameEnum.Store), ServManager.GetUri(ServiceNameEnum.Catalog),
				ServManager.GetUri(ServiceNameEnum.Order), ServManager.GetUri(ServiceNameEnum.AppConfig));

			var navigationVmFactory = new TestFulfillmentViewModelFactory<IStoreNavigationStepViewModel>(
				ServManager.GetUri(ServiceNameEnum.Store), ServManager.GetUri(ServiceNameEnum.Catalog),
				ServManager.GetUri(ServiceNameEnum.Order), ServManager.GetUri(ServiceNameEnum.AppConfig));

			var localizationVmFactory = new TestFulfillmentViewModelFactory<IStoreLocalizationStepViewModel>(
				ServManager.GetUri(ServiceNameEnum.Store), ServManager.GetUri(ServiceNameEnum.Catalog),
				ServManager.GetUri(ServiceNameEnum.Order), ServManager.GetUri(ServiceNameEnum.AppConfig));

			var taxesVmFactory = new TestFulfillmentViewModelFactory<IStoreTaxesStepViewModel>(
				ServManager.GetUri(ServiceNameEnum.Store), ServManager.GetUri(ServiceNameEnum.Catalog),
				ServManager.GetUri(ServiceNameEnum.Order), ServManager.GetUri(ServiceNameEnum.AppConfig));

			var paymentsVmFactory = new TestFulfillmentViewModelFactory<IStorePaymentsStepViewModel>(
				ServManager.GetUri(ServiceNameEnum.Store), ServManager.GetUri(ServiceNameEnum.Catalog),
				ServManager.GetUri(ServiceNameEnum.Order), ServManager.GetUri(ServiceNameEnum.AppConfig));


			var repositoryFactory =
				new DSRepositoryFactory<IStoreRepository, DSStoreClient, StoreEntityFactory>(
					ServManager.GetUri(ServiceNameEnum.Store));

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

			var createStoreViewModel = new CreateStoreViewModel(overviewVmFactory, localizationVmFactory, taxesVmFactory, paymentsVmFactory, navigationVmFactory, item);


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

			//1 step
			//fill the properties in first step
			var overviewViewModel = createStoreViewModel.AllRegisteredSteps[0] as StoreViewModel;
			Assert.NotNull(overviewViewModel);
			overviewViewModel.InnerItem.Name = "TestName";
			overviewViewModel.InnerItem.Catalog = "TestCatalog";
			overviewViewModel.InitializeForOpen();
			Assert.True(createStoreViewModel.AllRegisteredSteps[0].IsValid);


			//2 step
			//fill the properties in second step
			var localizationStep = createStoreViewModel.AllRegisteredSteps[1] as StoreViewModel;
			Assert.NotNull(localizationStep);
			localizationStep.InnerItem.Languages.Add(new StoreLanguage()
			{
				LanguageCode = "ru-ru",
				StoreId = localizationStep.InnerItem.StoreId
			});
			localizationStep.InnerItem.DefaultLanguage = "ru-ru";

			localizationStep.InnerItem.Currencies.Add(new StoreCurrency()
			{
				CurrencyCode = "RUR",
				StoreId = localizationStep.InnerItem.StoreId
			});
			localizationStep.InnerItem.DefaultCurrency = "RUR";

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


			//3 step
			//fill the properties in third step
			var taxesStep = createStoreViewModel.AllRegisteredSteps[2] as StoreTaxesStepViewModel;
			Assert.NotNull(taxesStep);
			taxesStep.InitializeForOpen();

			taxesStep.AvailableTaxCodes[0].IsChecked = true;
			taxesStep.AvailableTaxJurisdictions[0].IsChecked = true;

			Assert.True(taxesStep.IsValid);


			//4 step
			//fill the properties in 4 step
			var paymentsStep = createStoreViewModel.AllRegisteredSteps[3] as StorePaymentsStepViewModel;
			Assert.NotNull(paymentsStep);
			paymentsStep.InitializeForOpen();

			paymentsStep.AvailableStoreCardTypes[0].IsChecked = true;

			Assert.True(paymentsStep.IsValid);


			//5 step
			//fill the properties in 5 step
			var navigationStep = createStoreViewModel.AllRegisteredSteps[4] as StoreNavigationStepViewModel;
			Assert.NotNull(navigationStep);
			navigationStep.InitializeForOpen();

			navigationStep.SettingFilteredNavigation.LongTextValue = "TestnavigationText";
			Assert.True(navigationStep.IsValid);

			createStoreViewModel.PrepareAndSave();
			using (var repository = repositoryFactory.GetRepositoryInstance())
			{
				var itemFromDb =
					repository.Stores.Where(s => s.StoreId == item.StoreId).ExpandAll().SingleOrDefault();

				Assert.NotNull(itemFromDb);
				Assert.True(itemFromDb.Name == "TestName");
				Assert.True(itemFromDb.Catalog == "TestCatalog");
				Assert.True(itemFromDb.Languages.Any(x => x.LanguageCode == "ru-ru"));
				Assert.True(itemFromDb.Currencies.Any(x => x.CurrencyCode == "RUR"));
			}
		}
        public void Can_create_storeviewmodel_in_wizardmode()
        {
            var overviewVmFactory = new TestFulfillmentViewModelFactory <IStoreOverviewStepViewModel>(
                ServManager.GetUri(ServiceNameEnum.Store), ServManager.GetUri(ServiceNameEnum.Catalog),
                ServManager.GetUri(ServiceNameEnum.Order), ServManager.GetUri(ServiceNameEnum.AppConfig));

            var navigationVmFactory = new TestFulfillmentViewModelFactory <IStoreNavigationStepViewModel>(
                ServManager.GetUri(ServiceNameEnum.Store), ServManager.GetUri(ServiceNameEnum.Catalog),
                ServManager.GetUri(ServiceNameEnum.Order), ServManager.GetUri(ServiceNameEnum.AppConfig));

            var localizationVmFactory = new TestFulfillmentViewModelFactory <IStoreLocalizationStepViewModel>(
                ServManager.GetUri(ServiceNameEnum.Store), ServManager.GetUri(ServiceNameEnum.Catalog),
                ServManager.GetUri(ServiceNameEnum.Order), ServManager.GetUri(ServiceNameEnum.AppConfig));

            var taxesVmFactory = new TestFulfillmentViewModelFactory <IStoreTaxesStepViewModel>(
                ServManager.GetUri(ServiceNameEnum.Store), ServManager.GetUri(ServiceNameEnum.Catalog),
                ServManager.GetUri(ServiceNameEnum.Order), ServManager.GetUri(ServiceNameEnum.AppConfig));

            var paymentsVmFactory = new TestFulfillmentViewModelFactory <IStorePaymentsStepViewModel>(
                ServManager.GetUri(ServiceNameEnum.Store), ServManager.GetUri(ServiceNameEnum.Catalog),
                ServManager.GetUri(ServiceNameEnum.Order), ServManager.GetUri(ServiceNameEnum.AppConfig));


            var repositoryFactory =
                new DSRepositoryFactory <IStoreRepository, DSStoreClient, StoreEntityFactory>(
                    ServManager.GetUri(ServiceNameEnum.Store));

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

            var createStoreViewModel = new CreateStoreViewModel(overviewVmFactory, localizationVmFactory, taxesVmFactory, paymentsVmFactory, navigationVmFactory, item);


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

            //1 step
            //fill the properties in first step
            var overviewViewModel = createStoreViewModel.AllRegisteredSteps[0] as StoreViewModel;

            Assert.NotNull(overviewViewModel);
            overviewViewModel.InnerItem.Name    = "TestName";
            overviewViewModel.InnerItem.Catalog = "TestCatalog";
            overviewViewModel.InitializeForOpen();
            Assert.True(createStoreViewModel.AllRegisteredSteps[0].IsValid);


            //2 step
            //fill the properties in second step
            var localizationStep = createStoreViewModel.AllRegisteredSteps[1] as StoreViewModel;

            Assert.NotNull(localizationStep);
            localizationStep.InnerItem.Languages.Add(new StoreLanguage()
            {
                LanguageCode = "ru-ru",
                StoreId      = localizationStep.InnerItem.StoreId
            });
            localizationStep.InnerItem.DefaultLanguage = "ru-ru";

            localizationStep.InnerItem.Currencies.Add(new StoreCurrency()
            {
                CurrencyCode = "RUR",
                StoreId      = localizationStep.InnerItem.StoreId
            });
            localizationStep.InnerItem.DefaultCurrency = "RUR";

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


            //3 step
            //fill the properties in third step
            var taxesStep = createStoreViewModel.AllRegisteredSteps[2] as StoreTaxesStepViewModel;

            Assert.NotNull(taxesStep);
            taxesStep.InitializeForOpen();

            taxesStep.AvailableTaxCodes[0].IsChecked         = true;
            taxesStep.AvailableTaxJurisdictions[0].IsChecked = true;

            Assert.True(taxesStep.IsValid);


            //4 step
            //fill the properties in 4 step
            var paymentsStep = createStoreViewModel.AllRegisteredSteps[3] as StorePaymentsStepViewModel;

            Assert.NotNull(paymentsStep);
            paymentsStep.InitializeForOpen();

            paymentsStep.AvailableStoreCardTypes[0].IsChecked = true;

            Assert.True(paymentsStep.IsValid);


            //5 step
            //fill the properties in 5 step
            var navigationStep = createStoreViewModel.AllRegisteredSteps[4] as StoreNavigationStepViewModel;

            Assert.NotNull(navigationStep);
            navigationStep.InitializeForOpen();

            navigationStep.SettingFilteredNavigation.LongTextValue = "TestnavigationText";
            Assert.True(navigationStep.IsValid);

            createStoreViewModel.PrepareAndSave();
            using (var repository = repositoryFactory.GetRepositoryInstance())
            {
                var itemFromDb =
                    repository.Stores.Where(s => s.StoreId == item.StoreId).ExpandAll().SingleOrDefault();

                Assert.NotNull(itemFromDb);
                Assert.True(itemFromDb.Name == "TestName");
                Assert.True(itemFromDb.Catalog == "TestCatalog");
                Assert.True(itemFromDb.Languages.Any(x => x.LanguageCode == "ru-ru"));
                Assert.True(itemFromDb.Currencies.Any(x => x.CurrencyCode == "RUR"));
            }
        }
        public void create_storeviewmodel_in_detailmode_and_edit()
        {
            var overviewVmFactory = new TestFulfillmentViewModelFactory <IStoreOverviewStepViewModel>(
                ServManager.GetUri(ServiceNameEnum.Store), ServManager.GetUri(ServiceNameEnum.Catalog),
                ServManager.GetUri(ServiceNameEnum.Order), ServManager.GetUri(ServiceNameEnum.AppConfig));

            var navigationVmFactory = new TestFulfillmentViewModelFactory <IStoreNavigationStepViewModel>(
                ServManager.GetUri(ServiceNameEnum.Store), ServManager.GetUri(ServiceNameEnum.Catalog),
                ServManager.GetUri(ServiceNameEnum.Order), ServManager.GetUri(ServiceNameEnum.AppConfig));

            var localizationVmFactory = new TestFulfillmentViewModelFactory <IStoreLocalizationStepViewModel>(
                ServManager.GetUri(ServiceNameEnum.Store), ServManager.GetUri(ServiceNameEnum.Catalog),
                ServManager.GetUri(ServiceNameEnum.Order), ServManager.GetUri(ServiceNameEnum.AppConfig));

            var taxesVmFactory = new TestFulfillmentViewModelFactory <IStoreTaxesStepViewModel>(
                ServManager.GetUri(ServiceNameEnum.Store), ServManager.GetUri(ServiceNameEnum.Catalog),
                ServManager.GetUri(ServiceNameEnum.Order), ServManager.GetUri(ServiceNameEnum.AppConfig));

            var paymentsVmFactory = new TestFulfillmentViewModelFactory <IStorePaymentsStepViewModel>(
                ServManager.GetUri(ServiceNameEnum.Store), ServManager.GetUri(ServiceNameEnum.Catalog),
                ServManager.GetUri(ServiceNameEnum.Order), ServManager.GetUri(ServiceNameEnum.AppConfig));

            var linkedStoresVmFactory = new TestFulfillmentViewModelFactory <IStoreLinkedStoresStepViewModel>(
                ServManager.GetUri(ServiceNameEnum.Store), ServManager.GetUri(ServiceNameEnum.Catalog),
                ServManager.GetUri(ServiceNameEnum.Order), ServManager.GetUri(ServiceNameEnum.AppConfig));

            var settingVmFactory = new TestFulfillmentViewModelFactory <IStoreSettingStepViewModel>(
                ServManager.GetUri(ServiceNameEnum.Store), ServManager.GetUri(ServiceNameEnum.Catalog),
                ServManager.GetUri(ServiceNameEnum.Order), ServManager.GetUri(ServiceNameEnum.AppConfig));

            var entityFactory = new StoreEntityFactory();
            var item          = entityFactory.CreateEntity <Store>();

            var repositoryFactory =
                new DSRepositoryFactory <IStoreRepository, DSStoreClient, StoreEntityFactory>(
                    ServManager.GetUri(ServiceNameEnum.Store));

            var navigationManager = new TestNavigationManager();



            //fill the properties of InnerItem;
            item.Name    = "testName";
            item.Catalog = "testcatalog";
            item.Languages.Add(new StoreLanguage()
            {
                LanguageCode = "ru-ru", StoreId = item.StoreId
            });
            item.DefaultLanguage = "ru-ru";
            item.Currencies.Add(new StoreCurrency()
            {
                CurrencyCode = "RUR", StoreId = item.StoreId
            });
            item.DefaultCurrency = "RUR";

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


            var detailStoreViewModel = new StoreViewModel(repositoryFactory, entityFactory, overviewVmFactory, localizationVmFactory, taxesVmFactory, paymentsVmFactory, navigationVmFactory, settingVmFactory, linkedStoresVmFactory, null, null,
                                                          navigationManager, item);

            Assert.NotNull(detailStoreViewModel);
            detailStoreViewModel.InitializeForOpen();


            //edit various properties
            detailStoreViewModel.InnerItem.Name    = "EditingName";
            detailStoreViewModel.InnerItem.Catalog = "EditedCatalog";


            detailStoreViewModel.InnerItem.Languages.Add(new StoreLanguage()
            {
                LanguageCode = "de-de",
                StoreId      = detailStoreViewModel.InnerItem.StoreId
            });
            detailStoreViewModel.InnerItem.DefaultLanguage = "de-de";

            detailStoreViewModel.InnerItem.Currencies.Add(new StoreCurrency()
            {
                CurrencyCode = "USD",
                StoreId      = detailStoreViewModel.InnerItem.StoreId
            });


            detailStoreViewModel.TaxesStepViewModel.AvailableTaxCodes[0].IsChecked         = true;
            detailStoreViewModel.TaxesStepViewModel.AvailableTaxCodes[1].IsChecked         = true;
            detailStoreViewModel.TaxesStepViewModel.AvailableTaxJurisdictions[0].IsChecked = true;

            detailStoreViewModel.PaymentsStepViewModel.AvailableStoreCardTypes[0].IsChecked = true;

            (detailStoreViewModel.NavigationStepViewModel as StoreNavigationStepViewModel).SettingFilteredNavigation
            .LongTextValue = "NewNavigationText";

            detailStoreViewModel.SaveWithoutUIChanges();


            Store storeFromDb = null;

            using (var repository = repositoryFactory.GetRepositoryInstance())
            {
                storeFromDb =
                    repository.Stores.Where(s => s.StoreId == detailStoreViewModel.InnerItem.StoreId).SingleOrDefault();

                Assert.NotNull(storeFromDb);
                Assert.True(storeFromDb.Name == "EditingName");
            }


            //edit various properties

            var detailStoreViewModel2 = new StoreViewModel(repositoryFactory, entityFactory, overviewVmFactory, localizationVmFactory, taxesVmFactory, paymentsVmFactory, navigationVmFactory, settingVmFactory, linkedStoresVmFactory, null, null,
                                                           navigationManager, item);

            Assert.NotNull(detailStoreViewModel2);
            detailStoreViewModel2.InitializeForOpen();

            detailStoreViewModel.InnerItem.Name = "2 edit";
            detailStoreViewModel.TaxesStepViewModel.AvailableTaxCodes[0].IsChecked = false;
            detailStoreViewModel.TaxesStepViewModel.AvailableTaxCodes[1].IsChecked = false;

            detailStoreViewModel.InnerItem.Settings.Add(new StoreSetting()
            {
                Name           = "testSettings",
                ValueType      = "0",
                ShortTextValue = "ShortTextValue",
                StoreId        = detailStoreViewModel.InnerItem.StoreId
            });


            detailStoreViewModel.SaveWithoutUIChanges();


            using (var repository = repositoryFactory.GetRepositoryInstance())
            {
                var itemFromDb =
                    repository.Stores.Where(s => s.StoreId == detailStoreViewModel.InnerItem.StoreId).Expand(s => s.Settings).SingleOrDefault();

                Assert.NotNull(itemFromDb);
                Assert.True(itemFromDb.Name == "2 edit");


                var setting = itemFromDb.Settings.SingleOrDefault(ss => ss.Name == "testSettings");
                Assert.NotNull(setting);
            }
        }
        public void Can_create_contentpublishingviewmodel_in_editmode_hardmode()
        {
            var repositoryFactory =
                new DSRepositoryFactory<IDynamicContentRepository, DSDynamicContentClient, DynamicContentEntityFactory>(
                    ServManager.GetUri(ServiceNameEnum.DynamicContent));

            var storeRepositoryFactory =
                new DSRepositoryFactory<IStoreRepository, DSDynamicContentClient, DynamicContentEntityFactory>(
                    ServManager.GetUri(ServiceNameEnum.DynamicContent));

            var countryRepositoryFactory =
                new DSRepositoryFactory<ICountryRepository, DSDynamicContentClient, DynamicContentEntityFactory>(
                    ServManager.GetUri(ServiceNameEnum.DynamicContent));
            var appConfigRepositoryFactory =
               new DSRepositoryFactory<IAppConfigRepository, DSDynamicContentClient, DynamicContentEntityFactory>(
                   ServManager.GetUri(ServiceNameEnum.DynamicContent));

            var searchCategoryVmFactory =
               new TestDynamicContentViewModelFactory<ISearchCategoryViewModel>(
                   ServManager.GetUri(ServiceNameEnum.DynamicContent));

            var navigationManager = new TestNavigationManager();

            DynamicContentPlace[] contentPlaces;
            DynamicContentItem[] contentItems;
            using (var repository = repositoryFactory.GetRepositoryInstance())
            {
                contentPlaces = TestContentPlacesBuilder.BuildContentPlaces().GetPlaces().ToArray();
                contentItems = TestContentItemsBuilder.BuildsContentItems().GetItems().ToArray();

                RepositoryHelper.AddItemToRepository(repository, contentItems.AsEnumerable());
                RepositoryHelper.AddItemToRepository(repository, contentPlaces.AsEnumerable());
            }

            //create fake innerItem
            var entityFactory = new DynamicContentEntityFactory();

            var item =
                TestContentPublishingBuilder.BuildDynamicContentPublishingGroup()
                    .WithContentItems(contentItems.Take(1).ToArray())
                    .WithContentPlaces(contentPlaces.Take(1).ToArray())
                    .GetContentPublishingGroup();

            using (var repository = repositoryFactory.GetRepositoryInstance())
            {
                RepositoryHelper.AddItemToRepository(repository, item);
            }

            var detailViewModel = new ContentPublishingItemViewModel(appConfigRepositoryFactory, countryRepositoryFactory, searchCategoryVmFactory, repositoryFactory, entityFactory, storeRepositoryFactory, navigationManager, item);
            Assert.NotNull(detailViewModel);
            detailViewModel.InitializeForOpen();

            detailViewModel.InnerItem.Name = "EditName";

            //edit 2 step
            detailViewModel.InnerItemContentPlaces.Add(contentPlaces[1]);
            detailViewModel.InnerItemContentPlaces.Remove(contentPlaces[1]);
            detailViewModel.InnerItemContentPlaces.Add(contentPlaces[1]);
            detailViewModel.InnerItemContentPlaces.Remove(contentPlaces[1]);
            detailViewModel.InnerItemContentPlaces.Add(contentPlaces[1]);

            //edit 3 step
            detailViewModel.InnerItemDynamicContent.Add(contentItems[2]);
            detailViewModel.InnerItemDynamicContent.Remove(contentItems[2]);
            detailViewModel.InnerItemDynamicContent.Add(contentItems[2]);
            detailViewModel.InnerItemDynamicContent.Remove(contentItems[2]);


            //edit 4 step
            var expressionViewModel = detailViewModel.ExpressionElementBlock.ExpressionViewModel;
            detailViewModel.ExpressionElementBlock.Children[0] =
                TestContentPublishingExpressionBuilder.BuildContentPublishingExpressionBuilder(
                    detailViewModel.ExpressionElementBlock.Children[0])
                    .AddCartTotalElement(expressionViewModel).AddConditionAddOrBlock(expressionViewModel).GetChild();

            Assert.True(detailViewModel.IsValid);
            detailViewModel.SaveWithoutUIChanges();


            //check the item from db
            using (var repository = repositoryFactory.GetRepositoryInstance())
            {
                var itemFromDb =
                    repository.PublishingGroups.Where(
                        pg =>
                            pg.DynamicContentPublishingGroupId ==
                            detailViewModel.InnerItem.DynamicContentPublishingGroupId)
                        .Expand(pg => pg.ContentItems).Expand(pg => pg.ContentPlaces).SingleOrDefault();

                Assert.NotNull(itemFromDb);
                Assert.True(itemFromDb.ContentItems.Count == 1);
                Assert.True(itemFromDb.ContentPlaces.Count == 2);
                Assert.True(itemFromDb.Name == "EditName");
                Assert.NotNull(itemFromDb.ConditionExpression);
                Assert.NotNull(itemFromDb.PredicateVisualTreeSerialized);
            }


        }
Beispiel #27
0
        public void Can_create_contentpublishingviewmodel_in_editmode_simpleacenarios()
        {
            var repositoryFactory =
                new DSRepositoryFactory <IDynamicContentRepository, DSDynamicContentClient, DynamicContentEntityFactory>(
                    ServManager.GetUri(ServiceNameEnum.DynamicContent));

            var storeRepositoryFactory =
                new DSRepositoryFactory <IStoreRepository, DSDynamicContentClient, DynamicContentEntityFactory>(
                    ServManager.GetUri(ServiceNameEnum.DynamicContent));

            var countryRepositoryFactory =
                new DSRepositoryFactory <ICountryRepository, DSDynamicContentClient, DynamicContentEntityFactory>(
                    ServManager.GetUri(ServiceNameEnum.DynamicContent));

            var appConfigRepositoryFactory =
                new DSRepositoryFactory <IAppConfigRepository, DSDynamicContentClient, DynamicContentEntityFactory>(
                    ServManager.GetUri(ServiceNameEnum.DynamicContent));

            var searchCategoryVmFactory =
                new TestDynamicContentViewModelFactory <ISearchCategoryViewModel>(
                    ServManager.GetUri(ServiceNameEnum.DynamicContent));

            var navigationManager = new TestNavigationManager();

            DynamicContentPlace[] contentPlaces;
            DynamicContentItem[]  contentItems;
            using (var repository = repositoryFactory.GetRepositoryInstance())
            {
                contentPlaces = TestContentPlacesBuilder.BuildContentPlaces().GetPlaces().ToArray();
                contentItems  = TestContentItemsBuilder.BuildsContentItems().GetItems().ToArray();

                RepositoryHelper.AddItemToRepository(repository, contentPlaces.AsEnumerable());
                RepositoryHelper.AddItemToRepository(repository, contentItems.AsEnumerable());
            }

            //create fake innerItem
            var entityFactory = new DynamicContentEntityFactory();

            var item =
                TestContentPublishingBuilder.BuildDynamicContentPublishingGroup()
                .WithContentItems(contentItems)
                .WithContentPlaces(contentPlaces)
                .GetContentPublishingGroup();

            using (var repository = repositoryFactory.GetRepositoryInstance())
            {
                RepositoryHelper.AddItemToRepository(repository, item);
            }

            var detailViewModel = new ContentPublishingItemViewModel(appConfigRepositoryFactory, countryRepositoryFactory, searchCategoryVmFactory, repositoryFactory, entityFactory, storeRepositoryFactory, navigationManager, item);

            Assert.NotNull(detailViewModel);
            detailViewModel.InitializeForOpen();



            //edit properties in detail viewmodel
            detailViewModel.InnerItem.Name        = string.Empty;
            detailViewModel.InnerItem.Description = "EditDescription";
            detailViewModel.InnerItem.Priority    = 23;

            detailViewModel.InnerItemDynamicContent.Clear();
            detailViewModel.InnerItemDynamicContent.Add(contentItems[1]);

            detailViewModel.InnerItemContentPlaces.Clear();
            detailViewModel.InnerItemContentPlaces.Add(contentPlaces[1]);

            detailViewModel.InnerItem.Name = "EditName";
            Assert.True(detailViewModel.IsValid);


            detailViewModel.SaveWithoutUIChanges();

            using (var repository = repositoryFactory.GetRepositoryInstance())
            {
                var itemFromDb =
                    repository.PublishingGroups.Where(
                        pg =>
                        pg.DynamicContentPublishingGroupId ==
                        detailViewModel.InnerItem.DynamicContentPublishingGroupId)
                    .Expand(pg => pg.ContentItems).Expand(pg => pg.ContentPlaces).SingleOrDefault();

                Assert.NotNull(itemFromDb);
                Assert.True(itemFromDb.ContentItems[0].DynamicContentItemId == contentItems[1].DynamicContentItemId);
                Assert.True(itemFromDb.ContentPlaces[0].DynamicContentPlaceId == contentPlaces[1].DynamicContentPlaceId);
                Assert.True(itemFromDb.Name == "EditName");
            }
        }
		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_create_contentpublishingviewmodel_in_editmode_simpleacenarios()
        {
            var repositoryFactory =
                new DSRepositoryFactory<IDynamicContentRepository, DSDynamicContentClient, DynamicContentEntityFactory>(
                    ServManager.GetUri(ServiceNameEnum.DynamicContent));

            var storeRepositoryFactory =
               new DSRepositoryFactory<IStoreRepository, DSDynamicContentClient, DynamicContentEntityFactory>(
                   ServManager.GetUri(ServiceNameEnum.DynamicContent));

            var countryRepositoryFactory =
               new DSRepositoryFactory<ICountryRepository, DSDynamicContentClient, DynamicContentEntityFactory>(
                   ServManager.GetUri(ServiceNameEnum.DynamicContent));

            var appConfigRepositoryFactory =
               new DSRepositoryFactory<IAppConfigRepository, DSDynamicContentClient, DynamicContentEntityFactory>(
                   ServManager.GetUri(ServiceNameEnum.DynamicContent));

            var searchCategoryVmFactory =
               new TestDynamicContentViewModelFactory<ISearchCategoryViewModel>(
                   ServManager.GetUri(ServiceNameEnum.DynamicContent));

            var navigationManager = new TestNavigationManager();

            DynamicContentPlace[] contentPlaces;
            DynamicContentItem[] contentItems;
            using (var repository = repositoryFactory.GetRepositoryInstance())
            {
                contentPlaces = TestContentPlacesBuilder.BuildContentPlaces().GetPlaces().ToArray();
                contentItems = TestContentItemsBuilder.BuildsContentItems().GetItems().ToArray();

                RepositoryHelper.AddItemToRepository(repository, contentPlaces.AsEnumerable());
                RepositoryHelper.AddItemToRepository(repository, contentItems.AsEnumerable());
            }

            //create fake innerItem
            var entityFactory = new DynamicContentEntityFactory();

            var item =
                TestContentPublishingBuilder.BuildDynamicContentPublishingGroup()
                    .WithContentItems(contentItems)
                    .WithContentPlaces(contentPlaces)
                    .GetContentPublishingGroup();

            using (var repository = repositoryFactory.GetRepositoryInstance())
            {
                RepositoryHelper.AddItemToRepository(repository, item);
            }

            var detailViewModel = new ContentPublishingItemViewModel(appConfigRepositoryFactory, countryRepositoryFactory, searchCategoryVmFactory, repositoryFactory, entityFactory, storeRepositoryFactory, navigationManager, item);
            Assert.NotNull(detailViewModel);
            detailViewModel.InitializeForOpen();



            //edit properties in detail viewmodel
            detailViewModel.InnerItem.Name = string.Empty;
            detailViewModel.InnerItem.Description = "EditDescription";
            detailViewModel.InnerItem.Priority = 23;

            detailViewModel.InnerItemDynamicContent.Clear();
            detailViewModel.InnerItemDynamicContent.Add(contentItems[1]);

            detailViewModel.InnerItemContentPlaces.Clear();
            detailViewModel.InnerItemContentPlaces.Add(contentPlaces[1]);

            detailViewModel.InnerItem.Name = "EditName";
            Assert.True(detailViewModel.IsValid);


            detailViewModel.SaveWithoutUIChanges();

            using (var repository = repositoryFactory.GetRepositoryInstance())
            {
                var itemFromDb =
                    repository.PublishingGroups.Where(
                        pg =>
                            pg.DynamicContentPublishingGroupId ==
                            detailViewModel.InnerItem.DynamicContentPublishingGroupId)
                        .Expand(pg => pg.ContentItems).Expand(pg => pg.ContentPlaces).SingleOrDefault();

                Assert.NotNull(itemFromDb);
                Assert.True(itemFromDb.ContentItems[0].DynamicContentItemId == contentItems[1].DynamicContentItemId);
                Assert.True(itemFromDb.ContentPlaces[0].DynamicContentPlaceId == contentPlaces[1].DynamicContentPlaceId);
                Assert.True(itemFromDb.Name == "EditName");
            }
        }
        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_create_contentpublishingitemviewmodel_in_wizardmode()
        {
            var overviewVmFactory = new TestDynamicContentViewModelFactory<IContentPublishingOverviewStepViewModel>(ServManager.GetUri(ServiceNameEnum.DynamicContent));
            var placeVmFactory = new TestDynamicContentViewModelFactory<IContentPublishingContentPlacesStepViewModel>(ServManager.GetUri(ServiceNameEnum.DynamicContent));
            var contentVmFactory = new TestDynamicContentViewModelFactory<IContentPublishingDynamicContentStepViewModel>(ServManager.GetUri(ServiceNameEnum.DynamicContent));
            var conditionsVmFactory = new TestDynamicContentViewModelFactory<IContentPublishingConditionsStepViewModel>(ServManager.GetUri(ServiceNameEnum.DynamicContent));
            var repositoryFactory =
                new DSRepositoryFactory<IDynamicContentRepository, DSDynamicContentClient, DynamicContentEntityFactory>(ServManager.GetUri(ServiceNameEnum.DynamicContent));

            //creating additional objects
            DynamicContentPlace[] contentPlaces;
            DynamicContentItem[] contentItems;
            using (var repository = repositoryFactory.GetRepositoryInstance())
            {
                contentItems = TestContentItemsBuilder.BuildsContentItems().GetItems().ToArray();
                contentPlaces = TestContentPlacesBuilder.BuildContentPlaces().GetPlaces().ToArray();

                RepositoryHelper.AddItemToRepository(repository, contentItems.AsEnumerable());
                RepositoryHelper.AddItemToRepository(repository, contentPlaces.AsEnumerable());
            }

            var entityFactory = new DynamicContentEntityFactory();
            var item = entityFactory.CreateEntity<DynamicContentPublishingGroup>();

            //create viewmodel in wizardmode
            var createContentPublishngItemViewModel = new CreateContentPublishingItemViewModel(overviewVmFactory, placeVmFactory, contentVmFactory, conditionsVmFactory, item);
            Assert.NotNull(createContentPublishngItemViewModel);
            Assert.False(createContentPublishngItemViewModel.AllRegisteredSteps[0].IsValid);
            Assert.False(createContentPublishngItemViewModel.AllRegisteredSteps[1].IsValid);
            Assert.False(createContentPublishngItemViewModel.AllRegisteredSteps[2].IsValid);
            Assert.True(createContentPublishngItemViewModel.AllRegisteredSteps[3].IsValid);

            //fill the first step
            var firstStep = createContentPublishngItemViewModel.AllRegisteredSteps[0] as ContentPublishingOverviewStepViewModel;
            Assert.NotNull(firstStep);
            firstStep.InitializeForOpen();
            firstStep.InnerItem.Name = "NewTestName";
            firstStep.InnerItem.Description = "NewTestDescription";
            firstStep.InnerItem.Priority = 0;

            Assert.True(firstStep.IsValid);

            //fill the 2 step
            var secondStep =
                createContentPublishngItemViewModel.AllRegisteredSteps[1] as ContentPublishingContentPlacesStepViewModel;
            Assert.NotNull(secondStep);
            secondStep.InitializeForOpen();


            secondStep.InnerItemContentPlaces.Add(contentPlaces[0]);

            Assert.True(secondStep.IsValid);


            //fill the 3 step
            var thirdStep =
                createContentPublishngItemViewModel.AllRegisteredSteps[2] as
                    ContentPublishingDynamicContentStepViewModel;
            Assert.NotNull(thirdStep);
            thirdStep.InitializeForOpen();
            thirdStep.InnerItemDynamicContent.Add(contentItems[0]);

            Assert.True(thirdStep.IsValid);

            //fill the 4 step
            var fourthStep =
                createContentPublishngItemViewModel.AllRegisteredSteps[3] as ContentPublishingConditionsStepViewModel;
            Assert.NotNull(fourthStep);
            fourthStep.InitializeForOpen();

            var expression = TestContentPublishingExpressionBuilder.BuildContentPublishingExpressionBuilder(
                fourthStep.ExpressionElementBlock.Children[0])
                .AddCartTotalElement(fourthStep.ExpressionElementBlock.ExpressionViewModel)
                .AddConditionAddOrBlock(fourthStep.ExpressionElementBlock.ExpressionViewModel).GetChild();

            fourthStep.ExpressionElementBlock.Children[0] = expression;

            Assert.True(fourthStep.IsValid);

            createContentPublishngItemViewModel.PrepareAndSave();

            using (var repository = repositoryFactory.GetRepositoryInstance())
            {
                var itemFromDb =
                    repository.PublishingGroups.Where(
                        s => s.DynamicContentPublishingGroupId == firstStep.InnerItem.DynamicContentPublishingGroupId)
                        .Expand(cpg => cpg.ContentItems).Expand(cpg => cpg.ContentPlaces)
                        .SingleOrDefault();

                Assert.True(itemFromDb.Name == "NewTestName");
                Assert.True(itemFromDb.Description == "NewTestDescription");
                Assert.NotNull(itemFromDb.ConditionExpression);
                Assert.NotNull(itemFromDb.PredicateVisualTreeSerialized);
            }
        }
		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"));
			}
		}
Beispiel #33
0
        public void Can_create_contentpublishingviewmodel_in_editmode_hardmode()
        {
            var repositoryFactory =
                new DSRepositoryFactory <IDynamicContentRepository, DSDynamicContentClient, DynamicContentEntityFactory>(
                    ServManager.GetUri(ServiceNameEnum.DynamicContent));

            var storeRepositoryFactory =
                new DSRepositoryFactory <IStoreRepository, DSDynamicContentClient, DynamicContentEntityFactory>(
                    ServManager.GetUri(ServiceNameEnum.DynamicContent));

            var countryRepositoryFactory =
                new DSRepositoryFactory <ICountryRepository, DSDynamicContentClient, DynamicContentEntityFactory>(
                    ServManager.GetUri(ServiceNameEnum.DynamicContent));
            var appConfigRepositoryFactory =
                new DSRepositoryFactory <IAppConfigRepository, DSDynamicContentClient, DynamicContentEntityFactory>(
                    ServManager.GetUri(ServiceNameEnum.DynamicContent));

            var searchCategoryVmFactory =
                new TestDynamicContentViewModelFactory <ISearchCategoryViewModel>(
                    ServManager.GetUri(ServiceNameEnum.DynamicContent));

            var navigationManager = new TestNavigationManager();

            DynamicContentPlace[] contentPlaces;
            DynamicContentItem[]  contentItems;
            using (var repository = repositoryFactory.GetRepositoryInstance())
            {
                contentPlaces = TestContentPlacesBuilder.BuildContentPlaces().GetPlaces().ToArray();
                contentItems  = TestContentItemsBuilder.BuildsContentItems().GetItems().ToArray();

                RepositoryHelper.AddItemToRepository(repository, contentItems.AsEnumerable());
                RepositoryHelper.AddItemToRepository(repository, contentPlaces.AsEnumerable());
            }

            //create fake innerItem
            var entityFactory = new DynamicContentEntityFactory();

            var item =
                TestContentPublishingBuilder.BuildDynamicContentPublishingGroup()
                .WithContentItems(contentItems.Take(1).ToArray())
                .WithContentPlaces(contentPlaces.Take(1).ToArray())
                .GetContentPublishingGroup();

            using (var repository = repositoryFactory.GetRepositoryInstance())
            {
                RepositoryHelper.AddItemToRepository(repository, item);
            }

            var detailViewModel = new ContentPublishingItemViewModel(appConfigRepositoryFactory, countryRepositoryFactory, searchCategoryVmFactory, repositoryFactory, entityFactory, storeRepositoryFactory, navigationManager, item);

            Assert.NotNull(detailViewModel);
            detailViewModel.InitializeForOpen();

            detailViewModel.InnerItem.Name = "EditName";

            //edit 2 step
            detailViewModel.InnerItemContentPlaces.Add(contentPlaces[1]);
            detailViewModel.InnerItemContentPlaces.Remove(contentPlaces[1]);
            detailViewModel.InnerItemContentPlaces.Add(contentPlaces[1]);
            detailViewModel.InnerItemContentPlaces.Remove(contentPlaces[1]);
            detailViewModel.InnerItemContentPlaces.Add(contentPlaces[1]);

            //edit 3 step
            detailViewModel.InnerItemDynamicContent.Add(contentItems[2]);
            detailViewModel.InnerItemDynamicContent.Remove(contentItems[2]);
            detailViewModel.InnerItemDynamicContent.Add(contentItems[2]);
            detailViewModel.InnerItemDynamicContent.Remove(contentItems[2]);


            //edit 4 step
            var expressionViewModel = detailViewModel.ExpressionElementBlock.ExpressionViewModel;

            detailViewModel.ExpressionElementBlock.Children[0] =
                TestContentPublishingExpressionBuilder.BuildContentPublishingExpressionBuilder(
                    detailViewModel.ExpressionElementBlock.Children[0])
                .AddCartTotalElement(expressionViewModel).AddConditionAddOrBlock(expressionViewModel).GetChild();

            Assert.True(detailViewModel.IsValid);
            detailViewModel.SaveWithoutUIChanges();


            //check the item from db
            using (var repository = repositoryFactory.GetRepositoryInstance())
            {
                var itemFromDb =
                    repository.PublishingGroups.Where(
                        pg =>
                        pg.DynamicContentPublishingGroupId ==
                        detailViewModel.InnerItem.DynamicContentPublishingGroupId)
                    .Expand(pg => pg.ContentItems).Expand(pg => pg.ContentPlaces).SingleOrDefault();

                Assert.NotNull(itemFromDb);
                Assert.True(itemFromDb.ContentItems.Count == 1);
                Assert.True(itemFromDb.ContentPlaces.Count == 2);
                Assert.True(itemFromDb.Name == "EditName");
                Assert.NotNull(itemFromDb.ConditionExpression);
                Assert.NotNull(itemFromDb.PredicateVisualTreeSerialized);
            }
        }
		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_cartpromotionviewmodel_in_wizardmode()
        {
			var overviewVmFactory = new TestMarketingViewModelFactory<ICartPromotionOverviewStepViewModel>(ServManager.GetUri(ServiceNameEnum.Marketing), ServManager.GetUri(ServiceNameEnum.Catalog), ServManager.GetUri(ServiceNameEnum.Store), ServManager.GetUri(ServiceNameEnum.Order), ServManager.GetUri(ServiceNameEnum.AppConfig));
			var couponsVmFactory = new TestMarketingViewModelFactory<ICartPromotionCouponStepViewModel>(ServManager.GetUri(ServiceNameEnum.Marketing), ServManager.GetUri(ServiceNameEnum.Catalog), ServManager.GetUri(ServiceNameEnum.Store), ServManager.GetUri(ServiceNameEnum.Order), ServManager.GetUri(ServiceNameEnum.AppConfig));
			var conditionsVmFactory = new TestMarketingViewModelFactory<ICartPromotionExpressionStepViewModel>(ServManager.GetUri(ServiceNameEnum.Marketing), ServManager.GetUri(ServiceNameEnum.Catalog), ServManager.GetUri(ServiceNameEnum.Store), ServManager.GetUri(ServiceNameEnum.Order), ServManager.GetUri(ServiceNameEnum.AppConfig));

            var repositoryFactory =
                new DSRepositoryFactory<IMarketingRepository, DSMarketingClient, MarketingEntityFactory>(
					ServManager.GetUri(ServiceNameEnum.Marketing));

            
            var entityFactory = new MarketingEntityFactory();
            var item = entityFactory.CreateEntity<CartPromotion>();

            //create viewmodel in wizardmode
            var createCartPromotionViewModel = new CreateCartPromotionViewModel(overviewVmFactory, conditionsVmFactory, couponsVmFactory, item);
			Assert.NotNull(createCartPromotionViewModel);
			Assert.False(createCartPromotionViewModel.AllRegisteredSteps[0].IsValid);
			Assert.False(createCartPromotionViewModel.AllRegisteredSteps[1].IsValid);
			Assert.True(createCartPromotionViewModel.AllRegisteredSteps[2].IsValid);
			
            //fill the first step
            var firstStep = createCartPromotionViewModel.AllRegisteredSteps[0] as CartPromotionOverviewStepViewModel;
            Assert.NotNull(firstStep);
            firstStep.InitializeForOpen();
	        (firstStep.InnerItem as CartPromotion).StoreId = "TestStore";
	        firstStep.InnerItem.StartDate = DateTime.UtcNow;
            firstStep.InnerItem.Name = "NewTestName";
            firstStep.InnerItem.Description = "NewTestDescription";
            firstStep.InnerItem.Priority = 0;

            Assert.True(firstStep.IsValid);
			
            //fill the 2 step (expression builder)
			var secondStep =
				createCartPromotionViewModel.AllRegisteredSteps[1] as CartPromotionExpressionStepViewModel;
            Assert.NotNull(secondStep);
			secondStep.InitializeForOpen();
	        var expression = CartPromotionExpressionBuilderHelper.BuildCartPromotionExpressionBuilder(
		        (CartPromotionExpressionBlock) secondStep.ExpressionElementBlock)
	                                                             .AddEveryoneEligibility(secondStep)
																 .AddNumItemsInCartElement(secondStep, false).GetChild();
				//.AddConditionAddOrBlock(secondStep).GetChild();

			secondStep.ExpressionElementBlock.Children[0] = expression;

			Assert.False(secondStep.IsValid);
			
			//fill the 3 step
			var thirdStep =
				createCartPromotionViewModel.AllRegisteredSteps[2] as
					CartPromotionCouponStepViewModel;
			Assert.NotNull(thirdStep);
			thirdStep.InitializeForOpen();
			thirdStep.HasCoupon = true;
			Assert.False(createCartPromotionViewModel.AllRegisteredSteps[2].IsValid);
	        thirdStep.InnerItem.Coupon = new Coupon() {Code = "testCoupon"};
			Assert.True(createCartPromotionViewModel.AllRegisteredSteps[2].IsValid);

			Assert.True(thirdStep.IsValid);

			createCartPromotionViewModel.PrepareAndSave();

            using (var repository = repositoryFactory.GetRepositoryInstance())
            {
                var itemFromDb =
                    repository.Promotions.Where(
                        s => s.PromotionId == firstStep.InnerItem.PromotionId)
                        .Expand(cpg=>cpg.Rewards)
                        .SingleOrDefault();

                Assert.True(itemFromDb.Name == "NewTestName");
                Assert.True(itemFromDb.Description == "NewTestDescription");
                Assert.NotNull(itemFromDb.PredicateSerialized);
                Assert.NotNull(itemFromDb.PredicateVisualTreeSerialized);
            }
        }
        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
        }