public static IEnumerable <ISirenLink> LinksByType(
     this ISirenEntity @this,
     string type
     )
 {
     return(@this.Links.Where(link => link.Type.Equals(type)));
 }
예제 #2
0
        public void SirenEntity_Equality_DifferentTitle_ShouldNotBeEqual()
        {
            ISirenEntity entity = TestHelpers.GetEntity();
            ISirenEntity other  = TestHelpers.GetEntity("different-title");

            TestHelpers.BidirectionalEquality(entity, other, false);
        }
예제 #3
0
        public void SirenEntity_Equality_SameEntity_ShouldBeEqual()
        {
            ISirenEntity entity = TestHelpers.GetEntity();
            ISirenEntity other  = TestHelpers.GetEntity();

            TestHelpers.BidirectionalEquality(entity, other, true);
        }
 public static IEnumerable <ISirenLink> LinksByRel(
     this ISirenEntity @this,
     string rel
     )
 {
     return(@this.Links.Where(link => link.Rel.Contains(rel)));
 }
예제 #5
0
        public void SirenEntity_Equality_MissingAttributes_ShouldNotBeEqual()
        {
            ISirenEntity entity = TestHelpers.GetEntity();
            ISirenEntity other  = new SirenEntity();

            TestHelpers.BidirectionalEquality(entity, other, false);
        }
 public static IEnumerable <ISirenEntity> SubEntitiesByClass(
     this ISirenEntity @this,
     string @class
     )
 {
     return(@this.Entities.Where(entity => entity.Class.Contains(@class)));
 }
 public static IEnumerable <ISirenEntity> SubEntitiesByRel(
     this ISirenEntity @this,
     string rel
     )
 {
     return(@this.Entities.Where(entity => entity.Rel.Contains(rel)));
 }
        public void SirenEntity_DeserializesCorrectly()
        {
            ISirenEntity sirenEntity = new SirenEntity(
                properties: new {
                foo = "bar"
            },
                links: new[] {
                new SirenLink(rel: new[] { "self" }, href: new Uri("http://example.com"), @class: new[] { "class" })
            },
                rel: new[] { "organization" },
                @class: new[] { "some-class" },
                entities: new[] {
                new SirenEntity()
            },
                actions: new[] {
                new SirenAction(name: "action-name", href: new Uri("http://example.com"), @class: new[] { "class" })
            },
                title: "Entity title",
                href: new Uri("http://example.com/3"),
                type: "text/html"
                );

            string       serialized = JsonConvert.SerializeObject(sirenEntity);
            ISirenEntity entity     = JsonConvert.DeserializeObject <SirenEntity>(serialized);

            Assert.AreEqual("bar", (string)entity.Properties.foo);
            Assert.AreEqual(1, entity.Links.ToList().Count);
            Assert.Contains("organization", entity.Rel);
            Assert.Contains("some-class", entity.Class);
            Assert.AreEqual(1, entity.Entities.ToList().Count);
            Assert.AreEqual(1, entity.Actions.ToList().Count);
            Assert.AreEqual("Entity title", entity.Title);
            Assert.AreEqual("http://example.com/3", entity.Href.ToString());
            Assert.AreEqual("text/html", entity.Type);
        }
 public static IEnumerable <ISirenLink> LinksByClass(
     this ISirenEntity @this,
     string @class
     )
 {
     return(@this.Links.Where(link => link.Class.Contains(@class)));
 }
 public static IEnumerable <ISirenEntity> SubEntitiesByType(
     this ISirenEntity @this,
     string type
     )
 {
     return(@this.Entities.Where(entity => entity.Type.Equals(type)));
 }
 public static IEnumerable <ISirenAction> ActionsByClass(
     this ISirenEntity @this,
     string @class
     )
 {
     return(@this.Actions.Where(action => action.Class.Contains(@class)));
 }
예제 #12
0
        public override bool Equals(object obj)
        {
            ISirenEntity entity = obj as ISirenEntity;
            ISirenEntity @this  = this;

            return(entity != null && @this.Equals(entity));
        }
 public static bool TryGetSubEntityByType(
     this ISirenEntity @this,
     string type,
     out ISirenEntity entity
     )
 {
     entity = @this.SubEntitiesByType(type).FirstOrDefault();
     return(entity != default(ISirenEntity));
 }
 public static bool TryGetLinkByClass(
     this ISirenEntity @this,
     string @class,
     out ISirenLink link
     )
 {
     link = @this.LinksByClass(@class).FirstOrDefault();
     return(link != default(ISirenLink));
 }
 public static bool TryGetLinkByType(
     this ISirenEntity @this,
     string type,
     out ISirenLink link
     )
 {
     link = @this.LinksByType(type).FirstOrDefault();
     return(link != default(ISirenLink));
 }
 public static bool TryGetActionByName(
     this ISirenEntity @this,
     string name,
     out ISirenAction action
     )
 {
     action = @this.Actions.FirstOrDefault(a => a.Name.Equals(name));
     return(action != default(ISirenAction));
 }
 public static bool TryGetSubEntityByRel(
     this ISirenEntity @this,
     string rel,
     out ISirenEntity entity
     )
 {
     entity = @this.SubEntitiesByRel(rel).FirstOrDefault();
     return(entity != default(ISirenEntity));
 }
 public static bool TryGetLinkByRel(
     this ISirenEntity @this,
     string rel,
     out ISirenLink link
     )
 {
     link = @this.LinksByRel(rel).FirstOrDefault();
     return(link != default(ISirenLink));
 }
