public void GetUriWithQueryParameter_ReplacesWhenParameterExists(string baseUri, string expectedUri)
    {
        var navigationManager = new TestNavigationManager(baseUri);
        var actualUri         = navigationManager.GetUriWithQueryParameter("full name", "John Doe");

        Assert.Equal(expectedUri, actualUri);
    }
    public void GetUriWithQueryParameter_RemovesWhenParameterValueIsNull(string baseUri, string expectedUri)
    {
        var navigationManager = new TestNavigationManager(baseUri);
        var actualUri         = navigationManager.GetUriWithQueryParameter("full name", (string)null);

        Assert.Equal(expectedUri, actualUri);
    }
    public void GetUriWithQueryParameter_AppendsWhenParameterDoesNotExist(string baseUri, string expectedUri)
    {
        var navigationManager = new TestNavigationManager(baseUri);
        var actualUri         = navigationManager.GetUriWithQueryParameter("name", "John Doe");

        Assert.Equal(expectedUri, actualUri);
    }
Beispiel #4
0
    public async Task AuthenticationManager_DisplaysRightUI_WhenPathsAreMissing(UIValidator validator, string methodName)
    {
        // Arrange
        var renderer = new TestRenderer(new ServiceCollection().BuildServiceProvider());
        var testNavigationManager = new TestNavigationManager("https://www.example.com/", "Some error message.", "https://www.example.com/");
        var logger        = new TestLoggerFactory(new TestSink(), false).CreateLogger <RemoteAuthenticatorViewCore <RemoteAuthenticationState> >();
        var authenticator = new TestRemoteAuthenticatorView(new RemoteAuthenticationApplicationPathsOptions(), testNavigationManager);

        authenticator.Logger = logger;
        renderer.Attach(authenticator);

        var parameters = ParameterView.FromDictionary(new Dictionary <string, object>
        {
            [_action] = validator.Action
        });

        // Act
        await renderer.Dispatcher.InvokeAsync <object>(() => authenticator.SetParametersAsync(parameters));

        validator.RetrieveOriginalRender(authenticator);
        validator.SetupFakeRender(authenticator);
        Task result = await renderer.Dispatcher.InvokeAsync <Task>(() => authenticator.SetParametersAsync(parameters));

        // Assert
        Assert.True(validator.WasCalled);
        Assert.Equal(methodName, validator.OriginalRender.Method.Name);
    }
    public void ComputesCorrectValidBaseRelativePaths(string baseUri, string uri, string expectedResult)
    {
        var navigationManager = new TestNavigationManager(baseUri);

        var actualResult = navigationManager.ToBaseRelativePath(uri);

        Assert.Equal(expectedResult, actualResult);
    }
    public void GetUriWithQueryParameter_ThrowsWhenNameIsNullOrEmpty(string name)
    {
        var baseUri           = "scheme://host/";
        var navigationManager = new TestNavigationManager(baseUri);

        var exception = Assert.Throws <InvalidOperationException>(() => navigationManager.GetUriWithQueryParameter(name, "test"));

        Assert.StartsWith("Cannot have empty query parameter names.", exception.Message);
    }
    public void GetUriWithQueryParameters_SupportsEnumerableValues(string baseUri, string expectedUri)
    {
        var navigationManager = new TestNavigationManager(baseUri);
        var actualUri         = navigationManager.GetUriWithQueryParameters(new Dictionary <string, object>
        {
            ["full name"] = "John Doe", // Single value
            ["ping"]      = new int?[] { 35, 16, null, 87, 240 }
        });

        Assert.Equal(expectedUri, actualUri);
    }
    public void GetUriWithQueryParameters_CanAddUpdateAndRemove(string baseUri, string expectedUri)
    {
        var navigationManager = new TestNavigationManager(baseUri);
        var actualUri         = navigationManager.GetUriWithQueryParameters(new Dictionary <string, object>
        {
            ["name"]      = null,     // Remove
            ["age"]       = (int?)25, // Add/update
            ["eye color"] = "green",  // Add/update
        });

        Assert.Equal(expectedUri, actualUri);
    }
