diff --git a/src/NHibernate.Test/Async/NHSpecificTest/GH2028/TempReattachedChildFixture.cs b/src/NHibernate.Test/Async/NHSpecificTest/GH2028/TempReattachedChildFixture.cs new file mode 100644 index 0000000000..4d469b7fba --- /dev/null +++ b/src/NHibernate.Test/Async/NHSpecificTest/GH2028/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.GH2028 +{ + 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/GH2028/Book.cs b/src/NHibernate.Test/NHSpecificTest/GH2028/Book.cs new file mode 100644 index 0000000000..4d5f192876 --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/GH2028/Book.cs @@ -0,0 +1,11 @@ +using System.Collections.Generic; + +namespace NHibernate.Test.NHSpecificTest.GH2028 +{ + 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/GH2028/Mappings.hbm.xml b/src/NHibernate.Test/NHSpecificTest/GH2028/Mappings.hbm.xml new file mode 100644 index 0000000000..0ac20daa16 --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/GH2028/Mappings.hbm.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/NHibernate.Test/NHSpecificTest/GH2028/TempReattachedChildFixture.cs b/src/NHibernate.Test/NHSpecificTest/GH2028/TempReattachedChildFixture.cs new file mode 100644 index 0000000000..039cf6c693 --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/GH2028/TempReattachedChildFixture.cs @@ -0,0 +1,52 @@ +using System.Collections.Generic; +using NUnit.Framework; + +namespace NHibernate.Test.NHSpecificTest.GH2028 +{ + [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/GH2028/Word.cs b/src/NHibernate.Test/NHSpecificTest/GH2028/Word.cs new file mode 100644 index 0000000000..90bb79d300 --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/GH2028/Word.cs @@ -0,0 +1,9 @@ +namespace NHibernate.Test.NHSpecificTest.GH2028 +{ + public class Word + { + public virtual int Id { get; set; } + public virtual byte[] Content { get; set; } + public virtual Book Parent { get; set; } + } +}