コード例 #1
0
        public void ActionsTest()
        {
            var routeName = typeof(ActionsHypermediaObject).Name + "_Route";

            RouteRegister.AddHypermediaObjectRoute(typeof(ActionsHypermediaObject), routeName);

            var routeNameHypermediaActionNotExecutable = typeof(HypermediaActionNotExecutable).Name + "_Route";

            RouteRegister.AddActionRoute(typeof(HypermediaActionNotExecutable), routeNameHypermediaActionNotExecutable);

            var routeNameHypermediaActionNoArgument = typeof(HypermediaActionNoArgument).Name + "_Route";

            RouteRegister.AddActionRoute(typeof(HypermediaActionNoArgument), routeNameHypermediaActionNoArgument);

            var routeNameHypermediaActionWithArgument = typeof(HypermediaActionWithArgument).Name + "_Route";

            RouteRegister.AddActionRoute(typeof(HypermediaActionWithArgument), routeNameHypermediaActionWithArgument);

            var routeNameHypermediaActionWithTypedArgument = typeof(HypermediaFunctionWithTypedArgument).Name + "_Route";

            RouteRegister.AddActionRoute(typeof(HypermediaFunctionWithTypedArgument), routeNameHypermediaActionWithTypedArgument);

            var routeNameHypermediaActionFuncNoArgument = typeof(HypermediaFunctionNoArgument).Name + "_Route";

            RouteRegister.AddActionRoute(typeof(HypermediaFunctionNoArgument), routeNameHypermediaActionFuncNoArgument);

            var routeNameRegisteredActionParameter = typeof(RegisteredActionParameter).Name + "_Route";

            RouteRegister.AddParameterTypeRoute(typeof(RegisteredActionParameter), routeNameRegisteredActionParameter);



            var ho = new ActionsHypermediaObject();

            var siren = SirenConverter.ConvertToJson(ho);

            AssertDefaultClassName(siren, typeof(ActionsHypermediaObject));
            AssertEmptyProperties(siren);
            AssertEmptyEntities(siren);
            AssertHasOnlySelfLink(siren, routeName);

            var actionsArray = (JArray)siren["actions"];

            Assert.AreEqual(actionsArray.Count, 5);
            AssertActionBasic((JObject)siren["actions"][0], "RenamedAction", "POST", routeNameHypermediaActionNoArgument, 4, "A Title");
            AssertActionBasic((JObject)siren["actions"][1], "ActionNoArgument", "POST", routeNameHypermediaActionNoArgument, 3);

            AssertActionBasic((JObject)siren["actions"][2], "ActionWithArgument", "POST", routeNameHypermediaActionWithArgument, 5);
            AssertActionArgument((JObject)siren["actions"][2], DefaultContentTypes.ApplicationJson, "ActionParameter", "ActionParameter");

            AssertActionBasic((JObject)siren["actions"][3], "FunctionWithTypedArgument", "POST", routeNameHypermediaActionWithTypedArgument, 5);
            AssertActionArgument((JObject)siren["actions"][3], DefaultContentTypes.ApplicationJson, "RegisteredActionParameter", routeNameRegisteredActionParameter, true);

            AssertActionBasic((JObject)siren["actions"][4], "FunctionNoArgument", "POST", routeNameHypermediaActionFuncNoArgument, 3);
        }
コード例 #2
0
        protected void TestInitBase()
        {
            RouteRegister        = new RouteRegister();
            RouteResolverFactory = new RegisterRouteResolverFactory(RouteRegister, new HypermediaExtensionsOptions());
            RouteKeyFactory      = new RouteKeyFactory(RouteRegister);

            RouteResolver  = RouteResolverFactory.CreateRouteResolver(UrlHelper, RouteKeyFactory, TestUrlConfig);
            SirenConverter = CreateSirenConverter();
            SirenConverterNoNullProperties = CreateSirenConverter(new HypermediaConverterConfiguration {
                WriteNullProperties = false
            });
        }
