Example #1
0
        public void ODataPathSegmentToTemplateHandler_Handles_Key()
        {
            // Arrange
            ODataPathSegmentToTemplateHandler handler = new ODataPathSegmentToTemplateHandler(null);

            EdmEntityType customer = new EdmEntityType("NS", "Customer");

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

            EdmEntityContainer           entityContainer = new EdmEntityContainer("NS", "Default");
            EdmEntitySet                 customers       = entityContainer.AddEntitySet("Customers", customer);
            IDictionary <string, object> keys            = new Dictionary <string, object>
            {
                { "Id", "{key}" }
            };

            KeySegment segment = new KeySegment(keys, customer, customers);

            // Act
            handler.Handle(segment);

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

            Assert.IsType <KeySegmentTemplate>(segmentTemplate);
        }
Example #2
0
        public void ODataPathSegmentToTemplateHandler_Throws_WithoutAlternateKey()
        {
            // Arrange
            EdmModel      model    = new EdmModel();
            EdmEntityType customer = new EdmEntityType("NS", "Customer");

            customer.AddKeys(customer.AddStructuralProperty("Id", EdmPrimitiveTypeKind.Int32));
            customer.AddStructuralProperty("Code", EdmPrimitiveTypeKind.Int32);
            model.AddElement(customer);

            EdmEntityContainer entityContainer = new EdmEntityContainer("NS", "Default");
            EdmEntitySet       customers       = entityContainer.AddEntitySet("Customers", customer);

            model.AddElement(entityContainer);
            IDictionary <string, object> keys = new Dictionary <string, object>
            {
                { "Code", "{Code}" }
            };

            KeySegment segment = new KeySegment(keys, customer, customers);
            ODataPathSegmentToTemplateHandler handler = new ODataPathSegmentToTemplateHandler(model);

            // Act
            Action test = () => handler.Handle(segment);

            // Assert
            ExceptionAssert.Throws <ODataException>(test, "Cannot find key 'Code' in the 'NS.Customer' type.");
        }
Example #3
0
        public void ODataPathSegmentToTemplateHandler_Throws_BatchSegment()
        {
            // Arrange
            ODataPathSegmentToTemplateHandler handler = new ODataPathSegmentToTemplateHandler(null);

            // Act
            Action test = () => handler.Handle(BatchSegment.Instance);

            // Assert
            ExceptionAssert.Throws <ODataException>(test, "'ODataPathSegment' of kind 'BatchSegment' is not implemented.");
        }
Example #4
0
        public void ODataPathSegmentToTemplateHandler_Handles_Count()
        {
            // Arrange
            ODataPathSegmentToTemplateHandler handler = new ODataPathSegmentToTemplateHandler(null);

            // Act
            handler.Handle(CountSegment.Instance);

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

            Assert.IsType <CountSegmentTemplate>(segmentTemplate);
        }
Example #5
0
        public void ODataPathSegmentToTemplateHandler_Handles_DynamicPath()
        {
            // Arrange
            ODataPathSegmentToTemplateHandler handler = new ODataPathSegmentToTemplateHandler(null);
            DynamicPathSegment segment = new DynamicPathSegment("any");

            // Act
            handler.Handle(segment);

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

            Assert.IsType <DynamicSegmentTemplate>(segmentTemplate);
        }
Example #6
0
        public void ODataPathSegmentToTemplateHandler_Handles_PathTemplate()
        {
            // Arrange
            ODataPathSegmentToTemplateHandler handler = new ODataPathSegmentToTemplateHandler(null);
            PathTemplateSegment segment = new PathTemplateSegment("{any}");

            // Act
            handler.Handle(segment);

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

            Assert.IsType <PathTemplateSegmentTemplate>(segmentTemplate);
        }
Example #7
0
        public void ODataPathSegmentToTemplateHandler_Handles_Value()
        {
            // Arrange
            ODataPathSegmentToTemplateHandler handler = new ODataPathSegmentToTemplateHandler(null);
            IEdmType     intType = EdmCoreModel.Instance.GetInt32(false).Definition;
            ValueSegment segment = new ValueSegment(intType);

            // Act
            handler.Handle(segment);

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

            Assert.IsType <ValueSegmentTemplate>(segmentTemplate);
        }
