/src/NHibernate.Test/NHSpecificTest/GH1496/Fixture.cs

https://github.com/oskarb/nhibernate-core · C# · 417 lines · 377 code · 40 blank · 0 comment · 4 complexity · 56d69072b082ceeccac21002d9fde70c MD5 · raw file

  1. using System;
  2. using System.Linq;
  3. using NUnit.Framework;
  4. using NHibernate.Cfg;
  5. using NHibernate.Event;
  6. namespace NHibernate.Test.NHSpecificTest.GH1496
  7. {
  8. [TestFixture]
  9. public class Fixture : BugTestCase
  10. {
  11. private readonly AuditEventListener _auditEventListener = new AuditEventListener();
  12. private const string WORK_TYPENAME = "WORK";
  13. private const string HOME_TYPENAME = "HOME";
  14. private Person testPerson;
  15. private Employee testEmployee;
  16. protected override void Configure(Configuration configuration)
  17. {
  18. base.Configure(configuration);
  19. configuration.AppendListeners(ListenerType.PostUpdate, new[] { _auditEventListener });
  20. }
  21. protected override void OnSetUp()
  22. {
  23. SetupPerson();
  24. SetupEmployee();
  25. }
  26. private void SetupPerson()
  27. {
  28. using (var session = OpenSession())
  29. {
  30. using (var transaction = session.BeginTransaction())
  31. {
  32. var address = new Address("Postal A", "State A", "Street A");
  33. var person = new Person(1, "Alex", address);
  34. session.Save(address);
  35. person.Address = address;
  36. session.Save(person);
  37. testPerson = person;
  38. address = new Address("Postal T", "State T", "Street T");
  39. person = new Person(2, "Tom", address);
  40. session.Save(address);
  41. person.Address = address;
  42. session.Save(person);
  43. session.Flush();
  44. transaction.Commit();
  45. }
  46. }
  47. }
  48. private void SetupEmployee()
  49. {
  50. using (var session = OpenSession())
  51. {
  52. using (var transaction = session.BeginTransaction())
  53. {
  54. var employee = new Employee(1, "Alex");
  55. var contact = new Contact { Phone = "111-111-1111", ContactIdentifier = new ContactIdentifier(HOME_TYPENAME, "1") };
  56. session.Save(contact);
  57. employee.Contact = contact;
  58. session.Save(employee);
  59. testEmployee = employee;
  60. employee = new Employee(2, "Tom");
  61. contact = new Contact { Phone = "666-666-6666", ContactIdentifier = new ContactIdentifier(WORK_TYPENAME, "2") };
  62. session.Save(contact);
  63. employee.Contact = contact;
  64. session.Save(employee);
  65. session.Flush();
  66. transaction.Commit();
  67. }
  68. }
  69. }
  70. protected override void OnTearDown()
  71. {
  72. using (var session = OpenSession())
  73. using (var transaction = session.BeginTransaction())
  74. {
  75. session.Delete("from System.Object");
  76. session.Flush();
  77. transaction.Commit();
  78. }
  79. }
  80. [Test]
  81. public void EventListener_Entity_NoChange()
  82. {
  83. using (var session = OpenSession())
  84. {
  85. using (var transaction = session.BeginTransaction())
  86. {
  87. _auditEventListener.Start();
  88. var person = session.Get<Person>(2);
  89. session.Update(person);
  90. session.Flush();
  91. transaction.Commit();
  92. Assert.That(_auditEventListener.ModifiedItems.Count, Is.EqualTo(0), "Total 0 item changed");
  93. _auditEventListener.Stop();
  94. }
  95. }
  96. }
  97. [Test]
  98. public void SelectBeforeUpdate_Entity_NoChange()
  99. {
  100. _auditEventListener.Stop();
  101. using (var session = OpenSession())
  102. {
  103. using (var transaction = session.BeginTransaction())
  104. {
  105. session.Update(testPerson);
  106. Assert.DoesNotThrow(() =>
  107. {
  108. session.Flush();
  109. transaction.Commit();
  110. }, "Saving data failed.");
  111. }
  112. }
  113. }
  114. [Test]
  115. public void EventListener_Entity_ChangeProperty()
  116. {
  117. using (var session = OpenSession())
  118. {
  119. using (var transaction = session.BeginTransaction())
  120. {
  121. _auditEventListener.Start();
  122. var person = session.Get<Person>(2);
  123. person.Name = "Steve";
  124. session.Update(person);
  125. session.Flush();
  126. transaction.Commit();
  127. Assert.That(_auditEventListener.ModifiedItems.Count, Is.EqualTo(1), "Total 1 item changed");
  128. Assert.That(_auditEventListener.ModifiedItems.Count(x => x.State.ToString() == "Steve"), Is.EqualTo(1), "Includes Modified Item 'Steve'");
  129. _auditEventListener.Stop();
  130. }
  131. }
  132. }
  133. [Test]
  134. public void SelectBeforeUpdate_Entity_ChangeProperty()
  135. {
  136. _auditEventListener.Stop();
  137. using (var session = OpenSession())
  138. {
  139. using (var transaction = session.BeginTransaction())
  140. {
  141. testPerson.Name = "Mike";
  142. session.Update(testPerson);
  143. Assert.DoesNotThrow(() =>
  144. {
  145. session.Flush();
  146. transaction.Commit();
  147. }, "Saving data failed.");
  148. }
  149. }
  150. }
  151. [Test]
  152. public void EventListener_EntityWithCompositeId_ChangeProperty()
  153. {
  154. using (var session = OpenSession())
  155. {
  156. using (var transaction = session.BeginTransaction())
  157. {
  158. _auditEventListener.Start();
  159. var employee = session.Get<Employee>(2);
  160. employee.Name = "Steve";
  161. session.Update(employee);
  162. session.Flush();
  163. transaction.Commit();
  164. Assert.That(_auditEventListener.ModifiedItems.Count, Is.EqualTo(1), "Total 1 item changed");
  165. Assert.That(_auditEventListener.ModifiedItems.Count(x => x.State.ToString() == "Steve"), Is.EqualTo(1), "Includes Modified Item 'Steve'");
  166. _auditEventListener.Stop();
  167. }
  168. }
  169. }
  170. [Test]
  171. public void SelectBeforeUpdate_EntityWithCompositeId_ChangeProperty()
  172. {
  173. _auditEventListener.Stop();
  174. using (var session = OpenSession())
  175. {
  176. using (var transaction = session.BeginTransaction())
  177. {
  178. testEmployee.Name = "Mike";
  179. session.Update(testEmployee);
  180. Assert.DoesNotThrow(() =>
  181. {
  182. session.Flush();
  183. transaction.Commit();
  184. }, "Saving data failed.");
  185. }
  186. }
  187. }
  188. [Test]
  189. public void EventListener_ManyToOne_ChangeProperty()
  190. {
  191. using (var session = OpenSession())
  192. {
  193. using (var transaction = session.BeginTransaction())
  194. {
  195. _auditEventListener.Start();
  196. var person = session.Get<Person>(2);
  197. person.Address.Street = "Street B";
  198. session.Update(person);
  199. session.Flush();
  200. transaction.Commit();
  201. Assert.That(_auditEventListener.ModifiedItems.Count, Is.EqualTo(1), "Total 1 item changed");
  202. Assert.That(_auditEventListener.ModifiedItems.Count(x => x.State.ToString() == "Street B"), Is.EqualTo(1), "Includes Modified Item 'Street B'");
  203. _auditEventListener.Stop();
  204. }
  205. }
  206. }
  207. [Test]
  208. public void SelectBeforeUpdate_ManyToOne_ChangeProperty()
  209. {
  210. _auditEventListener.Stop();
  211. using (var session = OpenSession())
  212. {
  213. using (var transaction = session.BeginTransaction())
  214. {
  215. testPerson.Address.Street = "Street E";
  216. session.Update(testPerson);
  217. Assert.DoesNotThrow(() =>
  218. {
  219. session.Flush();
  220. transaction.Commit();
  221. }, "Saving data failed.");
  222. }
  223. }
  224. }
  225. [Test]
  226. public void EventListener_Entity_SetNewManyToOne()
  227. {
  228. using (var session = OpenSession())
  229. {
  230. using (var transaction = session.BeginTransaction())
  231. {
  232. _auditEventListener.Start();
  233. var person = session.Get<Person>(2);
  234. var address = new Address("Postal B", "State B", "Street B");
  235. session.Save(address);
  236. person.Address = address;
  237. session.Update(person);
  238. session.Flush();
  239. transaction.Commit();
  240. Assert.That(_auditEventListener.ModifiedItems.Count, Is.EqualTo(1), "Total 1 item changed");
  241. Assert.That(_auditEventListener.ModifiedItems.Count(x => x.State.GetType().Name.Contains("Address")), Is.EqualTo(1), "Includes Modified Item type of Address'");
  242. _auditEventListener.Stop();
  243. }
  244. }
  245. }
  246. [Test]
  247. public void SelectBeforeUpdate_Entity_SetNewManyToOne()
  248. {
  249. _auditEventListener.Stop();
  250. using (var session = OpenSession())
  251. {
  252. using (var transaction = session.BeginTransaction())
  253. {
  254. var address = new Address("Postal D", "State D", "Street D");
  255. session.Save(address);
  256. testPerson.Address = address;
  257. session.Update(testPerson);
  258. Assert.DoesNotThrow(() =>
  259. {
  260. session.Flush();
  261. transaction.Commit();
  262. }, "Saving data failed.");
  263. }
  264. }
  265. }
  266. [Test]
  267. public void EventListener_ManyToOneWithCompositeId_ChangeProperty()
  268. {
  269. using (var session = OpenSession())
  270. {
  271. using (var transaction = session.BeginTransaction())
  272. {
  273. _auditEventListener.Start();
  274. var employee = session.Get<Employee>(2);
  275. employee.Contact.Phone = "333-333-3333";
  276. session.Update(employee);
  277. session.Flush();
  278. transaction.Commit();
  279. Assert.That(_auditEventListener.ModifiedItems.Count, Is.EqualTo(1), "Total 1 item changed");
  280. Assert.That(_auditEventListener.ModifiedItems.Count(x => x.State.ToString() == "333-333-3333"), Is.EqualTo(1), "Includes Modified Item '333-333-3333'");
  281. _auditEventListener.Stop();
  282. }
  283. }
  284. }
  285. [Test]
  286. public void SelectBeforeUpdate_ManyToOneWithCompositeId_ChangeProperty()
  287. {
  288. _auditEventListener.Stop();
  289. using (var session = OpenSession())
  290. {
  291. using (var transaction = session.BeginTransaction())
  292. {
  293. testEmployee.Contact.Phone = "666-666-6666";
  294. session.Update(testEmployee);
  295. Assert.DoesNotThrow(() =>
  296. {
  297. session.Flush();
  298. transaction.Commit();
  299. }, "Saving data failed.");
  300. }
  301. }
  302. }
  303. [Test]
  304. public void EventListener_Entity_SetNewManyToOneWithCompositeId()
  305. {
  306. using (var session = OpenSession())
  307. {
  308. using (var transaction = session.BeginTransaction())
  309. {
  310. _auditEventListener.Start();
  311. var employee = session.Get<Employee>(2);
  312. var contact = employee.Contact;
  313. employee.Contact = null;
  314. session.Delete(contact);
  315. session.Update(employee);
  316. session.Flush();
  317. transaction.Commit();
  318. Assert.That(_auditEventListener.ModifiedItems.Count, Is.EqualTo(1), "Total 1 item changed");
  319. Assert.That(_auditEventListener.ModifiedItems.Count(x => x.OldState.GetType().Name.Contains("Contact")), Is.EqualTo(1), "Includes Modified Item type of Contact'");
  320. _auditEventListener.Stop();
  321. }
  322. }
  323. using (var session = OpenSession())
  324. {
  325. using (var transaction = session.BeginTransaction())
  326. {
  327. _auditEventListener.Start();
  328. var employee = session.Get<Employee>(2);
  329. var contact = new Contact { Phone = "444-444-4444", ContactIdentifier = new ContactIdentifier(HOME_TYPENAME, "2") };
  330. session.Save(contact);
  331. employee.Contact = contact;
  332. session.Update(employee);
  333. session.Flush();
  334. transaction.Commit();
  335. Assert.That(_auditEventListener.ModifiedItems.Count, Is.EqualTo(1), "Total 1 item changed");
  336. Assert.That(_auditEventListener.ModifiedItems.Count(x => x.State.GetType().Name.Contains("Contact")), Is.EqualTo(1), "Includes Modified Item type of Contact'");
  337. _auditEventListener.Stop();
  338. }
  339. }
  340. }
  341. [Test]
  342. public void SelectBeforeUpdate_Entity_SetNewManyToOneWithCompositeId()
  343. {
  344. _auditEventListener.Stop();
  345. using (var session = OpenSession())
  346. {
  347. using (var transaction = session.BeginTransaction())
  348. {
  349. var contact = testEmployee.Contact;
  350. testEmployee.Contact = null;
  351. session.Delete(contact);
  352. session.Update(testEmployee);
  353. Assert.DoesNotThrow(() =>
  354. {
  355. session.Flush();
  356. transaction.Commit();
  357. }, "Saving data failed.");
  358. }
  359. }
  360. using (var session = OpenSession())
  361. {
  362. using (var transaction = session.BeginTransaction())
  363. {
  364. var contact = new Contact { Phone = "555-555-5555", ContactIdentifier = new ContactIdentifier(HOME_TYPENAME, "1") };
  365. session.Save(contact);
  366. testEmployee.Contact = contact;
  367. session.Update(testEmployee);
  368. Assert.DoesNotThrow(() =>
  369. {
  370. session.Flush();
  371. transaction.Commit();
  372. }, "Saving data failed.");
  373. }
  374. }
  375. }
  376. }
  377. }