Beispiel #1
0
        public void Test_NewDefinition_GetEntitiesUsingInstancesOfType()
        {
            EntityMemberRequest request = EntityRequestHelper.BuildRequest("instancesOfType.{alias,name,description}");
            var svc = GetService();

            // Check before create
            var result = svc.GetEntityData(new EntityRef("core:definition"), request);
            int count  = result.Relationships[0].Instances.Count;

            Assert.IsTrue(count > 1);

            // Create the instance
            using (var ctx = DatabaseContext.GetContext(true, preventPostSaveActionsPropagating: true))
            {
                Create("core:definition", "Our test defn");

                ctx.CommitTransaction();
            }

            // Check after create
            var result2 = svc.GetEntityData(new EntityRef("core:definition"), request);
            int count2  = result2.Relationships[0].Instances.Count;

            Assert.AreEqual(count + 1, count2);
        }
Beispiel #2
0
        public void Test_AfterDeleteRelated_Forward()
        {
            var from = Create("test:allFields");
            var to   = Create("test:herb");

            from.GetRelationships("test:herbs").Add(to);
            from.Save();

            EntityMemberRequest request = EntityRequestHelper.BuildRequest("id, test:herbs.id");
            var svc = GetService();

            // Check create
            EntityData result = svc.GetEntityData(from.Id, request);

            Assert.AreEqual(from.Id, result.Id.Id, "Expect from");
            Assert.AreEqual(to.Id, result.Relationships[0].Instances[0].Entity.Id.Id, "Expect to");

            // Delete
            Entity.Delete(to.Id);

            // Check deleted
            result = svc.GetEntityData(from.Id, request);
            Assert.AreEqual(from.Id, result.Id.Id, "Expect from again");
            Assert.AreEqual(0, result.Relationships[0].Instances.Count, "Expect no to");
        }
Beispiel #3
0
        public void Test_NewHerbByAlias_GetEntitiesUsingInstancesOfType()
        {
            EntityRef typeId = new EntityRef("test:herb");

            EntityMemberRequest request = EntityRequestHelper.BuildRequest("instancesOfType.{alias,name,description}");
            var svc = GetService();

            // Check before create
            var result = svc.GetEntityData(typeId, request);
            int count  = result.Relationships[0].Instances.Count;

            Assert.IsTrue(count > 1);

            // Create the instance
            var entity = Entity.Create(typeId);

            entity.SetField("core:name", "AAA");
            _toDelete.Add(entity);

            using (var ctx = DatabaseContext.GetContext(true, preventPostSaveActionsPropagating: true))
            {
                entity.Save();

                ctx.CommitTransaction();
            }

            // Check after create
            var result2 = svc.GetEntityData(typeId, request);
            int count2  = result2.Relationships[0].Instances.Count;

            Assert.AreEqual(count + 1, count2);
        }
Beispiel #4
0
        public void Test_NewInstance_GetEntitiesByType()
        {
            if (_runner == "EntityInfoService")
            {
                Assert.Ignore();
            }

            var typeId = Entity.GetId("test:herb");

            EntityMemberRequest request = EntityRequestHelper.BuildRequest("id");
            var svc = GetService();

            // Check before create
            var result = svc.GetEntitiesByType(typeId, false, request);
            int count  = result.Count();

            // Create the instance
            Create("test:herb", "AAA");

            // Check after create
            result = svc.GetEntitiesByType(typeId, false, request);
            int count2 = result.Count();

            Assert.AreEqual(count + 1, count2);
        }
