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); } }
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); } }
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); } }
private static void ConfigHalJson(this HttpConfiguration config) { var jsonFormatter = new JsonHalMediaTypeFormatter() { SerializerSettings = { ContractResolver = new CamelCasePropertyNamesContractResolver() } }; config.Formatters.Add(jsonFormatter); }
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); } }
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")); } }
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); } }
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")); } }
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); } }
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); } }
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); } }
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); } }