Example #8
0
        public void ODataPathSegmentToTemplateHandler_Throws_BatchReferenceSegment()
        {
            // Arrange
            ODataPathSegmentToTemplateHandler handler = new ODataPathSegmentToTemplateHandler(null);

            EdmEntityContainer    entityContainer = new EdmEntityContainer("NS", "Default");
            EdmEntityType         customer        = new EdmEntityType("NS", "Customer");
            EdmEntitySet          customers       = entityContainer.AddEntitySet("Customers", customer);
            BatchReferenceSegment segment         = new BatchReferenceSegment("$4", customer, customers);

            // Act
            Action test = () => handler.Handle(segment);

            // Assert
            ExceptionAssert.Throws <ODataException>(test, "'ODataPathSegment' of kind 'BatchReferenceSegment' is not implemented.");
        }
Example #9
0
        public void ODataPathSegmentToTemplateHandler_Handles_Action()
        {
            // Arrange
            ODataPathSegmentToTemplateHandler handler = new ODataPathSegmentToTemplateHandler(null);
            IEdmTypeReference intType = EdmCoreModel.Instance.GetInt32(false);
            IEdmAction        action  = new EdmAction("NS", "action", intType);
            OperationSegment  segment = new OperationSegment(action, null);

            // Act
            handler.Handle(segment);

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

            Assert.IsType <ActionSegmentTemplate>(segmentTemplate);
        }
Example #10
0
        public void ODataPathSegmentToTemplateHandler_Handles_Property()
        {
            // Arrange
            ODataPathSegmentToTemplateHandler handler = new ODataPathSegmentToTemplateHandler(null);

            EdmEntityType          customer = new EdmEntityType("NS", "Customer");
            IEdmStructuralProperty property = customer.AddStructuralProperty("Name", EdmPrimitiveTypeKind.String);
            PropertySegment        segment  = new PropertySegment(property);

            // Act
            handler.Handle(segment);

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

            Assert.IsType <PropertySegmentTemplate>(segmentTemplate);
        }
Example #11
0
        public void ODataPathSegmentToTemplateHandler_Handles_EntitySet()
        {
            // Arrange
            ODataPathSegmentToTemplateHandler handler = new ODataPathSegmentToTemplateHandler(null);

            EdmEntityContainer entityContainer = new EdmEntityContainer("NS", "Default");
            EdmEntityType      customer        = new EdmEntityType("NS", "Customer");
            EdmEntitySet       customers       = entityContainer.AddEntitySet("Customers", customer);
            EntitySetSegment   segment         = new EntitySetSegment(customers);

            // Act
            handler.Handle(segment);

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

            Assert.IsType <EntitySetSegmentTemplate>(segmentTemplate);
        }
Example #12
0
        public void ODataPathSegmentToTemplateHandler_Handles_Singleton()
        {
            // Arrange
            ODataPathSegmentToTemplateHandler handler = new ODataPathSegmentToTemplateHandler(null);

            EdmEntityContainer entityContainer = new EdmEntityContainer("NS", "Default");
            EdmEntityType      customer        = new EdmEntityType("NS", "Customer");
            EdmSingleton       me      = entityContainer.AddSingleton("me", customer);
            SingletonSegment   segment = new SingletonSegment(me);

            // Act
            handler.Handle(segment);

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

            Assert.IsType <SingletonSegmentTemplate>(segmentTemplate);
        }
Example #13
0
        public void ODataPathSegmentToTemplateHandler_Handles_FunctionImport()
        {
            // Arrange
            ODataPathSegmentToTemplateHandler handler = new ODataPathSegmentToTemplateHandler(null);
            IEdmTypeReference intType = EdmCoreModel.Instance.GetInt32(false);

            EdmEntityContainer     entityContainer = new EdmEntityContainer("NS", "Default");
            IEdmFunction           function        = new EdmFunction("NS", "function", intType);
            IEdmFunctionImport     functionImport  = new EdmFunctionImport(entityContainer, "function", function);
            OperationImportSegment segment         = new OperationImportSegment(functionImport, null);

            // Act
            handler.Handle(segment);

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

            Assert.IsType <FunctionImportSegmentTemplate>(segmentTemplate);
        }
