Esempio n. 1
0
        public static EdmModel ComplexNamespaceOverlappingModel()
        {
            EdmModel model = new EdmModel();

            EdmEntityContainer container             = new EdmEntityContainer("Default", "Container");
            EdmAction          simpleOperationAction = new EdmAction("Default", "SimpleFunction", EdmCoreModel.Instance.GetInt32(false));

            model.AddElement(simpleOperationAction);
            EdmActionImport simpleOperation = new EdmActionImport(container, "SimpleFunction", simpleOperationAction);

            container.AddElement(simpleOperation);
            model.AddElement(container);

            XElement annotationElement =
                new XElement("{http://foo}Annotation",
                             new XElement("{http://foo}Child",
                                          new XElement("{http://foo1}GrandChild",
                                                       new XElement("{http://foo}GreatGrandChild",
                                                                    "1"
                                                                    )
                                                       )
                                          ),
                             new XElement("{http://foo1}Child",
                                          new XElement("{http://foo}GrandChild",
                                                       "1"
                                                       )
                                          )
                             );
            var annotation = new EdmStringConstant(EdmCoreModel.Instance.GetString(false), annotationElement.ToString());

            annotation.SetIsSerializedAsElement(model, true);
            model.SetAnnotationValue(simpleOperation, "http://foo", "Annotation", annotation);

            return(model);
        }
Esempio n. 2
0
        public void ValidateEntitySetAtttributeCorrectlyWritesOutEntitySet()
        {
            EdmActionImport actionImport = new EdmActionImport(defaultContainer, "Checkout", defaultCheckoutAction, new EdmPathExpression("Customers"));

            this.EdmModelCsdlSchemaWriterTest(writer => writer.WriteActionImportElementHeader(actionImport),
                                              @"<ActionImport Name=""Checkout"" Action=""Default.NameSpace2.CheckOut"" EntitySet=""Customers""");
        }
Esempio n. 3
0
        public void ValidateCorrectActionImportNameAndActionAttributeValueWrittenCorrectly()
        {
            EdmActionImport actionImport = new EdmActionImport(defaultContainer, "Checkout", defaultCheckoutAction, null);

            this.EdmModelCsdlSchemaWriterTest(writer => writer.WriteActionImportElementHeader(actionImport),
                                              @"<ActionImport Name=""Checkout"" Action=""Default.NameSpace2.CheckOut""");
        }
Esempio n. 4
0
        public Task ExtendModelAsync(
            ModelContext context,
            CancellationToken cancellationToken)
        {
            var model           = context.Model;
            var entityContainer = model.EntityContainer as EdmEntityContainer;

            foreach (ActionMethodInfo actionInfo in this.ActionInfos)
            {
                var returnTypeReference = ConventionalActionProvider.GetReturnTypeReference(actionInfo.Method.ReturnType);
                var action = new EdmAction(entityContainer.Namespace, actionInfo.ActionName, returnTypeReference);

                foreach (ParameterInfo parameter in actionInfo.Method.GetParameters())
                {
                    EdmOperationParameter actionParam = new EdmOperationParameter(
                        action,
                        parameter.Name,
                        ConventionalActionProvider.GetTypeReference(parameter.ParameterType));

                    action.AddParameter(actionParam);
                }

                model.AddElement(action);

                if (!action.IsBound)
                {
                    EdmActionImport actionImport = new EdmActionImport(entityContainer, action.Name, action);
                    entityContainer.AddElement(actionImport);
                }
            }
            return(Task.FromResult <object>(null));
        }
        public OpenApiRequestBodyGeneratorTest()
        {
            EdmModel           model     = new EdmModel();
            EdmEntityContainer container = new EdmEntityContainer("NS", "Default");

            model.AddElement(container);

            EdmEntityType customer = new EdmEntityType("NS", "Customer", null, false, false, true);

            customer.AddKeys(customer.AddStructuralProperty("ID", EdmPrimitiveTypeKind.Int32));

            var boolType = EdmCoreModel.Instance.GetBoolean(false);

            var actionEntitySetPath = new EdmPathExpression("Param1/Nav");
            var edmAction           = new EdmAction("NS", "Checkout", boolType, true, actionEntitySetPath);

            edmAction.AddParameter(new EdmOperationParameter(edmAction, "bindingParameter", new EdmEntityTypeReference(customer, true)));
            edmAction.AddParameter("param", EdmCoreModel.Instance.GetString(true));
            model.AddElement(edmAction);

            var actionImportEntitySetPath = new EdmPathExpression("Param1/Nav2");
            var edmActionImport           = new EdmActionImport(container, "CheckoutImport", edmAction, actionImportEntitySetPath);

            container.AddElement(edmActionImport);

            _model        = model;
            _entityType   = customer;
            _action       = edmAction;
            _actionImport = edmActionImport;
        }