コード例 #3
0
        public void RepresentationEntitiesTest()
        {
            var routeName = typeof(EmptyHypermediaObject).Name + "_Route";

            RouteRegister.AddHypermediaObjectRoute(typeof(EmptyHypermediaObject), routeName);

            var routeNameEmbedded = typeof(EmbeddedSubEntity).Name + "_Route";

            RouteRegister.AddHypermediaObjectRoute(typeof(EmbeddedSubEntity), routeNameEmbedded);

            var ho          = new EmptyHypermediaObject();
            var relation1   = "Embedded";
            var embeddedHo1 = new EmbeddedSubEntity();

            ho.Entities.Add(relation1, new HypermediaObjectReference(embeddedHo1));

            var relationsList2 = new List <string> {
                "RelationA", "RelationB"
            };
            var embeddedHo2 = new EmbeddedSubEntity {
                ABool = true, AInt = 3
            };

            ho.Entities.Add(new RelatedEntity(relationsList2, new HypermediaObjectReference(embeddedHo2)));

            var siren = SirenConverter.ConvertToJson(ho);

            AssertDefaultClassName(siren, typeof(EmptyHypermediaObject));
            AssertEmptyProperties(siren);
            AssertEmptyActions(siren);
            AssertHasOnlySelfLink(siren, routeName);

            Assert.IsTrue(siren["entities"].Type == JTokenType.Array);
            var entitiesArray = (JArray)siren["entities"];

            Assert.AreEqual(entitiesArray.Count, ho.Entities.Count);

            var embeddedEntityObject = (JObject)siren["entities"][0];

            AssertDefaultClassName(embeddedEntityObject, typeof(EmbeddedSubEntity));
            AssertRelations(embeddedEntityObject, new List <string> {
                relation1
            });
            AssertHasOnlySelfLink(embeddedEntityObject, routeNameEmbedded);
            AssertEmbeddedEntity(embeddedEntityObject, embeddedHo1);

            embeddedEntityObject = (JObject)siren["entities"][1];
            AssertDefaultClassName(embeddedEntityObject, typeof(EmbeddedSubEntity));
            AssertRelations(embeddedEntityObject, relationsList2);
            AssertHasOnlySelfLink(embeddedEntityObject, routeNameEmbedded);
            AssertEmbeddedEntity(embeddedEntityObject, embeddedHo2);
        }
コード例 #4
0
        public void LinkEntitiesTest()
        {
            var routeName = typeof(EmptyHypermediaObject).Name + "_Route";

            RouteRegister.AddHypermediaObjectRoute(typeof(EmptyHypermediaObject), routeName);

            var routeNameEmbedded = typeof(EmbeddedSubEntity).Name + "_Route";

            RouteRegister.AddHypermediaObjectRoute(typeof(EmbeddedSubEntity), routeNameEmbedded);
            RouteRegister.AddRouteKeyProducer(typeof(EmbeddedSubEntity), new EmbeddedEntityRouteKeyProducer());

            var ho = new EmptyHypermediaObject();

            var relation1 = "Embedded";

            ho.Entities.Add(relation1, new HypermediaObjectKeyReference(typeof(EmbeddedSubEntity), 6));

            var relationsList2 = new List <string> {
                "RelationA", "RelationB"
            };
            var query = new EmbeddedQueryObject {
                AInt = 2
            };

            ho.Entities.Add(new RelatedEntity(relationsList2, new HypermediaObjectQueryReference(typeof(EmbeddedSubEntity), query, 3)));

            var siren = SirenConverter.ConvertToJson(ho);

            AssertDefaultClassName(siren, typeof(EmptyHypermediaObject));
            AssertEmptyProperties(siren);
            AssertEmptyActions(siren);
            AssertHasOnlySelfLink(siren, routeName);

            Assert.IsTrue(siren["entities"].Type == JTokenType.Array);
            var entitiesArray = (JArray)siren["entities"];

            Assert.AreEqual(entitiesArray.Count, ho.Entities.Count);

            var embeddedEntityObject = (JObject)siren["entities"][0];

            AssertRelations(embeddedEntityObject, new List <string> {
                relation1
            });
            AssertRoute(((JValue)embeddedEntityObject["href"]).Value <string>(), routeNameEmbedded, "{ key = 6 }");

            embeddedEntityObject = (JObject)siren["entities"][1];
            AssertRelations(embeddedEntityObject, relationsList2);
            AssertRoute(((JValue)embeddedEntityObject["href"]).Value <string>(), routeNameEmbedded, "{ key = 3 }", QueryStringBuilder.CreateQueryString(query));
        }
