public void TestCloneAndUpdateUpdateFields() { var svc = new EntityInfoService(); string initialName = "Initial name" + Guid.NewGuid(); string initialDescription = "Initial description" + Guid.NewGuid(); string newName = "New name" + Guid.NewGuid(); string newDescription = "New description" + Guid.NewGuid(); IEntity e = Entity.Create(new EntityRef("test:person")); e.SetField("core:name", initialName); e.SetField("core:description", initialDescription); e.Save(); Assert.AreEqual(initialName, e.GetField("core:name")); Assert.AreEqual(initialDescription, e.GetField("core:description")); var data = new EntityData { Id = e.Id, Fields = new List <FieldData>() { new FieldData { FieldId = new EntityRef("name"), Value = new TypedValue(newName) }, new FieldData { FieldId = new EntityRef("description"), Value = new TypedValue(newDescription) } }, DataState = DataState.Update }; var cloneIdsMap = svc.CloneAndUpdateEntity(data); long cloneId; Assert.IsTrue(cloneIdsMap.TryGetValue(e.Id, out cloneId), "The initial entity is not found."); // Check the fields were cloned IEntity clonedEntity = Entity.Get(cloneId); Assert.AreEqual(newName, clonedEntity.GetField("core:name")); Assert.AreEqual(newDescription, clonedEntity.GetField("core:description")); // Check initial entity is not touched IEntity initialEntity = Entity.Get(e.Id); Assert.AreEqual(initialName, initialEntity.GetField("core:name")); Assert.AreEqual(initialDescription, initialEntity.GetField("core:description")); }
public void TestCloneAndUpdateTemporaryEntity() { var svc = new EntityInfoService(); IEntity e = Entity.Create(new EntityRef("test:person")); var ed = new EntityData { Id = e.Id }; Assert.Throws <InvalidOperationException>(() => svc.CloneAndUpdateEntity(ed)); }
/// <summary> /// Handles cloning data. /// </summary> /// <param name="entityData">The entity data.</param> /// <returns>The id of the cloned entity</returns> private IHttpActionResult HandleCloneAndUpdate(JsonEntityQueryResult entityData) { // resolve all entity ids above our 'known id hi watermark' that actually do exist entityData.ResolveIds(); long id = entityData.Ids.FirstOrDefault(); long cloneId = -1; if (id >= JsonEntityQueryResult.BaseNewId) { return(BadRequest("Cannot clone a temporary entity.")); } EventLog.Application.WriteTrace("Cloning entity " + id); EntityData newEntityData = entityData.GetEntityData(id); DatabaseContext.RunWithRetry(() => { using (DatabaseContext context = DatabaseContext.GetContext(true)) { #pragma warning disable 618 var svc = new EntityInfoService(); #pragma warning restore 618 var clonedIds = svc.CloneAndUpdateEntity(newEntityData); if (!clonedIds.TryGetValue(id, out cloneId)) { cloneId = -1; } context.CommitTransaction(); } }); return(Ok(cloneId)); }
public void TestCloneAndUpdateCloneByEntityRelationships() { var svc = new EntityInfoService(); EntityType type1 = new EntityType(); type1.Save(); EntityType type2 = new EntityType(); type2.Save(); Relationship rel = new Relationship { FromType = type1, ToType = type2, CloneAction_Enum = CloneActionEnum_Enumeration.CloneEntities, Cardinality_Enum = CardinalityEnum_Enumeration.ManyToMany }; rel.Save(); string initialName = Guid.NewGuid().ToString(); IEntity entityRelated = Entity.Create(type2.Id); entityRelated.SetField("core:name", initialName); entityRelated.Save(); IEntity entity1 = Entity.Create(type1.Id); entity1.SetRelationships(rel, new EntityRelationshipCollection <IEntity> { entityRelated }, Direction.Forward); entity1.Save(); string newEntityName = Guid.NewGuid().ToString(); var data = new EntityData { Id = entity1.Id, Relationships = new List <RelationshipData> { new RelationshipData { RelationshipTypeId = new EntityRef(rel), Instances = new List <RelationshipInstanceData> { new RelationshipInstanceData { DataState = DataState.Unchanged, Entity = new EntityData { DataState = DataState.Update, Id = new EntityRef(entityRelated.Id), Fields = new List <FieldData>() { new FieldData { FieldId = new EntityRef("name"), Value = new TypedValue(newEntityName) } } } } } } }, DataState = DataState.Update }; var cloneIdsMap = svc.CloneAndUpdateEntity(data); long cloneId1, cloneIdRelated; Assert.IsTrue(cloneIdsMap.TryGetValue(entity1.Id, out cloneId1), "The initial entity is not found."); Assert.IsTrue(cloneIdsMap.TryGetValue(entityRelated.Id, out cloneIdRelated), "The related entity is not found."); // Check the relationships were cloned IEntity clonedEntity = Entity.Get(cloneId1); var clonedRelationships = clonedEntity.GetRelationships(rel, Direction.Forward); Assert.AreEqual(1, clonedRelationships.Count); Assert.IsTrue(clonedRelationships.Any(r => r.Id == cloneIdRelated)); Assert.IsTrue(clonedRelationships.Any(r => (string)r.GetField("core:name") == newEntityName)); // Check initial entity is not touched IEntity initialEntity = Entity.Get(entity1.Id); var initialRelationships = initialEntity.GetRelationships(rel, Direction.Forward); Assert.AreEqual(1, initialRelationships.Count); Assert.IsTrue(initialRelationships.Any(r => r.Id == entityRelated.Id)); Assert.IsTrue(initialRelationships.Any(r => (string)r.GetField("core:name") == initialName)); }