Esempio n. 6
0
        public void ValidateIncorrectEdmExpressionThrows()
        {
            EdmActionImport actionImport = new EdmActionImport(defaultContainer, "Checkout", defaultCheckoutAction, new EdmIntegerConstant(EdmCoreModel.Instance.GetInt32(true), 1));

            Action errorTest = () => CreateEdmModelCsdlSchemaWriterForErrorTest().WriteActionImportElementHeader(actionImport);

            errorTest.ShouldThrow <InvalidOperationException>().WithMessage(Strings.EdmModel_Validator_Semantic_OperationImportEntitySetExpressionIsInvalid(actionImport.Name));
        }
Esempio n. 7
0
        public void VerifyActionImportWrittenCorrectly()
        {
            var actionImport = new EdmActionImport(defaultContainer, "Checkout", defaultCheckoutAction, null);

            VisitAndVerifyXml(
                (visitor) => visitor.VisitEntityContainerElements(new IEdmEntityContainerElement[] { actionImport }),
                @"<ActionImport Name=""Checkout"" Action=""Default.NameSpace2.CheckOut"" />");
        }
Esempio n. 8
0
        public void EdmActionImportShouldBeActionImport()
        {
            var action       = new EdmAction("d.s", "checkout", null);
            var actionImport = new EdmActionImport(new EdmEntityContainer("d", "c"), "checkout", action);

            actionImport.IsActionImport().Should().BeTrue();
            actionImport.IsFunctionImport().Should().BeFalse();
        }
        private static ActionImportSegmentTemplate GetSegmentTemplate(out IEdmActionImport actionImport)
        {
            EdmEntityContainer container = new EdmEntityContainer("NS", "default");
            EdmAction          action    = new EdmAction("NS", "action", null);

            actionImport = new EdmActionImport(container, "actionImport", action);
            return(new ActionImportSegmentTemplate(actionImport, null));
        }