Beispiel #9
0
        public void UriWithQueryParameterOfTValue_SkipsNullValues(string baseUri, string expectedUri)
        {
            var navigationManager = new TestNavigationManager(baseUri);
            var actualUri         = navigationManager.UriWithQueryParameter("items", new int?[]
            {
                5,
                null,
                13,
            });

            Assert.Equal(expectedUri, actualUri);
        }
Beispiel #10
0
        public void UriWithQueryParameterOfTValue_ReplacesExistingQueryParameters(string baseUri, string expectedUri)
        {
            var navigationManager = new TestNavigationManager(baseUri);
            var actualUri         = navigationManager.UriWithQueryParameter("item filter", new string[]
            {
                "price:low",
                "shipping:free",
                "category:rug",
            });

            Assert.Equal(expectedUri, actualUri);
        }
    public void ToBaseRelativePath_ThrowsForInvalidBaseRelativePaths(string baseUri, string absoluteUri)
    {
        var navigationManager = new TestNavigationManager(baseUri);

        var ex = Assert.Throws <ArgumentException>(() =>
        {
            navigationManager.ToBaseRelativePath(absoluteUri);
        });

        Assert.Equal(
            $"The URI '{absoluteUri}' is not contained by the base URI '{baseUri}'.",
            ex.Message);
    }
    public void GetUriWithQueryParameters_ThrowsWhenParameterValueTypeIsUnsupported()
    {
        var baseUri                    = "scheme://host/";
        var navigationManager          = new TestNavigationManager(baseUri);
        var unsupportedParameterValues = new Dictionary <string, object>
        {
            ["value"] = new { Value = 3 }
        };

        var exception = Assert.Throws <InvalidOperationException>(() => navigationManager.GetUriWithQueryParameters(unsupportedParameterValues));

        Assert.StartsWith("Cannot format query parameters with values of type", exception.Message);
    }
    public void GetUriWithQueryParameters_ThrowsWhenAnyParameterNameIsEmpty(string baseUri)
    {
        var navigationManager = new TestNavigationManager(baseUri);
        var values            = new Dictionary <string, object>
        {
            ["name1"]      = "value1",
            [string.Empty] = "value2",
        };

        var exception = Assert.Throws <InvalidOperationException>(() => navigationManager.GetUriWithQueryParameters(values));

        Assert.StartsWith("Cannot have empty query parameter names.", exception.Message);
    }
Beispiel #14
0
    public void LocationChangingHandlers_CanContinueTheNavigationSynchronously_WhenOneHandlerIsRegistered()
    {
        // Arrange
        var baseUri           = "scheme://host/";
        var navigationManager = new TestNavigationManager(baseUri);

        navigationManager.RegisterLocationChangingHandler(HandleLocationChanging);

        // Act
        var navigation1 = navigationManager.RunNotifyLocationChangingAsync($"{baseUri}/subdir1", null, false);

        // Assert
        Assert.True(navigation1.IsCompletedSuccessfully);
        Assert.True(navigation1.Result);
        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);
        }
Beispiel #16
0
        public RouterTest()
        {
            var services = new ServiceCollection();

            _navigationManager = new TestNavigationManager();
            services.AddSingleton <ILoggerFactory>(NullLoggerFactory.Instance);
            services.AddSingleton <NavigationManager>(_navigationManager);
            services.AddSingleton <INavigationInterception, TestNavigationInterception>();
            var serviceProvider = services.BuildServiceProvider();

            _renderer = new TestRenderer(serviceProvider);
            _renderer.ShouldHandleExceptions = true;
            _router             = (Router)_renderer.InstantiateComponent <Router>();
            _router.AppAssembly = Assembly.GetExecutingAssembly();
            _router.Found       = routeData => (builder) => builder.AddContent(0, $"Rendering route matching {routeData.PageType}");
            _renderer.AssignRootComponentId(_router);
        }
