diff --git a/src/NHibernate.Test/Async/NHSpecificTest/ManyToManyWithFilter/Fixture.cs b/src/NHibernate.Test/Async/NHSpecificTest/ManyToManyWithFilter/Fixture.cs new file mode 100644 index 0000000000..de1ef49a60 --- /dev/null +++ b/src/NHibernate.Test/Async/NHSpecificTest/ManyToManyWithFilter/Fixture.cs @@ -0,0 +1,104 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by AsyncGenerator. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + + +using System; +using NUnit.Framework; +using System.Linq; + +namespace NHibernate.Test.NHSpecificTest.ManyToManyWithFilter +{ + using System.Threading.Tasks; + [TestFixture] + public class FixtureAsync : BugTestCase + { + private Department _department1; + private Department _department2; + private Employee _employee1; + private Employee _employee2; + + protected override void OnSetUp() + { + using (var session = OpenSession()) + using (var tx = session.BeginTransaction()) + { + _department1 = new Department(); + _department2 = new Department(); + + _employee1 = new Employee(); + _employee2 = new Employee(); + + _employee1.Departments.Add(_department1); + _employee2.Departments.Add(_department1); + _employee2.Departments.Add(_department2); + + session.Save(_department1); + session.Save(_department2); + session.Save(_employee1); + session.Save(_employee2); + + tx.Commit(); + } + } + + protected override void OnTearDown() + { + using (var session = OpenSession()) + using (var tx = session.BeginTransaction()) + { + session.Delete(_employee1); + session.Delete(_employee2); + session.Delete(_department1); + session.Delete(_department2); + + tx.Commit(); + } + } + + [Theory] + public async Task Querying_Employees_Departments_ManyToMany_With_FilterAsync(bool enableFilter) + { + using (var session = OpenSession()) + using (var tx = session.BeginTransaction()) + { + _department1.DeletedAt = DateTime.UtcNow; + _department2.DeletedAt = DateTime.UtcNow; + + await (session.UpdateAsync(_department1)); + await (session.UpdateAsync(_department2)); + + await (tx.CommitAsync()); + } + + using (var session = OpenSession()) + using (var tx = session.BeginTransaction()) + { + if (enableFilter) + session.EnableFilter("NotDeletedFilter"); + + var departments = session.Query(); + var employee2 = await (session.GetAsync(_employee2.Id)); + + if (enableFilter) + { + Assert.That(departments, Is.Empty); + Assert.That(employee2.Departments, Is.Empty); + } + else + { + Assert.That(departments.Count, Is.EqualTo(2)); + Assert.That(employee2.Departments, Has.Count.EqualTo(2)); + } + + + await (tx.CommitAsync()); + } + } + } +} diff --git a/src/NHibernate.Test/NHSpecificTest/ManyToManyWithFilter/BaseClass.cs b/src/NHibernate.Test/NHSpecificTest/ManyToManyWithFilter/BaseClass.cs new file mode 100644 index 0000000000..1e50eedc56 --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/ManyToManyWithFilter/BaseClass.cs @@ -0,0 +1,10 @@ +using System; + +namespace NHibernate.Test.NHSpecificTest.ManyToManyWithFilter +{ + public class BaseClass + { + public virtual Guid Id { get; set; } + + } +} diff --git a/src/NHibernate.Test/NHSpecificTest/ManyToManyWithFilter/Department.cs b/src/NHibernate.Test/NHSpecificTest/ManyToManyWithFilter/Department.cs new file mode 100644 index 0000000000..4cb4139b9f --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/ManyToManyWithFilter/Department.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; + +namespace NHibernate.Test.NHSpecificTest.ManyToManyWithFilter +{ + public class Department : BaseClass + { + public virtual ISet Employees { get; set; } = new HashSet(); + + public virtual DateTime? DeletedAt { get; set; } + } +} diff --git a/src/NHibernate.Test/NHSpecificTest/ManyToManyWithFilter/Employee.cs b/src/NHibernate.Test/NHSpecificTest/ManyToManyWithFilter/Employee.cs new file mode 100644 index 0000000000..a1425662a4 --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/ManyToManyWithFilter/Employee.cs @@ -0,0 +1,9 @@ +using System.Collections.Generic; + +namespace NHibernate.Test.NHSpecificTest.ManyToManyWithFilter +{ + public class Employee : BaseClass + { + public virtual ISet Departments { get; set; } = new HashSet(); + } +} diff --git a/src/NHibernate.Test/NHSpecificTest/ManyToManyWithFilter/Fixture.cs b/src/NHibernate.Test/NHSpecificTest/ManyToManyWithFilter/Fixture.cs new file mode 100644 index 0000000000..5cd988c197 --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/ManyToManyWithFilter/Fixture.cs @@ -0,0 +1,93 @@ +using System; +using NUnit.Framework; +using System.Linq; + +namespace NHibernate.Test.NHSpecificTest.ManyToManyWithFilter +{ + [TestFixture] + public class Fixture : BugTestCase + { + private Department _department1; + private Department _department2; + private Employee _employee1; + private Employee _employee2; + + protected override void OnSetUp() + { + using (var session = OpenSession()) + using (var tx = session.BeginTransaction()) + { + _department1 = new Department(); + _department2 = new Department(); + + _employee1 = new Employee(); + _employee2 = new Employee(); + + _employee1.Departments.Add(_department1); + _employee2.Departments.Add(_department1); + _employee2.Departments.Add(_department2); + + session.Save(_department1); + session.Save(_department2); + session.Save(_employee1); + session.Save(_employee2); + + tx.Commit(); + } + } + + protected override void OnTearDown() + { + using (var session = OpenSession()) + using (var tx = session.BeginTransaction()) + { + session.Delete(_employee1); + session.Delete(_employee2); + session.Delete(_department1); + session.Delete(_department2); + + tx.Commit(); + } + } + + [Theory] + public void Querying_Employees_Departments_ManyToMany_With_Filter(bool enableFilter) + { + using (var session = OpenSession()) + using (var tx = session.BeginTransaction()) + { + _department1.DeletedAt = DateTime.UtcNow; + _department2.DeletedAt = DateTime.UtcNow; + + session.Update(_department1); + session.Update(_department2); + + tx.Commit(); + } + + using (var session = OpenSession()) + using (var tx = session.BeginTransaction()) + { + if (enableFilter) + session.EnableFilter("NotDeletedFilter"); + + var departments = session.Query(); + var employee2 = session.Get(_employee2.Id); + + if (enableFilter) + { + Assert.That(departments, Is.Empty); + Assert.That(employee2.Departments, Is.Empty); + } + else + { + Assert.That(departments.Count, Is.EqualTo(2)); + Assert.That(employee2.Departments, Has.Count.EqualTo(2)); + } + + + tx.Commit(); + } + } + } +} diff --git a/src/NHibernate.Test/NHSpecificTest/ManyToManyWithFilter/Mappings.hbm.xml b/src/NHibernate.Test/NHSpecificTest/ManyToManyWithFilter/Mappings.hbm.xml new file mode 100644 index 0000000000..513787efcb --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/ManyToManyWithFilter/Mappings.hbm.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +