public void CallsTransformProviders()
        {
            var provider1 = new TestTransformProvider();
            var provider2 = new TestTransformProvider();
            var provider3 = new TestTransformProvider();
            var builder   = new TransformBuilder(new ServiceCollection().BuildServiceProvider(),
                                                 Array.Empty <ITransformFactory>(), new[] { provider1, provider2, provider3 });

            var route  = new RouteConfig();
            var errors = builder.ValidateRoute(route);

            Assert.Empty(errors);
            Assert.Equal(1, provider1.ValidateRouteCalls);
            Assert.Equal(1, provider2.ValidateRouteCalls);
            Assert.Equal(1, provider3.ValidateRouteCalls);

            var cluster = new ClusterConfig();

            errors = builder.ValidateCluster(cluster);
            Assert.Empty(errors);
            Assert.Equal(1, provider1.ValidateClusterCalls);
            Assert.Equal(1, provider2.ValidateClusterCalls);
            Assert.Equal(1, provider3.ValidateClusterCalls);

            var transforms = builder.BuildInternal(route, cluster);

            Assert.Equal(1, provider1.ApplyCalls);
            Assert.Equal(1, provider2.ApplyCalls);
            Assert.Equal(1, provider3.ApplyCalls);

            Assert.Equal(3, transforms.ResponseTrailerTransforms.Count);
        }
        public void CallsTransformFactories()
        {
            var factory1 = new TestTransformFactory("1");
            var factory2 = new TestTransformFactory("2");
            var factory3 = new TestTransformFactory("3");
            var builder  = new TransformBuilder(new ServiceCollection().BuildServiceProvider(),
                                                new[] { factory1, factory2, factory3 }, Array.Empty <ITransformProvider>());

            var route = new RouteConfig().WithTransform(transform =>
            {
                transform["2"] = "B";
            });
            var errors = builder.ValidateRoute(route);

            Assert.Empty(errors);
            Assert.Equal(1, factory1.ValidationCalls);
            Assert.Equal(1, factory2.ValidationCalls);
            Assert.Equal(0, factory3.ValidationCalls);

            var transforms = builder.BuildInternal(route, new ClusterConfig());

            Assert.Equal(1, factory1.BuildCalls);
            Assert.Equal(1, factory2.BuildCalls);
            Assert.Equal(0, factory3.BuildCalls);

            Assert.Single(transforms.ResponseTrailerTransforms);
        }