コード例 #5
0
        public void EmptyObjectTest()
        {
            var routeName = typeof(EmptyHypermediaObject).Name + "_Route";

            RouteRegister.AddHypermediaObjectRoute(typeof(EmptyHypermediaObject), routeName);

            var ho    = new EmptyHypermediaObject();
            var siren = SirenConverter.ConvertToJson(ho);

            AssertDefaultClassName(siren, typeof(EmptyHypermediaObject));
            AssertEmptyProperties(siren);
            AssertEmptyEntities(siren);
            AssertEmptyActions(siren);
            AssertHasOnlySelfLink(siren, routeName);
        }
コード例 #6
0
        public void SerializeListProperties()
        {
            var routeName = typeof(HypermediaObjectWithListProperties).Name + "_Route";

            RouteRegister.AddHypermediaObjectRoute(typeof(HypermediaObjectWithListProperties), routeName, HttpMethod.GET);

            var ho = new HypermediaObjectWithListProperties();

            ho.AValueList = new List <int> {
                3, 5, 7
            };
            ho.ANullableList = new List <int?> {
                2, null, 4
            };
            ho.AReferenceList = new List <string> {
                "a", "xyz"
            };
            ho.AValueArray = new[] { 6, 9, 2, 7 };
            ho.AObjectList = new List <Nested>
            {
                new Nested(3),
                new Nested(5)
            };

            ho.ListOfLists = new List <IEnumerable <int> >
            {
                new List <int> {
                    3, 4, 5
                },
                new List <int> {
                    6, 7, 8
                }
            };

            var siren = SirenConverter.ConvertToJson(ho);

            AssertDefaultClassName(siren, typeof(HypermediaObjectWithListProperties));
            AssertEmptyEntities(siren);
            AssertEmptyActions(siren);
            AssertHasOnlySelfLink(siren, routeName);

            var propertiesObject = PropertyHelpers.GetPropertiesJObject(siren);

            PropertyHelpers.CompareHypermediaListPropertiesAndJson(propertiesObject, ho);

            AssertObjectList(ho, siren);
            AssertListOfLists(ho, siren);
        }
コード例 #7
0
        public void AttributedPropertyTest()
        {
            var routeName = typeof(AttributedPropertyHypermediaObject).Name + "_Route";

            RouteRegister.AddHypermediaObjectRoute(typeof(AttributedPropertyHypermediaObject), routeName);

            var ho    = new AttributedPropertyHypermediaObject();
            var siren = SirenConverter.ConvertToJson(ho);

            AssertDefaultClassName(siren, typeof(AttributedPropertyHypermediaObject));
            AssertEmptyEntities(siren);
            AssertEmptyActions(siren);
            AssertHasOnlySelfLink(siren, routeName);

            Assert.IsTrue(siren["properties"].Type == JTokenType.Object);
            var propertiesObject = (JObject)siren["properties"];

            var propertyInfos = typeof(AttributedPropertyHypermediaObject).GetProperties()
                                .Where(p =>
                                       p.Name != "IgnoredProperty" &&
                                       p.Name != "Entities" &&
                                       p.Name != "Links")
                                .ToList();

            Assert.AreEqual(propertiesObject.Properties().Count(), propertyInfos.Count);

            foreach (var property in propertyInfos)
            {
                string lookupName;
                switch (property.Name)
                {
                case "Property1":
                    lookupName = "Property1Renamed";
                    break;

                case "Property2":
                    lookupName = "Property2Renamed";
                    break;

                default:
                    lookupName = property.Name;
                    break;
                }
                Assert.IsTrue(propertiesObject[lookupName] != null);
            }
        }
