public void ShouldSeeChangeToBasePropertyWhenBaseObject()
        {
            var           detector = new DerivedChangeDetector();
            var           tracker  = new EntityChangeTracker <TestEntity>(detector);
            DerivedEntity entity   = new DerivedEntity()
            {
                IntValue = 123
            };

            tracker.Attach(entity);

            entity.IntValue = 234;

            var changes = tracker.DetectChanges();

            Assert.AreEqual(1, changes.Count(), "The wrong number of changes were detected.");
            IEntityChange <TestEntity> change = changes.Single();

            Assert.AreSame(entity, change.Entity, "A change was detected on the wrong entity.");
            Assert.AreEqual(EntityState.Modified, change.State, "The entity should have been modified.");

            Assert.AreEqual(1, change.GetChanges().Count(), "The wrong number of properties were seen as changed.");
            var propertyChange = change.GetChanges().Single();

            Assert.AreEqual(TestEntityChangeDetector.IntDescription, propertyChange.DisplayName, "The wrong property was recorded.");

            bool hasBaseChange = change.HasChange(x => x.IntValue);

            Assert.IsTrue(hasBaseChange, "The change was not detected.");

            bool hasDerivedChange = change.As <DerivedEntity>().HasChange(x => x.IntValue);

            Assert.IsTrue(hasDerivedChange, "The change was not detected.");
        }
Esempio n. 2
0
        public async Task ODataTypeAnnotationAppearsForAllEntitiesInFullMetadataAndForDerivedEntityTypesInFullAndMinimalMetadata(
            string acceptHeader)
        {
            //Arrange
            BaseEntity[]       baseEntities    = new BaseEntity[] { new BaseEntity(1), new BaseEntity(2), new BaseEntity(3), new BaseEntity(4), new BaseEntity(5), new BaseEntity(6), new BaseEntity(7) };                              //InstanceCreator.CreateInstanceOf<BaseEntity[]>(new Random(RandomSeedGenerator.GetRandomSeed()));
            DerivedEntity[]    derivedEntities = new DerivedEntity[] { new DerivedEntity(8), new DerivedEntity(9), new DerivedEntity(10), new DerivedEntity(11), new DerivedEntity(12), new DerivedEntity(13), new DerivedEntity(14) }; //InstanceCreator.CreateInstanceOf<DerivedEntity[]>(new Random(RandomSeedGenerator.GetRandomSeed()));
            BaseEntity[]       entities        = baseEntities.Union(derivedEntities, new BaseEntity.IdEqualityComparer()).ToArray();
            string             requestUrl      = BaseAddress.ToLowerInvariant() + "/Inheritance/BaseEntity/";
            string             expectedTypeName;
            HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, requestUrl);

            request.SetAcceptHeader(acceptHeader);

            //Act
            HttpResponseMessage response = await Client.SendAsync(request);

            JObject result = await response.Content.ReadAsObject <JObject>();

            //Assert
            JArray returnedEntities = (JArray)result["value"];

            for (int i = 0; i < returnedEntities.Count; i++)
            {
                JObject    returnedEntity = (JObject)returnedEntities[i];
                BaseEntity originalEntity = entities.FirstOrDefault(x => x.Id == (int)returnedEntity["Id"]);
                Assert.NotNull(originalEntity);
                if (acceptHeader.Contains("odata.metadata=none"))
                {
                    JsonAssert.DoesNotContainProperty("@odata.type", returnedEntity);
                }
                else if (acceptHeader.Contains("odata.metadata=full"))
                {
                    expectedTypeName = "#" + originalEntity.GetType().FullName;
                    JsonAssert.PropertyEquals(expectedTypeName, "@odata.type", returnedEntity);
                }
                else
                {
                    if (originalEntity is DerivedEntity)
                    {
                        expectedTypeName = "#" + originalEntity.GetType().FullName;
                        JsonAssert.PropertyEquals(expectedTypeName, "@odata.type", returnedEntity);
                    }
                    else
                    {
                        JsonAssert.DoesNotContainProperty("@odata.type", returnedEntity);
                    }
                }
            }
        }
Esempio n. 3
0
		protected override void OnSetUp()
		{
			using (ISession session = OpenSession())
			using (ITransaction transaction = session.BeginTransaction())
			{
				var e1 = new DerivedEntity { Name = "Bob" };
				session.Save(e1);

				var e2 = new AnotherDerivedEntity { Name = "Sally" };
				session.Save(e2);

				session.Flush();
				transaction.Commit();
			}
		}
Esempio n. 4
0
        public void ShouldSeeChangeToNonDerivedProperty()
        {
            var           detector = new DerivedChangeDetector();
            DerivedEntity original = new DerivedEntity()
            {
                IntValue = 123
            };
            DerivedEntity updated = new DerivedEntity()
            {
                IntValue = 234
            };

            bool hasChange = detector.As <DerivedEntity>().HasChange(x => x.IntValue, original, updated);

            Assert.IsTrue(hasChange, "The change was not detected.");
        }