Beispiel #17
0
    public async Task AuthenticationManager_DoesNotThrowExceptionOnDisplaysUI_WhenPathsAreMissing(UIValidator validator)
    {
        // Arrange
        var renderer = new TestRenderer(new ServiceCollection().BuildServiceProvider());
        var testNavigationManager = new TestNavigationManager("https://www.example.com/", "Some error message.", "https://www.example.com/");
        var logger        = new TestLoggerFactory(new TestSink(), false).CreateLogger <RemoteAuthenticatorViewCore <RemoteAuthenticationState> >();
        var authenticator = new TestRemoteAuthenticatorView(new RemoteAuthenticationApplicationPathsOptions(), testNavigationManager);

        authenticator.Logger = logger;
        renderer.Attach(authenticator);
        validator.SetupFakeRender(authenticator);

        var parameters = ParameterView.FromDictionary(new Dictionary <string, object>
        {
            [_action] = validator.Action
        });

        // Act
        Task result = await renderer.Dispatcher.InvokeAsync <Task>(() => authenticator.SetParametersAsync(parameters));

        // Assert
        Assert.Null(result.Exception);
    }
Beispiel #18
0
    public async Task AuthenticationManager_DisplaysRightUI_ForEachStateAsync(UIValidator validator)
    {
        // Arrange
        var renderer = new TestRenderer(new ServiceCollection().BuildServiceProvider());
        var testNavigationManager = new TestNavigationManager("https://www.example.com/", "Some error message.", "https://www.example.com/");
        var logger        = new TestLoggerFactory(new TestSink(), false).CreateLogger <RemoteAuthenticatorViewCore <RemoteAuthenticationState> >();
        var authenticator = new TestRemoteAuthenticatorView(testNavigationManager);

        authenticator.Logger = logger;
        renderer.Attach(authenticator);
        validator.SetupFakeRender(authenticator);

        var parameters = ParameterView.FromDictionary(new Dictionary <string, object>
        {
            [_action] = validator.Action
        });

        // Act
        await renderer.Dispatcher.InvokeAsync <object>(() => authenticator.SetParametersAsync(parameters));

        // Assert
        Assert.True(validator.WasCalled);
    }
        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 #20
0
 public MultiTenantRouterTests()
 {
     _navigationManager = new TestNavigationManager();
 }
Beispiel #21
0
        public NavigateToQueryParamsTests(TestNavigationManagerFixture navigationManagerFixture)
        {
            uri = "newPage";

            navigationManager = navigationManagerFixture.NavigationManager;
        }
Beispiel #22
0
        private static void NavigateToLoginPage(TestLoggerProvider testLoggerProvider, TestServer server, IServiceScope scope, ConcurrentDictionary <object, object> sessionStore, out HttpClient httpClient, out string redirectUri)
        {
            SeedData.SeedUsers(scope);
            SeedData.SeedConfiguration(scope);

            using var host = new TestHost();
            var jsRuntimeMock = new Mock <IJSRuntime>();
            var navigationInterceptionMock = new Mock <INavigationInterception>();
            var navigationManager          = new TestNavigationManager(uri: "http://exemple.com");

            var client = server.CreateClient();

            httpClient = client;

            host.ConfigureServices(services =>
            {
                blazorApp.Program.ConfigureServices(services);
                services
                .AddLogging(configure =>
                {
                    configure.AddProvider(testLoggerProvider);
                })
                .AddIdentityServer4AdminHttpStores(p => Task.FromResult(client))
                .AddSingleton(p => navigationManager)
                .AddSingleton <NavigationManager>(p => p.GetRequiredService <TestNavigationManager>())
                .AddSingleton(p => jsRuntimeMock.Object)
                .AddSingleton(p => navigationInterceptionMock.Object);
            });

            var httpMock = host.AddMockHttp();

            httpMock.Fallback.Respond(httpClient);
            jsRuntimeMock.Setup(m => m.InvokeAsync <object>("sessionStorage.setItem", It.IsAny <object[]>()))
            .Callback <string, object[]>((_, array) => sessionStore.AddOrUpdate(array[0], array[1], (k, v) => array[1]))
            .ReturnsAsync(null);

            string navigatedUri = null;
            var    waitHandle   = new ManualResetEvent(false);

            navigationManager.OnNavigateToCore = (uri, f) =>
            {
                navigatedUri = uri;
                waitHandle.Set();
            };

            var settingsRequest = httpMock.Capture("/settings.json");
            var component       = host.AddComponent <blazorApp.App>();

            var markup = component.GetMarkup();

            Assert.Contains("Authentication in progress", markup);

            host.WaitForNextRender(() =>
            {
                settingsRequest.SetResult(new
                {
                    ClientId = "theidserveradmin",
                    Scope    = "openid profile theidserveradminapi"
                });
            });

            host.WaitForContains(component, "You are redirecting to the login page. please wait");

            WaitForHttpResponse(waitHandle);

            redirectUri = navigatedUri;
        }
 public TestNavigationManagerFixture()
 {
     NavigationManager = new TestNavigationManager(BaseUri, Uri);
 }
        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);
        }