コード例 #8
0
        public void LinksHypermediaObjectQueryReferenceTest()
        {
            var routeNameLinking = typeof(LinkingHypermediaObject).Name + "_Route";

            RouteRegister.AddHypermediaObjectRoute(typeof(LinkingHypermediaObject), routeNameLinking, HttpMethod.GET);

            var routeNameLinked1 = typeof(Linked1HypermediaObject).Name + "_Route";

            RouteRegister.AddHypermediaObjectRoute(typeof(Linked1HypermediaObject), routeNameLinked1, HttpMethod.GET);
            var link1Rel     = "Link1";
            var queryObject1 = new QueryObject {
                ABool = true, AInt = 3
            };


            var routeNameLinked2 = typeof(LinkedHypermediaObjectWithKey).Name + "_Route";

            RouteRegister.AddHypermediaObjectRoute(typeof(LinkedHypermediaObjectWithKey), routeNameLinked2, HttpMethod.GET);
            RouteRegister.AddRouteKeyProducer(typeof(LinkedHypermediaObjectWithKey), new LinkedHypermediaObjectWithKeyRouteKeyProvider());
            var link2Rel     = "Link2";
            var queryObject2 = new QueryObject {
                ABool = false, AInt = 5
            };

            var ho = new LinkingHypermediaObject();

            ho.Links.Add(link1Rel, new HypermediaObjectQueryReference(typeof(Linked1HypermediaObject), queryObject1));
            ho.Links.Add(link2Rel, new HypermediaObjectQueryReference(typeof(LinkedHypermediaObjectWithKey), queryObject2, 3));

            var siren = SirenConverter.ConvertToJson(ho);

            AssertDefaultClassName(siren, typeof(LinkingHypermediaObject));
            AssertEmptyProperties(siren);
            AssertEmptyEntities(siren);
            AssertEmptyActions(siren);

            Assert.IsTrue(siren["links"].Type == JTokenType.Array);
            var linksArray = (JArray)siren["links"];

            Assert.AreEqual(linksArray.Count, ho.Links.Count);

            AssertHasLink(linksArray, DefaultHypermediaRelations.Self, routeNameLinking);
            AssertHasLinkWithQuery(linksArray, link1Rel, routeNameLinked1, QueryStringBuilder.CreateQueryString(queryObject1));
            AssertHasLinkWithKeyAndQuery(linksArray, link2Rel, routeNameLinked2, "{ key = 3 }", QueryStringBuilder.CreateQueryString(queryObject2));
        }
コード例 #9
0
        public void SerializeNullListPropertyNoNullPropertiesTest()
        {
            var routeName = typeof(HypermediaObjectWithListProperties).Name + "_Route";

            RouteRegister.AddHypermediaObjectRoute(typeof(HypermediaObjectWithListProperties), routeName, HttpMethod.GET);

            var ho    = new HypermediaObjectWithListProperties();
            var siren = SirenConverterNoNullProperties.ConvertToJson(ho);

            AssertDefaultClassName(siren, typeof(HypermediaObjectWithListProperties));
            AssertEmptyEntities(siren);
            AssertEmptyActions(siren);
            AssertHasOnlySelfLink(siren, routeName);

            var propertiesObject = PropertyHelpers.GetPropertiesJObject(siren);

            Assert.AreEqual(propertiesObject.Properties().Count(), 0);
        }
コード例 #10
0
        public void PropertyDefaultsObjectWriteNoNullPropertiesTest()
        {
            var routeName = typeof(PropertyHypermediaObject).Name + "_Route";

            RouteRegister.AddHypermediaObjectRoute(typeof(PropertyHypermediaObject), routeName, HttpMethod.GET);

            var ho    = new PropertyHypermediaObject();
            var siren = SirenConverterNoNullProperties.ConvertToJson(ho);

            AssertDefaultClassName(siren, typeof(PropertyHypermediaObject));
            AssertEmptyEntities(siren);
            AssertEmptyActions(siren);
            AssertHasOnlySelfLink(siren, routeName);

            var propertiesObject = PropertyHelpers.GetPropertiesJObject(siren);

            PropertyHelpers.CompareHypermediaPropertiesAndJsonNoNullProperties(propertiesObject, ho);
        }
