// 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.Globalization; using System.IO; using System.Runtime.Serialization; using System.Text; using System.Xml; using Microsoft.AspNet.Mvc.ModelBinding; using Microsoft.AspNet.Mvc.Xml; using Xunit; namespace Microsoft.AspNet.Mvc { public class SerializableErrorWrapperTests { [Fact] public void DefaultConstructor_CreatesSerializableError() { // Arrange and Act var wrapper = new SerializableErrorWrapper(); // Assert Assert.NotNull(wrapper.SerializableError); Assert.Empty(wrapper.SerializableError); } [Fact] public void WrappedSerializableErrorInstance_ReturnedFromProperty() { // Arrange var serializableError = new SerializableError(); serializableError.Add("key1", "key1-error"); // Act var wrapper = new SerializableErrorWrapper(serializableError); // Assert Assert.NotNull(wrapper.SerializableError); Assert.Same(serializableError, wrapper.SerializableError); Assert.Equal(1, wrapper.SerializableError.Count); Assert.True(wrapper.SerializableError.ContainsKey("key1")); Assert.Equal("key1-error", wrapper.SerializableError["key1"]); } [Fact] public void GetSchema_Returns_Null() { // Arrange var serializableError = new SerializableErrorWrapper(new SerializableError(new ModelStateDictionary())); // Act & Assert Assert.Null(serializableError.GetSchema()); } [Fact] public void ReadXml_ReadsSerializableErrorXml() { // Arrange var serializableErrorXml = "" + "Test Error 1 Test Error 2Test Error 3"; var serializer = new DataContractSerializer(typeof(SerializableErrorWrapper)); // Act var wrapper = (SerializableErrorWrapper)serializer.ReadObject( new MemoryStream(Encoding.UTF8.GetBytes(serializableErrorXml))); var errors = wrapper.SerializableError; // Assert Assert.Equal("Test Error 1 Test Error 2", errors["key1"]); Assert.Equal("Test Error 3", errors["key2"]); } [Fact] public void WriteXml_WritesValidXml() { // Arrange var modelState = new ModelStateDictionary(); modelState.AddModelError("key1", "Test Error 1"); modelState.AddModelError("key1", "Test Error 2"); modelState.AddModelError("key2", "Test Error 3"); var serializableError = new SerializableError(modelState); var outputStream = new MemoryStream(); // Act using (var xmlWriter = XmlWriter.Create(outputStream)) { var dataContractSerializer = new DataContractSerializer(typeof(SerializableErrorWrapper)); dataContractSerializer.WriteObject(xmlWriter, new SerializableErrorWrapper(serializableError)); } outputStream.Position = 0; var res = new StreamReader(outputStream, Encoding.UTF8).ReadToEnd(); // Assert Assert.Equal("" + "Test Error 1 Test Error 2Test Error 3", res); } } }