Esempio n. 1
0
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services
            // Configure Web API to use only bearer token authentication.
            config.SuppressDefaultHostAuthentication();
            config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));

            // Web API routes
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
                );

            config.Formatters.Remove(config.Formatters.XmlFormatter);

            JsonMediaTypeFormatter formatter = config.Formatters.JsonFormatter;

            formatter.Indent = true;
            formatter.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
            formatter.SerializerSettings.ContractResolver  = new CamelCasePropertyNamesContractResolver();

            JsonHalMediaTypeFormatter halMediaTypeFormatter = new JsonHalMediaTypeFormatter();

            halMediaTypeFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();

            config.Formatters.Insert(0, halMediaTypeFormatter);
        }
        public void representation_get_json__with_no_links_test()
        {
            RootRepresentation resourcesRepresentation = new RootRepresentation
            {
                items = new[]
                {
                    new NoLinkRepresentation {id = "aaaaa"},
                    new NoLinkRepresentation {id = "bbbbb"}
                }
            };

            JsonHalMediaTypeFormatter mediaFormatter = new JsonHalMediaTypeFormatter() { Indent = true };
            StringContent content = new StringContent(string.Empty);

            var type = resourcesRepresentation.GetType();

            using (var stream = new MemoryStream())
            {
                mediaFormatter.WriteToStreamAsync(type, resourcesRepresentation, stream, content, null).Wait();
                stream.Seek(0, SeekOrigin.Begin);
                string serialisedResult = new StreamReader(stream).ReadToEnd();

                Approvals.Verify(serialisedResult);
            }
        }
        public void peopledetail_post_json_props_test()
        {
            // arrange
            var mediaFormatter = new JsonHalMediaTypeFormatter {
                Indent = true
            };
            var          type = typeof(OrganisationWithPeopleDetailRepresentation);
            const string json = @"
{
""Id"":""5"",
""Name"": ""Waterproof Fire Department""
}
";

            // act
            using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(json)))
            {
                var obj = mediaFormatter.ReadFromStreamAsync(type, stream, null, null).Result;

                // assert
                Assert.NotNull(obj);
                var org = obj as OrganisationWithPeopleDetailRepresentation;
                Assert.NotNull(org);
                Assert.Equal(5, org.Id);
                Assert.Equal("Waterproof Fire Department", org.Name);
            }
        }
        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 JsonHalMediaTypeFormatter(config) { Indent = true };
            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);
            }
        }
Esempio n. 5
0
        public void peopledetail_post_json_embedded_null_test()
        {
            // arrange
            var mediaFormatter = new JsonHalMediaTypeFormatter {
                Indent = true
            };
            var          type = typeof(OrganisationWithPeopleDetailRepresentation);
            const string json = @"
{
""Id"":""3"",
""Name"": ""Singles Dept.""
}
";

            // act
            using (
                var stream = new MemoryStream(Encoding.UTF8.GetBytes(json))
                )
            {
                var obj = mediaFormatter.ReadFromStreamAsync(type, stream, null, null).Result;

                // assert
                Assert.NotNull(obj);
                var org = obj as OrganisationWithPeopleDetailRepresentation;
                Assert.NotNull(org);
                Assert.Null(org.Boss);
                Assert.Null(org.People);
            }
        }
        public void peopledetail_post_json_props_test()
        {
            // arrange
            var mediaFormatter = new JsonHalMediaTypeFormatter { Indent = true };
            var type = typeof (OrganisationWithPeopleDetailRepresentation);
            const string json = @"
{
""Id"":""5"",
""Name"": ""Waterproof Fire Department""
}
";

            // act
            using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(json)))
            {
                var obj = mediaFormatter.ReadFromStreamAsync(type, stream, null, null).Result;

                // assert
                Assert.NotNull(obj);
                var org = obj as OrganisationWithPeopleDetailRepresentation;
                Assert.NotNull(org);
                Assert.Equal(5, org.Id);
                Assert.Equal("Waterproof Fire Department", org.Name);
            }
        }
        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 JsonHalMediaTypeFormatter(config) { Indent = true };
            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);
            }
        }
Esempio n. 8
0
        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 JsonHalMediaTypeFormatter(config)
            {
                Indent = true
            };
            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);
            }
        }
Esempio n. 9
0
        private static void ConfigHalJson(this HttpConfiguration config)
        {
            var jsonFormatter = new JsonHalMediaTypeFormatter()
            {
                SerializerSettings =
                {
                    ContractResolver = new CamelCasePropertyNamesContractResolver()
                }
            };

            config.Formatters.Add(jsonFormatter);
        }
