コード例 #1
0
        public void GetPropertyValue_ThrowsInvalidOperation_IfPropertyIsNotFound()
        {
            IEdmEntityTypeReference entityType = new EdmEntityTypeReference(new EdmEntityType("NS", "Name"), isNullable: false);
            Mock<IEdmStructuredObject> edmObject = new Mock<IEdmStructuredObject>();
            edmObject.Setup(o => o.GetEdmType()).Returns(entityType);
            EntityInstanceContext instanceContext = new EntityInstanceContext(_serializerContext, entityType, edmObject.Object);

            Assert.Throws<InvalidOperationException>(
                () => instanceContext.GetPropertyValue("NotPresentProperty"),
                "The EDM instance of type '[NS.Name Nullable=False]' is missing the property 'NotPresentProperty'.");
        }
コード例 #2
0
        public override ODataEntry CreateEntry(SelectExpandNode selectExpandNode, EntityInstanceContext entityInstanceContext)
        {
            ODataEntry entry = base.CreateEntry(selectExpandNode, entityInstanceContext);

            Document document = entityInstanceContext.EntityInstance as Document;
            if (entry != null && document != null)
            {
                // annotate the document with the score.
                entry.InstanceAnnotations.Add(new ODataInstanceAnnotation("org.northwind.search.score", new ODataPrimitiveValue(document.Score)));
            }

            return entry;
        }
コード例 #3
0
        private static EntityTagHeaderValue CreateETag(
            EntityInstanceContext entityInstanceContext,
            IETagHandler handler)
        {
            IEnumerable <IEdmStructuralProperty> concurrencyProperties =
                entityInstanceContext.EntityType.GetConcurrencyProperties().OrderBy(c => c.Name);

            IDictionary <string, object> properties = new Dictionary <string, object>();

            foreach (IEdmStructuralProperty etagProperty in concurrencyProperties)
            {
                properties.Add(etagProperty.Name, entityInstanceContext.GetPropertyValue(etagProperty.Name));
            }
            EntityTagHeaderValue etagHeaderValue = handler.CreateETag(properties);

            return(etagHeaderValue);
        }
コード例 #4
0
        private static Uri LinkFactory(EntityInstanceContext<Entities.People> context, string ServiceUriPrefix, string EntitySetName)
        {
            var linkUri = context.Request.RequestUri.FindParentUri(ServiceUriPrefix);
            object id = new object();
            context.EdmObject.TryGetPropertyValue("Id", out id);
            linkUri.Query = string.Empty;
            linkUri.Fragment = string.Empty;
            linkUri.Path = string.Format(
              CultureInfo.InvariantCulture,
              "{0}{1}({2})",
              linkUri.Path,
              EntitySetName,
              (int)id);

            linkUri.AddFiddler();
            return linkUri.Uri;
        }
コード例 #5
0
        public void GetPropertyValue_ThrowsInvalidOperation_IfEdmObjectGetEdmTypeReturnsNull()
        {
            // Arrange
            object outObject             = null;
            Mock <IEdmEntityObject> mock = new Mock <IEdmEntityObject>();

            mock.Setup(o => o.TryGetPropertyValue(It.IsAny <string>(), out outObject)).Returns(false).Verifiable();
            mock.Setup(o => o.GetEdmType()).Returns <IEdmTypeReference>(null).Verifiable();
            EntityInstanceContext context = new EntityInstanceContext();

            context.EdmObject = mock.Object;

            // Act & Assert
            Assert.Throws <InvalidOperationException>(() => context.GetPropertyValue("SomeProperty"),
                                                      exceptionMessage: "The EDM type of the object of type 'Castle.Proxies.IEdmEntityObjectProxy' is null. " +
                                                      "The EDM type of an IEdmObject cannot be null.");
            mock.Verify();
        }
コード例 #6
0
        /// <summary>
        /// Creates ETag for the entity instance.
        /// </summary>
        /// <param name="entityInstanceContext">The context that contains the entity instance.</param>
        /// <returns>The ETag created.</returns>
        public override string CreateETag(EntityInstanceContext entityInstanceContext)
        {
            Ensure.NotNull(entityInstanceContext);
            string etag = null;
            object etagGetterObject;
            if (entityInstanceContext.Request.Properties.TryGetValue("ETagGetter", out etagGetterObject))
            {
                Func<object, string> etagGetter = etagGetterObject as Func<object, string>;
                if (etagGetter != null)
                {
                    etag = etagGetter(entityInstanceContext.EntityInstance);
                }
            }

            if (etag == null)
            {
                etag = base.CreateETag(entityInstanceContext);
            }

            return etag;
        }
コード例 #7
0
        private static EntityTagHeaderValue CreateETag(
            EntityInstanceContext entityInstanceContext,
            IETagHandler handler)
        {
            IEdmModel model = entityInstanceContext.EdmModel;
            IEdmEntitySet entitySet = entityInstanceContext.NavigationSource as IEdmEntitySet;

            IEnumerable<IEdmStructuralProperty> concurrencyProperties;
            if (model != null && entitySet != null)
            {
                concurrencyProperties = model.GetConcurrencyProperties(entitySet).OrderBy(c => c.Name);
            }
            else
            {
                concurrencyProperties = Enumerable.Empty<IEdmStructuralProperty>();
            }

            IDictionary<string, object> properties = new Dictionary<string, object>();
            foreach (IEdmStructuralProperty etagProperty in concurrencyProperties)
            {
                properties.Add(etagProperty.Name, entityInstanceContext.GetPropertyValue(etagProperty.Name));
            }
            EntityTagHeaderValue etagHeaderValue = handler.CreateETag(properties);
            return etagHeaderValue;
        }