예제 #19
0
        int IComparable <ISirenEntity> .CompareTo(ISirenEntity other)
        {
            if (other == null)
            {
                return(1);
            }

            return(string.CompareOrdinal(m_title, other.Title));
        }
 public static bool TryGetActionByClass(
     this ISirenEntity @this,
     string @class,
     out ISirenAction action
     )
 {
     action = @this.ActionsByClass(@class).FirstOrDefault();
     return(action != default(ISirenAction));
 }
 public static bool TryGetSubEntityByClass(
     this ISirenEntity @this,
     string @class,
     out ISirenEntity entity
     )
 {
     entity = @this.SubEntitiesByClass(@class).FirstOrDefault();
     return(entity != default(ISirenEntity));
 }
        public SirenEntityBuilder AddEntity(ISirenEntity entity)
        {
            if (m_entities == null)
            {
                m_entities = new List <ISirenEntity>();
            }

            m_entities.Add(entity);
            return(this);
        }
예제 #23
0
        public void SirenEntityBuilder_AddProperty_NullProperty_ExpectEntityWithNullProperty()
        {
            SirenEntityBuilder builder = new SirenEntityBuilder();

            builder.AddProperty("testNullProperty", null);
            ISirenEntity entity = builder.Build();

            Assert.IsNotNull(entity.Properties);
            Assert.IsNull(entity.Properties.testNullProperty);
        }
        public void MatchingHelpers_ThrowsWhenGivenProperties()
        {
            ISirenEntity expected = new SirenEntity(
                properties: new {
                foo = "bar"
            }
                );
            ISirenEntity actual = expected;

            Assert.Throws <ArgumentException>(() => SirenMatchers.Matches(expected, actual, out string _));
        }
            internal static JObject UnparseDocument(ISirenEntity entity)
            {
                var result = new JObject();

                UnparseClasses(result, entity.Classes);
                UnparseTitle(result, entity.Title);
                UnparseProperties(result, entity.Properties);
                UnparseActions(result, entity.Actions);
                UnparseLinks(result, entity.Links);
                UnparseEntities(result, entity.EmbeddedLinks, entity.EmbeddedRepresentations);

                return result;
            }
예제 #26
0
 public static bool Matches(ISirenEntity expected, ISirenEntity actual, out string message)
 {
     return(Matches(expected.Rel, actual.Rel, out message) &&
            Matches(expected.Class, actual.Class, out message)
            // Need to figure out a good way to match dynamics - considering moving away from dynamic for Properties
            //&& Matches( expected.Properties, actual.Properties, out message )
            && Matches(expected.Entities, actual.Entities, out message) &&
            Matches(expected.Links, actual.Links, out message) &&
            Matches(expected.Actions, actual.Actions, out message) &&
            Matches(expected.Href, actual.Href, out message) &&
            Matches(expected.Title, actual.Title, out message) &&
            Matches(expected.Type, actual.Type, out message));
 }
예제 #27
0
            internal static JObject UnparseDocument(ISirenEntity entity)
            {
                var result = new JObject();

                UnparseClasses(result, entity.Classes);
                UnparseTitle(result, entity.Title);
                UnparseProperties(result, entity.Properties);
                UnparseActions(result, entity.Actions);
                UnparseLinks(result, entity.Links);
                UnparseEntities(result, entity.EmbeddedLinks, entity.EmbeddedRepresentations);

                return(result);
            }
예제 #28
0
        public void SirenEntityBuilder_Build_WithParams_ExpectEntityWithParams()
        {
            string expectedTitle = "test-title";
            Uri    expectedHref  = TestHref;
            string expectedType  = "test-type";

            SirenEntityBuilder builder = new SirenEntityBuilder();

            ISirenEntity entity = builder.Build(expectedTitle, expectedHref, expectedType);

            Assert.AreEqual(expectedTitle, entity.Title);
            Assert.AreEqual(expectedHref, entity.Href);
            Assert.AreEqual(expectedType, entity.Type);
        }
예제 #29
0
        public void SirenEntityBuilder_AddRel_Single_ExpectEntityWithRels()
        {
            string expectedRel1 = "first-rel";
            string expectedRel2 = "second-rel";

            SirenEntityBuilder builder = new SirenEntityBuilder();

            builder.AddRel(expectedRel1);
            builder.AddRel(expectedRel2);
            ISirenEntity entity = builder.Build();

            Assert.AreEqual(2, entity.Rel.Length);
            Assert.Contains(expectedRel1, entity.Rel);
            Assert.Contains(expectedRel2, entity.Rel);
        }
예제 #30
0
        public void SirenEntityBuilder_AddAction_ExpectEntityWithActions()
        {
            ISirenAction expectedAction1 = TestHelpers.GetAction("action-1");
            ISirenAction expectedAction2 = TestHelpers.GetAction("action-2");

            SirenEntityBuilder builder = new SirenEntityBuilder();

            builder.AddAction(expectedAction1);
            builder.AddAction(expectedAction2);
            ISirenEntity entity = builder.Build();

            Assert.AreEqual(2, entity.Actions.Count());
            CollectionAssert.Contains(entity.Actions, expectedAction1);
            CollectionAssert.Contains(entity.Actions, expectedAction2);
        }
예제 #31
0
        public void SirenEntityBuilder_AddClass_Single_ExpectEntityWithClasses()
        {
            string expectedClass1 = "first-class";
            string expectedClass2 = "second-class";

            SirenEntityBuilder builder = new SirenEntityBuilder();

            builder.AddClass(expectedClass1);
            builder.AddClass(expectedClass2);
            ISirenEntity entity = builder.Build();

            Assert.AreEqual(2, entity.Class.Length);
            Assert.Contains(expectedClass1, entity.Class);
            Assert.Contains(expectedClass2, entity.Class);
        }
        /// <summary>
        /// Validates that the structure of <paramref name="entity"/> matches that of the spec sample JSON.
        /// </summary>
        /// <param name="entity">The Siren Entity to compare to the spec sample.</param>
        public static void AssertIsSpecSample(ISirenEntity entity)
        {
            Assert.Equal("order", entity.Classes.Single());

            var properties = entity.Properties;
            Assert.Equal(3, properties.Count);
            Assert.Equal("42", properties["orderNumber"].ToString());
            Assert.Equal("3", properties["itemCount"].ToString());
            Assert.Equal("pending", properties["status"].ToString());

            Assert.Equal(1, entity.EmbeddedLinks.Count());
            Assert.Equal(1, entity.EmbeddedRepresentations.Count());

            var link = entity.EmbeddedLinks.Single();
            Assert.NotNull(link);
            Assert.Equal(2, link.Classes.Count);
            Assert.Contains("items", link.Classes);
            Assert.Contains("collection", link.Classes);
            Assert.Equal("http://x.io/rels/order-items", link.Rel.Single());
            Assert.Equal("http://api.x.io/orders/42/items", link.Href);

            var rep = entity.EmbeddedRepresentations.Single();
            Assert.NotNull(rep);
            Assert.Equal(2, rep.Classes.Count);
            Assert.Contains("info", rep.Classes);
            Assert.Contains("customer", rep.Classes);
            Assert.Equal("http://x.io/rels/customer", rep.Rel.Single());
            var repProperties = rep.Properties;
            Assert.Equal(2, repProperties.Count);
            Assert.Equal("pj123", repProperties["customerId"].ToString());
            Assert.Equal("Peter Joseph", repProperties["name"].ToString());
            var repLink = rep.Links.Single();
            Assert.Equal("self", repLink.Rel.Single());
            Assert.Equal("http://api.x.io/customers/pj123", repLink.Href);
            Assert.Equal("CustomerUri", repLink.Title);

            var action = entity.Actions.Single();
            Assert.Equal("add-item", action.Name);
            Assert.Equal("Add Item", action.Title);
            Assert.Equal("POST", action.Method.Method);
            Assert.Equal("http://api.x.io/orders/42/items", action.Href);
            Assert.Equal("application/x-www-form-urlencoded", action.Type.MediaType);

            var fields = action.Fields;
            Assert.Equal(3, fields.Count);
            var orderNumber = fields.Single(x => x.Name == "orderNumber");
            Assert.Equal(FieldType.Hidden, orderNumber.Type);
            Assert.Equal("42", orderNumber.Value);
            var productType = fields.Single(x => x.Name == "productCode");
            Assert.Equal(FieldType.Text, productType.Type);
            var quantity = fields.Single(x => x.Name == "quantity");
            Assert.Equal(FieldType.Number, quantity.Type);

            var links = entity.Links;
            Assert.Equal(3, links.Count);
            var self = links.Single(x => x.Rel.Single() == "self");
            Assert.Equal("http://api.x.io/orders/42", self.Href);
            var prev = links.Single(x => x.Rel.Single() == "previous");
            Assert.Equal("http://api.x.io/orders/41", prev.Href);
            var next = links.Single(x => x.Rel.Single() == "next");
            Assert.Equal("http://api.x.io/orders/43", next.Href);
        }
 public static JObject Unparse(ISirenEntity entity)
 {
     return Unparser.UnparseDocument(entity);
 }