Esempio n. 10
0
        public void Initialize(HttpControllerSettings controllerSettings, HttpControllerDescriptor controllerDescriptor)
        {
            controllerSettings.Formatters.Insert(0, new XmlHalMediaTypeFormatter());
            var jsonFormatter = new JsonHalMediaTypeFormatter
            {
                SerializerSettings =
                {
                    ContractResolver = new CamelCasePropertyNamesContractResolver()
                }
            };

            jsonFormatter.SerializerSettings.Converters.Add(new HtmlStringConverter());
            controllerSettings.Formatters.Insert(0, jsonFormatter);
        }
        public void Initialize(HttpControllerSettings controllerSettings, HttpControllerDescriptor controllerDescriptor)
        {
            controllerSettings.Formatters.Insert(0, new XmlHalMediaTypeFormatter());
            var jsonFormatter = new JsonHalMediaTypeFormatter
            {
                SerializerSettings =
                {
                    ContractResolver = new CamelCasePropertyNamesContractResolver()
                }
            };

            controllerSettings.Formatters.Insert(0, jsonFormatter);

            //controllerSettings.Services.Replace(typeof (IHttpActionSelector), new CustomActionSelector());
        }
        public void peopledetail_post_json_links_test()
        {
            // arrange
            var mediaFormatter = new JsonHalMediaTypeFormatter {
                Indent = true
            };
            var          type = typeof(OrganisationWithPeopleRepresentation);
            const string json = @"
{
""Id"":""3"",
""Name"": ""Dept. of Redundancy Dept."",
""_links"": {
 ""self"": {""href"": ""/api/organisations/3""},
 ""people"": {""href"": ""/api/organisations/3/people"", ""type"":""text/html"", ""profile"":""urn:somevalue""},
 ""brownnoser"": [
   {""href"": ""/api/organisations/3/brown/1""},
   {""href"": ""/api/organisations/3/brown/2""}
        ]
    }
}
";

            // act
            using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(json)))
            {
                var obj = mediaFormatter.ReadFromStreamAsync(type, stream, null, null).Result;

                // assert
                Assert.NotNull(obj);
                var org = obj as OrganisationWithPeopleRepresentation;
                Assert.NotNull(org);
                Assert.Equal(4, org.Links.Count);
                var self = org.Links.Where(l => l.Rel == "self").ToList();
                Assert.Equal(1, self.Count);
                Assert.Equal("/api/organisations/3", self[0].Href);
                Assert.Equal(self[0].Href, org.Href);
                var people = org.Links.Where(l => l.Rel == "people").ToList();
                Assert.Equal(1, people.Count);
                Assert.Equal("/api/organisations/3/people", people[0].Href);
                Assert.Equal("text/html", people[0].Type);
                Assert.Equal("urn:somevalue", people[0].Profile);
                var brownnosers = org.Links.Where(l => l.Rel == "brownnoser").ToList();
                Assert.Equal(2, brownnosers.Count);
                Assert.Equal("/api/organisations/3/brown/1", brownnosers[0].Href);
                Assert.Equal("/api/organisations/3/brown/2", brownnosers[1].Href);
            }
        }
        public void one_item_organisation_list_get_json_test()
        {
            // arrange
            var mediaFormatter = new JsonHalMediaTypeFormatter { Indent = true };
            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);
            }
        }
Esempio n. 14
0
        public void organisation_get_json_test()
        {
            // arrange
            var mediaFormatter = new JsonHalMediaTypeFormatter { Indent = true };
            var content = new StringContent(string.Empty);
            var type = resource.GetType();

            // act
            using (var stream = new MemoryStream())
            {
                mediaFormatter.WriteToStreamAsync(type, resource, stream, content, null);
                stream.Seek(0, SeekOrigin.Begin);
                var serialisedResult = new StreamReader(stream).ReadToEnd();

                // assert
                Approvals.Verify(serialisedResult, s => s.Replace("\r\n", "\n"));
            }
        }