Beispiel #5
0
        public void Test_NewInstance_GetInstancesOfTypeManual()
        {
            if (_runner == "EntityInfoService")
            {
                Assert.Ignore();
            }

            var typeId = Entity.GetId("test:herb");

            EntityMemberRequest request = EntityRequestHelper.BuildRequest("instancesOfType.id");
            var svc = GetService();

            // Check before create
            EntityData result = svc.GetEntityData(typeId, request);
            int        count  = result.Relationships[0].Instances.Count;

            // Create the instance
            using (var ctx = DatabaseContext.GetContext(true, preventPostSaveActionsPropagating: true))
            {
                Create("test:herb", "AAA");

                ctx.CommitTransaction();
            }

            // Check after create
            result = svc.GetEntityData(typeId, request);
            int count2 = result.Relationships[0].Instances.Count;

            Assert.AreEqual(count + 1, count2);
        }
Beispiel #6
0
        /// <summary>
        /// Parser of graph (entity member / entity-info-service) style requests.
        /// </summary>
        /// <param name="request">The request</param>
        /// <param name="settings">Parse settings.</param>
        /// <returns>Request object model.</returns>
        public EntityMemberRequest ParseRequestQuery(string request, RequestParserSettings settings = null)
        {
            settings = settings ?? RequestParserSettings.Default;

            _variables = new Dictionary <string, List <Term> >();

            // Prepare tokenizer
            _tokens = new Tokenizer(request);
            _tokens.MoveNext();

            // Parse
            List <Term> result = null;

            Expect(ParseTermList(ref result), TermDescription);
            Expect(_tokens.Current.Type == TokenType.AtEnd, "end");

            // Convert parse tree to EntityMemberRequest structure
            var decorator = new TermDecorator(EntityRepository);

            decorator.Variables = _variables;
            EntityMemberRequest entityMemberRequest = decorator.ConvertToRequest(result, settings.Validate);

            entityMemberRequest.RequestString = request;
            return(entityMemberRequest);
        }
        /// <summary>
        /// Returns true if a field or relationship memeber was requested of the entity.
        /// </summary>
        /// <param name="entityId">The entity being queried.</param>
        /// <param name="memberPredicate">A callback predicate that knows how to search an EntityMemberRequest for the member.</param>
        /// <returns>True if the data was originally requested (even if not returned), otherwise false.</returns>
        private bool WasMemberRequested(long entityId, Func <EntityMemberRequest, bool> memberPredicate)
        {
            if (memberPredicate == null)
            {
                throw new ArgumentNullException("memberPredicate");
            }

            // Get storage object for the entity
            EntityValue entityValue;

            if (!_unsecuredGraphData.AllEntities.TryGetValue(entityId, out entityValue))
            {
                return(false); // entity is not in graph
            }
            // The query nodes that were responsible for returning this entity in the result
            IEnumerable <RequestNodeInfo> nodes = entityValue.Nodes;

            // Check each node to see if any of them have the member
            foreach (RequestNodeInfo requestNode in nodes)
            {
                EntityMemberRequest requestedMembers = requestNode.Request;
                if (requestedMembers == null)
                {
                    continue;   // assert false
                }
                bool found = memberPredicate(requestedMembers);
                if (found)
                {
                    return(true);
                }
            }

            return(false);
        }
Beispiel #8
0
        public void Test_AfterAddAtomicRelated_Reverse()
        {
            var to = Create("test:herb");

            EntityMemberRequest request = EntityRequestHelper.BuildRequest("id, test:herbAllFields.id");
            var svc = GetService();

            // Check absent
            EntityData result = svc.GetEntityData(to.Id, request);

            Assert.AreEqual(to.Id, result.Id.Id, "Expect to");
            Assert.AreEqual(0, result.Relationships[0].Instances.Count, "Expect no from");

            // Add relationship
            var from = CreateNoSave("test:allFields");

            from.GetRelationships("test:herbs").Add(to);

            using (var ctx = DatabaseContext.GetContext(true, preventPostSaveActionsPropagating: true))
            {
                from.Save();

                ctx.CommitTransaction();
            }

            // Check add relationship
            result = svc.GetEntityData(to.Id, request);
            Assert.AreEqual(to.Id, result.Id.Id, "Expect to again");
            Assert.AreEqual(from.Id, result.Relationships[0].Instances[0].Entity.Id.Id, "Expect from");
        }