Esempio n. 5
0
 public BaseEntityController()
     : base("Id")
 {
     BaseEntity[] baseEntities = new BaseEntity[]
     {
         new BaseEntity(1), new BaseEntity(2), new BaseEntity(3),
         new BaseEntity(4), new BaseEntity(5), new BaseEntity(6), new BaseEntity(7)
     };
     DerivedEntity[] derivedEntities = new DerivedEntity[]
     {
         new DerivedEntity(8), new DerivedEntity(9), new DerivedEntity(10),
         new DerivedEntity(11), new DerivedEntity(12), new DerivedEntity(13), new DerivedEntity(14)
     };
     foreach (var entity in baseEntities.Union(derivedEntities, new BaseEntity.IdEqualityComparer()))
     {
         LocalTable.AddOrUpdate(entity.Id, entity, (key, oldEntity) => oldEntity);
     }
 }
Esempio n. 6
0
        public void ShouldDetectChangeToDerivedProperty_OriginalNull()
        {
            var           detector = new DerivedChangeDetector();
            DerivedEntity original = null;
            DerivedEntity updated  = new DerivedEntity()
            {
                DerivedValue = 234
            };

            var changes = detector.GetChanges(original, updated);

            Assert.AreEqual(1, changes.Count(), "The wrong number of changes were detected.");
            IPropertyChange change = changes.Single();

            Assert.AreEqual(DerivedChangeDetector.DerivedDescription, change.DisplayName, "The wrong property was recorded.");
            Assert.AreEqual(null, change.FormatOriginalValue(), "The old value was not recorded.");
            Assert.AreEqual(Formatters.FormatInt32(updated.DerivedValue), change.FormatUpdatedValue(), "The new value was not recorded.");
        }
Esempio n. 7
0
        protected override void OnSetUp()
        {
            using (ISession session = OpenSession())
                using (ITransaction transaction = session.BeginTransaction())
                {
                    var e1 = new DerivedEntity {
                        Name = "Bob"
                    };
                    session.Save(e1);

                    var e2 = new AnotherDerivedEntity {
                        Name = "Sally"
                    };
                    session.Save(e2);

                    session.Flush();
                    transaction.Commit();
                }
        }
Esempio n. 8
0
        public void ShouldDetectChangeToInheritedProperty()
        {
            var           detector = new DirectDerivedChangeDetector();
            DerivedEntity original = new DerivedEntity()
            {
                BooleanValue = false
            };
            DerivedEntity updated = new DerivedEntity()
            {
                BooleanValue = true
            };

            var changes = detector.GetChanges(original, updated);

            Assert.AreEqual(1, changes.Count(), "The wrong number of changes were detected.");
            IPropertyChange change = changes.Single();

            Assert.AreEqual("BooleanValue", change.DisplayName, "The wrong property was recorded.");
        }
        public void ShouldDetectChangeToDerivedPropertyWhenAdding()
        {
            var           detector = new DerivedChangeDetector();
            var           tracker  = new EntityChangeTracker <TestEntity>(detector);
            DerivedEntity entity   = new DerivedEntity()
            {
                DerivedValue = 123
            };

            tracker.Add(entity);

            var changes = tracker.DetectChanges();

            Assert.AreEqual(1, changes.Count(), "The wrong number of changes were detected.");
            IEntityChange <TestEntity> change = changes.Single();

            Assert.AreSame(entity, change.Entity, "A change was detected on the wrong entity.");
            Assert.AreEqual(EntityState.Added, change.State, "The entity should have been modified.");
            Assert.AreEqual(1, change.GetChanges().Count(), "The wrong number of properties were seen as changed.");
        }
Esempio n. 10
0
    public async Task InheritedEntityInterface()
    {
        var query = @"
{
  interfaceGraphConnection {
    items {
      ...inheritedEntityFields
    }
  }
}
fragment inheritedEntityFields on Interface {
  property
  childrenFromInterface(orderBy: {path: ""property""})
  {
    items {
      ...childEntityFields
    }
  }
  ... on DerivedWithNavigation {
    childrenFromDerived(orderBy: {path: ""property""})
    {
      items {
        ...childEntityFields
      }
    }
  }
}
fragment childEntityFields on DerivedChild {
  property
}";

        var derivedEntity1 = new DerivedEntity
        {
            Id       = Guid.Parse("00000000-0000-0000-0000-000000000001"),
            Property = "Value1"
        };
        var childEntity1 = new DerivedChildEntity
        {
            Property = "Value2",
            Parent   = derivedEntity1
        };
        var childEntity2 = new DerivedChildEntity
        {
            Property = "Value3",
            Parent   = derivedEntity1
        };

        derivedEntity1.ChildrenFromBase.Add(childEntity1);
        derivedEntity1.ChildrenFromBase.Add(childEntity2);

        var derivedEntity2 = new DerivedWithNavigationEntity
        {
            Id       = Guid.Parse("00000000-0000-0000-0000-000000000002"),
            Property = "Value4"
        };
        var childEntity3 = new DerivedChildEntity
        {
            Property = "Value5",
            Parent   = derivedEntity2
        };
        var childEntity4 = new DerivedChildEntity
        {
            Property    = "Value6",
            TypedParent = derivedEntity2
        };

        derivedEntity2.ChildrenFromBase.Add(childEntity3);
        derivedEntity2.Children.Add(childEntity4);

        await using var database = await sqlInstance.Build();
        await RunQuery(database, query, null, null, false, new object[] { derivedEntity1, childEntity1, childEntity2, derivedEntity2, childEntity3, childEntity4 });
    }
Esempio n. 11
0
 public bool Remove(DerivedEntity derived) => derived != null;