Esempio n. 15
0
        public void children_have_self_link_test()
        {
            // arrange
            var mediaFormatter = new JsonHalMediaTypeFormatter { Indent = true };
            var content = new StringContent(string.Empty);
            var type = organisations.GetType();

            // act
            using (var stream = new MemoryStream())
            {
                mediaFormatter.WriteToStreamAsync(type, organisations, stream, content, null).Wait();
                stream.Seek(0, SeekOrigin.Begin);
                var serialisedResult = new StreamReader(stream).ReadToEnd();

                Console.WriteLine(serialisedResult);
                Approvals.Verify(serialisedResult);
            }
        }
        public void ProperlySerializesRepresentationToJson()
        {
            // arrange
            var mediaFormatter = new JsonHalMediaTypeFormatter(config) { Indent = true };
            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 organisation_get_json_with_no_href_test()
        {
            // arrange
            var mediaFormatter = new JsonHalMediaTypeFormatter { Indent = true };
            var content = new StringContent(string.Empty);
            var resourceWithAppPath = new OrganisationWithNoHrefRepresentation(1, "Org Name");
            var type = resourceWithAppPath.GetType();

            // act
            using (var stream = new MemoryStream())
            {
                mediaFormatter.WriteToStreamAsync(type, resourceWithAppPath, stream, content, null);
                stream.Seek(0, SeekOrigin.Begin);
                var serialisedResult = new StreamReader(stream).ReadToEnd();

                // assert
                Approvals.Verify(serialisedResult);
            }
        }
Esempio n. 18
0
        public void children_have_self_link_test()
        {
            // arrange
            var mediaFormatter = new JsonHalMediaTypeFormatter {
                Indent = true
            };
            var content = new StringContent(string.Empty);
            var type    = organisations.GetType();

            // act
            using (var stream = new MemoryStream())
            {
                mediaFormatter.WriteToStreamAsync(type, organisations, stream, content, null).Wait();
                stream.Seek(0, SeekOrigin.Begin);
                var serialisedResult = new StreamReader(stream).ReadToEnd();

                Console.WriteLine(serialisedResult);
                Approvals.Verify(serialisedResult);
            }
        }
        public void one_item_organisation_list_get_json_test()
        {
            // arrange
            var mediaFormatter = new JsonHalMediaTypeFormatter {
                Indent = true
            };
            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, s => s.Replace("\r\n", "\n"));
            }
        }
Esempio n. 20
0
        public void organisation_get_json_test()
        {
            // arrange
            var mediaFormatter = new JsonHalMediaTypeFormatter {
                Indent = true
            };
            var content = new StringContent(string.Empty);
            var type    = resource.GetType();

            // act
            using (var stream = new MemoryStream())
            {
                mediaFormatter.WriteToStreamAsync(type, resource, stream, content, null);
                stream.Seek(0, SeekOrigin.Begin);
                var serialisedResult = new StreamReader(stream).ReadToEnd();

                // assert
                Approvals.Verify(serialisedResult);
            }
        }
Esempio n. 21
0
        public void curies_post_json_test()
        {
            // arrange
            var mediaFormatter = new JsonHalMediaTypeFormatter {
                Indent = true
            };
            var          type = typeof(OrganisationRepresentation);
            const string json = @"
{""Id"": ""7"",""Name"": ""Org Seven"",
    
    ""_links"": {""self"": {""href"": ""/api/organisations/7""},

""curies"": [

    {
        ""name"": ""br"",
        ""href"": ""/rels/{rel}"",
        ""templated"": true
      }
    ],},
  
}
";

            // act
            using (
                var stream = new MemoryStream(Encoding.UTF8.GetBytes(json))
                )
            {
                var obj = mediaFormatter.ReadFromStreamAsync(type, stream, null, null).Result;

                // assert
                Assert.NotNull(obj);
                var resource = obj as OrganisationRepresentation;
                Assert.NotNull(resource);
                Assert.Equal("Org Seven", resource.Name);
                Assert.Equal(2, resource.Links.Count);
                Assert.Equal(typeof(Link), resource.Links[0].GetType());
                Assert.Equal(typeof(Curie), resource.Links[1].GetType());
            }
        }
        public void simplelist_post_json_test()
        {
            // arrange
            var mediaFormatter = new JsonHalMediaTypeFormatter {
                Indent = true
            };
            var          type = typeof(MySimpleList);
            const string json = @"
{
""_embedded"": {
 ""organisation"": [
   {""Id"": ""7"",""Name"": ""Org Seven"",
    ""_links"": {""self"": {""href"": ""/api/organisations/7""}}},
   {""Id"": ""8"",""Name"": ""Org Eight"",
    ""_links"": {""self"": {""href"": ""/api/organisations/8""}}}
   ]},
""SimpleData"": ""simple string""
}
";

            // act
            using (
                var stream = new MemoryStream(Encoding.UTF8.GetBytes(json))
                )
            {
                var obj = mediaFormatter.ReadFromStreamAsync(type, stream, null, null).Result;

                // assert
                Assert.NotNull(obj);
                var orgList = obj as MySimpleList;
                Assert.NotNull(orgList);
                Assert.Equal(2, orgList.ResourceList.Count);
                Assert.Equal(7, orgList.ResourceList[0].Id);
                Assert.Equal("Org Seven", orgList.ResourceList[0].Name);
                Assert.Equal("/api/organisations/7", orgList.ResourceList[0].Href);
                Assert.Equal(8, orgList.ResourceList[1].Id);
                Assert.Equal("Org Eight", orgList.ResourceList[1].Name);
                Assert.Equal("/api/organisations/8", orgList.ResourceList[1].Href);
                Assert.Equal("simple string", orgList.SimpleData);
            }
        }
