public async void Put_Is_200_Response() { var startup = new TestStartup( //This will be invoked before the controller is created so we can modify these mocked services (request, umbCtx, typedContent, serviceContext, searchProvider) => { SetupMocksForPost(serviceContext); }); using (var server = TestServer.Create(builder => startup.Configuration(builder))) { var request = new HttpRequestMessage() { RequestUri = new Uri(string.Format("http://testserver/umbraco/rest/v1/{0}/123", RouteConstants.RelationsSegment)), Method = HttpMethod.Put, }; request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/hal+json")); request.Content = new StringContent(@"{ ""relationTypeAlias"": ""testType"", ""parentId"": 1235, ""childId"" : 1234, ""comment"" : ""New comment"" }", Encoding.UTF8, "application/json"); Console.WriteLine(request); var result = await server.HttpClient.SendAsync(request); Console.WriteLine(result); var json = await((StreamContent)result.Content).ReadAsStringAsync(); Console.Write(JsonConvert.SerializeObject(JsonConvert.DeserializeObject(json), Formatting.Indented)); Assert.AreEqual(HttpStatusCode.OK, result.StatusCode); } }
public async void Put_Upload_Is_200_Response() { var startup = new TestStartup( //This will be invoked before the controller is created so we can modify these mocked services (request, umbCtx, typedContent, serviceContext, searchProvider) => { MemberServiceMocks.SetupMocksForPost(serviceContext); }); using (var server = TestServer.Create(builder => startup.Configuration(builder))) { var mfdc = new MultipartFormDataContent(); mfdc.Add( new StreamContent(new MemoryStream(Encoding.UTF8.GetBytes("This is from a file"))) { Headers = { ContentType = new MediaTypeHeaderValue("image/jpg") } }, name: "Data", fileName: "File1.txt"); var uri = new Uri(string.Format("http://testserver/umbraco/rest/v1/{0}/123/upload", RouteConstants.MembersSegment)); var result = await server.HttpClient.PutAsync(uri, mfdc); Console.WriteLine(result); var json = await((StreamContent)result.Content).ReadAsStringAsync(); Console.Write(JsonConvert.SerializeObject(JsonConvert.DeserializeObject(json), Formatting.Indented)); Assert.AreEqual(HttpStatusCode.OK, result.StatusCode); } }
public async void Get_Children_Is_200_Response() { var startup = new TestStartup( //This will be invoked before the controller is created so we can modify these mocked services (request, umbCtx, typedContent, serviceContext, searchProvider) => { var mockTypedContent = Mock.Get(typedContent); mockTypedContent.Setup(x => x.TypedContent(It.IsAny <int>())).Returns(() => ModelMocks.SimpleMockedPublishedContent(123, 456, 789)); }); using (var server = TestServer.Create(builder => startup.Configuration(builder))) { var request = new HttpRequestMessage() { RequestUri = new Uri(string.Format("http://testserver/umbraco/rest/v1/{0}/{1}/123/children", RouteConstants.ContentSegment, RouteConstants.PublishedSegment)), Method = HttpMethod.Get, }; request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/hal+json")); Console.WriteLine(request); var result = await server.HttpClient.SendAsync(request); Console.WriteLine(result); var json = await((StreamContent)result.Content).ReadAsStringAsync(); Console.Write(JsonConvert.SerializeObject(JsonConvert.DeserializeObject(json), Formatting.Indented)); Assert.AreEqual(HttpStatusCode.OK, result.StatusCode); } }
public async void Delete_Is_501_Response() { var startup = new TestStartup((request, umbCtx, typedContent, serviceContext, searchProvider) => { }); using (var server = TestServer.Create(builder => startup.Configuration(builder))) { var request = new HttpRequestMessage() { RequestUri = new Uri(string.Format("http://testserver/umbraco/rest/v1/{0}/{1}/123", RouteConstants.ContentSegment, RouteConstants.PublishedSegment)), Method = HttpMethod.Delete, }; request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/hal+json")); Console.WriteLine(request); var result = await server.HttpClient.SendAsync(request); Console.WriteLine(result); var json = await((StreamContent)result.Content).ReadAsStringAsync(); Console.Write(JsonConvert.SerializeObject(JsonConvert.DeserializeObject(json), Formatting.Indented)); //NOTE: NotImplemented because we cannot post for published content Assert.AreEqual(HttpStatusCode.NotImplemented, result.StatusCode); } }
public async void Get_Root_With_OPTIONS() { var startup = new TestStartup( //This will be invoked before the controller is created so we can modify these mocked services, (request, umbCtx, typedContent, serviceContext, searchProvider) => { var mockRelationService = Mock.Get(serviceContext.RelationService); }); using (var server = TestServer.Create(builder => startup.Configuration(builder))) { var request = new HttpRequestMessage() { RequestUri = new Uri(string.Format("http://testserver/umbraco/rest/v1/{0}", RouteConstants.RelationsSegment)), Method = HttpMethod.Options, }; request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/hal+json")); request.Headers.Add("Access-Control-Request-Headers", "accept, authorization"); request.Headers.Add("Access-Control-Request-Method", "GET"); request.Headers.Add("Origin", "http://localhost:12061"); request.Headers.Add("Referer", "http://localhost:12061/browser.html"); Console.WriteLine(request); var result = await server.HttpClient.SendAsync(request); Assert.AreEqual(HttpStatusCode.OK, result.StatusCode); } }
public async void Get_Root_Result() { var startup = new TestStartup( //This will be invoked before the controller is created so we can modify these mocked services, (request, umbCtx, typedContent, serviceContext, searchProvider) => { var mockRelationService = Mock.Get(serviceContext.RelationService); }); using (var server = TestServer.Create(builder => startup.Configuration(builder))) { var request = new HttpRequestMessage() { RequestUri = new Uri(string.Format("http://testserver/umbraco/rest/v1/{0}", RouteConstants.RelationsSegment)), Method = HttpMethod.Get, }; request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/hal+json")); Console.WriteLine(request); var result = await server.HttpClient.SendAsync(request); Console.WriteLine(result); var json = await((StreamContent)result.Content).ReadAsStringAsync(); Console.Write(JsonConvert.SerializeObject(JsonConvert.DeserializeObject(json), Formatting.Indented)); Assert.AreEqual(HttpStatusCode.OK, result.StatusCode); var asdf = GlobalConfiguration.Configuration; var djson = JsonConvert.DeserializeObject <JObject>(json); Assert.AreEqual("/umbraco/rest/v1/relations", djson["_links"]["root"]["href"].Value <string>()); Assert.AreEqual(0, djson["totalResults"].Value <int>()); } }
public async void Search_200_Result() { var startup = new TestStartup( //This will be invoked before the controller is created so we can modify these mocked services (request, umbCtx, typedContent, serviceContext, searchProvider) => { var mockSearchResults = new Mock <ISearchResults>(); mockSearchResults.Setup(results => results.TotalItemCount).Returns(10); mockSearchResults.Setup(results => results.Skip(It.IsAny <int>())).Returns(new[] { new SearchResult() { Id = 789 }, new SearchResult() { Id = 456 }, }); var mockSearchProvider = Mock.Get(searchProvider); mockSearchProvider.Setup(x => x.CreateSearchCriteria()).Returns(Mock.Of <ISearchCriteria>()); mockSearchProvider.Setup(x => x.Search(It.IsAny <ISearchCriteria>(), It.IsAny <int>())) .Returns(mockSearchResults.Object); var mockMediaService = Mock.Get(serviceContext.MediaService); mockMediaService.Setup(x => x.GetByIds(It.IsAny <IEnumerable <int> >())) .Returns(new[] { ModelMocks.SimpleMockedMedia(789), ModelMocks.SimpleMockedMedia(456) }); }); using (var server = TestServer.Create(builder => startup.Configuration(builder))) { var request = new HttpRequestMessage() { RequestUri = new Uri(string.Format("http://testserver/umbraco/rest/v1/{0}/search?lucene=parentID:\\-1", RouteConstants.MediaSegment)), Method = HttpMethod.Get, }; request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/hal+json")); Console.WriteLine(request); var result = await server.HttpClient.SendAsync(request); Console.WriteLine(result); var json = await((StreamContent)result.Content).ReadAsStringAsync(); Console.Write(JsonConvert.SerializeObject(JsonConvert.DeserializeObject(json), Formatting.Indented)); Assert.AreEqual(HttpStatusCode.OK, result.StatusCode); } }
public async void Supports_Post() { var startup = new TestStartup( //This will be invoked before the controller is created so we can modify these mocked services (request, umbCtx, typedContent, serviceContext, searchProvider) => { TestHelpers.ContentServiceMocks.SetupMocksForPost(serviceContext); }); using (var server = TestServer.Create(builder => startup.Configuration(builder))) { var request = new HttpRequestMessage() { RequestUri = new Uri(string.Format("http://testserver/umbraco/rest/v1/{0}", RouteConstants.ContentSegment)), Method = HttpMethod.Post, }; request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/hal+json")); request.Headers.Add("Origin", "http://*****:*****@"{ ""contentTypeAlias"": ""testType"", ""parentId"": 456, ""templateId"": 9, ""name"": ""Home"", ""properties"": { ""TestProperty1"": ""property value1"", ""testProperty2"": ""property value2"" } }", Encoding.UTF8, "application/json"); Console.WriteLine(request); var result = await server.HttpClient.SendAsync(request); Console.WriteLine(result); //CORS Assert.IsTrue(result.Headers.Contains("Access-Control-Allow-Origin")); var acao = result.Headers.GetValues("Access-Control-Allow-Origin"); Assert.AreEqual(1, acao.Count()); Assert.AreEqual("http://localhost:12061", acao.First()); //Creation var json = await((StreamContent)result.Content).ReadAsStringAsync(); Console.Write(JsonConvert.SerializeObject(JsonConvert.DeserializeObject(json), Formatting.Indented)); Assert.AreEqual(HttpStatusCode.Created, result.StatusCode); } }
public async void Get_Children_Is_With_Params_Result() { var startup = new TestStartup( //This will be invoked before the controller is created so we can modify these mocked services (request, umbCtx, typedContent, serviceContext, searchProvider) => { var mockMediaService = Mock.Get(serviceContext.MediaService); mockMediaService.Setup(x => x.GetById(It.IsAny <int>())).Returns(() => ModelMocks.SimpleMockedMedia()); long total = 6; mockMediaService.Setup(x => x.GetPagedChildren(It.IsAny <int>(), It.IsAny <long>(), It.IsAny <int>(), out total, It.IsAny <string>(), Direction.Ascending, It.IsAny <string>())) .Returns(new List <IMedia>(new[] { ModelMocks.SimpleMockedMedia(789), ModelMocks.SimpleMockedMedia(456) })); mockMediaService.Setup(x => x.HasChildren(It.IsAny <int>())).Returns(true); }); using (var server = TestServer.Create(builder => startup.Configuration(builder))) { var request = new HttpRequestMessage() { RequestUri = new Uri(string.Format("http://testserver/umbraco/rest/v1/{0}/123/children?pageIndex=1&pageSize=2", RouteConstants.MediaSegment)), Method = HttpMethod.Get, }; request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/hal+json")); Console.WriteLine(request); var result = await server.HttpClient.SendAsync(request); Console.WriteLine(result); var json = await((StreamContent)result.Content).ReadAsStringAsync(); Console.Write(JsonConvert.SerializeObject(JsonConvert.DeserializeObject(json), Formatting.Indented)); Assert.AreEqual(HttpStatusCode.OK, result.StatusCode); var djson = JsonConvert.DeserializeObject <JObject>(json); Assert.AreEqual(6, djson["totalResults"].Value <int>()); Assert.AreEqual(1, djson["pageIndex"].Value <int>()); Assert.AreEqual(2, djson["pageSize"].Value <int>()); Assert.IsNotNull(djson["_links"]["next"]); Assert.IsNotNull(djson["_links"]["prev"]); } }
public async void Post_Is_400_Validation_Property_Required() { var startup = new TestStartup( //This will be invoked before the controller is created so we can modify these mocked services (request, umbCtx, typedContent, serviceContext, searchProvider) => { MediaServiceMocks.SetupMocksForPost(serviceContext); var mockPropertyEditor = Mock.Get(PropertyEditorResolver.Current); mockPropertyEditor.Setup(x => x.GetByAlias("testEditor")).Returns(new ModelMocks.SimplePropertyEditor()); }); using (var server = TestServer.Create(builder => startup.Configuration(builder))) { var request = new HttpRequestMessage() { RequestUri = new Uri(string.Format("http://testserver/umbraco/rest/v1/{0}", RouteConstants.MediaSegment)), Method = HttpMethod.Post, }; request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/hal+json")); //NOTE: it is missing request.Content = new StringContent(@"{ ""name"": ""test"", ""contentTypeAlias"": ""test"", ""parentId"": 456, ""templateId"": 9, ""properties"": { ""TestProperty1"": """", ""testProperty2"": ""property value2"" } }", Encoding.UTF8, "application/json"); Console.WriteLine(request); var result = await server.HttpClient.SendAsync(request); Console.WriteLine(result); var json = await((StreamContent)result.Content).ReadAsStringAsync(); Console.Write(JsonConvert.SerializeObject(JsonConvert.DeserializeObject(json), Formatting.Indented)); Assert.AreEqual(HttpStatusCode.BadRequest, result.StatusCode); var djson = JsonConvert.DeserializeObject <JObject>(json); Assert.AreEqual(1, djson["totalResults"].Value <int>()); Assert.AreEqual("content.properties.TestProperty1.value", djson["_embedded"]["errors"][0]["logRef"].Value <string>()); } }
public async void Supports_Creds() { var startup = new TestStartup( //This will be invoked before the controller is created so we can modify these mocked services, (request, umbCtx, typedContent, serviceContext, searchProvider) => { var mockContentService = Mock.Get(serviceContext.ContentService); mockContentService.Setup(x => x.GetRootContent()).Returns(Enumerable.Empty <IContent>()); }); using (var server = TestServer.Create(builder => { startup.Configuration(builder); //default options builder.ConfigureUmbracoRestApi(new UmbracoRestApiOptions { CorsPolicy = new CorsPolicy() { AllowAnyOrigin = true, SupportsCredentials = true } }); })) { var request = new HttpRequestMessage() { RequestUri = new Uri(string.Format("http://testserver/umbraco/rest/v1/{0}", RouteConstants.ContentSegment)), Method = HttpMethod.Get, }; //add the origin so Cors kicks in! request.Headers.Add("Origin", "http://localhost:12061"); request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/hal+json")); Console.WriteLine(request); var result = await server.HttpClient.SendAsync(request); Console.WriteLine(result); var json = await((StreamContent)result.Content).ReadAsStringAsync(); Console.Write(JsonConvert.SerializeObject(JsonConvert.DeserializeObject(json), Formatting.Indented)); Assert.AreEqual(HttpStatusCode.OK, result.StatusCode); Assert.IsTrue(result.Headers.Contains("Access-Control-Allow-Origin")); var acao = result.Headers.GetValues("Access-Control-Allow-Origin"); Assert.AreEqual(1, acao.Count()); Assert.AreEqual("http://localhost:12061", acao.First()); } }
public async void Get_Id_Result() { var startup = new TestStartup( //This will be invoked before the controller is created so we can modify these mocked services (request, umbCtx, typedContent, serviceContext, searchProvider) => { var mockMediaService = Mock.Get(serviceContext.MediaService); mockMediaService.Setup(x => x.GetById(It.IsAny <int>())).Returns(() => ModelMocks.SimpleMockedMedia()); mockMediaService.Setup(x => x.GetChildren(It.IsAny <int>())).Returns(new List <IMedia>(new[] { ModelMocks.SimpleMockedMedia(789) })); mockMediaService.Setup(x => x.HasChildren(It.IsAny <int>())).Returns(true); }); using (var server = TestServer.Create(builder => startup.Configuration(builder))) { var request = new HttpRequestMessage() { RequestUri = new Uri(string.Format("http://testserver/umbraco/rest/v1/{0}/123", RouteConstants.MediaSegment)), Method = HttpMethod.Get, }; request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/hal+json")); Console.WriteLine(request); var result = await server.HttpClient.SendAsync(request); Console.WriteLine(result); var json = await((StreamContent)result.Content).ReadAsStringAsync(); Console.Write(JsonConvert.SerializeObject(JsonConvert.DeserializeObject(json), Formatting.Indented)); Assert.AreEqual(HttpStatusCode.OK, result.StatusCode); var djson = JsonConvert.DeserializeObject <JObject>(json); Assert.AreEqual("/umbraco/rest/v1/media/123", djson["_links"]["self"]["href"].Value <string>()); Assert.AreEqual("/umbraco/rest/v1/media/456", djson["_links"]["parent"]["href"].Value <string>()); Assert.AreEqual("/umbraco/rest/v1/media/123/children{?pageIndex,pageSize}", djson["_links"]["children"]["href"].Value <string>()); Assert.AreEqual("/umbraco/rest/v1/media", djson["_links"]["root"]["href"].Value <string>()); var properties = djson["properties"].ToObject <IDictionary <string, object> >(); Assert.AreEqual(2, properties.Count()); Assert.IsTrue(properties.ContainsKey("TestProperty1")); Assert.IsTrue(properties.ContainsKey("testProperty2")); } }
public async void Get_Root_Result() { var startup = new TestStartup( //This will be invoked before the controller is created so we can modify these mocked services, (request, umbCtx, typedContent, serviceContext, searchProvider) => { var mockTypedContent = Mock.Get(typedContent); mockTypedContent.Setup(x => x.TypedContentAtRoot()).Returns(new[] { ModelMocks.SimpleMockedPublishedContent(123, -1, 789), ModelMocks.SimpleMockedPublishedContent(456, -1, 321) }); }); using (var server = TestServer.Create(builder => startup.Configuration(builder))) { var request = new HttpRequestMessage() { RequestUri = new Uri(string.Format("http://testserver/umbraco/rest/v1/{0}/{1}", RouteConstants.ContentSegment, RouteConstants.PublishedSegment)), Method = HttpMethod.Get, }; request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/hal+json")); Console.WriteLine(request); var result = await server.HttpClient.SendAsync(request); Console.WriteLine(result); var json = await((StreamContent)result.Content).ReadAsStringAsync(); Console.Write(JsonConvert.SerializeObject(JsonConvert.DeserializeObject(json), Formatting.Indented)); Assert.AreEqual(HttpStatusCode.OK, result.StatusCode); var djson = JsonConvert.DeserializeObject <JObject>(json); Assert.AreEqual("/umbraco/rest/v1/content/published", djson["_links"]["root"]["href"].Value <string>()); Assert.AreEqual(2, djson["totalResults"].Value <int>()); Assert.AreEqual(2, djson["_links"]["content"].Count()); Assert.AreEqual(2, djson["_embedded"]["content"].Count()); } }
public async void Post_Is_400_Validation_Required_Fields() { var startup = new TestStartup( //This will be invoked before the controller is created so we can modify these mocked services (request, umbCtx, typedContent, serviceContext, searchProvider) => { SetupMocksForPost(serviceContext); }); using (var server = TestServer.Create(builder => startup.Configuration(builder))) { var request = new HttpRequestMessage() { RequestUri = new Uri(string.Format("http://testserver/umbraco/rest/v1/{0}", RouteConstants.RelationsSegment)), Method = HttpMethod.Post, }; request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/hal+json")); //NOTE: it is missing parent id request.Content = new StringContent(@"{ ""relationTypeAlias"": """", ""childId"" : 1234, ""comment"" : ""Comment"" }", Encoding.UTF8, "application/json"); Console.WriteLine(request); var result = await server.HttpClient.SendAsync(request); Console.WriteLine(result); var json = await((StreamContent)result.Content).ReadAsStringAsync(); Console.Write(JsonConvert.SerializeObject(JsonConvert.DeserializeObject(json), Formatting.Indented)); Assert.AreEqual(HttpStatusCode.BadRequest, result.StatusCode); var djson = JsonConvert.DeserializeObject <JObject>(json); Assert.AreEqual(2, djson["totalResults"].Value <int>()); Assert.AreEqual("content.relationTypeAlias", djson["_embedded"]["errors"][0]["logRef"].Value <string>()); Assert.AreEqual("content.parentId", djson["_embedded"]["errors"][1]["logRef"].Value <string>()); } }
public async void Get_Root_With_OPTIONS() { var startup = new TestStartup( //This will be invoked before the controller is created so we can modify these mocked services, (request, umbCtx, typedContent, serviceContext, searchProvider) => { var mockMediaService = Mock.Get(serviceContext.MediaService); mockMediaService.Setup(x => x.GetRootMedia()).Returns(new[] { ModelMocks.SimpleMockedMedia(123, -1), ModelMocks.SimpleMockedMedia(456, -1) }); mockMediaService.Setup(x => x.GetChildren(123)).Returns(new[] { ModelMocks.SimpleMockedMedia(789, 123) }); mockMediaService.Setup(x => x.GetChildren(456)).Returns(new[] { ModelMocks.SimpleMockedMedia(321, 456) }); }); using (var server = TestServer.Create(builder => startup.Configuration(builder))) { var request = new HttpRequestMessage() { RequestUri = new Uri(string.Format("http://testserver/umbraco/rest/v1/{0}", RouteConstants.MediaSegment)), Method = HttpMethod.Options, }; request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/hal+json")); request.Headers.Add("Access-Control-Request-Headers", "accept, authorization"); request.Headers.Add("Access-Control-Request-Method", "GET"); request.Headers.Add("Origin", "http://localhost:12061"); request.Headers.Add("Referer", "http://localhost:12061/browser.html"); Console.WriteLine(request); var result = await server.HttpClient.SendAsync(request); Console.WriteLine(result); var json = await((StreamContent)result.Content).ReadAsStringAsync(); Console.Write(JsonConvert.SerializeObject(JsonConvert.DeserializeObject(json), Formatting.Indented)); Assert.AreEqual(HttpStatusCode.OK, result.StatusCode); } }
public async void Get_Metadata_Result() { var startup = new TestStartup( //This will be invoked before the controller is created so we can modify these mocked services (request, umbCtx, typedContent, serviceContext, searchProvider) => { var mockMediaService = Mock.Get(serviceContext.MediaService); mockMediaService.Setup(x => x.GetById(It.IsAny <int>())).Returns(() => ModelMocks.SimpleMockedMedia()); mockMediaService.Setup(x => x.GetChildren(It.IsAny <int>())).Returns(new List <IMedia>(new[] { ModelMocks.SimpleMockedMedia(789) })); mockMediaService.Setup(x => x.HasChildren(It.IsAny <int>())).Returns(true); var mockTextService = Mock.Get(serviceContext.TextService); mockTextService.Setup(x => x.Localize(It.IsAny <string>(), It.IsAny <CultureInfo>(), It.IsAny <IDictionary <string, string> >())) .Returns((string input, CultureInfo culture, IDictionary <string, string> tokens) => input); }); using (var server = TestServer.Create(builder => startup.Configuration(builder))) { var request = new HttpRequestMessage() { RequestUri = new Uri(string.Format("http://testserver/umbraco/rest/v1/{0}/123/meta", RouteConstants.MediaSegment)), Method = HttpMethod.Get, }; request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/hal+json")); Console.WriteLine(request); var result = await server.HttpClient.SendAsync(request); Console.WriteLine(result); var json = await((StreamContent)result.Content).ReadAsStringAsync(); Console.Write(JsonConvert.SerializeObject(JsonConvert.DeserializeObject(json), Formatting.Indented)); Assert.AreEqual(HttpStatusCode.OK, result.StatusCode); //TODO: Assert values! } }
public async void Post_Is_201_Response() { var startup = new TestStartup( //This will be invoked before the controller is created so we can modify these mocked services (request, umbCtx, typedContent, serviceContext, searchProvider) => { MemberServiceMocks.SetupMocksForPost(serviceContext); }); using (var server = TestServer.Create(builder => startup.Configuration(builder))) { var request = new HttpRequestMessage() { RequestUri = new Uri(string.Format("http://testserver/umbraco/rest/v1/{0}", RouteConstants.MembersSegment)), Method = HttpMethod.Post, }; request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/hal+json")); request.Content = new StringContent(@"{ ""contentTypeAlias"": ""testType"", ""name"": ""John Johnson"", ""email"" : ""*****@*****.**"", ""userName"" : ""johnjohnson"", ""properties"": { ""TestProperty1"": ""property value1"", ""testProperty2"": ""property value2"" } }", Encoding.UTF8, "application/json"); Console.WriteLine(request); var result = await server.HttpClient.SendAsync(request); Console.WriteLine(result); var json = await((StreamContent)result.Content).ReadAsStringAsync(); Console.Write(JsonConvert.SerializeObject(JsonConvert.DeserializeObject(json), Formatting.Indented)); Assert.AreEqual(HttpStatusCode.Created, result.StatusCode); } }