From 6e63217993eb5400ac9c3a1615fab0016bbfaa1b Mon Sep 17 00:00:00 2001 From: Kildibekov_AR Date: Thu, 20 Mar 2025 14:19:31 +0400 Subject: [PATCH 1/3] Test for #3665 --- .../GH3665/TempReattachedChildFixture.cs | 63 +++++++++++++++++++ .../NHSpecificTest/GH3665/Book.cs | 11 ++++ .../NHSpecificTest/GH3665/Mappings.hbm.xml | 25 ++++++++ .../GH3665/TempReattachedChildFixture.cs | 52 +++++++++++++++ .../NHSpecificTest/GH3665/Word.cs | 9 +++ 5 files changed, 160 insertions(+) create mode 100644 src/NHibernate.Test/Async/NHSpecificTest/GH3665/TempReattachedChildFixture.cs create mode 100644 src/NHibernate.Test/NHSpecificTest/GH3665/Book.cs create mode 100644 src/NHibernate.Test/NHSpecificTest/GH3665/Mappings.hbm.xml create mode 100644 src/NHibernate.Test/NHSpecificTest/GH3665/TempReattachedChildFixture.cs create mode 100644 src/NHibernate.Test/NHSpecificTest/GH3665/Word.cs diff --git a/src/NHibernate.Test/Async/NHSpecificTest/GH3665/TempReattachedChildFixture.cs b/src/NHibernate.Test/Async/NHSpecificTest/GH3665/TempReattachedChildFixture.cs new file mode 100644 index 0000000000..dd6b2163d5 --- /dev/null +++ b/src/NHibernate.Test/Async/NHSpecificTest/GH3665/TempReattachedChildFixture.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// 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.Collections.Generic; +using NUnit.Framework; + +namespace NHibernate.Test.NHSpecificTest.GH3665 +{ + using System.Threading.Tasks; + [TestFixture] + public class TempReattachedChildFixtureAsync : BugTestCase + { + protected override void OnTearDown() + { + using (ISession session = OpenSession()) + using (ITransaction transaction = session.BeginTransaction()) + { + session.Delete("from System.Object"); + + session.Flush(); + transaction.Commit(); + } + } + + [Test] + public async Task WhenRemoveTempChild_ChildShouldNotInsertAsync() + { + Book book = null; + Word word = null; + using (var s = OpenSession()) + using (var tr = s.BeginTransaction()) + { + book = new Book { Id = 1 }; + book.Words = new List { new Word { Id = 1, Parent = book } }; + await (s.SaveAsync(book)); + await (tr.CommitAsync()); + } + + word = new Word { Id = 2, Parent = book }; + book.Words.Add(word); + + using (var s = OpenSession()) + using (var tr = s.BeginTransaction()) + { + await (s.UpdateAsync(book)); + book.Words.Remove(word); + using (var sl = new SqlLogSpy()) + { + await (tr.CommitAsync()); + var logs = sl.GetWholeLog(); + Assert.That(logs, Does.Not.Contain("INSERT \n INTO\n Word").IgnoreCase, "Сollection record should not be inserted"); + } + } + } + } +} diff --git a/src/NHibernate.Test/NHSpecificTest/GH3665/Book.cs b/src/NHibernate.Test/NHSpecificTest/GH3665/Book.cs new file mode 100644 index 0000000000..799b9fe803 --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/GH3665/Book.cs @@ -0,0 +1,11 @@ +using System.Collections.Generic; + +namespace NHibernate.Test.NHSpecificTest.GH3665 +{ + public class Book + { + public virtual int Id { get; set; } + public virtual string Name { get; set; } + public virtual IList Words { get; set; } + } +} diff --git a/src/NHibernate.Test/NHSpecificTest/GH3665/Mappings.hbm.xml b/src/NHibernate.Test/NHSpecificTest/GH3665/Mappings.hbm.xml new file mode 100644 index 0000000000..06ab7e4eee --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/GH3665/Mappings.hbm.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/NHibernate.Test/NHSpecificTest/GH3665/TempReattachedChildFixture.cs b/src/NHibernate.Test/NHSpecificTest/GH3665/TempReattachedChildFixture.cs new file mode 100644 index 0000000000..ebd66a3834 --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/GH3665/TempReattachedChildFixture.cs @@ -0,0 +1,52 @@ +using System.Collections.Generic; +using NUnit.Framework; + +namespace NHibernate.Test.NHSpecificTest.GH3665 +{ + [TestFixture] + public class TempReattachedChildFixture : BugTestCase + { + protected override void OnTearDown() + { + using (ISession session = OpenSession()) + using (ITransaction transaction = session.BeginTransaction()) + { + session.Delete("from System.Object"); + + session.Flush(); + transaction.Commit(); + } + } + + [Test] + public void WhenRemoveTempChild_ChildShouldNotInsert() + { + Book book = null; + Word word = null; + using (var s = OpenSession()) + using (var tr = s.BeginTransaction()) + { + book = new Book { Id = 1 }; + book.Words = new List { new Word { Id = 1, Parent = book } }; + s.Save(book); + tr.Commit(); + } + + word = new Word { Id = 2, Parent = book }; + book.Words.Add(word); + + using (var s = OpenSession()) + using (var tr = s.BeginTransaction()) + { + s.Update(book); + book.Words.Remove(word); + using (var sl = new SqlLogSpy()) + { + tr.Commit(); + var logs = sl.GetWholeLog(); + Assert.That(logs, Does.Not.Contain("INSERT \n INTO\n Word").IgnoreCase, "Сollection record should not be inserted"); + } + } + } + } +} diff --git a/src/NHibernate.Test/NHSpecificTest/GH3665/Word.cs b/src/NHibernate.Test/NHSpecificTest/GH3665/Word.cs new file mode 100644 index 0000000000..f3f9877d2d --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/GH3665/Word.cs @@ -0,0 +1,9 @@ +namespace NHibernate.Test.NHSpecificTest.GH3665 +{ + public class Word + { + public virtual int Id { get; set; } + public virtual byte[] Content { get; set; } + public virtual Book Parent { get; set; } + } +} From ba37ba17f9824f9a3f7b1086a7a17137498c2c23 Mon Sep 17 00:00:00 2001 From: Alex Zaytsev Date: Fri, 21 Mar 2025 13:00:14 +1000 Subject: [PATCH 2/3] Rename test --- src/NHibernate.Test/NHSpecificTest/{GH3665 => GH2028}/Book.cs | 2 +- .../NHSpecificTest/{GH3665 => GH2028}/Mappings.hbm.xml | 2 +- .../{GH3665 => GH2028}/TempReattachedChildFixture.cs | 2 +- src/NHibernate.Test/NHSpecificTest/{GH3665 => GH2028}/Word.cs | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) rename src/NHibernate.Test/NHSpecificTest/{GH3665 => GH2028}/Book.cs (80%) rename src/NHibernate.Test/NHSpecificTest/{GH3665 => GH2028}/Mappings.hbm.xml (92%) rename src/NHibernate.Test/NHSpecificTest/{GH3665 => GH2028}/TempReattachedChildFixture.cs (96%) rename src/NHibernate.Test/NHSpecificTest/{GH3665 => GH2028}/Word.cs (76%) diff --git a/src/NHibernate.Test/NHSpecificTest/GH3665/Book.cs b/src/NHibernate.Test/NHSpecificTest/GH2028/Book.cs similarity index 80% rename from src/NHibernate.Test/NHSpecificTest/GH3665/Book.cs rename to src/NHibernate.Test/NHSpecificTest/GH2028/Book.cs index 799b9fe803..4d5f192876 100644 --- a/src/NHibernate.Test/NHSpecificTest/GH3665/Book.cs +++ b/src/NHibernate.Test/NHSpecificTest/GH2028/Book.cs @@ -1,6 +1,6 @@ using System.Collections.Generic; -namespace NHibernate.Test.NHSpecificTest.GH3665 +namespace NHibernate.Test.NHSpecificTest.GH2028 { public class Book { diff --git a/src/NHibernate.Test/NHSpecificTest/GH3665/Mappings.hbm.xml b/src/NHibernate.Test/NHSpecificTest/GH2028/Mappings.hbm.xml similarity index 92% rename from src/NHibernate.Test/NHSpecificTest/GH3665/Mappings.hbm.xml rename to src/NHibernate.Test/NHSpecificTest/GH2028/Mappings.hbm.xml index 06ab7e4eee..0ac20daa16 100644 --- a/src/NHibernate.Test/NHSpecificTest/GH3665/Mappings.hbm.xml +++ b/src/NHibernate.Test/NHSpecificTest/GH2028/Mappings.hbm.xml @@ -1,7 +1,7 @@ + namespace="NHibernate.Test.NHSpecificTest.GH2028"> diff --git a/src/NHibernate.Test/NHSpecificTest/GH3665/TempReattachedChildFixture.cs b/src/NHibernate.Test/NHSpecificTest/GH2028/TempReattachedChildFixture.cs similarity index 96% rename from src/NHibernate.Test/NHSpecificTest/GH3665/TempReattachedChildFixture.cs rename to src/NHibernate.Test/NHSpecificTest/GH2028/TempReattachedChildFixture.cs index ebd66a3834..039cf6c693 100644 --- a/src/NHibernate.Test/NHSpecificTest/GH3665/TempReattachedChildFixture.cs +++ b/src/NHibernate.Test/NHSpecificTest/GH2028/TempReattachedChildFixture.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; using NUnit.Framework; -namespace NHibernate.Test.NHSpecificTest.GH3665 +namespace NHibernate.Test.NHSpecificTest.GH2028 { [TestFixture] public class TempReattachedChildFixture : BugTestCase diff --git a/src/NHibernate.Test/NHSpecificTest/GH3665/Word.cs b/src/NHibernate.Test/NHSpecificTest/GH2028/Word.cs similarity index 76% rename from src/NHibernate.Test/NHSpecificTest/GH3665/Word.cs rename to src/NHibernate.Test/NHSpecificTest/GH2028/Word.cs index f3f9877d2d..90bb79d300 100644 --- a/src/NHibernate.Test/NHSpecificTest/GH3665/Word.cs +++ b/src/NHibernate.Test/NHSpecificTest/GH2028/Word.cs @@ -1,4 +1,4 @@ -namespace NHibernate.Test.NHSpecificTest.GH3665 +namespace NHibernate.Test.NHSpecificTest.GH2028 { public class Word { From 7c94c5acecf5bb9405e0e3a6eec642073fb3dd20 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 21 Mar 2025 03:02:13 +0000 Subject: [PATCH 3/3] Generate async files --- .../{GH3665 => GH2028}/TempReattachedChildFixture.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename src/NHibernate.Test/Async/NHSpecificTest/{GH3665 => GH2028}/TempReattachedChildFixture.cs (97%) diff --git a/src/NHibernate.Test/Async/NHSpecificTest/GH3665/TempReattachedChildFixture.cs b/src/NHibernate.Test/Async/NHSpecificTest/GH2028/TempReattachedChildFixture.cs similarity index 97% rename from src/NHibernate.Test/Async/NHSpecificTest/GH3665/TempReattachedChildFixture.cs rename to src/NHibernate.Test/Async/NHSpecificTest/GH2028/TempReattachedChildFixture.cs index dd6b2163d5..4d469b7fba 100644 --- a/src/NHibernate.Test/Async/NHSpecificTest/GH3665/TempReattachedChildFixture.cs +++ b/src/NHibernate.Test/Async/NHSpecificTest/GH2028/TempReattachedChildFixture.cs @@ -11,7 +11,7 @@ using System.Collections.Generic; using NUnit.Framework; -namespace NHibernate.Test.NHSpecificTest.GH3665 +namespace NHibernate.Test.NHSpecificTest.GH2028 { using System.Threading.Tasks; [TestFixture]