Esempio n. 10
0
        public SelectedPropertiesNodeTests()
        {
            this.edmModel = new EdmModel();

            this.defaultContainer = new EdmEntityContainer("TestModel", "DefaultContainer");
            this.edmModel.AddElement(this.defaultContainer);

            this.townType = new EdmEntityType("TestModel", "Town");
            this.edmModel.AddElement(townType);
            EdmStructuralProperty townIdProperty = townType.AddStructuralProperty("Id", EdmCoreModel.Instance.GetInt32(/*isNullable*/ false));

            townType.AddKeys(townIdProperty);
            townType.AddStructuralProperty("Name", EdmCoreModel.Instance.GetString(/*isNullable*/ false));
            townType.AddStructuralProperty("Size", EdmCoreModel.Instance.GetInt32(/*isNullable*/ false));

            this.cityType = new EdmEntityType("TestModel", "City", this.townType);
            cityType.AddStructuralProperty("Photo", EdmCoreModel.Instance.GetStream(/*isNullable*/ false));
            this.edmModel.AddElement(cityType);

            this.districtType = new EdmEntityType("TestModel", "District");
            EdmStructuralProperty districtIdProperty = districtType.AddStructuralProperty("Id", EdmCoreModel.Instance.GetInt32(/*isNullable*/ false));

            districtType.AddKeys(districtIdProperty);
            districtType.AddStructuralProperty("Zip", EdmCoreModel.Instance.GetInt32(/*isNullable*/ false));
            districtType.AddStructuralProperty("Thumbnail", EdmCoreModel.Instance.GetStream(/*isNullable*/ false));
            this.edmModel.AddElement(districtType);

            cityType.AddBidirectionalNavigation(
                new EdmNavigationPropertyInfo {
                Name = "Districts", Target = districtType, TargetMultiplicity = EdmMultiplicity.Many
            },
                new EdmNavigationPropertyInfo {
                Name = "City", Target = cityType, TargetMultiplicity = EdmMultiplicity.One
            });

            this.defaultContainer.AddEntitySet("Cities", cityType);
            this.defaultContainer.AddEntitySet("Districts", districtType);

            this.metropolisType = new EdmEntityType("TestModel", "Metropolis", this.cityType);
            this.metropolisType.AddStructuralProperty("MetropolisStream", EdmCoreModel.Instance.GetStream(/*isNullable*/ false));
            this.edmModel.AddElement(metropolisType);

            metropolisType.AddUnidirectionalNavigation(new EdmNavigationPropertyInfo {
                Name = "MetropolisNavigation", Target = districtType, TargetMultiplicity = EdmMultiplicity.ZeroOrOne
            });

            this.action = new EdmAction("TestModel", "Action", new EdmEntityTypeReference(this.cityType, true));
            this.action.AddParameter("Param", EdmCoreModel.Instance.GetInt32(false));
            this.edmModel.AddElement(action);
            this.actionImport = new EdmActionImport(this.defaultContainer, "Action", action);

            this.actionConflictingWithPropertyName = new EdmAction("TestModel", "Zip", new EdmEntityTypeReference(this.districtType, true));
            this.actionConflictingWithPropertyName.AddParameter("Param", EdmCoreModel.Instance.GetInt32(false));
            this.edmModel.AddElement(actionConflictingWithPropertyName);
            this.actionImportConflictingWithPropertyName = new EdmActionImport(this.defaultContainer, "Zip", actionConflictingWithPropertyName);

            this.openType = new EdmEntityType("TestModel", "OpenCity", this.cityType, false, true);
        }
Esempio n. 11
0
        public void EdmActionImportConstructorShouldDefaultNonSpecifiedPropertiesCorrectly()
        {
            var edmAction       = new EdmAction("DefaultNamespace", "Checkout", this.boolType);
            var edmActionImport = new EdmActionImport(this.entityContainer, "CheckoutImport", edmAction, null);

            edmActionImport.Name.Should().Be("CheckoutImport");
            edmActionImport.EntitySet.Should().BeNull();
            edmActionImport.Container.Should().Be(this.entityContainer);
            edmActionImport.Action.Should().Be(edmAction);
        }
Esempio n. 12
0
        /// <summary>
        /// Initializes a new <see cref="IEdmActionImport"/> instance.
        /// </summary>
        /// <param name="name">name of the service operation.</param>
        /// <param name="action">Action that the action import is importing into the container.</param>
        /// <param name="resultSet">EntitySet of the result expected from this operation.</param>
        /// <returns>An ActionImport</returns>
        public EdmActionImport AddActionImport(string name, IEdmAction action, IEdmEntitySet resultSet)
        {
            EdmActionImport actionImport = new EdmActionImport(this,
                                                               name,
                                                               action,
                                                               resultSet == null ? null : new EdmEntitySetReferenceExpression(resultSet));

            this.AddOperationImport(name, actionImport);
            return(actionImport);
        }
Esempio n. 13
0
        public void VerifyTwoIdenticalNamedActionImportsWithSameEdmPathOnlyWrittenOnce()
        {
            var actionImport  = new EdmActionImport(defaultContainer, "Checkout", defaultCheckoutAction, new EdmPathExpression("path1", "path2"));
            var actionImport2 = new EdmActionImport(defaultContainer, "Checkout", defaultCheckoutAction, new EdmPathExpression("path1", "path2"));

            VisitAndVerifyXml(
                (visitor) =>
            {
                visitor.VisitEntityContainerElements(new IEdmEntityContainerElement[] { actionImport, actionImport2 });
            },
                @"<ActionImport Name=""Checkout"" Action=""Default.NameSpace2.CheckOut"" EntitySet=""path1/path2"" />");
        }
