예제 #1
0
        public void MessageIsTransformedToEnvelopeViaEnvelopeSpecNameAnnotation()
        {
            PipelineContextMock
            .Setup(pc => pc.GetDocumentSpecByType("urn:ns#root"))
            .Returns(Schema <Any> .DocumentSpec);

            var sut = new EnvelopeBuilder();

            using (var inputStream = ResourceManager.Load("Data.BatchContentWithTransform.xml"))
                using (var transformedStream = new MemoryStream(Encoding.UTF8.GetBytes("<root xmlns='urn:ns'></root>")))
                {
                    MessageMock.Object.BodyPart.Data = inputStream;

                    var transformStreamMock = new Mock <ITransformStream>(MockBehavior.Strict);
                    StreamExtensions.StreamTransformerFactory = stream => transformStreamMock.Object;
                    transformStreamMock
                    .Setup(ts => ts.ExtendWith(MessageMock.Object.Context))
                    .Returns(transformStreamMock.Object);
                    transformStreamMock
                    .Setup(ts => ts.Apply(typeof(IdentityTransform), sut.Encoding))
                    .Returns(transformedStream)
                    .Verifiable();

                    sut.Execute(PipelineContextMock.Object, MessageMock.Object);

                    transformStreamMock.VerifyAll();
                }
        }
예제 #2
0
        public void MessageIsProbedForBatchDescriptor()
        {
            var probeStreamMock             = new Mock <IProbeStream>();
            var probeBatchContentStreamMock = probeStreamMock.As <IProbeBatchContentStream>();

            StreamExtensions.StreamProberFactory = stream => probeStreamMock.Object;
            probeStreamMock
            .Setup(ps => ps.MessageType)
            .Returns(Schema <Envelope> .MessageType)
            .Verifiable();
            probeBatchContentStreamMock
            .Setup(ps => ps.BatchDescriptor)
            .Returns(new BatchDescriptor {
                EnvelopeSpecName = new SchemaMetadata <Envelope>().DocumentSpec.DocSpecStrongName
            })
            .Verifiable();

            PipelineContextMock
            .Setup(pc => pc.GetDocumentSpecByType(Schema <Envelope> .MessageType))
            .Returns(Schema <Envelope> .DocumentSpec);

            using (var dataStream = ResourceManager.Load("Data.BatchContent.xml"))
            {
                MessageMock.Object.BodyPart.Data = dataStream;
                var sut = new EnvelopeBuilder();
                sut.Execute(PipelineContextMock.Object, MessageMock.Object);
            }

            probeStreamMock.VerifyAll();
            probeBatchContentStreamMock.VerifyAll();
        }
예제 #3
0
        public void PartitionIsPromoted()
        {
            PipelineContextMock
            .Setup(pc => pc.GetDocumentSpecByType(Schema <Batch.Content> .MessageType))
            .Returns(Schema <Batch.Content> .DocumentSpec);
            PipelineContextMock
            .Setup(pc => pc.GetDocumentSpecByType(Schema <Envelope> .MessageType))
            .Returns(Schema <Envelope> .DocumentSpec);

            using (var dataStream = ResourceManager.Load("Data.BatchContent.xml"))
            {
                MessageMock.Object.BodyPart.Data = dataStream;
                var sut = new EnvelopeBuilder();
                sut.Execute(PipelineContextMock.Object, MessageMock.Object);
            }

            MessageMock.Verify(m => m.Promote(BizTalkFactoryProperties.EnvelopePartition, "p-one"));
        }
예제 #4
0
        public void FailsWhenMessageIsNotBatchContent()
        {
            var probeStreamMock = new Mock <IProbeBatchContentStream>().As <IProbeStream>();

            StreamExtensions.StreamProberFactory = stream => probeStreamMock.Object;

            var transformStreamMock = new Mock <ITransformStream>();

            StreamExtensions.StreamTransformerFactory = stream => transformStreamMock.Object;

            var sut = new EnvelopeBuilder();

            Assert.That(
                () => sut.Execute(PipelineContextMock.Object, MessageMock.Object),
                Throws.InvalidOperationException.With.Message.EqualTo(
                    string.Format(
                        "No EnvelopeSpecName has been found in {0} message and no envelope can be applied.",
                        typeof(Batch.Content).Name)));
        }
예제 #5
0
        public void BatchContentIsTransformedToSpecificEnvelope()
        {
            string actualEnvelopeContent;
            string expectedEnvelopeContent;
            var    sut = new EnvelopeBuilder();

            var envelopeStream = new StringStream(MessageFactory.CreateEnvelope <Envelope>().OuterXml);
            var batchStream = new StringStream(MessageFactory.CreateMessage <Batch.Content>(ResourceManager.LoadString("Data.BatchContent.xml")).OuterXml);
            var transformedStream = new Stream[] { envelopeStream, batchStream }.Transform().Apply(sut.MapType, sut.Encoding);

            using (var expectedReader = XmlReader.Create(transformedStream, new XmlReaderSettings {
                CloseInput = true
            }))
            {
                expectedReader.Read();
                expectedEnvelopeContent = expectedReader.ReadOuterXml();
            }

            PipelineContextMock
            .Setup(pc => pc.GetDocumentSpecByType(Schema <Envelope> .MessageType))
            .Returns(Schema <Envelope> .DocumentSpec);

            using (var dataStream = ResourceManager.Load("Data.BatchContent.xml"))
            {
                MessageMock.Object.BodyPart.Data = dataStream;
                sut.Execute(PipelineContextMock.Object, MessageMock.Object);
                using (var actualReader = XmlReader.Create(MessageMock.Object.BodyPart.Data, new XmlReaderSettings {
                    CloseInput = true, IgnoreWhitespace = true
                }))
                {
                    actualReader.Read();
                    actualEnvelopeContent = actualReader.ReadOuterXml();
                }
            }

            Assert.That(actualEnvelopeContent, Is.EqualTo(expectedEnvelopeContent));
        }