public void CanUseRegisterExtensionMethod() { var curie = new CuriesLink("aap", "http://www.helpt.com/{?rel}"); var builder = Hypermedia.CreateBuilder(); var selfLink = new Link<ProductRepresentation>("product", "http://www.product.com?id=1"); var link2 = new Link("related", "http://www.related.com"); var link3 = curie.CreateLink<CategoryRepresentation>("category", "http://www.category.com"); builder.Register(selfLink, link2, link3); var config = builder.Build(); // arrange var mediaFormatter = new JsonHalOutputFormatter(config) { }; var type = representation.GetType(); var httpContext = new Mock<HttpContext>(); var httpRequest = new DefaultHttpContext().Request; httpContext.SetupGet(o => o.Request).Returns(httpRequest); // act using (var stream = new MemoryStream()) { mediaFormatter.WriteResponseBodyAsync(new OutputFormatterWriteContext(httpContext.Object, (s,e)=> new HttpResponseStreamWriter(s, e), type, representation)); //WriteToStreamAsync(type, representation, stream, content, null); stream.Seek(0, SeekOrigin.Begin); var serialisedResult = new StreamReader(stream).ReadToEnd(); // assert Approvals.Verify(serialisedResult); } }
public void ProperlySerializesRepresentationToJson() { // arrange var example = new CuriesLink("example-namespace", "http://api.example.com/docs/{rel}"); var productLink = example.CreateLink("product", "http://api.example.com/products/{id}"); var relatedProductLink = example.CreateLink("related-product", productLink.Href); var saleProductLink = example.CreateLink("product-on-sale", "http://api.example.com/products/sale/{id}"); var categoryLink = example.CreateLink("category", "http://api.example.com/categories/{id}"); var builder = Hypermedia.CreateBuilder(); builder.RegisterAppender(new ProductRepresentationHypermediaAppender()); builder.RegisterAppender(new CategoryRepresentationHypermediaAppender()); builder.RegisterSelf<ProductRepresentation>(productLink); builder.RegisterSelf<CategoryRepresentation>(categoryLink); builder.RegisterLinks<ProductRepresentation>(relatedProductLink, saleProductLink); var config = builder.Build(); var mediaFormatter = new JsonHalOutputFormatter(config) { }; var content = new StringContent(string.Empty); var type = representation.GetType(); // act using (var stream = new MemoryStream()) { //mediaFormatter.WriteToStreamAsync(type, representation, stream, content, null); stream.Seek(0, SeekOrigin.Begin); var serialisedResult = new StreamReader(stream).ReadToEnd(); // assert Approvals.Verify(serialisedResult); } }
public void one_item_organisation_list_get_json_test() { // arrange var mediaFormatter = new JsonHalOutputFormatter { }; var content = new StringContent(string.Empty); var type = oneitemrepresentation.GetType(); // act using (var stream = new MemoryStream()) { //mediaFormatter.WriteToStreamAsync(type, oneitemrepresentation, stream, content, null).Wait(); stream.Seek(0, SeekOrigin.Begin); var serialisedResult = new StreamReader(stream).ReadToEnd(); // assert Approvals.Verify(serialisedResult); } }
public void ProperlySerializesRepresentationWithoutLinksToJson() { // arrange var builder = Hypermedia.CreateBuilder(); var config = builder.Build(); var mediaFormatter = new JsonHalOutputFormatter(config) { }; var content = new StringContent(string.Empty); var type = representation.GetType(); // act using (var stream = new MemoryStream()) { //mediaFormatter.WriteToStreamAsync(type, representation, stream, content, null); stream.Seek(0, SeekOrigin.Begin); var serialisedResult = new StreamReader(stream).ReadToEnd(); // assert Approvals.Verify(serialisedResult); } }
/// <summary> /// Add Halcyon with some custom formatters that handle marked up models better. /// </summary> /// <param name="mvcOptions">The MVC options to extend.</param> /// <param name="options">The hal options, send the same value you sent to AddConventionalHalcyon.</param> /// <returns></returns> public static MvcOptions UseConventionalHalcyon(this MvcOptions mvcOptions, HalcyonConventionOptions options) { mvcOptions.RespectBrowserAcceptHeader = true; var mediaTypes = new string[] { ProducesHalAttribute.MediaType }; var outputFormatter = new JsonHalOutputFormatter(options.JsonSerializerSettings #if NET6_0 , mvcOptions #endif , mediaTypes); mvcOptions.OutputFormatters.Add(outputFormatter); if (options.MakeAllControllersHalcyon) { mvcOptions.Filters.Add(new ProducesHalAttribute()); mvcOptions.Filters.AddService(typeof(HalModelResultFilterAttribute)); } mvcOptions.Conventions.Add(new ApiExplorerVisibilityEnabledConvention()); return(mvcOptions); }