示例#1
0
        public void GenerateAllPropertiesTestEdgeCases()
        {
            var    implDetails           = new Dictionary <JsonSchema, SchemaImplementationDetails>();
            var    decorator             = new StandardPropertyDecorator();
            var    internalClassProvider = new ObjectInternalClassProvider();
            string name = "test";

            Assert.Throws(
                typeof(ArgumentNullException),
                () => decorator.GenerateAllProperties(name, null, implDetails, internalClassProvider));

            var schema = new MockSchema();

            schema.Name          = "test";
            schema.SchemaDetails = null;
            Assert.Throws(
                typeof(ArgumentNullException),
                () => decorator.GenerateAllProperties(name, schema.SchemaDetails, implDetails, internalClassProvider));


            schema.SchemaDetails            = new JsonSchema();
            schema.SchemaDetails.Properties = null;
            Assert.Throws(
                typeof(ArgumentNullException),
                () => decorator.GenerateAllProperties(null, schema.SchemaDetails, implDetails, internalClassProvider));
            var expectedEmpty = decorator.GenerateAllProperties(
                name, schema.SchemaDetails, implDetails, internalClassProvider);

            Assert.IsNotNull(expectedEmpty);
            Assert.AreEqual(0, expectedEmpty.Count);
        }
        public void GenerateSchemaClassesTest()
        {
            var generator   = new GoogleSchemaGenerator(new List <ISchemaDecorator>(), "Fish.Chips");
            var mockService = new MockService();

            var mockSchema = new MockSchema();

            mockSchema.Id            = "Fish";
            mockSchema.Name          = "Fish";
            mockSchema.SchemaDetails = new JsonSchema();
            mockService.Schemas.Add("Fish", mockSchema);

            mockSchema               = new MockSchema();
            mockSchema.Id            = "Chips";
            mockSchema.Name          = "Chips";
            mockSchema.SchemaDetails = new JsonSchema();
            mockService.Schemas.Add("Chips", mockSchema);

            CodeNamespace result = generator.GenerateSchemaClasses(mockService);

            Assert.IsNotNull(result);
            Assert.AreEqual(2, result.Types.Count);
            List <string> classNames = new List <string>(2);

            classNames.Add(result.Types[0].Name);
            classNames.Add(result.Types[1].Name);

            Assert.That(classNames.Contains("Fish"));
            Assert.That(classNames.Contains("Chips"));
        }
示例#3
0
        private Schema GetTestSchema(string id = "test", string name = "test", MockSchema mockSchema = null)
        {
            if (mockSchema == null)
            {
                mockSchema = new MockSchema
                {
                    Name  = "cclf1",
                    Count = 10
                };
            }

            return(new Schema
            {
                Id = id,
                Name = name,
                PublisherMetaJson = JsonConvert.SerializeObject(mockSchema),
                Properties =
                {
                    new Property
                    {
                        Id = "Id",
                        Name = "Id",
                        Type = PropertyType.Integer,
                        IsKey = true
                    },
                    new Property
                    {
                        Id = "Name",
                        Name = "Name",
                        Type = PropertyType.String
                    }
                }
            });
        }
        public void DecorateClassGenerationTest()
        {
            var implDetails           = new Dictionary <JsonSchema, SchemaImplementationDetails>();
            var decorator             = new ArraySchemaDecorator();
            var internalClassProvider = new ObjectInternalClassProvider();
            var decl = new CodeTypeDeclaration();

            var schema = new MockSchema();

            schema.Name                = "test";
            schema.SchemaDetails       = new JsonSchema();
            schema.SchemaDetails.Type  = JsonSchemaType.Array;
            schema.SchemaDetails.Items = new List <JsonSchema>();
            schema.SchemaDetails.Items.Clear();
            schema.SchemaDetails.Items.Add(
                new JsonSchema {
                Description = "Test", Id = "TestSchema", Type = JsonSchemaType.Object
            });
            implDetails.Add(schema.SchemaDetails, new SchemaImplementationDetails());
            implDetails.Add(schema.SchemaDetails.Items[0], new SchemaImplementationDetails());
            Assert.DoesNotThrow(() => decorator.DecorateClass(decl, schema, implDetails, internalClassProvider));

            Assert.That(decl.BaseTypes.Count, Is.EqualTo(1));
            Assert.That(decl.BaseTypes[0].BaseType, Is.EqualTo(typeof(List <>).FullName));

            // Subtype will only be created later on by the NestedClassGenerator,
            // and therefore cannot be tested here
        }
        public void DecorateClassTestEdgeCases()
        {
            var implDetails                 = new Dictionary <JsonSchema, SchemaImplementationDetails>();
            var decorator                   = new ArraySchemaDecorator();
            var internalClassProvider       = new ObjectInternalClassProvider();
            CodeTypeDeclaration declaration = null;

            var schema = new MockSchema();

            schema.Name          = "test";
            schema.SchemaDetails = null;
            Assert.Throws(
                typeof(ArgumentNullException),
                () => decorator.DecorateClass(new CodeTypeDeclaration(), schema, implDetails, internalClassProvider));

            schema.SchemaDetails      = new JsonSchema();
            schema.SchemaDetails.Type = JsonSchemaType.Float;
            Assert.DoesNotThrow(
                () =>
                decorator.DecorateClass(
                    declaration = new CodeTypeDeclaration(), schema, implDetails, internalClassProvider));
            Assert.That(declaration.BaseTypes.Count, Is.EqualTo(0));

            schema.SchemaDetails.Type  = JsonSchemaType.Array;
            schema.SchemaDetails.Items = new List <JsonSchema>();
            schema.SchemaDetails.Items.Add(new JsonSchema());
            schema.SchemaDetails.Items.Add(new JsonSchema());
            Assert.DoesNotThrow(
                () =>
                decorator.DecorateClass(
                    declaration = new CodeTypeDeclaration(), schema, implDetails, internalClassProvider));
            Assert.That(declaration.BaseTypes.Count, Is.EqualTo(0));
        }
        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);
        }
