From cd1b2d293bdcff4e693bc03b9f7a65c388ac922e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wojtek=20F=C4=85ferko?= Date: Thu, 25 Jul 2019 14:46:26 +0200 Subject: [PATCH] Test for #18 - Incorrect audit table insert on tables with tree structure --- .../Integration/Tree/Mapping.hbm.xml | 17 ++++++ .../Integration/Tree/TreeEntity.cs | 26 +++++++++ .../NetSpecific/Integration/Tree/TreeTest.cs | 57 +++++++++++++++++++ 3 files changed, 100 insertions(+) create mode 100644 Src/NHibernate.Envers.Tests/NetSpecific/Integration/Tree/Mapping.hbm.xml create mode 100644 Src/NHibernate.Envers.Tests/NetSpecific/Integration/Tree/TreeEntity.cs create mode 100644 Src/NHibernate.Envers.Tests/NetSpecific/Integration/Tree/TreeTest.cs diff --git a/Src/NHibernate.Envers.Tests/NetSpecific/Integration/Tree/Mapping.hbm.xml b/Src/NHibernate.Envers.Tests/NetSpecific/Integration/Tree/Mapping.hbm.xml new file mode 100644 index 00000000..14972753 --- /dev/null +++ b/Src/NHibernate.Envers.Tests/NetSpecific/Integration/Tree/Mapping.hbm.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Src/NHibernate.Envers.Tests/NetSpecific/Integration/Tree/TreeEntity.cs b/Src/NHibernate.Envers.Tests/NetSpecific/Integration/Tree/TreeEntity.cs new file mode 100644 index 00000000..2c475fda --- /dev/null +++ b/Src/NHibernate.Envers.Tests/NetSpecific/Integration/Tree/TreeEntity.cs @@ -0,0 +1,26 @@ +using System.Collections.Generic; +using NHibernate.Envers.Configuration.Attributes; + +namespace NHibernate.Envers.Tests.NetSpecific.Integration.Tree +{ + [Audited] + public class TreeEntity + { + public virtual long Id { get; set; } + public virtual string Name { get; set; } + public virtual TreeEntity Parent { get; set; } + public virtual IList Children { get; protected set; } = new List(); + + public override bool Equals(object obj) + { + if (!(obj is TreeEntity other)) + return false; + return Id == other.Id; + } + + public override int GetHashCode() + { + return Id.GetHashCode(); + } + } +} \ No newline at end of file diff --git a/Src/NHibernate.Envers.Tests/NetSpecific/Integration/Tree/TreeTest.cs b/Src/NHibernate.Envers.Tests/NetSpecific/Integration/Tree/TreeTest.cs new file mode 100644 index 00000000..a94bd07e --- /dev/null +++ b/Src/NHibernate.Envers.Tests/NetSpecific/Integration/Tree/TreeTest.cs @@ -0,0 +1,57 @@ +using System.Collections.Generic; +using NUnit.Framework; + +namespace NHibernate.Envers.Tests.NetSpecific.Integration.Tree +{ + public class TreeTest : TestBase + { + private long parentId; + private long childId; + + public TreeTest(AuditStrategyForTest strategyType) : base(strategyType) + { + } + + protected override IEnumerable Mappings => new[] {"NetSpecific.Integration.Tree.Mapping.hbm.xml"}; + + protected override void Initialize() + { + var parent = new TreeEntity {Name = "Parent"}; + + using (var tx = Session.BeginTransaction()) + { + parentId = (long) Session.Save(parent); + tx.Commit(); + } + + var child = new TreeEntity + { + Name = "Child", + Parent = new TreeEntity {Id = parentId} + }; + + using (var tx = Session.BeginTransaction()) + { + childId = (long) Session.Save(child); + tx.Commit(); + } + } + + [Test] + public void VerifyRevisionCount() + { + CollectionAssert.AreEquivalent(new[] {1}, AuditReader().GetRevisions(typeof(TreeEntity), parentId)); + CollectionAssert.AreEquivalent(new[] {2}, AuditReader().GetRevisions(typeof(TreeEntity), childId)); + } + + [Test] + public void VerifyHistory() + { + var rev1 = AuditReader().Find(parentId, 1); + var rev2 = AuditReader().Find(parentId, 2); + + Assert.IsNotNull(rev1.Name); + Assert.IsNotNull(rev2.Name); + } + } +} \ No newline at end of file