コード例 #11
0
        public void PropertyDefaultsObjectTest()
        {
            var routeName = typeof(PropertyHypermediaObject).Name + "_Route";

            RouteRegister.AddHypermediaObjectRoute(typeof(PropertyHypermediaObject), routeName);

            var ho    = new PropertyHypermediaObject();
            var siren = SirenConverter.ConvertToJson(ho);

            AssertDefaultClassName(siren, typeof(PropertyHypermediaObject));
            AssertEmptyEntities(siren);
            AssertEmptyActions(siren);
            AssertHasOnlySelfLink(siren, routeName);

            Assert.IsTrue(siren["properties"].Type == JTokenType.Object);
            var propertiesObject = (JObject)siren["properties"];

            CompareHypermediaAndJson(propertiesObject, ho);
        }
コード例 #12
0
        public void LinksExternalReferenceTest()
        {
            var externalUri      = "http://www.example.com/";
            var routeNameLinking = typeof(ExternalUsingHypermediaObject).Name + "_Route";

            RouteRegister.AddHypermediaObjectRoute(typeof(ExternalUsingHypermediaObject), routeNameLinking);

            var          ho  = new ExternalUsingHypermediaObject();
            const string rel = "External";

            ho.Links.Add(rel, new ExternalReference(new Uri(externalUri)));

            var siren = SirenConverter.ConvertToJson(ho);

            AssertDefaultClassName(siren, typeof(ExternalUsingHypermediaObject));
            AssertEmptyProperties(siren);
            AssertEmptyEntities(siren);
            AssertEmptyActions(siren);

            Assert.IsTrue(siren["links"].Type == JTokenType.Array);
            var linksArray = (JArray)siren["links"];

            Assert.AreEqual(linksArray.Count, ho.Links.Count);

            var linkObject = linksArray[0] as JObject;

            if (linkObject == null)
            {
                throw new Exception("Link array item should be a JObject");
            }

            var relationArray       = (JArray)linkObject["rel"];
            var sirenRelations      = relationArray.Values <string>().ToList();
            var stringListComparer  = new StringCollectionComparer();
            var hasDesiredRelations = stringListComparer.Equals(sirenRelations, new List <string> {
                rel
            });

            Assert.IsTrue(hasDesiredRelations);
            Assert.AreEqual(((JValue)linkObject["href"]).Value <string>(), externalUri);
        }
コード例 #13
0
        public RouteRegister NewRouteRegister(DeviceID deviceId, string switchName)
        {
            var privateData = NewRouteRegisterPrivateData(switchName);

            var result = new RouteRegister
            {
                routeingDevice = deviceId,
                extensions     = new CSTACommonArguments
                {
                    privateData = new CSTAPrivateData
                    {
                        Item = new CSTAPrivateDataPrivate
                        {
                            Any = new XmlElement[] { XmlHelper.InstanceToElement(privateData) }
                        }
                    }
                }
            };

            return(result);
        }
コード例 #14
0
        public void LinksHypermediaObjectReferenceTest()
        {
            var routeNameLinking = typeof(LinkingHypermediaObject).Name + "_Route";

            RouteRegister.AddHypermediaObjectRoute(typeof(LinkingHypermediaObject), routeNameLinking, HttpMethod.GET);

            var routeNameLinked1 = typeof(Linked1HypermediaObject).Name + "_Route";

            RouteRegister.AddHypermediaObjectRoute(typeof(Linked1HypermediaObject), routeNameLinked1, HttpMethod.GET);
            var hoLink1  = new Linked1HypermediaObject();
            var link1Rel = "Link1";

            var routeNameLinked2 = typeof(Linked2HypermediaObject).Name + "_Route";

            RouteRegister.AddHypermediaObjectRoute(typeof(Linked2HypermediaObject), routeNameLinked2, HttpMethod.GET);
            var hoLink2  = new Linked2HypermediaObject();
            var link2Rel = "Link2";

            var ho = new LinkingHypermediaObject();

            ho.Links.Add(link1Rel, new HypermediaObjectReference(hoLink1));
            ho.Links.Add(link2Rel, new HypermediaObjectReference(hoLink2));


            var siren = SirenConverter.ConvertToJson(ho);

            AssertDefaultClassName(siren, typeof(LinkingHypermediaObject));
            AssertEmptyProperties(siren);
            AssertEmptyEntities(siren);
            AssertEmptyActions(siren);

            Assert.IsTrue(siren["links"].Type == JTokenType.Array);
            var linksArray = (JArray)siren["links"];

            Assert.AreEqual(linksArray.Count, ho.Links.Count);

            AssertHasLink(linksArray, DefaultHypermediaRelations.Self, routeNameLinking);
            AssertHasLink(linksArray, link1Rel, routeNameLinked1);
            AssertHasLink(linksArray, link2Rel, routeNameLinked2);
        }
