diff --git a/src/NHibernate.Test/Async/NHSpecificTest/GH3652/Fixture.cs b/src/NHibernate.Test/Async/NHSpecificTest/GH3652/Fixture.cs new file mode 100644 index 0000000000..91db60684d --- /dev/null +++ b/src/NHibernate.Test/Async/NHSpecificTest/GH3652/Fixture.cs @@ -0,0 +1,99 @@ +//------------------------------------------------------------------------------ +// +// 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 System.Linq; +using NUnit.Framework; + +namespace NHibernate.Test.NHSpecificTest.GH3652; +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/GH3652/BaseClass.cs b/src/NHibernate.Test/NHSpecificTest/GH3652/BaseClass.cs new file mode 100644 index 0000000000..5657e8e155 --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/GH3652/BaseClass.cs @@ -0,0 +1,8 @@ +using System; + +namespace NHibernate.Test.NHSpecificTest.GH3652; + +public class BaseClass +{ + public virtual Guid Id { get; set; } +} diff --git a/src/NHibernate.Test/NHSpecificTest/GH3652/Department.cs b/src/NHibernate.Test/NHSpecificTest/GH3652/Department.cs new file mode 100644 index 0000000000..c8e368918e --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/GH3652/Department.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; + +namespace NHibernate.Test.NHSpecificTest.GH3652; + +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/GH3652/Employee.cs b/src/NHibernate.Test/NHSpecificTest/GH3652/Employee.cs new file mode 100644 index 0000000000..8e0c39cd66 --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/GH3652/Employee.cs @@ -0,0 +1,8 @@ +using System.Collections.Generic; + +namespace NHibernate.Test.NHSpecificTest.GH3652; + +public class Employee : BaseClass +{ + public virtual ISet Departments { get; set; } = new HashSet(); +} diff --git a/src/NHibernate.Test/NHSpecificTest/GH3652/Fixture.cs b/src/NHibernate.Test/NHSpecificTest/GH3652/Fixture.cs new file mode 100644 index 0000000000..c3dd39fb28 --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/GH3652/Fixture.cs @@ -0,0 +1,88 @@ +using System; +using System.Linq; +using NUnit.Framework; + +namespace NHibernate.Test.NHSpecificTest.GH3652; + +[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/GH3652/Mappings.hbm.xml b/src/NHibernate.Test/NHSpecificTest/GH3652/Mappings.hbm.xml new file mode 100644 index 0000000000..cfdc1b332e --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/GH3652/Mappings.hbm.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +