public static IEdmModel MultipleSchemasWithDifferentNamespacesEdm() { var namespaces = new string[] { "FindMethodsTestModelBuilder.MultipleSchemasWithDifferentNamespaces.first", "FindMethodsTestModelBuilder.MultipleSchemasWithDifferentNamespaces.second" }; var model = new EdmModel(); foreach (var namespaceName in namespaces) { var entityType1 = new EdmEntityType(namespaceName, "validEntityType1"); entityType1.AddKeys(entityType1.AddStructuralProperty("Id", EdmPrimitiveTypeKind.Int32)); var entityType2 = new EdmEntityType(namespaceName, "VALIDeNTITYtYPE2"); entityType2.AddKeys(entityType2.AddStructuralProperty("Id", EdmPrimitiveTypeKind.Int32)); var entityType3 = new EdmEntityType(namespaceName, "VALIDeNTITYtYPE3"); entityType3.AddKeys(entityType3.AddStructuralProperty("Id", EdmPrimitiveTypeKind.Int32)); entityType1.AddUnidirectionalNavigation(new EdmNavigationPropertyInfo {Name = "Mumble", Target = entityType2, TargetMultiplicity = EdmMultiplicity.Many}); var complexType = new EdmComplexType(namespaceName, "ValidNameComplexType1"); complexType.AddStructuralProperty("aPropertyOne", new EdmComplexTypeReference(complexType, false)); model.AddElements(new IEdmSchemaElement[] { entityType1, entityType2, entityType3, complexType }); var function1 = new EdmFunction(namespaceName, "ValidFunction1", EdmCoreModel.Instance.GetSingle(false)); var function2 = new EdmFunction(namespaceName, "ValidFunction1", EdmCoreModel.Instance.GetSingle(false)); function2.AddParameter("param1", new EdmEntityTypeReference(entityType1, false)); var function3 = new EdmFunction(namespaceName, "ValidFunction1", EdmCoreModel.Instance.GetSingle(false)); function3.AddParameter("param1", EdmCoreModel.Instance.GetSingle(false)); model.AddElements(new IEdmSchemaElement[] {function1, function2, function3}); } return model; }
public void Invalid_CastTests(string path) { // Arrange EdmModel model = new EdmModel(); EdmEntityContainer container = new EdmEntityContainer("NS", "Container"); var vehicle = new EdmEntityType("NS", "Vehicle"); var car = new EdmEntityType("NS", "Car", vehicle); var motorcycle = new EdmEntityType("NS", "Motorcycle", vehicle); model.AddElements(new IEdmSchemaElement[] { vehicle, car, motorcycle, container }); container.AddEntitySet("Vehicles", vehicle); container.AddEntitySet("Cars", car); container.AddEntitySet("Motorcycles", motorcycle); // Act var exception = Assert.Throws<ODataException>(() => _parser.Parse(model, path)); Assert.Contains("Invalid cast encountered.", exception.Message); }
public void CastTests(string path, string expectedEdmType) { // Arrange EdmModel model = new EdmModel(); EdmEntityContainer container = new EdmEntityContainer("NS", "Container"); var vehicle = new EdmEntityType("NS", "Vehicle"); var car = new EdmEntityType("NS", "Car", vehicle); var motorcycle = new EdmEntityType("NS", "Motorcycle", vehicle); model.AddElements(new IEdmSchemaElement[] { vehicle, car, motorcycle, container }); container.AddEntitySet("Vehicles", vehicle); container.AddEntitySet("Cars", car); container.AddEntitySet("Motorcycles", motorcycle); container.AddSingleton("Contoso", vehicle); // Act ODataPath odataPath = _parser.Parse(model, path); // Assert Assert.NotNull(odataPath); Assert.Equal(expectedEdmType, odataPath.EdmType.ToTraceString()); }
[InlineData("Cars/NS.Vehicle/NS.WashMultiple", "WashMultiple", "Collection([NS.Vehicle Nullable=False])")] // downcast public void ActionOverloadResoultionTests(string path, string actionName, string expectedEntityBound) { // Arrange EdmModel model = new EdmModel(); EdmEntityContainer container = new EdmEntityContainer("NS", "Container"); var vehicle = new EdmEntityType("NS", "Vehicle"); var car = new EdmEntityType("NS", "Car", vehicle); var motorcycle = new EdmEntityType("NS", "Motorcycle", vehicle); model.AddElements(new IEdmSchemaElement[] { vehicle, car, motorcycle, container }); var washVehicle = AddBindableAction(model, "Wash", vehicle, isCollection: false); var washCar = AddBindableAction(model, "Wash", car, isCollection: false); var washVehicles = AddBindableAction(model, "WashMultiple", vehicle, isCollection: true); var washCars = AddBindableAction(model, "WashMultiple", car, isCollection: true); container.AddEntitySet("Vehicles", vehicle); container.AddEntitySet("Cars", car); container.AddEntitySet("Motorcycles", motorcycle); container.AddSingleton("Contoso", vehicle); // Act ODataPath odataPath = _parser.Parse(model, path); // Assert Assert.NotNull(odataPath); BoundActionPathSegment actionSegment = Assert.IsType<BoundActionPathSegment>(odataPath.Segments.Last()); Assert.Equal("NS." + actionName, actionSegment.ActionName); Assert.Equal(expectedEntityBound, actionSegment.Action.Parameters.First().Type.Definition.ToTraceString()); }
public static IEdmModel PropertyFacetsCollectionEdm() { var typeReferences = new IEdmTypeReference[] { EdmCoreModel.Instance.GetDecimal(precision:2, scale:2, isNullable:false), EdmCoreModel.Instance.GetString(isUnbounded:false, maxLength:100, isUnicode:false, isNullable:false), EdmCoreModel.GetCollection(EdmCoreModel.Instance.GetString(isUnbounded:false, maxLength:100, isUnicode:false, isNullable:false)), }; var model = new EdmModel(); var entityType = new EdmEntityType("Namespace", "EntityType1"); var complexType = new EdmComplexType("Namespace", "ComplexType1"); entityType.AddKeys(entityType.AddStructuralProperty("Id", EdmPrimitiveTypeKind.Int32, false)); int counter = 0; foreach (var edmTypeReference in typeReferences) { entityType.AddStructuralProperty("prop_" + counter, edmTypeReference); complexType.AddStructuralProperty("property" + counter, edmTypeReference); counter++; } model.AddElements(new IEdmSchemaElement[] { entityType, complexType }); return model; }
public void Invalid_CastTests(string path, string expectedError) { // Arrange EdmModel model = new EdmModel(); EdmEntityContainer container = new EdmEntityContainer("NS", "Container"); var vehicle = new EdmEntityType("NS", "Vehicle"); vehicle.AddKeys(vehicle.AddStructuralProperty("ID", EdmPrimitiveTypeKind.Int32)); var car = new EdmEntityType("NS", "Car", vehicle); var motorcycle = new EdmEntityType("NS", "Motorcycle", vehicle); model.AddElements(new IEdmSchemaElement[] { vehicle, car, motorcycle, container }); container.AddEntitySet("Vehicles", vehicle); container.AddEntitySet("Cars", car); container.AddEntitySet("Motorcycles", motorcycle); // Act & Assert Assert.Throws<ODataException>( () => _parser.Parse(model, _serviceRoot, path), expectedError); }
private static IEdmModel BuildModelFromTypes(IEnumerable<IEdmSchemaType> types) { var model = new EdmModel(); model.AddElements(types); return model; }
public void FindAllDerivedTypesWordsAcrossModels() { EdmModel model = new EdmModel(); EdmModel referencedModel = new EdmModel(); var A = new EdmEntityType("Referenced", "A"); var AProp = A.AddStructuralProperty("ID", EdmCoreModel.Instance.GetString(false)); A.AddKeys(new[] { AProp }); var B = new EdmEntityType("Referenced", "B", A); var C = new EdmEntityType("Referenced", "C", B); var D = new EdmEntityType("Referenced", "D", C); referencedModel.AddElements(new[] { A, B, C }); model.AddReferencedModel(referencedModel); model.AddElement(D); IEnumerable<IEdmStructuredType> derivedTypes = model.FindAllDerivedTypes(A); Assert.AreEqual(3, derivedTypes.Count(), "Correct number of derived types"); Assert.IsTrue(derivedTypes.Contains(B), "Contains B"); Assert.IsTrue(derivedTypes.Contains(C), "Contains C"); Assert.IsTrue(derivedTypes.Contains(D), "Contains D"); }