コード例 #15
0
        public void PropertyNestedClassNullNoNullProperties()
        {
            var routeName = typeof(PropertyNestedClassHypermediaObject).Name + "_Route";

            RouteRegister.AddHypermediaObjectRoute(typeof(PropertyNestedClassHypermediaObject), routeName, HttpMethod.GET);

            var ho = new PropertyNestedClassHypermediaObject
            {
                AChild = null
            };

            var siren = SirenConverterNoNullProperties.ConvertToJson(ho);

            AssertDefaultClassName(siren, typeof(PropertyNestedClassHypermediaObject));
            AssertEmptyEntities(siren);
            AssertEmptyActions(siren);
            AssertHasOnlySelfLink(siren, routeName);

            var propertiesObject = PropertyHelpers.GetPropertiesJObject(siren);

            Assert.AreEqual(propertiesObject.Properties().Count(), 0);
        }
コード例 #16
0
        public void LinksHypermediaObjectKeyReferenceTest()
        {
            var routeNameLinking = typeof(LinkingHypermediaObject).Name + "_Route";

            RouteRegister.AddHypermediaObjectRoute(typeof(LinkingHypermediaObject), routeNameLinking);

            var routeNameLinked1 = typeof(Linked1HypermediaObject).Name + "_Route";

            RouteRegister.AddHypermediaObjectRoute(typeof(Linked1HypermediaObject), routeNameLinked1);
            RouteRegister.AddRouteKeyProducer(typeof(Linked1HypermediaObject), new Linked1HypermediaObjectRouteKeyProducer());
            var link1Rel = "Link1";

            var routeNameLinked2 = typeof(Linked2HypermediaObject).Name + "_Route";

            RouteRegister.AddHypermediaObjectRoute(typeof(Linked2HypermediaObject), routeNameLinked2);
            RouteRegister.AddRouteKeyProducer(typeof(Linked2HypermediaObject), new Linked2HypermediaObjectRouteKeyProducer());
            var link2Rel = "Link2";

            var ho = new LinkingHypermediaObject();

            ho.Links.Add(link1Rel, new HypermediaObjectKeyReference(typeof(Linked1HypermediaObject), 5));
            ho.Links.Add(link2Rel, new HypermediaObjectKeyReference(typeof(Linked2HypermediaObject), "AStringkey"));

            var siren = SirenConverter.ConvertToJson(ho);

            AssertDefaultClassName(siren, typeof(LinkingHypermediaObject));
            AssertEmptyProperties(siren);
            AssertEmptyEntities(siren);
            AssertEmptyActions(siren);

            Assert.IsTrue(siren["links"].Type == JTokenType.Array);
            var linksArray = (JArray)siren["links"];

            Assert.AreEqual(linksArray.Count, ho.Links.Count);

            AssertHasLink(linksArray, DefaultHypermediaRelations.Self, routeNameLinking);
            AssertHasLinkWithKey(linksArray, link1Rel, routeNameLinked1, "{ key = 5 }");
            AssertHasLinkWithKey(linksArray, link2Rel, routeNameLinked2, "{ key = AStringkey }");
        }