Beispiel #25
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");
            }
        }
Beispiel #26
0
 public ReloadTests(TestNavigationManagerFixture navigationManagerFixture)
 {
     navigationManager = navigationManagerFixture.NavigationManager;
 }
Beispiel #27
0
        private static void OpenLogggedPage(TestLoggerProvider testLoggerProvider, HttpClient httpClient, ConcurrentDictionary <object, object> sessionStore, string location)
        {
            using var host = new TestHost();
            var jsRuntimeMock = new Mock <IJSRuntime>();
            var navigationInterceptionMock = new Mock <INavigationInterception>();
            var navigationManager          = new TestNavigationManager(uri: location);

            host.ConfigureServices(services =>
            {
                blazorApp.Program.ConfigureServices(services);
                services
                .AddLogging(configure =>
                {
                    configure.AddProvider(testLoggerProvider);
                })
                .AddIdentityServer4AdminHttpStores(p => Task.FromResult(httpClient))
                .AddSingleton(p => navigationManager)
                .AddSingleton <NavigationManager>(p => p.GetRequiredService <TestNavigationManager>())
                .AddSingleton(p => jsRuntimeMock.Object)
                .AddSingleton(p => navigationInterceptionMock.Object);
            });

            var httpMock = host.AddMockHttp();

            httpMock.Fallback.Respond(httpClient);

            foreach (var key in sessionStore.Keys)
            {
                jsRuntimeMock.Setup(m => m.InvokeAsync <string>("sessionStorage.getItem", It.Is <object[]>(p => p[0].ToString() == key.ToString())))
                .ReturnsAsync <string, object[], IJSRuntime, string>((_, array) =>
                {
                    if (sessionStore.TryGetValue(array[0], out object value))
                    {
                        return((string)value);
                    }
                    throw new InvalidOperationException($"sessionStore doesn't contain key {key}");
                });
            }

            string navigatedUri = null;
            var    waitHandle   = new ManualResetEvent(false);

            navigationManager.OnNavigateToCore = (uri, f) =>
            {
                navigatedUri = uri;
                waitHandle.Set();
            };

            var settingsRequest = httpMock.Capture("/settings.json");
            var component       = host.AddComponent <blazorApp.App>();

            var markup = component.GetMarkup();

            Assert.Contains("Authentication in progress", markup);

            host.WaitForNextRender(() =>
            {
                settingsRequest.SetResult(new
                {
                    ClientId = "theidserveradmin",
                    Scope    = "openid profile theidserveradminapi"
                });
            });


            WaitForHttpResponse(waitHandle);

            Assert.Equal("http://exemple.com", navigatedUri);
        }
        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);
            }
        }
Beispiel #29
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);
            }
        }