public void TestCallsAllTransformers()
        {
            SourceModel       source       = new SourceModel();
            IntermediateModel intermediate = new IntermediateModel();
            Mock <ITransformer <SourceModel, IntermediateModel> >      leftTransformerMock  = new Mock <ITransformer <SourceModel, IntermediateModel> >();
            Mock <ITransformer <IntermediateModel, DestinationModel> > rightTransformerMock = new Mock <ITransformer <IntermediateModel, DestinationModel> >();

            leftTransformerMock.Setup(_ => _.Transform(source)).Returns(intermediate).Verifiable();
            rightTransformerMock.Setup(_ => _.Transform(intermediate)).Returns(new DestinationModel()).Verifiable();

            ITransformer <SourceModel, DestinationModel> tranformer =
                new TransformerPipeline <SourceModel, IntermediateModel, DestinationModel>(
                    leftTransformerMock.Object,
                    rightTransformerMock.Object
                    );

            tranformer.Transform(source);

            leftTransformerMock.Verify(_ => _.Transform(source), Times.Once);
            rightTransformerMock.Verify(_ => _.Transform(intermediate), Times.Once);
        }
        public void TestReturnsDataFromLastTransformer()
        {
            Mock <ITransformer <SourceModel, IntermediateModel> >      leftTransformerMock  = new Mock <ITransformer <SourceModel, IntermediateModel> >();
            Mock <ITransformer <IntermediateModel, DestinationModel> > rightTransformerMock = new Mock <ITransformer <IntermediateModel, DestinationModel> >();

            SourceModel       sourceData       = new SourceModel();
            IntermediateModel intermediateData = new IntermediateModel();
            DestinationModel  destinationData  = new DestinationModel();

            leftTransformerMock.Setup(_ => _.Transform(sourceData)).Returns(intermediateData);
            rightTransformerMock.Setup(_ => _.Transform(intermediateData)).Returns(destinationData);

            ITransformer <SourceModel, DestinationModel> tranformer =
                new TransformerPipeline <SourceModel, IntermediateModel, DestinationModel>(
                    leftTransformerMock.Object,
                    rightTransformerMock.Object
                    );


            DestinationModel resultData = tranformer.Transform(sourceData);

            Assert.AreEqual(destinationData, resultData);
        }