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); }
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"); }
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); }
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); }
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); }
/// <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); }
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"); }
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( ))); }
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")); }
/// <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); }