Esempio n. 14
0
        public void VerifyTwoIdenticalNamedActionImportsWithNoEntitySetPropertyOnlyWrittenOnce()
        {
            var actionImport  = new EdmActionImport(defaultContainer, "Checkout", defaultCheckoutAction, null);
            var actionImport2 = new EdmActionImport(defaultContainer, "Checkout", defaultCheckoutAction, null);

            VisitAndVerifyXml(
                (visitor) =>
            {
                visitor.VisitEntityContainerElements(new IEdmEntityContainerElement[] { actionImport, actionImport2 });
            },
                @"<ActionImport Name=""Checkout"" Action=""Default.NameSpace2.CheckOut"" />");
        }
Esempio n. 15
0
        public void VerifyTwoIdenticalNamedActionImportsWithSameEntitySetOnlyWrittenOnce()
        {
            var actionImport  = new EdmActionImport(defaultContainer, "Checkout", defaultCheckoutAction, new EdmEntitySetReferenceExpression(new EdmEntitySet(defaultContainer, "Set", new EdmEntityType("foo", "type"))));
            var actionImport2 = new EdmActionImport(defaultContainer, "Checkout", defaultCheckoutAction, new EdmEntitySetReferenceExpression(new EdmEntitySet(defaultContainer, "Set", new EdmEntityType("foo", "type"))));

            VisitAndVerifyXml(
                (visitor) =>
            {
                visitor.VisitEntityContainerElements(new IEdmEntityContainerElement[] { actionImport, actionImport2 });
            },
                @"<ActionImport Name=""Checkout"" Action=""Default.NameSpace2.CheckOut"" EntitySet=""Set"" />");
        }
        public void KindPropertyReturnsOperationImport()
        {
            // Arrange
            IEdmEntityContainer container       = new EdmEntityContainer("NS", "default");
            IEdmAction          action          = new EdmAction("NS", "MyAction", null);
            var operationImport                 = new EdmActionImport(container, "MyAction", action);
            ODataOperationImportSegment segment = new ODataOperationImportSegment(operationImport);
            ODataPath path = new ODataPath(segment);

            // Act & Assert
            Assert.Equal(ODataPathKind.OperationImport, path.Kind);
        }
Esempio n. 17
0
        public static IEdmModel AddDynamicModel(this EdmModel model)
        {
            var addressType = new EdmComplexType(Namespace, "address");

            addressType.AddStructuralProperty("street", EdmPrimitiveTypeKind.String);
            addressType.AddStructuralProperty("city", EdmPrimitiveTypeKind.String);

            var addressTypeRef   = new EdmComplexTypeReference(addressType, isNullable: false);
            var addressesTypeRef = EdmCoreModel.GetCollection(addressTypeRef);

            var nonNullableStringTypeRef = EdmCoreModel.Instance.GetString(isNullable: false);
            var tagsTypeRef = EdmCoreModel.GetCollection(nonNullableStringTypeRef);

            var docEntityType         = new EdmEntityType(Namespace, DocEntityTypeName);
            EdmStructuralProperty key = docEntityType.AddStructuralProperty("id", EdmPrimitiveTypeKind.String);

            docEntityType.AddKeys(key);
            docEntityType.AddStructuralProperty("addresses", addressesTypeRef);
            docEntityType.AddStructuralProperty("tags", tagsTypeRef);

            var docEntitySetType = EdmCoreModel.GetCollection(new EdmEntityTypeReference(docEntityType, isNullable: true));

            var docComplexType = new EdmComplexType(Namespace, DocComplexTypeName);

            foreach (IEdmStructuralProperty property in docEntityType.StructuralProperties())
            {
                docComplexType.AddStructuralProperty(property.Name, property.Type);
            }

            var valueParameterTypeRef =
                EdmCoreModel.GetCollection(new EdmComplexTypeReference(docComplexType, isNullable: false));

            var container = (EdmEntityContainer)model.EntityContainer;

            container.AddEntitySet("Docs", docEntityType);

            var indexAction =
                new EdmAction(
                    Namespace,
                    "Index",
                    returnType: null,
                    isBound: true,
                    entitySetPathExpression: null);

            indexAction.AddParameter("bindingParameter", docEntitySetType);
            indexAction.AddParameter("value", valueParameterTypeRef);

            var indexActionImport = new EdmActionImport(container, indexAction.Name, indexAction);

            model.AddElements(new IEdmSchemaElement[] { addressType, docEntityType, docComplexType, indexActionImport.Operation });
            return(model);
        }
        public void AmbigiousOperationBindingShouldReferToFirstOperationAlwaysWhenNotNull()
        {
            var container1                = new EdmEntityContainer("n", "d");
            var container2                = new EdmEntityContainer("n", "d");
            var action1Import             = new EdmActionImport(container1, "name", new EdmAction("n", "name", null));
            var functionImport            = new EdmFunctionImport(container2, "name", new EdmFunction("n", "name", EdmCoreModel.Instance.GetString(true)));
            var ambigiousOperationBinding = new AmbiguousOperationImportBinding(action1Import, functionImport);

            Assert.Equal(EdmContainerElementKind.ActionImport, ambigiousOperationBinding.ContainerElementKind);
            Assert.Equal("name", ambigiousOperationBinding.Name);
            Assert.Null(ambigiousOperationBinding.EntitySet);
            Assert.Same(container1, ambigiousOperationBinding.Container);
        }
Esempio n. 19
0
        public void VerifyIdenticalNamedActionImportsWithDifferentEntitySetPropertiesAreWritten()
        {
            var actionImportOnSet             = new EdmActionImport(defaultContainer, "Checkout", defaultCheckoutAction, new EdmPathExpression("Set"));
            var actionImportOnSet2            = new EdmActionImport(defaultContainer, "Checkout", defaultCheckoutAction, new EdmPathExpression("Set2"));
            var actionImportWithNoEntitySet   = new EdmActionImport(defaultContainer, "Checkout", defaultCheckoutAction, null);
            var actionImportWithUniqueEdmPath = new EdmActionImport(defaultContainer, "Checkout", defaultCheckoutAction, new EdmPathExpression("path1", "path2"));

            VisitAndVerifyXml(
                (visitor) =>
            {
                visitor.VisitEntityContainerElements(new IEdmEntityContainerElement[] { actionImportOnSet, actionImportOnSet2, actionImportWithNoEntitySet, actionImportWithUniqueEdmPath });
            },
                @"<ActionImport Name=""Checkout"" Action=""Default.NameSpace2.CheckOut"" EntitySet=""Set"" /><ActionImport Name=""Checkout"" Action=""Default.NameSpace2.CheckOut"" EntitySet=""Set2"" /><ActionImport Name=""Checkout"" Action=""Default.NameSpace2.CheckOut"" /><ActionImport Name=""Checkout"" Action=""Default.NameSpace2.CheckOut"" EntitySet=""path1/path2"" />");
        }
Esempio n. 20
0
        public void EdmActionImportConstructorShouldHaveSpecifiedConstructorValues()
        {
            var actionEntitySetPath = new EdmPathExpression("Param1/Nav");
            var edmAction           = new EdmAction("DefaultNamespace", "Checkout", this.boolType, true, actionEntitySetPath);

            edmAction.AddParameter(new EdmOperationParameter(edmAction, "Param1", new EdmEntityTypeReference(personType, true)));

            var actionImportEntitySetPath = new EdmPathExpression("Param1/Nav2");
            var edmActionImport           = new EdmActionImport(this.entityContainer, "checkoutImport", edmAction, actionImportEntitySetPath);

            edmActionImport.Name.Should().Be("checkoutImport");
            edmActionImport.Container.Should().Be(this.entityContainer);
            edmActionImport.EntitySet.Should().Be(actionImportEntitySetPath);
            edmActionImport.Action.Should().Be(edmAction);
        }
        public void CommonProperties_ReturnsAsExpected()
        {
            // Assert
            EdmEntityContainer container    = new EdmEntityContainer("NS", "default");
            EdmAction          action       = new EdmAction("NS", "action", null);
            EdmActionImport    actionImport = new EdmActionImport(container, "actionImport", action);

            ActionImportSegmentTemplate template = new ActionImportSegmentTemplate(actionImport, null);

            // Act & Assert
            Assert.Equal(ODataSegmentKind.ActionImport, template.Kind);
            Assert.Equal("actionImport", template.Literal);
            Assert.False(template.IsSingle);
            Assert.Null(template.EdmType);
            Assert.Null(template.NavigationSource);
        }
