public void Find_FormatterList_Does_Not_Ignores_Types() { var resolver1 = TypeFormatterResolverCache.Find(new DateTime_Iso8601_Formatter()); var resolver2 = TypeFormatterResolverCache.Find(new DateTimeOffset_Iso8601_Formatter()); Assert.AreNotSame(resolver1, resolver2); }
public void Find_FormatterList_Accepts_Null() { var resolver1 = TypeFormatterResolverCache.Find((ITypeFormatter[])null); var resolver2 = TypeFormatterResolverCache.Find((ITypeFormatter[])null); Assert.IsNotNull(resolver1); Assert.AreSame(resolver1, resolver2); }
public void Find_FormatterList_Ignores_Order_Of_Types() { var resolver1 = TypeFormatterResolverCache.Find(new DateTime_Iso8601_Formatter(), new DateTimeOffset_JavaScriptTicks_Formatter()); var resolver2 = TypeFormatterResolverCache.Find(new DateTimeOffset_JavaScriptTicks_Formatter(), new DateTime_Iso8601_Formatter()); Assert.IsNotNull(resolver1); Assert.AreSame(resolver1, resolver2); }
public void Find_FormatterList_Returns_Existing_Resolver() { var resolver1 = TypeFormatterResolverCache.Find(new DateTime_Iso8601_Formatter()); var resolver2 = TypeFormatterResolverCache.Find(new DateTime_Iso8601_Formatter()); Assert.IsNotNull(resolver1); Assert.AreSame(resolver1, resolver2); }
public void Clear_Empties_Cache() { var resolver1 = TypeFormatterResolverCache.Find(new DateTime_Iso8601_Formatter()); TypeFormatterResolverCache.Clear(); var resolver2 = TypeFormatterResolverCache.Find(new DateTime_Iso8601_Formatter()); Assert.AreNotSame(resolver1, resolver2); }
/// <summary> /// Returns a <see cref="TypeParserResolver"/> filled with the parsers from the <see cref="UseParserAttribute"/> attribute. /// </summary> /// <param name="useFormatter"></param> /// <param name="defaultResolver"></param> /// <returns></returns> public static TypeFormatterResolver ToTypeFormatterResolver(UseFormatterAttribute useFormatter, TypeFormatterResolver defaultResolver) { var result = defaultResolver; if (useFormatter?.IsValid ?? false) { result = result == null ? TypeFormatterResolverCache.Find(useFormatter.Formatters) : TypeFormatterResolverCache.Find(result.GetAugmentedFormatters(useFormatter.Formatters)); } return(result); }
public void ReturnJsonObject_Uses_Formatter_From_Route() { var resolver = TypeFormatterResolverCache.Find(new Guid_UpperNoHyphens_Formatter()); var route = Route_Tests.CreateRoute <Controller>(nameof(Controller.IntMethod), formatterResolver: resolver); _Environment.Environment[WebApiEnvironmentKey.Route] = route; var guid = Guid.Parse("c151f1a8-d235-4f28-8c0d-5521a768be9e"); _Responder.ReturnJsonObject(_Environment.Environment, guid); var actual = _Environment.ResponseBodyText; Assert.AreEqual("\"C151F1A8D2354F288C0D5521A768BE9E\"", actual); }
public void ReturnJsonObject_FullControlVersion_Uses_Formatter_In_Preference_To_Route_Formatter() { var routeResolver = TypeFormatterResolverCache.Find(new Guid_UpperNoHyphens_Formatter()); var usedResolver = TypeFormatterResolverCache.Find(new Guid_LowerNoHyphens_Formatter()); var route = Route_Tests.CreateRoute <Controller>(nameof(Controller.IntMethod), formatterResolver: routeResolver); _Environment.Environment[WebApiEnvironmentKey.Route] = route; var guid = Guid.Parse("c151f1a8-d235-4f28-8c0d-5521a768be9e"); _Responder.ReturnJsonObject(_Environment.Environment, guid, usedResolver, Encoding.UTF8, null); var actual = _Environment.ResponseBodyText; Assert.AreEqual("\"c151f1a8d2354f288c0d5521a768be9e\"", actual); }
/// <summary> /// See interface docs. /// </summary> /// <param name="next"></param> /// <returns></returns> public AppFunc AppFuncBuilder(AppFunc next) { var controllerFinder = Factory.Resolve <IControllerFinder>(); controllerFinder.DefaultTypeParserResolver = TypeParserResolverCache.Find(DefaultParsers.ToArray()); controllerFinder.DefaultTypeFormatterResolver = TypeFormatterResolverCache.Find(DefaultFormatters.ToArray()); var controllerTypes = controllerFinder.DiscoverControllers(); var routeFinder = Factory.Resolve <IRouteFinder>(); var routes = routeFinder.DiscoverRoutes(controllerTypes); var routeMapper = Factory.Resolve <IRouteMapper>(); routeMapper.AreFormNamesCaseSensitive = AreFormNamesCaseSensitive; routeMapper.AreQueryStringNamesCaseSensitive = AreQueryStringNamesCaseSensitive; routeMapper.Initialise(routes); var routeFilter = Factory.Resolve <IRouteFilter>(); var routeCaller = Factory.Resolve <IRouteCaller>(); var responder = Factory.Resolve <IWebApiResponder>(); return(async(IDictionary <string, object> environment) => { var route = routeMapper.FindRouteForRequest(environment); if (route == null) { await next(environment); } else { environment[WebApiEnvironmentKey.Route] = route; if (routeFilter.CanCallRoute(route, environment)) { var parameters = routeMapper.BuildRouteParameters(route, environment); if (!parameters.IsValid) { environment[EnvironmentKey.ResponseStatusCode] = 400; } else { var result = routeCaller.CallRoute(environment, route, parameters); if (!route.IsVoidMethod) { if (result == null && (route.RouteAttribute?.NullStatusCode ?? 0) != 0) { environment[EnvironmentKey.ResponseStatusCode] = route.RouteAttribute.NullStatusCode; } else { responder.ReturnJsonObject(environment, result); } } } if (!environment.ContainsKey(EnvironmentKey.ResponseStatusCode)) { environment[EnvironmentKey.ResponseStatusCode] = 200; } } } }); }