public void VerifyInputMappingsForResources()
        {
            using (NewContext)
            {
                var codeModel = New <CodeModel>();
                codeModel.Name = "test service client";

                var flattenedPropertyType = New <CompositeType>("FooFlattened");
                flattenedPropertyType.Add(New <Property>(new
                {
                    Name      = "Sku",
                    ModelType = New <PrimaryType>(KnownPrimaryType.String)
                }));
                flattenedPropertyType.Add(New <Property>(new
                {
                    Name      = "ProvState",
                    ModelType = New <PrimaryType>(KnownPrimaryType.String)
                }));
                flattenedPropertyType.Add(New <Property>(new
                {
                    Name      = "Id",
                    ModelType = New <PrimaryType>(KnownPrimaryType.Int)
                }));

                var customObjectPropertyType = New <CompositeType>("FooProperty");

                customObjectPropertyType.Add(New <Property>(new
                {
                    Name      = "Sku",
                    ModelType = New <PrimaryType>(KnownPrimaryType.String)
                }));
                customObjectPropertyType.Add(New <Property>(new
                {
                    Name      = "ProvState",
                    ModelType = New <PrimaryType>(KnownPrimaryType.String)
                }));

                var customObjectType = New <CompositeType>("Foo");
                customObjectType.Add(New <Property>(new
                {
                    Name      = "Property",
                    ModelType = customObjectPropertyType
                }));
                customObjectType.Add(New <Property>(new
                {
                    Name      = "Id",
                    ModelType = New <PrimaryType>(KnownPrimaryType.Int)
                }));

                var method = New <Method>(new
                {
                    Name       = "method1",
                    Group      = "mGroup",
                    ReturnType = new Response(flattenedPropertyType, null)
                });
                var inputParameter = New <Parameter>(new { Name = "prop", ModelType = flattenedPropertyType });
                codeModel.Add(method);
                method.Add(inputParameter);
                method.InputParameterTransformation.Add(new ParameterTransformation
                {
                    OutputParameter =
                        New <Parameter>(new { Name = "body", ModelType = customObjectType, SerializedName = "body" })
                });
                method.InputParameterTransformation.Last().ParameterMappings.Add(new ParameterMapping
                {
                    InputParameter          = inputParameter,
                    InputParameterProperty  = "Id",
                    OutputParameterProperty = "Id"
                });
                method.InputParameterTransformation.Last().ParameterMappings.Add(new ParameterMapping
                {
                    InputParameter          = inputParameter,
                    InputParameterProperty  = "Sku",
                    OutputParameterProperty = "Property.Sku"
                });
                method.InputParameterTransformation.Last().ParameterMappings.Add(new ParameterMapping
                {
                    InputParameter          = inputParameter,
                    InputParameterProperty  = "ProvState",
                    OutputParameterProperty = "Property.ProvState"
                });

                MethodCs templateModel = method as MethodCs;
                templateModel.SyncMethods = SyncMethodsGenerationMode.All;

                var    output   = templateModel.BuildInputMappings();
                string expected =
                    @"String paramA = null;
            if (body != null)
            {
                paramA = body.A;
            }
            String paramB = default(String);
            if (body != null)
            {
                paramB = body.B;
            }";

                MultilineAreEqual(expected, output.Trim());
            }
        }
        public void VerifyInputMappingsForFlattening()
        {
            using (NewContext)
            {
                var codeModel = New <CodeModel>();
                codeModel.Name = "test service client";

                var customObjectType = New <CompositeType>("Foo");
                customObjectType.Add(New <Property>(new
                {
                    Name      = "A",
                    ModelType = New <PrimaryType>(KnownPrimaryType.Boolean)
                }));
                customObjectType.Add(New <Property>(new
                {
                    Name      = "B",
                    ModelType = New <PrimaryType>(KnownPrimaryType.String)
                }));
                var method = New <Method>(new
                {
                    Name       = "method1",
                    Group      = "mGroup",
                    ReturnType = new Response(customObjectType, null)
                });
                var outputParameter = New <Parameter>(new { Name = "body", ModelType = customObjectType });
                codeModel.Add(method);
                method.Add(
                    New <Parameter>(
                        new
                {
                    Name           = "paramA",
                    ModelType      = New <PrimaryType>(KnownPrimaryType.Boolean),
                    SerializedName = "paramA"
                }));
                method.Add(
                    New <Parameter>(
                        new
                {
                    Name           = "paramB",
                    ModelType      = New <PrimaryType>(KnownPrimaryType.String),
                    SerializedName = "paramB"
                }));
                method.InputParameterTransformation.Add(new ParameterTransformation
                {
                    OutputParameter = outputParameter
                });
                method.InputParameterTransformation[0].ParameterMappings.Add(new ParameterMapping
                {
                    InputParameter          = method.Parameters.FirstOrDefault(),
                    OutputParameterProperty = "A"
                });
                method.InputParameterTransformation[0].ParameterMappings.Add(new ParameterMapping
                {
                    InputParameter          = method.Parameters.Skip(1).FirstOrDefault(),
                    OutputParameterProperty = "B"
                });

                MethodCs templateModel = method as MethodCs;
                templateModel.SyncMethods = SyncMethodsGenerationMode.All;

                var output = templateModel.BuildInputMappings();
                System.Console.WriteLine(output);
                string expected =
                    @"Foo body = default(Foo);
            if (paramA != null || paramB != null)
            {
                body = new Foo();
                body.A = paramA;
                body.B = paramB;
            }";

                MultilineAreEqual(expected, output.Trim());
            }
        }