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

			}

		}