Esempio n. 23
0
        public void ProperlySerializesRepresentationToJson()
        {
            // arrange
            var mediaFormatter = new JsonHalMediaTypeFormatter(config)
            {
                Indent = true
            };
            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);
            }
        }
Esempio n. 24
0
        public void organisation_get_json_with_app_path_test()
        {
            // arrange
            var mediaFormatter = new JsonHalMediaTypeFormatter {
                Indent = true
            };
            var content             = new StringContent(string.Empty);
            var resourceWithAppPath = new OrganisationWithAppPathRepresentation(1, "Org Name");
            var type = resourceWithAppPath.GetType();

            // act
            using (var stream = new MemoryStream())
            {
                mediaFormatter.WriteToStreamAsync(type, resourceWithAppPath, stream, content, null);
                stream.Seek(0, SeekOrigin.Begin);
                var serialisedResult = new StreamReader(stream).ReadToEnd();

                // assert
                Approvals.Verify(serialisedResult, s => s.Replace("\r\n", "\n"));
            }
        }
        public void peopledetail_post_json_embedded_arrays_test()
        {
            // arrange
            var mediaFormatter = new JsonHalMediaTypeFormatter {
                Indent = true
            };
            var          type = typeof(OrganisationWithPeopleDetailRepresentation);
            const string json = @"
{
""Id"":""3"",
""Name"": ""Array Dept."",
""_embedded"": {
 ""person"": [
   {""Id"": ""7"",""Name"": ""Person Seven"",""OrganisationId"": ""3"",
    ""_links"": {""self"": {""href"": ""/api/organisations/3/people/7""}}},
   {""Id"": ""9"",""Name"": ""Person Nine"",""OrganisationId"": ""3"",
    ""_links"": {""self"": {""href"": ""/api/organisations/3/people/9""}}}
   ],
 ""boss"": [{""Id"": ""8"",""Name"": ""Person Eight"",""OrganisationId"": ""3"",""HasPointyHair"":""true"",
    ""_links"": {""self"": {""href"": ""/api/organisations/3/boss""}}}]
  }
}
";

            // act
            using (
                var stream = new MemoryStream(Encoding.UTF8.GetBytes(json))
                )
            {
                var obj = mediaFormatter.ReadFromStreamAsync(type, stream, null, null).Result;

                // assert
                Assert.NotNull(obj);
                var org = obj as OrganisationWithPeopleDetailRepresentation;
                Assert.NotNull(org);
                Assert.NotNull(org.Boss);
                Assert.Equal(2, org.People.Count);
                Assert.Equal(1, org.Boss.Links.Count);
            }
        }