示例#7
0
        public void GenerateAllPropertiesTest()
        {
            var implDetails           = new Dictionary <JsonSchema, SchemaImplementationDetails>();
            var schema                = new MockSchema();
            var internalClassProvider = new ObjectInternalClassProvider();

            schema.SchemaDetails            = new JsonSchema();
            schema.SchemaDetails.Type       = JsonSchemaType.Object;
            schema.SchemaDetails.Properties = new Dictionary <string, JsonSchema>();
            implDetails.Add(schema.SchemaDetails, new SchemaImplementationDetails());
            string name = "test";

            foreach (var pair in StandardPropertyFieldDecoratorTest.NamesToType)
            {
                JsonSchema property = new JsonSchema();
                property.Type        = pair.Value;
                property.Id          = pair.Key;
                property.Description = StandardPropertyFieldDecoratorTest.NamesToDescription[pair.Key];
                schema.SchemaDetails.Properties.Add(pair.Key, property);
                implDetails.Add(property, new SchemaImplementationDetails());
            }

            var decorator = new StandardPropertyDecorator();
            IList <CodeMemberProperty> generatedProperties = decorator.GenerateAllProperties(
                name, schema.SchemaDetails, implDetails, internalClassProvider);

            Assert.NotNull(generatedProperties);
            Assert.AreEqual(StandardPropertyFieldDecoratorTest.NamesToType.Count, generatedProperties.Count);
            foreach (var field in generatedProperties)
            {
                Assert.That(
                    StandardPropertyFieldDecoratorTest.NamesToType.ContainsKey(field.Name.ToLower()),
                    "field name was not present in namesToType " + field.Name);
            }

            int item = 0;

            foreach (var pair in StandardPropertyFieldDecoratorTest.NamesToType)
            {
                var field = generatedProperties[item++];
                Assert.AreEqual(
                    pair.Key, field.Name.ToLower(),
                    string.Format("Name different for expected at index {0}", item - 1));
                Assert.AreEqual(
                    SchemaDecoratorUtil.GetCodeType(new JsonSchema {
                    Type = pair.Value
                }, null, internalClassProvider)
                    .BaseType, field.Type.BaseType);
            }
        }
        public void DecorateClassValidationTest()
        {
            var decl        = new CodeTypeDeclaration();
            var dec         = new AdditionalPropertiesSchemaDecorator();
            var schema      = new MockSchema();
            var implDetails = new Dictionary <JsonSchema, SchemaImplementationDetails>();
            var provider    = new SchemaGenerator.NestedClassGenerator(decl, new ISchemaDecorator[0], "");

            // Test all parameters.
            Assert.Throws <ArgumentNullException>(() => dec.DecorateClass(null, schema, implDetails, provider));
            Assert.Throws <ArgumentNullException>(() => dec.DecorateClass(decl, null, implDetails, provider));
            Assert.Throws <ArgumentNullException>(() => dec.DecorateClass(decl, schema, null, provider));
            Assert.Throws <ArgumentNullException>(() => dec.DecorateClass(decl, schema, implDetails, null));
            dec.DecorateClass(decl, schema, implDetails, provider);
        }
示例#9
0
        public void DecorateClassTest()
        {
            var decorator   = new StandardPropertyDecorator();
            var declaration = new CodeTypeDeclaration();
            var schema      = new MockSchema()
            {
                Name = "TestSchema", SchemaDetails = new JsonSchema()
            };
            var internalClassProvider = new ObjectInternalClassProvider();
            var implDetails           = new Dictionary <JsonSchema, SchemaImplementationDetails>();

            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);
        }
示例#10
0
        private static async Task <Schema> GetSchemaForMockSchema(IApiClient apiClient, Schema schema, MockSchema mockSchema)
        {
            var path     = $"generate.json?array=true&count={10}&schema={mockSchema.Name}";
            var response = await apiClient.PostAsync(path, null);

            var recordsList = JsonConvert.DeserializeObject <List <Dictionary <string, object> > >(await response.Content.ReadAsStringAsync());
            var types       = GetPropertyTypesFromRecords(recordsList);
            var record      = recordsList.First();

            var properties = new List <Property>();

            foreach (var recordKey in record.Keys)
            {
                var property = new Property
                {
                    Id              = recordKey,
                    Name            = recordKey,
                    Type            = types[recordKey],
                    IsKey           = false,
                    IsCreateCounter = false,
                    IsUpdateCounter = false,
                    TypeAtSource    = "",
                    IsNullable      = true
                };

                properties.Add(property);
            }

            schema.Properties.Clear();
            schema.Properties.AddRange(properties);

            return(schema);
        }
示例#11
0
 public TruncatingSearchServiceTests()
 {
     schema      = new MockSchema();
     mockService = new MockSearchService(schema);
     sut         = new TruncatingSearchService(mockService);
 }