Esempio n. 22
0
        public void ODataPathSegmentHandler_Handles_ActionImportSegment()
        {
            // Arrange
            ODataPathSegmentHandler handler = new ODataPathSegmentHandler();
            IEdmTypeReference       intType = EdmCoreModel.Instance.GetInt32(false);

            EdmEntityContainer     entityContainer = new EdmEntityContainer("NS", "Default");
            IEdmAction             action          = new EdmAction("NS", "action", intType);
            IEdmActionImport       actionImport    = new EdmActionImport(entityContainer, "action", action);
            OperationImportSegment segment         = new OperationImportSegment(actionImport, null);

            // Act
            handler.Handle(segment);

            // Assert
            Assert.Equal("action", handler.PathLiteral);
            Assert.Null(handler.NavigationSource);
        }
        public void Translate_ReturnsODataActionImportSegment()
        {
            // Arrange
            EdmEntityContainer container    = new EdmEntityContainer("NS", "default");
            EdmAction          action       = new EdmAction("NS", "action", null);
            EdmActionImport    actionImport = new EdmActionImport(container, "name", action);

            ActionImportSegmentTemplate   template = new ActionImportSegmentTemplate(actionImport, null);
            ODataTemplateTranslateContext context  = new ODataTemplateTranslateContext();

            // Act
            ODataPathSegment actual = template.Translate(context);

            // Assert
            Assert.NotNull(actual);
            OperationImportSegment actionImportSegment = Assert.IsType <OperationImportSegment>(actual);

            Assert.Same(actionImport, actionImportSegment.OperationImports.First());
        }
Esempio n. 24
0
        public void ODataPathSegmentToTemplateHandler_Handles_ActionImport()
        {
            // Arrange
            ODataPathSegmentToTemplateHandler handler = new ODataPathSegmentToTemplateHandler(null);
            IEdmTypeReference intType = EdmCoreModel.Instance.GetInt32(false);

            EdmEntityContainer     entityContainer = new EdmEntityContainer("NS", "Default");
            IEdmAction             action          = new EdmAction("NS", "action", intType);
            IEdmActionImport       actionImport    = new EdmActionImport(entityContainer, "action", action);
            OperationImportSegment segment         = new OperationImportSegment(actionImport, null);

            // Act
            handler.Handle(segment);

            // Assert
            ODataSegmentTemplate segmentTemplate = Assert.Single(handler.Templates);

            Assert.IsType <ActionImportSegmentTemplate>(segmentTemplate);
        }
        static ODataJsonLightEntryAndFeedDeserializerTests()
        {
            EdmModel       tmpModel    = new EdmModel();
            EdmComplexType complexType = new EdmComplexType("TestNamespace", "TestComplexType");

            complexType.AddProperty(new EdmStructuralProperty(complexType, "StringProperty", EdmCoreModel.Instance.GetString(false)));
            tmpModel.AddElement(complexType);

            EntityType = new EdmEntityType("TestNamespace", "TestEntityType");
            tmpModel.AddElement(EntityType);
            var keyProperty = new EdmStructuralProperty(EntityType, "ID", EdmCoreModel.Instance.GetInt32(false));

            EntityType.AddKeys(new IEdmStructuralProperty[] { keyProperty });
            EntityType.AddProperty(keyProperty);

            var defaultContainer = new EdmEntityContainer("TestNamespace", "DefaultContainer_sub");

            tmpModel.AddElement(defaultContainer);
            EntitySet = new EdmEntitySet(defaultContainer, "TestEntitySet", EntityType);
            defaultContainer.AddElement(EntitySet);

            Action = new EdmAction("TestNamespace", "DoSomething", null, true, null);
            Action.AddParameter("p1", new EdmEntityTypeReference(EntityType, false));
            tmpModel.AddElement(Action);

            ActionImport = defaultContainer.AddActionImport("DoSomething", Action);

            var serviceOperationFunction = new EdmFunction("TestNamespace", "ServiceOperation", EdmCoreModel.Instance.GetInt32(true));

            defaultContainer.AddFunctionImport("ServiceOperation", serviceOperationFunction);
            tmpModel.AddElement(serviceOperationFunction);

            tmpModel.AddElement(new EdmTerm("custom", "DateTimeOffsetAnnotation", EdmPrimitiveTypeKind.DateTimeOffset));
            tmpModel.AddElement(new EdmTerm("custom", "DateAnnotation", EdmPrimitiveTypeKind.Date));
            tmpModel.AddElement(new EdmTerm("custom", "TimeOfDayAnnotation", EdmPrimitiveTypeKind.TimeOfDay));

            EdmModel = TestUtils.WrapReferencedModelsToMainModel("TestNamespace", "DefaultContainer", tmpModel);
            MessageReaderSettingsReadAndValidateCustomInstanceAnnotations = new ODataMessageReaderSettings {
                ShouldIncludeAnnotation = ODataUtils.CreateAnnotationFilter("*")
            };
            MessageReaderSettingsIgnoreInstanceAnnotations = new ODataMessageReaderSettings();
        }