コード例 #17
0
        public void PropertyDefaultsObjectWriteNoNullPropertiesTest()
        {
            var routeName = typeof(PropertyHypermediaObject).Name + "_Route";

            RouteRegister.AddHypermediaObjectRoute(typeof(PropertyHypermediaObject), routeName);

            var ho = new PropertyHypermediaObject();
            var sirenBuilderWithNoNullProperties = CreateSirenConverter(new SirenConverterConfiguration {
                WriteNullProperties = false
            });
            var siren = sirenBuilderWithNoNullProperties.ConvertToJson(ho);

            AssertDefaultClassName(siren, typeof(PropertyHypermediaObject));
            AssertEmptyEntities(siren);
            AssertEmptyActions(siren);
            AssertHasOnlySelfLink(siren, routeName);

            Assert.IsTrue(siren["properties"].Type == JTokenType.Object);
            var propertiesObject = (JObject)siren["properties"];

            CompareHypermediaAndJsonNoNullProperties(propertiesObject, ho);
        }
コード例 #18
0
        public void SerializeEmptyListProperties()
        {
            var routeName = typeof(HypermediaObjectWithListProperties).Name + "_Route";

            RouteRegister.AddHypermediaObjectRoute(typeof(HypermediaObjectWithListProperties), routeName, HttpMethod.GET);

            var ho = new HypermediaObjectWithListProperties();

            ho.AValueList     = new List <int>();
            ho.ANullableList  = new List <int?>();
            ho.AReferenceList = new List <string>();

            var siren = SirenConverter.ConvertToJson(ho);

            AssertDefaultClassName(siren, typeof(HypermediaObjectWithListProperties));
            AssertEmptyEntities(siren);
            AssertEmptyActions(siren);
            AssertHasOnlySelfLink(siren, routeName);

            var propertiesObject = PropertyHelpers.GetPropertiesJObject(siren);

            PropertyHelpers.CompareHypermediaListPropertiesAndJson(propertiesObject, ho);
        }
コード例 #19
0
        public void PropertyNestedClassNullHypermediaObject()
        {
            var routeName = typeof(PropertyNestedClassHypermediaObject).Name + "_Route";

            RouteRegister.AddHypermediaObjectRoute(typeof(PropertyNestedClassHypermediaObject), routeName);

            var ho = new PropertyNestedClassHypermediaObject()
            {
                AChild = null
            };

            var siren = SirenConverter.ConvertToJson(ho);

            AssertDefaultClassName(siren, typeof(PropertyNestedClassHypermediaObject));
            AssertEmptyEntities(siren);
            AssertEmptyActions(siren);
            AssertHasOnlySelfLink(siren, routeName);

            Assert.IsTrue(siren["properties"].Type == JTokenType.Object);
            var propertiesObject = (JObject)siren["properties"];

            Assert.AreEqual(propertiesObject.Properties().Count(), 0);
        }
コード例 #20
0
        public void PropertyObjectTest()
        {
            var routeName = typeof(PropertyHypermediaObject).Name + "_Route";

            RouteRegister.AddHypermediaObjectRoute(typeof(PropertyHypermediaObject), routeName, HttpMethod.GET);

            var ho = new PropertyHypermediaObject
            {
                ABool   = true,
                AString = "My String",
                AnInt   = 1,
                ALong   = 2,
                AFloat  = 3.1f,
                ADouble = 4.1,

                AnEnum          = TestEnum.Value1,
                ANullableEnum   = TestEnum.Value1,
                AnEnumWithNames = TestEnumWithNames.Value2,

                ADateTime       = new DateTime(2000, 11, 22, 18, 5, 32, 999),
                ADateTimeOffset = new DateTimeOffset(2000, 11, 22, 18, 5, 32, 999, new TimeSpan(0, 2, 0, 0)),
                ATimeSpan       = new TimeSpan(1, 2, 3, 4),
                AnUri           = new Uri("http://localhost/myuri"),
                ADecimal        = 12345,
                ANullableInt    = 10,
            };
            var siren = SirenConverter.ConvertToJson(ho);

            AssertDefaultClassName(siren, typeof(PropertyHypermediaObject));
            AssertEmptyEntities(siren);
            AssertEmptyActions(siren);
            AssertHasOnlySelfLink(siren, routeName);

            var propertiesObject = PropertyHelpers.GetPropertiesJObject(siren);

            PropertyHelpers.CompareHypermediaPropertiesAndJson(propertiesObject, ho);
        }