Beispiel #9
0
        public HttpResponseMessage <JsonQueryResult> Get(
            [FromUri(Name = "request")] string request,
            [FromUri(Name = "name")] string name         = null,
            [FromUri(Name = "typename")] string typeName = null,
            string id    = null,
            string ns    = null,
            string alias = null
            )
        {
            // Get the entityRef
            EntityRef entityRef = MakeEntityRef(id, ns, alias, name, typeName);

            //// Parse the request
            EntityMemberRequest entityRequest = Factory.RequestParser.ParseRequestQuery(request);

            //// Run the query
            //ResponseContext EntityPackage = new ResponseContext();


            var context = new EntityPackage( );

            context.AddEntityRequest(entityRef, entityRequest);

            return(new HttpResponseMessage <JsonQueryResult>(context.GetQueryResult( )));
        }
Beispiel #10
0
        public void Test_AfterFieldChangeFromNull_GetField()
        {
            var entity = Create("test:allFields", "AAA");

            EntityMemberRequest request = EntityRequestHelper.BuildRequest("test:afString");
            var svc = GetService();

            // Check create
            EntityData result = svc.GetEntityData(entity.Id, request);

            Assert.AreEqual(entity.Id, result.Id.Id, "Expect created");
            Assert.AreEqual(null, result.Fields[0].Value.ValueString);

            // Change field
            entity.SetField("test:afString", "ZZZ");

            using (var ctx = DatabaseContext.GetContext(true, preventPostSaveActionsPropagating: true))
            {
                entity.Save();

                ctx.CommitTransaction();
            }

            // Check updated
            result = svc.GetEntityData(entity.Id, request);
            Assert.AreEqual("ZZZ", result.Fields[0].Value.ValueString);
        }
        public void Test_SameRelInFwdAndRev(string requestString, string metadataOnlyDir)
        {
            EntityMemberRequest request = EntityRequestHelper.BuildRequest("id");
            var svc = GetService();

            var resource = new EntityRef("core", "chart");

            // get 'isOfType' relationship Id
            long relId = Entity.GetId("core:isOfType");

            Assert.IsTrue(relId > 0);

            // build request string to get relationship fields in fwd direction and then metaData for the same relationship in reverse direction
            var relRequestString           = string.Format(requestString, relId);
            EntityMemberRequest relRequest = EntityRequestHelper.BuildRequest(relRequestString);
            EntityData          result     = svc.GetEntityData(resource, relRequest);

            if (metadataOnlyDir == "fwd")
            {
                Assert.IsTrue(!result.GetRelationship(relId, Direction.Forward).Entities.Any());
                Assert.IsTrue(result.GetRelationship(relId, Direction.Reverse).Entities.Any());
            }
            else
            {
                Assert.IsTrue(result.GetRelationship(relId, Direction.Forward).Entities.Any());
                Assert.IsTrue(!result.GetRelationship(relId, Direction.Reverse).Entities.Any());
            }
        }
        public void CreateInstance( )
        {
            // Define a new entity
            var data = new EntityData
            {
                Fields  = new List <FieldData>( ),
                TypeIds = new EntityRef("test", "person").ToEnumerable( ).ToList( )
            };

            data.Fields.Add(new FieldData
            {
                FieldId = new EntityRef("name"),
                Value   = new TypedValue("Isaac Newton")
            });

            // Create it
            var       svc = new EntityInfoService( );
            EntityRef id  = svc.CreateEntity(data);

            // Verify it was created
            Assert.IsTrue(id.Id > 0, "Positive Id");

            // Select the data
            EntityMemberRequest request = EntityRequestHelper.BuildRequest("name");
            EntityData          result  = svc.GetEntityData(id, request);

            // Verify results
            Assert.AreEqual("Isaac Newton", result.Fields[0].Value.Value);

            svc.DeleteEntity(id);
        }
        public void TestRecursiveRelationship3()
        {
            EntityMemberRequest rq = EntityRequestHelper.BuildRequest(@"
					relationships.fromType.inherits*.id,
					inherits*.id
					"                    );
            var        svc         = GetService();
            EntityData result      = svc.GetEntityData(new EntityRef("test", "employee"), rq);

            // Note: this test causes some instances to be revisited for the same relationship,
            // and can be used to ensure that multiple entries do not appear in the RelationshipData array.

            EntityData p1 = result.GetRelationship("core:inherits").Instances[0].Entity; // person

#pragma warning disable 168
            int        k1 = p1.GetRelationship("core:relationships").Instances.Count();
            EntityData p2 = p1.GetRelationship("core:inherits").Instances[0].Entity; // actor
            int        k2 = p2.GetRelationship("core:relationships").Instances.Count();
            EntityData p3 = p2.GetRelationship("core:inherits").Instances[0].Entity; // editable resource
            int        k3 = p3.GetRelationship("core:relationships").Instances.Count();
            EntityData p4 = p3.GetRelationship("core:inherits").Instances[0].Entity; // resource
            int        k4 = p4.GetRelationship("core:relationships").Instances.Count();
#pragma warning restore 168
            Assert.IsTrue(k4 > 0);
        }
        public void TestRelationshipDirections()
        {
            EntityMemberRequest request = EntityRequestHelper.BuildRequest("inherits.id,derivedTypes.id");
            var        svc    = GetService();
            EntityData result = svc.GetEntityData(new EntityRef("test", "person"), request);

            Assert.AreEqual(2, result.Relationships.Count);
        }
        public void Test_InvalidZeroList()
        {
            EntityMemberRequest request = EntityRequestHelper.BuildRequest("name");
            var svc    = GetService();
            var result = svc.GetEntitiesData((new EntityRef(0)).ToEnumerable(), request);

            Assert.AreEqual(0, result.Count());
        }
        public void Test_InvalidAlias()
        {
            EntityMemberRequest request = EntityRequestHelper.BuildRequest("name");
            var        svc    = GetService();
            EntityData result = svc.GetEntityData(new EntityRef("invalidblah", "invalidblah"), request);

            Assert.IsNull(result);
        }
        public void TestId()
        {
            EntityMemberRequest request = EntityRequestHelper.BuildRequest("id");
            var        svc    = GetService();
            EntityData result = svc.GetEntityData(new EntityRef("test", "employee"), request);

            Assert.IsTrue(result.Id.Id > 0);
        }
        public void TestRelatedMetadata()
        {
            EntityMemberRequest request = EntityRequestHelper.BuildRequest("fields.?");
            var        svc    = GetService();
            EntityData result = svc.GetEntityData(new EntityRef("test", "employee"), request);

            Assert.IsTrue(result.Relationships[0].Instances.Count == 0);
        }
        public void TestFollowSameRelationshipTwice()
        {
            EntityMemberRequest request = EntityRequestHelper.BuildRequest("isOfType.isOfType.id,isOfType.isOfType.id");
            var        svc    = GetService();
            EntityData result = svc.GetEntityData(new EntityRef("test", "employee"), request);

            Assert.IsTrue(result.Relationships[0].Instances.Count == 1);
            Assert.IsTrue(result.Relationships[0].Instances[0].Entity.Relationships[0].Instances.Count == 1);
        }
        public void Test_GetFieldsRelationshipsControlsStructuredQueryString( )
        {
            EntityMemberRequest request = EntityRequestHelper.BuildRequest("k:context.name");

            var        svc    = new EntityInfoService( );
            EntityData result = svc.GetEntityData(new EntityRef("console", "singleLineTextControl"), request);

            Assert.IsNotNull(FindEntity(result, new EntityRef("console", "uiContextHtml").Id));
        }
        public void GetEntitiesByTypeNonDerived()
        {
            EntityMemberRequest rq =
                EntityRequestHelper.BuildRequest("alias");

            var svc = GetService();
            IEnumerable <EntityData> result = svc.GetEntitiesByType(new EntityRef("core", "fieldType"), false, rq);

            Assert.IsTrue(result.Any());
        }
        public void GetEntitiesByTypeDerivedDirect()
        {
            EntityMemberRequest rq =
                EntityRequestHelper.BuildRequest("alias");

            var svc = GetService();
            IEnumerable <EntityData> result = svc.GetEntitiesByType(new EntityRef("core", "type"), true, rq);

            Assert.IsTrue(result.Any(x => x.Fields[0].Value.Value as string == "core:stringField"));
        }
        public void GetEntitiesByTypeDerivedRecursive()
        {
            EntityMemberRequest rq =
                EntityRequestHelper.BuildRequest("alias");

            var svc = GetService();
            IEnumerable <EntityData> result = svc.GetEntitiesByType(new EntityRef("core", "type"), true, rq);

            Assert.IsTrue(result.Any(x => x.Fields[0].Value.Value as string == "console:verticalStackContainerControl"));
        }
Beispiel #24
0
        /// <summary>
        /// Create a new EntityMemberRequest instance, and initialize collections.
        /// </summary>
        /// <returns></returns>
        private EntityMemberRequest NewRequest()
        {
            var request = new EntityMemberRequest
            {
                Fields        = new List <IEntityRef>(),
                Relationships = new List <RelationshipRequest>()
            };

            return(request);
        }
        public void TestRelationshipMetadata(string entity, string relationshipAlias, string isLookup)
        {
            var svc = GetService();

            EntityMemberRequest request = EntityRequestHelper.BuildRequest(relationshipAlias + ".id");
            EntityData          data    = svc.GetEntityData(new EntityRef(entity), request);

            bool bIsLookup = isLookup == "True";

            Assert.AreEqual(bIsLookup, data.Relationships[0].IsLookup);
        }
        public void TestRecursiveRelationship()
        {
            EntityMemberRequest rq =
                EntityRequestHelper.BuildRequest("name, inherits.name, inherits*");

            var        svc    = GetService();
            EntityData result = svc.GetEntityData(new EntityRef("test", "employee"), rq);

            // look for employee type
            Assert.IsTrue(FoundResource(result));
        }
        private TypedValue GetSingleField(string resourceAlias, string fieldAlias)
        {
            var rq = new EntityMemberRequest();

            rq.Fields.Add(new EntityRef(fieldAlias));

            var        svc    = GetService();
            EntityData result = svc.GetEntityData(new EntityRef(resourceAlias), rq);

            return(result.Fields[0].Value);
        }
        public void UpdateField( )
        {
            var rq = new EntityMemberRequest( );

            rq.Fields.Add(new EntityRef("description"));

            var        svc    = new EntityInfoService( );
            EntityData entity = svc.GetEntityData(new EntityRef("test", "person"), rq);

            entity.Fields[0].Value.Value = "Hello world";
            svc.UpdateEntity(entity);
        }
        public void GetTwoStrings()
        {
            var rq = new EntityMemberRequest();

            rq.Fields.Add(new EntityRef("name"));
            rq.Fields.Add(new EntityRef("description"));

            var        svc    = GetService();
            EntityData result = svc.GetEntityData(new EntityRef("core", "chart"), rq);

            Assert.AreEqual("Chart", result.Fields[0].Value.Value);
        }
        public void TestReturnType()
        {
            // Verify that  the minimum allowed value (minInt) of the decimal places field reports itself as being an integer.
            // I.e. ask for an integer, and ensure that's what we get.

            EntityMemberRequest rq =
                EntityRequestHelper.BuildRequest("minInt");

            var        svc    = GetService();
            EntityData result = svc.GetEntityData(new EntityRef("core", "decimalPlaces"), rq);

            Assert.IsTrue(result.Fields[0].Value.Type is Int32Type);
        }