Esempio n. 26
0
        public void organisation_get_json_test()
        {
            // arrange
            var mediaFormatter = new JsonHalMediaTypeFormatter
            {
                Indent = true,
                SerializerSettings = { ContractResolver = new CamelCasePropertyNamesContractResolver() }
            };
            var content = new StringContent(string.Empty);
            var type = resource.GetType();

            // act
            using (var stream = new MemoryStream())
            {
                mediaFormatter.WriteToStreamAsync(type, resource, stream, content, null);
                stream.Seek(0, SeekOrigin.Begin);
                var serialisedResult = new StreamReader(stream).ReadToEnd();

                // assert
                Approvals.Verify(serialisedResult);
            }
        }
        public void Init()
        {
            _formatters.Clear();

            var formatter =
                new JsonHalMediaTypeFormatter(_hypermedia.Resolver)
            {
                SerializerSettings =
                {
                    ContractResolver = new CamelCasePropertyNamesContractResolver(),
#if DEBUG
                    Formatting       = Formatting.Indented
#endif
                }
            };

            formatter.SerializerSettings.Converters.Add(new IsoDateTimeConverter());
            formatter.SerializerSettings.Converters.Add(new StringEnumConverter());

            _formatters.Add(formatter);

            _formatters.Add(new JsonMediaTypeFormatter());
        }
        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 JsonHalMediaTypeFormatter(config)
            {
                Indent = true
            };
            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 peopledetail_get_json_with_no_curies_test()
        {
            // arrange
            var mediaFormatter = new JsonHalMediaTypeFormatter {
                Indent = true
            };
            var content = new StringContent(string.Empty);

            resource.People[0].Links.Add(new Curie {
                Name = "br", Href = "http://test.me"
            });
            var type = resource.GetType();

            // act
            using (var stream = new MemoryStream())
            {
                mediaFormatter.WriteToStreamAsync(type, resource, stream, content, null).Wait();
                stream.Seek(0, SeekOrigin.Begin);
                var serialisedResult = new StreamReader(stream).ReadToEnd();

                // assert
                Approvals.Verify(serialisedResult, s => s.Replace("\r\n", "\n"));
            }
        }
        public void peopledetail_post_json_links_test()
        {
            // arrange
            var mediaFormatter = new JsonHalMediaTypeFormatter { Indent = true };
            var type = typeof(OrganisationWithPeopleRepresentation);
            const string json = @"
{
""Id"":""3"",
""Name"": ""Dept. of Redundancy Dept."",
""_links"": {
 ""self"": {""href"": ""/api/organisations/3""},
 ""people"": {""href"": ""/api/organisations/3/people""},
 ""brownnoser"": [
   {""href"": ""/api/organisations/3/brown/1""},
   {""href"": ""/api/organisations/3/brown/2""}
        ]
    }
}
";

            // act
            using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(json)))
            {
                var obj = mediaFormatter.ReadFromStreamAsync(type, stream, null, null).Result;

                // assert
                Assert.NotNull(obj);
                var org = obj as OrganisationWithPeopleRepresentation;
                Assert.NotNull(org);
                Assert.Equal(4, org.Links.Count);
                var self = org.Links.Where(l => l.Rel == "self").ToList();
                Assert.Equal(1, self.Count);
                Assert.Equal("/api/organisations/3", self[0].Href);
                Assert.Equal(self[0].Href, org.Href);
                var people = org.Links.Where(l => l.Rel == "people").ToList();
                Assert.Equal(1, people.Count);
                Assert.Equal("/api/organisations/3/people", people[0].Href);
                var brownnosers = org.Links.Where(l => l.Rel == "brownnoser").ToList();
                Assert.Equal(2, brownnosers.Count);
                Assert.Equal("/api/organisations/3/brown/1", brownnosers[0].Href);
                Assert.Equal("/api/organisations/3/brown/2", brownnosers[1].Href);
            }
        }
        public void peopledetail_post_json_embedded_arrays_test()
        {
            // arrange
            var mediaFormatter = new JsonHalMediaTypeFormatter { Indent = true };
            var type = typeof(OrganisationWithPeopleDetailRepresentation);
            const string json = @"
{
""Id"":""3"",
""Name"": ""Array Dept."",
""_embedded"": {
 ""person"": [
   {""Id"": ""7"",""Name"": ""Person Seven"",""OrganisationId"": ""3"",
    ""_links"": {""self"": {""href"": ""/api/organisations/3/people/7""}}},
   {""Id"": ""9"",""Name"": ""Person Nine"",""OrganisationId"": ""3"",
    ""_links"": {""self"": {""href"": ""/api/organisations/3/people/9""}}}
   ],
 ""boss"": [{""Id"": ""8"",""Name"": ""Person Eight"",""OrganisationId"": ""3"",""HasPointyHair"":""true"",
    ""_links"": {""self"": {""href"": ""/api/organisations/3/boss""}}}]
  }
}
";

            // act
            using (
                var stream = new MemoryStream(Encoding.UTF8.GetBytes(json))
                )
            {
                var obj = mediaFormatter.ReadFromStreamAsync(type, stream, null, null).Result;

                // assert
                Assert.NotNull(obj);
                var org = obj as OrganisationWithPeopleDetailRepresentation;
                Assert.NotNull(org);
                Assert.NotNull(org.Boss);
                Assert.Equal(2, org.People.Count);
                Assert.Equal(1, org.Boss.Links.Count);
            }
        }