Example #14
0
        public void ODataPathSegmentToTemplateHandler_Handles_Key_AfterNavigationProperty()
        {
            // Arrange
            ODataPathSegmentToTemplateHandler handler = new ODataPathSegmentToTemplateHandler(null);

            EdmEntityType customer = new EdmEntityType("NS", "Customer");

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

            EdmEntityType order = new EdmEntityType("NS", "order");

            order.AddKeys(order.AddStructuralProperty("Id", EdmPrimitiveTypeKind.Int32));

            IEdmNavigationProperty ordersNavProperty = customer.AddUnidirectionalNavigation(new EdmNavigationPropertyInfo
            {
                Name               = "Orders",
                Target             = order,
                TargetMultiplicity = EdmMultiplicity.Many
            });
            NavigationPropertyLinkSegment segment1 = new NavigationPropertyLinkSegment(ordersNavProperty, null);

            EdmEntityContainer           entityContainer = new EdmEntityContainer("NS", "Default");
            EdmEntitySet                 orders          = entityContainer.AddEntitySet("Orders", order);
            IDictionary <string, object> keys            = new Dictionary <string, object>
            {
                { "Id", "{relatedKey}" }
            };

            KeySegment segment2 = new KeySegment(keys, order, orders);

            // Act
            handler.Handle(segment1);
            handler.Handle(segment2);

            // Assert
            ODataSegmentTemplate          segmentTemplate = Assert.Single(handler.Templates);
            NavigationLinkSegmentTemplate nlTemplate      = Assert.IsType <NavigationLinkSegmentTemplate>(segmentTemplate);

            Assert.NotNull(nlTemplate.Key);
        }
Example #15
0
        public void ODataPathSegmentToTemplateHandler_Handles_AlternateKey()
        {
            // Arrange
            EdmModel      model    = new EdmModel();
            EdmEntityType customer = new EdmEntityType("NS", "Customer");

            customer.AddKeys(customer.AddStructuralProperty("Id", EdmPrimitiveTypeKind.Int32));
            IEdmStructuralProperty code = customer.AddStructuralProperty("Code", EdmPrimitiveTypeKind.Int32);

            model.AddElement(customer);

            EdmEntityContainer entityContainer = new EdmEntityContainer("NS", "Default");
            EdmEntitySet       customers       = entityContainer.AddEntitySet("Customers", customer);

            model.AddElement(entityContainer);

            IDictionary <string, IEdmProperty> alternateKeys = new Dictionary <string, IEdmProperty>
            {
                { "Code", code }
            };

            model.AddAlternateKeyAnnotation(customer, alternateKeys);

            IDictionary <string, object> keys = new Dictionary <string, object>
            {
                { "Code", "{Code}" }
            };

            KeySegment segment = new KeySegment(keys, customer, customers);
            ODataPathSegmentToTemplateHandler handler = new ODataPathSegmentToTemplateHandler(model);

            // Act
            handler.Handle(segment);

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

            Assert.IsType <KeySegmentTemplate>(segmentTemplate);
        }
Example #16
0
        public void ODataPathSegmentToTemplateHandler_Handles_NavigationPropertyLink()
        {
            // Arrange
            ODataPathSegmentToTemplateHandler handler = new ODataPathSegmentToTemplateHandler(null);

            EdmEntityType          customer          = new EdmEntityType("NS", "customer");
            EdmEntityType          order             = new EdmEntityType("NS", "order");
            IEdmNavigationProperty ordersNavProperty = customer.AddUnidirectionalNavigation(new EdmNavigationPropertyInfo
            {
                Name               = "Orders",
                Target             = order,
                TargetMultiplicity = EdmMultiplicity.Many
            });
            NavigationPropertyLinkSegment segment = new NavigationPropertyLinkSegment(ordersNavProperty, null);

            // Act
            handler.Handle(segment);

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

            Assert.IsType <NavigationLinkSegmentTemplate>(segmentTemplate);
        }