public async Task RouteAnUnknownIntentToTheDefaultHandler() { string defaultRouteUri = $"http://{string.Empty.GetRandom()}"; var cmdProcessor = new Mock <ICommandProcessor>(MockBehavior.Loose); var routes = new RouteCollectionBuilder(defaultRouteUri) .Add(string.Empty.GetRandom(), string.Empty.GetRandom()) .Add(string.Empty.GetRandom(), string.Empty.GetRandom()) .Add(string.Empty.GetRandom(), string.Empty.GetRandom()) .Build().AsJsonString(); var routeCollection = new List <KeyValuePair <string, string> >() { new KeyValuePair <string, string>("intentRoutes", routes) }; var config = new ConfigurationBuilder().AddInMemoryCollection(routeCollection).Build(); var containerBuilder = new Autofac.ContainerBuilder(); containerBuilder.RegisterInstance <ICommandProcessor>(cmdProcessor.Object); containerBuilder.RegisterInstance <IConfiguration>(config); var serviceProvider = new AutofacServiceProvider(containerBuilder.Build()); var request = new UserRequestBuilder().Random().Build(); var target = new ConfigRouter.Engine(serviceProvider); var actual = await target.HandleRequestAsync(request); cmdProcessor.Verify(p => p.ProcessAsync(defaultRouteUri, It.IsAny <UserRequest>()), Times.Once); }
public void ThrowsADuplicateRouteExceptionIfAnotherRouteNamedDefaultIsAdded() { var target = new RouteCollectionBuilder(string.Empty.GetRandom()); Assert.Throws <Exceptions.DuplicateRouteException>(() => target .Add(string.Empty.GetRandom(), string.Empty.GetRandom()) .Add("default", string.Empty.GetRandom()) .Build()); }
public void ReturnACollectionWithARouteWithTheSpecifiedName() { string expectedName = string.Empty.GetRandom(); string expectedUri = $"http://{string.Empty.GetRandom()}"; var target = new RouteCollectionBuilder(string.Empty.GetRandom()); var actual = target .Add(expectedName, expectedUri) .Build(); Assert.Equal(1, actual.Count(c => c.IntentName == expectedName)); }
public void ReturnTheCorrectUriForARouteInTheMiddleOfALargeNumberOfRoutes() { var expectedCountPart1 = 99.GetRandom(3); var expectedCountPart2 = 99.GetRandom(3); var expectedCountPart3 = 99.GetRandom(3); string expectedName1 = string.Empty.GetRandom(); string expectedName2 = string.Empty.GetRandom(); string expectedUri1 = $"http://{string.Empty.GetRandom()}"; string expectedUri2 = $"http://{string.Empty.GetRandom()}"; var target = new RouteCollectionBuilder(string.Empty.GetRandom()); for (int i = 0; i < expectedCountPart1; i++) { target.Add(string.Empty.GetRandom(), string.Empty.GetRandom()); target.Add(new Entities.IntentRoute() { IntentName = string.Empty.GetRandom(), Uri = string.Empty.GetRandom() }); } target.Add(new Entities.IntentRoute() { IntentName = expectedName1, Uri = expectedUri1 }); for (int i = 0; i < expectedCountPart2; i++) { target.Add(new Entities.IntentRoute() { IntentName = string.Empty.GetRandom(), Uri = string.Empty.GetRandom() }); target.Add(string.Empty.GetRandom(), string.Empty.GetRandom()); } target.Add(expectedName2, expectedUri2); for (int i = 0; i < expectedCountPart2; i++) { target.Add(new Entities.IntentRoute() { IntentName = string.Empty.GetRandom(), Uri = string.Empty.GetRandom() }); target.Add(string.Empty.GetRandom(), string.Empty.GetRandom()); } var actual = target.Build(); Assert.Equal(expectedUri1, actual.Single(c => c.IntentName == expectedName1).Uri); Assert.Equal(expectedUri2, actual.Single(c => c.IntentName == expectedName2).Uri); }
public void ReturnTheCorrectUriForTheRouteWithTheSpecifiedName() { string expectedName = string.Empty.GetRandom(); string expectedUri = $"http://{string.Empty.GetRandom()}"; var target = new RouteCollectionBuilder(string.Empty.GetRandom()); var actual = target .Add(expectedName, expectedUri) .Build(); var actualRoute = actual.Single(c => c.IntentName == expectedName); Assert.Equal(expectedUri, actualRoute.Uri); }
public void ReturnACollectionWithTheCorrectNumberOfRoutes() { var expectedCount = 99.GetRandom(3); var target = new RouteCollectionBuilder(string.Empty.GetRandom()); for (int i = 0; i < expectedCount; i++) { target.Add(string.Empty.GetRandom(), string.Empty.GetRandom()); } var actual = target.Build(); Assert.Equal(expectedCount + 1, actual.Count()); }
public void ReturnACollectionWithARouteWithTheSpecifiedNameSubmittedAsObject() { string expectedName = string.Empty.GetRandom(); string expectedUri = $"http://{string.Empty.GetRandom()}"; var newRoute = new Entities.IntentRoute() { IntentName = expectedName, Uri = expectedUri }; var target = new RouteCollectionBuilder(string.Empty.GetRandom()); var actual = target .Add(newRoute) .Build(); Assert.Equal(1, actual.Count(c => c.IntentName == expectedName)); }
public void ThrowsADuplicateRouteExceptionIfADuplicateNameIsSubmittedUsingObject() { string expectedName = string.Empty.GetRandom(); var target = new RouteCollectionBuilder(string.Empty.GetRandom()); Assert.Throws <Exceptions.DuplicateRouteException>(() => target .Add(expectedName, string.Empty.GetRandom()) .Add(string.Empty.GetRandom(), string.Empty.GetRandom()) .Add(new Entities.IntentRoute() { IntentName = expectedName, Uri = string.Empty.GetRandom() }) .Build()); }
public void ReturnACollectionWithTheCorrectNumberOfRoutesSubmittedInDifferentWays() { var halfExpectedCount = 99.GetRandom(3); var target = new RouteCollectionBuilder(string.Empty.GetRandom()); for (int i = 0; i < halfExpectedCount; i++) { target.Add(string.Empty.GetRandom(), string.Empty.GetRandom()); target.Add(new Entities.IntentRoute() { IntentName = string.Empty.GetRandom(), Uri = string.Empty.GetRandom() }); } var actual = target.Build(); Assert.Equal((halfExpectedCount * 2) + 1, actual.Count()); }
public async Task RouteAnKnownIntentToTheProperHandler() { string intentName = string.Empty.GetRandom(); string routeUri = $"http://{string.Empty.GetRandom()}"; var cmdProcessor = new Mock <ICommandProcessor>(MockBehavior.Loose); var containerBuilder = new Autofac.ContainerBuilder(); containerBuilder.RegisterInstance <ICommandProcessor>(cmdProcessor.Object); var serviceProvider = new AutofacServiceProvider(containerBuilder.Build()); var routes = new RouteCollectionBuilder(string.Empty.GetRandom()).Add(intentName, routeUri).Build(); var intent = new IntentBuilder().Random().AddName(intentName); var request = new UserRequestBuilder().Random().AddIntent(intent).Build(); var target = new SoftRouter.Engine(serviceProvider, routes); var actual = await target.HandleRequestAsync(request); cmdProcessor.Verify(p => p.ProcessAsync(routeUri, It.IsAny <UserRequest>()), Times.Once); }
public void Configuration(IAppBuilder app) { var httpConfig = new HttpConfiguration(); ConfigureWebApi(httpConfig); Log.Logger = new LoggerConfiguration() .MinimumLevel.Debug() .WriteTo.Trace(LogEventLevel.Debug) .WriteTo.LiterateConsole(LogEventLevel.Debug) .WriteTo.DocSet("XtricateTestSqlDb", "StorageTests", LogEventLevel.Information) .Enrich.WithProperty("App", "SampleApp") .Enrich.FromLogContext() .CreateLogger(); Log.Debug("started"); app.UseDashboard( options: new DashboardOptions { MenuRoutes = new[] { "/products", "/vuejspoc" } }, routes: new RouteCollectionBuilder( new Dictionary <string, IRequestDispatcher> { { "/products", new TemplateRequestDispatcher( x => new ProductIndex { Culture = CultureInfo.GetCultureInfo("de-DE") }) }, { "/products/(?<PageId>\\d+)", new TemplateRequestDispatcher(x => new ProductDetails { Culture = CultureInfo.GetCultureInfo("de-DE"), Parameters = new Dictionary <string, string> { { "id", x.Groups["PageId"].Value } } }) }, { "/vuejspoc", new TemplateRequestDispatcher( x => new VueJsPoc()) }, { @"/_ts/(?<ScriptName>\S+)", new ResourceRequestDispatcher(x => new ResourceDispatcher("application/typescript", RouteCollectionBuilder.GetPagesFolderNamespace(typeof(Root)) + "." + x.Groups["ScriptName"].Value + ".ts")) // , typeof (Root).Assembly }, //{ // @"/_js/(?<ScriptName>\S+)", // new ResourceRequestDispatcher(x => new ResourceDispatcher("application/javascript", // RouteCollectionBuilder.GetPagesFolderNamespace(typeof (Root)) + "." + // x.Groups["ScriptName"].Value + ".js")) // , typeof (Root).Assembly //}, { "/js-treegrid", new ResourceCollectionDispatcher( "application/javascript", RouteCollectionBuilder.GetResourcesFolderNamespace(typeof(Root), "js"), typeof(Root).Assembly, "jquery.treegrid.min.js", "jquery.treegrid.bootstrap3.js") }, { "/css-treegrid", new ResourceCollectionDispatcher( "text/css", RouteCollectionBuilder.GetResourcesFolderNamespace(typeof(Root), "css"), typeof(Root).Assembly, "jquery.treegrid.css") } }).Routes); app.UseWebApi(httpConfig); }