コード例 #21
0
        public void PropertyObjectTest()
        {
            var routeName = typeof(PropertyHypermediaObject).Name + "_Route";

            RouteRegister.AddHypermediaObjectRoute(typeof(PropertyHypermediaObject), routeName);

            var ho = new PropertyHypermediaObject
            {
                ABool   = true,
                AString = "My String",
                AInt    = 1,
                ALong   = 2,
                AFloat  = 3.1f,
                ADouble = 4.1,

                AEnum          = TestEnum.Value1,
                AEnumWithNames = TestEnumWithNames.Value2,

                ADateTime       = new DateTime(2000, 11, 22, 18, 5, 32, 999),
                ADateTimeOffset = new DateTimeOffset(2000, 11, 22, 18, 5, 32, 999, new TimeSpan(0, 2, 0, 0)),
                ATimeSpan       = new TimeSpan(1, 2, 3, 4),
                ADecimal        = 12345,
                ANullableInt    = 10,
            };
            var siren = SirenConverter.ConvertToJson(ho);

            AssertDefaultClassName(siren, typeof(PropertyHypermediaObject));
            AssertEmptyEntities(siren);
            AssertEmptyActions(siren);
            AssertHasOnlySelfLink(siren, routeName);

            Assert.IsTrue(siren["properties"].Type == JTokenType.Object);
            var propertiesObject = (JObject)siren["properties"];

            CompareHypermediaAndJson(propertiesObject, ho);
        }
コード例 #22
0
        public void LinksInternalReferenceTest()
        {
            var routeNameLinking = typeof(InternalUsingHypermediaObject).Name + "_Route";

            RouteRegister.AddHypermediaObjectRoute(typeof(InternalUsingHypermediaObject), routeNameLinking, HttpMethod.GET);

            var ho   = new InternalUsingHypermediaObject();
            var rels = new List <string>()
            {
                "External0",
                "External1",
                "External2",
                "External3",
            };

            var availableMediaType1  = "custom/mediatype";
            var availableMediaTypes2 = new List <string> {
                "custom/mediaType1", "custom/mediaType2"
            };
            var availableMediaTypes = new List <List <string> >
            {
                new List <string>(),
                new List <string> {
                    availableMediaType1
                },
                availableMediaTypes2,
                new List <string>()
            };

            var routeName = "ARouteName";

            ho.Links.Add(rels[0], new InternalReference(routeName));
            ho.Links.Add(rels[1], new InternalReference(routeName).WithAvailableMediaType(availableMediaType1));
            ho.Links.Add(rels[2], new InternalReference(routeName).WithAvailableMediaTypes(availableMediaTypes2));
            ho.Links.Add(rels[3], new InternalReference(routeName).WithAvailableMediaTypes(Array.Empty <string>()));

            var siren = SirenConverter.ConvertToJson(ho);

            AssertDefaultClassName(siren, typeof(InternalUsingHypermediaObject));
            AssertEmptyProperties(siren);
            AssertEmptyEntities(siren);
            AssertEmptyActions(siren);

            Assert.IsTrue(siren["links"].Type == JTokenType.Array);
            var linksArray = (JArray)siren["links"];

            Assert.AreEqual(linksArray.Count, ho.Links.Count);

            var internalRoute = $"{TestUrlConfig.Scheme}/{TestUrlConfig.Host}/{routeName}/";
            var i             = 0;

            foreach (var jToken in linksArray)
            {
                if (!(linksArray[i] is JObject linkObject))
                {
                    throw new Exception("Link array item should be a JObject");
                }

                AssertLink(linkObject, rels[i], internalRoute, availableMediaTypes[i]);
                i++;
            }
        }