public void DecorateClassTest()
        {
            // Init required vars.
            var decorator   = new ResponseInterfaceDecorator();
            var declaration = new CodeTypeDeclaration();
            var schema      = new MockSchema {
                SchemaDetails = new JsonSchema()
            };
            var internalClassProvider = new ObjectInternalClassProvider();
            var implDetails           = new Dictionary <JsonSchema, SchemaImplementationDetails>();

            implDetails.Add(schema.SchemaDetails, new SchemaImplementationDetails());

            // Test edge cases.
            Assert.Throws(
                typeof(ArgumentNullException),
                () => decorator.DecorateClass(null, schema, implDetails, internalClassProvider));
            Assert.Throws(
                typeof(ArgumentNullException),
                () => decorator.DecorateClass(declaration, null, implDetails, internalClassProvider));
            Assert.Throws(
                typeof(ArgumentNullException),
                () => decorator.DecorateClass(declaration, schema, null, internalClassProvider));

            decorator.DecorateClass(declaration, schema, implDetails, internalClassProvider);
            Assert.AreEqual(0, declaration.BaseTypes.Count);
            Assert.AreEqual(0, declaration.Members.Count);

            // Test simple functionality.
            var details = new SchemaImplementationDetails {
                IsMethodResult = true
            };

            implDetails = new Dictionary <JsonSchema, SchemaImplementationDetails>
            {
                { schema.SchemaDetails, details }
            };

            decorator.DecorateClass(declaration, schema, implDetails, internalClassProvider);

            Assert.AreEqual(1, declaration.BaseTypes.Count);
            Assert.AreEqual(2, declaration.Members.Count); // 1 property with a field.

            // Test with already existing e-tag field.
            declaration = new CodeTypeDeclaration();
            declaration.Members.Add(new CodeMemberProperty()
            {
                Name = "ETag"
            });
            decorator.DecorateClass(declaration, schema, implDetails, internalClassProvider);

            Assert.AreEqual(1, declaration.BaseTypes.Count);
            Assert.AreEqual(1, declaration.Members.Count);
        }
        public void CreateETagPropertyTest()
        {
            CodeTypeMemberCollection col = ResponseInterfaceDecorator.CreateETagProperty(new CodeTypeDeclaration());

            var prop = col[1] as CodeMemberProperty;

            Assert.AreEqual(prop.Name, "ETag");
            Assert.AreEqual(typeof(string).FullName, prop.Type.BaseType);
            Assert.AreEqual(0, prop.CustomAttributes.Count);

            // AutoProperty functionality is tested in the DecoratorUtils test case.
        }