// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; using System.Net; using System.Net.Http; using System.Net.Http.Headers; using System.Runtime.Serialization; using System.Threading.Tasks; using Microsoft.AspNet.Builder; using Microsoft.AspNet.TestHost; using Xunit; namespace Microsoft.AspNet.Mvc.FunctionalTests { public class XmlOutputFormatterTests { private readonly IServiceProvider _services; private readonly Action _app = new FormatterWebSite.Startup().Configure; public XmlOutputFormatterTests() { _services = TestHelper.CreateServices("FormatterWebSite"); } [Fact] public async Task XmlDataContractSerializerOutputFormatterIsCalled() { // Arrange var server = TestServer.Create(_services, _app); var client = server.CreateClient(); var request = new HttpRequestMessage(HttpMethod.Post, "http://localhost/Home/GetDummyClass?sampleInput=10"); request.Headers.Accept.Add(MediaTypeWithQualityHeaderValue.Parse("application/xml;charset=utf-8")); // Act var response = await client.SendAsync(request); //Assert Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.Equal("" + "10", await response.Content.ReadAsStringAsync()); } [Fact] public async Task XmlSerializerOutputFormatterIsCalled() { // Arrange var server = TestServer.Create(_services, _app); var client = server.CreateClient(); var request = new HttpRequestMessage(HttpMethod.Post, "http://localhost/XmlSerializer/GetDummyClass?sampleInput=10"); request.Headers.Accept.Add(MediaTypeWithQualityHeaderValue.Parse("application/xml;charset=utf-8")); // Act var response = await client.SendAsync(request); //Assert Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.Equal("10", await response.Content.ReadAsStringAsync()); } [Fact] public async Task XmlSerializerFailsAndDataContractSerializerIsCalled() { // Arrange var server = TestServer.Create(_services, _app); var client = server.CreateClient(); var request = new HttpRequestMessage(HttpMethod.Post, "http://localhost/DataContractSerializer/GetPerson?name=HelloWorld"); request.Headers.Accept.Add(MediaTypeWithQualityHeaderValue.Parse("application/xml;charset=utf-8")); // Act var response = await client.SendAsync(request); //Assert Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.Equal("" + "HelloWorld", await response.Content.ReadAsStringAsync()); } [Fact] public async Task XmlSerializerOutputFormatter_WhenDerivedClassIsReturned() { // Arrange var server = TestServer.Create(_services, _app); var client = server.CreateClient(); var request = new HttpRequestMessage( HttpMethod.Post, "http://localhost/XmlSerializer/GetDerivedDummyClass?sampleInput=10"); request.Headers.Accept.Add(MediaTypeWithQualityHeaderValue.Parse("application/xml;charset=utf-8")); // Act var response = await client.SendAsync(request); //Assert Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.Equal("" + "1050", await response.Content.ReadAsStringAsync()); } [Fact] public async Task XmlDataContractSerializerOutputFormatter_WhenDerivedClassIsReturned() { // Arrange var server = TestServer.Create(_services, _app); var client = server.CreateClient(); var request = new HttpRequestMessage( HttpMethod.Post, "http://localhost/Home/GetDerivedDummyClass?sampleInput=10"); request.Headers.Accept.Add(MediaTypeWithQualityHeaderValue.Parse("application/xml;charset=utf-8")); // Act var response = await client.SendAsync(request); //Assert Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.Equal("1050", await response.Content.ReadAsStringAsync()); } [Fact] public async Task XmlSerializerFormatter_DoesNotWriteDictionaryObjects() { // Arrange var server = TestServer.Create(_services, _app); var client = server.CreateClient(); var request = new HttpRequestMessage( HttpMethod.Post, "http://localhost/XmlSerializer/GetDictionary"); request.Headers.Accept.Add(MediaTypeWithQualityHeaderValue.Parse("application/xml;charset=utf-8")); // Act var response = await client.SendAsync(request); //Assert Assert.Equal(HttpStatusCode.NotAcceptable, response.StatusCode); } } }