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);
            }
        }
Ejemplo n.º 3
0
        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);
			}
		}
Ejemplo n.º 5
0
        /// <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);
        }