public void DeserializeComplexTypeWithDefaultXmlSerialization()
        {
            var xml = $@"<mComponents>
  <mComponent name='{typeof(DummyXmlTranslator).AssemblyQualifiedName}'>
    <Enabled>true</Enabled>
    <xt:Translations override='false' xmlns:xt='urn:schemas.stateless.be:biztalk:translations:2013:07'>
      <xt:NamespaceTranslation matchingPattern='sourceUrn1' replacementPattern='urn:test1' />
      <xt:NamespaceTranslation matchingPattern='sourceUrn5' replacementPattern='urn:test5' />
    </xt:Translations>
  </mComponent>
</mComponents>";

            var sut = new MicroComponentEnumerableConverter();

            var deserialized = sut.ConvertFrom(xml) as IMicroComponent[];

            deserialized.Should().BeEquivalentTo(
                new object[] {
                new DummyXmlTranslator {
                    Enabled      = true,
                    Translations = new() {
                        Override = false,
                        Items    = new[] {
                            new XmlNamespaceTranslation("sourceUrn1", "urn:test1"),
                            new XmlNamespaceTranslation("sourceUrn5", "urn:test5")
                        }
                    }
                }
            });
        public void ConvertFrom()
        {
            var xml = $@"<mComponents>
  <mComponent name='{typeof(DummyMicroComponentOne).AssemblyQualifiedName}'>
    <Property-One>1</Property-One>
    <Property-Two>2</Property-Two>
  </mComponent>
  <mComponent name='{typeof(DummyMicroComponentTwo).AssemblyQualifiedName}' >
    <Property-Six>6</Property-Six>
    <Property-Ten>9</Property-Ten>
  </mComponent>
  <mComponent name='{typeof(DummyMicroComponentTen).AssemblyQualifiedName}'>
    <Encoding>utf-8</Encoding>
    <Index>10</Index>
    <Requirements>Default</Requirements>
    <Name>DummyTen</Name>
    <Plugin>{typeof(DummyXmlTranslator).AssemblyQualifiedName}</Plugin>
  </mComponent>
</mComponents>";

            var sut = new MicroComponentEnumerableConverter();

            var result = sut.ConvertFrom(xml) as IEnumerable <IMicroComponent>;

            result.Should().NotBeNull().And.BeEquivalentTo(
                new object[] {
                new DummyMicroComponentOne {
                    One = "1", Two = "2"
                },
                new DummyMicroComponentTwo {
                    Six = "6", Ten = "9"
                },
                new DummyMicroComponentTen {
                    Encoding     = new UTF8Encoding(false),
                    Index        = 10,
                    Requirements = XmlTranslationRequirements.Default,
                    Name         = "DummyTen",
                    Plugin       = typeof(DummyXmlTranslator)
                }
            });
        }
        public void DeserializeComplexTypeWithCustomXmlSerialization()
        {
            var xml = $@"<mComponents>
  <mComponent name='{typeof(DummyContextPropertyExtractor).AssemblyQualifiedName}'>
    <Enabled>true</Enabled>
    <Extractors>
      <s0:Properties xmlns:s0='urn:schemas.stateless.be:biztalk:annotations:2013:01' xmlns:s1='urn'>
        <s1:Property1 xpath='*/some-node' />
        <s1:Property2 promoted='true' xpath='*/other-node' />
      </s0:Properties>
    </Extractors>
  </mComponent>
  <mComponent name='{typeof(DummyMicroComponentOne).AssemblyQualifiedName}'>
    <Property-One>1</Property-One>
    <Property-Two>2</Property-Two>
  </mComponent>
</mComponents>";

            var sut = new MicroComponentEnumerableConverter();

            var deserialized = sut.ConvertFrom(xml) as IMicroComponent[];

            deserialized.Should().BeEquivalentTo(
                new object[] {
                new DummyContextPropertyExtractor {
                    Enabled    = true,
                    Extractors = new[] {
                        new XPathExtractor(new XmlQualifiedName("Property1", "urn"), "*/some-node"),
                        new XPathExtractor(new XmlQualifiedName("Property2", "urn"), "*/other-node", ExtractionMode.Promote)
                    }
                },
                new DummyMicroComponentOne {
                    One = "1", Two = "2"
                }
            });
        }
        public void ConvertFromEmpty()
        {
            var sut = new MicroComponentEnumerableConverter();

            sut.ConvertFrom(string.Empty).Should().BeSameAs(Enumerable.Empty <IMicroComponent>());
        }