public async Task DeserializeAsync_InputValidModelAsXml_ReturnsInitializedModel_ErrorIsNull()
        {
            // Arrange
            Mock <ILogger>    logger = new Mock <ILogger>();
            ModelDeserializer target = new ModelDeserializer(logger.Object, typeof(Skjema));

            string serializedModel = string.Empty
                                     + @"<?xml version=""1.0""?>"
                                     + @"<Skjema xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"""
                                     + @"  skjemanummer=""1472"" spesifikasjonsnummer=""9812"" blankettnummer=""AFP-01"" tittel=""Arbeidsgiverskjema AFP"" gruppeid=""8818"">"
                                     + @"  <Foretak-grp-8820 gruppeid=""8820"">"
                                     + @"    <EnhetNavnEndring-datadef-31 orid=""31"">Test Test 123</EnhetNavnEndring-datadef-31>"
                                     + @"  </Foretak-grp-8820>"
                                     + @"</Skjema>";

            // Act
            object model;

            using (Stream stream = CreateStream(serializedModel))
            {
                model = await target.DeserializeAsync(stream, "application/xml");
            }

            Skjema actual = model as Skjema;

            // Assert
            Assert.NotNull(actual);
            Assert.Null(target.Error);

            Assert.Equal("Test Test 123", actual?.Foretakgrp8820?.EnhetNavnEndringdatadef31?.value);
            Assert.Equal(1472, actual?.skjemanummer);
        }
        public async Task DeserializeAsync_InputValidModelAsXml_UnexpectedExceptionDuringDeserialization_ReturnsNull_ErrorIsPopulated()
        {
            // Arrange
            Mock <ILogger>    logger = new Mock <ILogger>();
            ModelDeserializer target = new ModelDeserializer(logger.Object, typeof(Skjema));

            string serializedModel = string.Empty
                                     + @"<?xml version=""1.0""?>"
                                     + @"<Skjema xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"""
                                     + @"  skjemanummer=""1472"" spesifikasjonsnummer=""9812"" blankettnummer=""AFP-01"" tittel=""Arbeidsgiverskjema AFP"" gruppeid=""8818"">"
                                     + @"  <Foretak-grp-8820 gruppeid=""8820"">"
                                     + @"    <EnhetNavnEndring-datadef-31 orid=""31"">Test Test 123</EnhetNavnEndring-datadef-31>"
                                     + @"  </Foretak-grp-8820>"
                                     + @"</Skjema>";

            // Act
            object model;

            using (Stream stream = CreateStream(serializedModel))
            {
                // Force an exception
                stream.Close();
                model = await target.DeserializeAsync(stream, "application/xml");
            }

            Skjema actual = model as Skjema;

            // Assert
            Assert.Null(actual);

            Assert.Contains("Unexpected exception when attempting to deserialize", target?.Error);
        }
        public async Task DeserializeAsync_InputValidModelAsJson_UnexpectedExceptionDuringDeserialization_ReturnsNull_ErrorIsPopulated()
        {
            // Arrange
            Mock <ILogger>    logger = new Mock <ILogger>();
            ModelDeserializer target = new ModelDeserializer(logger.Object, typeof(Skjema));

            string serializedModel = string.Empty
                                     + @"{"
                                     + @"  ""skjemanummer"": ""1472"","
                                     + @"  ""spesifikasjonsnummer"": ""9812"","
                                     + @"  ""blankettnummer"": ""AFP-01"","
                                     + @"  ""tittel"": ""Arbeidsgiverskjema AFP"","
                                     + @"  ""gruppeid"": ""8818"","
                                     + @"  ""foretakgrp8820"": {"
                                     + @"    ""gruppeid"": ""8820"","
                                     + @"    ""enhetNavnEndringdatadef31"": {"
                                     + @"      ""orid"": ""31"","
                                     + @"      ""value"": ""Test Test 123"""
                                     + @"    }"
                                     + @"  }"
                                     + @"}";

            // Act
            object model;

            using (Stream stream = CreateStream(serializedModel))
            {
                // Force an exception
                stream.Close();
                model = await target.DeserializeAsync(stream, "application/json");
            }

            Skjema actual = model as Skjema;

            // Assert
            Assert.Null(actual);

            Assert.Contains("Unexpected exception when attempting to deserialize", target?.Error);
        }
        public async Task DeserializeAsync_InputValidModelAsJson_ReturnsInitializedModel_ErrorIsNull()
        {
            // Arrange
            Mock <ILogger>    logger = new Mock <ILogger>();
            ModelDeserializer target = new ModelDeserializer(logger.Object, typeof(Skjema));

            string serializedModel = string.Empty
                                     + @"{"
                                     + @"  ""skjemanummer"": ""1472"","
                                     + @"  ""spesifikasjonsnummer"": ""9812"","
                                     + @"  ""blankettnummer"": ""AFP-01"","
                                     + @"  ""tittel"": ""Arbeidsgiverskjema AFP"","
                                     + @"  ""gruppeid"": ""8818"","
                                     + @"  ""foretakgrp8820"": {"
                                     + @"    ""gruppeid"": ""8820"","
                                     + @"    ""enhetNavnEndringdatadef31"": {"
                                     + @"      ""orid"": ""31"","
                                     + @"      ""value"": ""Test Test 123"""
                                     + @"    }"
                                     + @"  }"
                                     + @"}";

            // Act
            object model;

            using (Stream stream = CreateStream(serializedModel))
            {
                model = await target.DeserializeAsync(stream, "application/json");
            }

            Skjema actual = model as Skjema;

            // Assert
            Assert.NotNull(actual);
            Assert.Null(target.Error);

            Assert.Equal("Test Test 123", actual?.Foretakgrp8820?.EnhetNavnEndringdatadef31?.value);
            Assert.Equal(1472, actual?.skjemanummer);
        }
        public async Task DeserializeAsync_InputUnsupportedContentType_ReturnsNull_ErrorIsPopulated()
        {
            // Arrange
            Mock <ILogger>    logger = new Mock <ILogger>();
            ModelDeserializer target = new ModelDeserializer(logger.Object, typeof(Skjema));

            string serializedModel = @"Text plain";

            // Act
            object model;

            using (Stream stream = CreateStream(serializedModel))
            {
                model = await target.DeserializeAsync(stream, "text/plain");
            }

            Skjema actual = model as Skjema;

            // Assert
            Assert.Null(actual);

            Assert.Contains("Unknown content type ", target?.Error);
        }