// 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.Threading.Tasks; using Microsoft.AspNet.Builder; using Microsoft.Framework.DependencyInjection; using Xunit; namespace Microsoft.AspNet.Mvc.FunctionalTests { public class XmlOutputFormatterTests { private const string SiteName = nameof(FormatterWebSite); private readonly Action _app = new FormatterWebSite.Startup().Configure; private readonly Action _configureServices = new FormatterWebSite.Startup().ConfigureServices; [Fact] public async Task XmlDataContractSerializerOutputFormatterIsCalled() { // Arrange var server = TestHelper.CreateServer(_app, SiteName, _configureServices); 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 = TestHelper.CreateServer(_app, SiteName, _configureServices); 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 = TestHelper.CreateServer(_app, SiteName, _configureServices); 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 = TestHelper.CreateServer(_app, SiteName, _configureServices); 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 = TestHelper.CreateServer(_app, SiteName, _configureServices); 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 = TestHelper.CreateServer(_app, SiteName, _configureServices); 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); } } }