Esempio n. 26
0
        public void CreateOperationForEdmActionReturnsCorrectOperationId(bool enableOperationId)
        {
            // Arrange
            EdmModel      model    = new EdmModel();
            EdmEntityType customer = new EdmEntityType("NS", "Customer");

            customer.AddKeys(customer.AddStructuralProperty("ID", EdmPrimitiveTypeKind.Int32));
            model.AddElement(customer);
            EdmAction action = new EdmAction("NS", "MyAction", EdmCoreModel.Instance.GetString(false), false, null);

            action.AddParameter("param", EdmCoreModel.Instance.GetString(false));
            model.AddElement(action);
            EdmEntityContainer container    = new EdmEntityContainer("NS", "Default");
            EdmEntitySet       customers    = new EdmEntitySet(container, "Customers", customer);
            EdmActionImport    actionImport = new EdmActionImport(container, "MyAction", action);

            model.AddElement(container);

            OpenApiConvertSettings settings = new OpenApiConvertSettings
            {
                EnableOperationId = enableOperationId
            };
            ODataContext context = new ODataContext(model, settings);

            ODataPath path = new ODataPath(new ODataOperationImportSegment(actionImport));

            // Act
            var operation = _operationHandler.CreateOperation(context, path);

            // Assert
            Assert.NotNull(operation);

            if (enableOperationId)
            {
                Assert.Equal("OperationImport.MyAction", operation.OperationId);
            }
            else
            {
                Assert.Null(operation.OperationId);
            }
        }