コード例 #8
0
        public void GetPropertyValue_ThrowsInvalidOperation_IfEdmObjectGetEdmTypeReturnsNull()
        {
            // Arrange
            object outObject = null;
            Mock<IEdmEntityObject> mock = new Mock<IEdmEntityObject>();
            mock.Setup(o => o.TryGetPropertyValue(It.IsAny<string>(), out outObject)).Returns(false).Verifiable();
            mock.Setup(o => o.GetEdmType()).Returns<IEdmTypeReference>(null).Verifiable();
            EntityInstanceContext context = new EntityInstanceContext();
            context.EdmObject = mock.Object;

            // Act & Assert
            Assert.Throws<InvalidOperationException>(() => context.GetPropertyValue("SomeProperty"),
                exceptionMessage: "The EDM type of the object of type 'Castle.Proxies.IEdmEntityObjectProxy' is null. " +
                "The EDM type of an IEdmObject cannot be null.");
            mock.Verify();
        }
コード例 #9
0
 public void GetPropertyValue_ThrowsInvalidOperation_IfEdmObjectIsNull()
 {
     EntityInstanceContext instanceContext = new EntityInstanceContext();
     Assert.Throws<InvalidOperationException>(
         () => instanceContext.GetPropertyValue("SomeProperty"),
         "The property 'EdmObject' of EntityInstanceContext cannot be null.");
 }
コード例 #10
0
 public void EmptyCtor_InitializesProperty_SerializerContext()
 {
     var context = new EntityInstanceContext();
     Assert.NotNull(context.SerializerContext);
 }
コード例 #11
0
        public void Property_EntityInstance_ReturnsEdmStructuredObjectInstance()
        {
            object instance = new object();
            IEdmEntityTypeReference entityType = new Mock<IEdmEntityTypeReference>().Object;
            IEdmModel edmModel = new Mock<IEdmModel>().Object;
            EntityInstanceContext entityContext =
                new EntityInstanceContext { EdmObject = new TypedEdmEntityObject(instance, entityType, edmModel) };

            Assert.Same(instance, entityContext.EntityInstance);
        }
コード例 #12
0
 public void Property_EntityInstance_ReturnsNullWhenEdmObjectIsNull()
 {
     EntityInstanceContext entityContext = new EntityInstanceContext { EdmObject = null };
     Assert.Null(entityContext.EntityInstance);
 }
コード例 #13
0
        public void Property_EntityInstance_ThrowsInvalidOp_EntityTypeDoesNotHaveAMapping()
        {
            EdmEntityType entityType = new EdmEntityType("NS", "Name");
            EdmModel model = new EdmModel();
            IEdmEntityObject instance = new Mock<IEdmEntityObject>().Object;
            EntityInstanceContext entityContext = new EntityInstanceContext { EntityType = entityType, EdmModel = model, EdmObject = instance };

            Assert.Throws<InvalidOperationException>(
                () => entityContext.EntityInstance, "The provided mapping does not contain an entry for the entity type 'NS.Name'.");
        }
コード例 #14
0
        public void Property_EntityInstance_EdmObjectHasCollectionProperty()
        {
            // Arrange
            EdmEntityType edmType = new EdmEntityType("NS", "Name");
            edmType.AddStructuralProperty(
                "CollectionProperty",
                new EdmCollectionTypeReference(
                    new EdmCollectionType(EdmCoreModel.Instance.GetPrimitive(EdmPrimitiveTypeKind.Int32, isNullable: false))));
            EdmModel model = new EdmModel();
            model.AddElement(edmType);
            model.SetAnnotationValue<ClrTypeAnnotation>(edmType, new ClrTypeAnnotation(typeof(TestEntity)));
            Mock<IEdmEntityObject> edmObject = new Mock<IEdmEntityObject>();
            object propertyValue = new List<int> { 42 };
            edmObject.Setup(e => e.TryGetPropertyValue("CollectionProperty", out propertyValue)).Returns(true);
            edmObject.Setup(e => e.GetEdmType()).Returns(new EdmEntityTypeReference(edmType, isNullable: false));

            EntityInstanceContext entityContext = new EntityInstanceContext { EdmModel = model, EdmObject = edmObject.Object, EntityType = edmType };

            // Act
            object resource = entityContext.EntityInstance;

            // Assert
            TestEntity testEntity = Assert.IsType<TestEntity>(resource);
            Assert.Equal(new[] { 42 }, testEntity.CollectionProperty);
        }
コード例 #15
0
        public void EmptyCtor_InitializesProperty_SerializerContext()
        {
            var context = new EntityInstanceContext();

            Assert.NotNull(context.SerializerContext);
        }
コード例 #16
0
        private static EntityTagHeaderValue CreateETag(
            EntityInstanceContext entityInstanceContext,
            IETagHandler handler)
        {
            IEnumerable<IEdmStructuralProperty> concurrencyProperties =
                entityInstanceContext.EntityType.GetConcurrencyProperties().OrderBy(c => c.Name);

            IDictionary<string, object> properties = new Dictionary<string, object>();
            foreach (IEdmStructuralProperty etagProperty in concurrencyProperties)
            {
                properties.Add(etagProperty.Name, entityInstanceContext.GetPropertyValue(etagProperty.Name));
            }
            EntityTagHeaderValue etagHeaderValue = handler.CreateETag(properties);
            return etagHeaderValue;
        }