Esempio n. 27
0
        static ODataEntryMetadataContextTest()
        {
            ActualEntityType = new EdmEntityType("ns", "TypeName");
            ActualEntityType.AddKeys(new IEdmStructuralProperty[] { ActualEntityType.AddStructuralProperty("ID2", EdmPrimitiveTypeKind.Int32), ActualEntityType.AddStructuralProperty("ID3", EdmPrimitiveTypeKind.Int32) });
            ActualEntityType.AddStructuralProperty("Name2", EdmCoreModel.Instance.GetString(isNullable: true), /*defaultValue*/ null);
            ActualEntityType.AddStructuralProperty("Name3", EdmCoreModel.Instance.GetString(isNullable: true), /*defaultValue*/ null);
            ActualEntityType.AddStructuralProperty("StreamProp1", EdmPrimitiveTypeKind.Stream);
            ActualEntityType.AddStructuralProperty("StreamProp2", EdmPrimitiveTypeKind.Stream);

            var navProp1 = ActualEntityType.AddUnidirectionalNavigation(new EdmNavigationPropertyInfo()
            {
                Target             = ActualEntityType,
                TargetMultiplicity = EdmMultiplicity.Many,
                Name = "NavProp1"
            });

            var navProp2 = ActualEntityType.AddUnidirectionalNavigation(new EdmNavigationPropertyInfo()
            {
                Target             = ActualEntityType,
                TargetMultiplicity = EdmMultiplicity.ZeroOrOne,
                Name = "NavProp2"
            });

            var          container = new EdmEntityContainer("Namespace", "Container");
            EdmEntitySet entitySet = container.AddEntitySet("EntitySet", ActualEntityType);

            entitySet.AddNavigationTarget(navProp1, entitySet);
            entitySet.AddNavigationTarget(navProp2, entitySet);

            Action1         = new EdmAction("Namespace", "Action1", null, true /*isBound*/, null /*entitySetPath*/);
            Action2         = new EdmAction("Namespace", "Action2", null, true /*isBound*/, null /*entitySetPath*/);
            ActionImport1   = new EdmActionImport(container, "ActionImport1", Action1);
            ActionImport2   = new EdmActionImport(container, "ActionImport2", Action2);
            Function1       = new EdmFunction("Namespace", "Function1", EdmCoreModel.Instance.GetString(isNullable: true), true /*isBound*/, null /*entitySetPath*/, true /*isComposable*/);
            Function2       = new EdmFunction("Namespace", "Function2", EdmCoreModel.Instance.GetString(isNullable: true), true /*isBound*/, null /*entitySetPath*/, true /*isComposable*/);
            FunctionImport1 = new EdmFunctionImport(container, "FunctionImport1", Function1);
            FunctionImport2 = new EdmFunctionImport(container, "FunctionImport2", Function2);
        }
        public void SplitOperationImports_Works_OperationImports()
        {
            // Arrange
            EdmEntityContainer container      = new EdmEntityContainer("NS", "Container");
            IEdmTypeReference  strType        = EdmCoreModel.Instance.GetString(false);
            EdmFunction        function       = new EdmFunction("NS", "Function", strType);
            EdmFunctionImport  functionImport = new EdmFunctionImport(container, "functionImport", function);
            EdmAction          action         = new EdmAction("NS", "Action", strType);
            EdmActionImport    actionImport   = new EdmActionImport(container, "actionImport", action);

            IEnumerable <IEdmOperationImport> operationImports = new List <IEdmOperationImport>
            {
                functionImport,
                actionImport
            };

            // Act
            (var actionImports, var functionImports) = operationImports.SplitOperationImports();

            // Assert
            Assert.Same(actionImport, Assert.Single(actionImports));
            Assert.Same(functionImport, Assert.Single(functionImports));
        }
Esempio n. 29
0
        public static EdmModel OperationImportParameterWithAnnotationModel()
        {
            EdmModel model = new EdmModel();

            EdmEntityContainer    container             = new EdmEntityContainer("Default", "Container");
            EdmAction             simpleOperationAction = new EdmAction("Default", "SimpleFunction", EdmCoreModel.Instance.GetInt32(false));
            EdmOperationParameter simpleOperationName   = new EdmOperationParameter(simpleOperationAction, "Name", EdmCoreModel.Instance.GetString(true));

            simpleOperationAction.AddParameter(simpleOperationName);
            model.AddElement(simpleOperationAction);
            EdmOperationImport simpleOperation = new EdmActionImport(container, "SimpleFunction", simpleOperationAction);

            container.AddElement(simpleOperation);
            model.AddElement(container);

            var annotationElement =
                new XElement("{http://foo}Annotation", 1);
            var annotation = new EdmStringConstant(EdmCoreModel.Instance.GetString(false), annotationElement.ToString());

            annotation.SetIsSerializedAsElement(model, true);
            model.SetAnnotationValue(simpleOperationName, "http://foo", "Annotation", annotation);

            return(model);
        }
Esempio n. 30
0
        public void ValidateEntitySetAtttributeCorrectlyWritesOutEntitySet()
        {
            EdmActionImport actionImport = new EdmActionImport(defaultContainer, "Checkout", defaultCheckoutAction, new EdmEntitySetReferenceExpression(new EdmEntitySet(defaultContainer, "Customers", new EdmEntityType("DefaultNamespace", "Customer"))));

            TestWriteActionImportElementHeaderMethod(actionImport, @"<ActionImport Name=""Checkout"" Action=""Default.NameSpace2.CheckOut"" EntitySet=""Customers""");
        }