|
6 | 6 | using System; |
7 | 7 | using System.Collections.Generic; |
8 | 8 | using System.Data; |
| 9 | +using System.Threading.Tasks; |
9 | 10 | using Xunit; |
10 | 11 |
|
11 | 12 | namespace Kros.KORM.UnitTests.Integration |
@@ -195,6 +196,40 @@ private void ExplicitTransactionCommitDataAfterOtherTransactionEndWithRollback(T |
195 | 196 | } |
196 | 197 | } |
197 | 198 |
|
| 199 | + [Theory] |
| 200 | + [InlineData(true)] |
| 201 | + [InlineData(false)] |
| 202 | + public async Task ExplicitTransactionShould_CommitDataAfterOtherTransactionEndWithRollbackAsync(bool openConnection) |
| 203 | + { |
| 204 | + await DoTestWithConnectionAsync(openConnection, ExplicitTransactionCommitDataAfterOtherTransactionEndWithRollbackAsync, CreateDatabase); |
| 205 | + } |
| 206 | + |
| 207 | + private async Task ExplicitTransactionCommitDataAfterOtherTransactionEndWithRollbackAsync(TestDatabase korm) |
| 208 | + { |
| 209 | + using (var transaction = korm.BeginTransaction()) |
| 210 | + { |
| 211 | + var dbSet = korm.Query<Invoice>().AsDbSet(); |
| 212 | + |
| 213 | + dbSet.Add(CreateTestData()); |
| 214 | + dbSet.CommitChanges(); |
| 215 | + |
| 216 | + await transaction.RollbackAsync(); |
| 217 | + |
| 218 | + DatabaseShouldBeEmpty(korm); |
| 219 | + } |
| 220 | + using (var transaction = korm.BeginTransaction()) |
| 221 | + { |
| 222 | + var dbSet = korm.Query<Invoice>().AsDbSet(); |
| 223 | + |
| 224 | + dbSet.Add(CreateTestData()); |
| 225 | + dbSet.CommitChanges(); |
| 226 | + |
| 227 | + await transaction.CommitAsync(); |
| 228 | + |
| 229 | + DatabaseShouldContainInvoices(korm.ConnectionString, CreateTestData()); |
| 230 | + } |
| 231 | + } |
| 232 | + |
198 | 233 | [Theory] |
199 | 234 | [InlineData(true)] |
200 | 235 | [InlineData(false)] |
@@ -369,6 +404,30 @@ private void ExplicitTransactionCommit(TestDatabase database) |
369 | 404 | } |
370 | 405 | } |
371 | 406 |
|
| 407 | + [Theory] |
| 408 | + [InlineData(true)] |
| 409 | + [InlineData(false)] |
| 410 | + public async Task ExplicitTransactionShould_KeepMasterConnectionStateWhenCommitWasCalledAsync(bool openConnection) |
| 411 | + { |
| 412 | + await DoTestWithConnectionAsync(openConnection, ExplicitTransactionCommitAsync, CreateDatabase); |
| 413 | + } |
| 414 | + |
| 415 | + private async Task ExplicitTransactionCommitAsync(TestDatabase database) |
| 416 | + { |
| 417 | + using (var korm = new Database(database.ConnectionString)) |
| 418 | + using (var transaction = korm.BeginTransaction()) |
| 419 | + { |
| 420 | + var dbSet = korm.Query<Invoice>().AsDbSet(); |
| 421 | + |
| 422 | + dbSet.Add(CreateTestData()); |
| 423 | + dbSet.CommitChanges(); |
| 424 | + |
| 425 | + await transaction.CommitAsync(); |
| 426 | + |
| 427 | + DatabaseShouldContainInvoices(database.ConnectionString, CreateTestData()); |
| 428 | + } |
| 429 | + } |
| 430 | + |
372 | 431 | [Theory] |
373 | 432 | [InlineData(true)] |
374 | 433 | [InlineData(false)] |
@@ -509,17 +568,34 @@ public void ExplicitTransactionShould_NotThrowCommandTimeoutExceptionWhenIsSetSu |
509 | 568 |
|
510 | 569 | #region Helpers |
511 | 570 |
|
512 | | - private void DoTestWithConnection( |
| 571 | + private static void DoTestWithConnection( |
513 | 572 | bool openConnection, |
514 | 573 | Action<TestDatabase> testAction, |
515 | 574 | Func<TestDatabase> createDatabaseAction) |
516 | 575 | { |
517 | | - using (var database = createDatabaseAction()) |
| 576 | + using TestDatabase database = createDatabaseAction(); |
| 577 | + if (openConnection) |
| 578 | + { |
| 579 | + database.Connection.Open(); |
| 580 | + } |
| 581 | + |
| 582 | + testAction(database); |
| 583 | + database.Connection.State.Should().Be(openConnection ? ConnectionState.Open : ConnectionState.Closed); |
| 584 | + } |
| 585 | + |
| 586 | + private static async Task DoTestWithConnectionAsync( |
| 587 | + bool openConnection, |
| 588 | + Func<TestDatabase, Task> testAction, |
| 589 | + Func<TestDatabase> createDatabaseAction) |
| 590 | + { |
| 591 | + using TestDatabase database = createDatabaseAction(); |
| 592 | + if (openConnection) |
518 | 593 | { |
519 | | - if (openConnection) database.Connection.Open(); |
520 | | - testAction(database); |
521 | | - database.Connection.State.Should().Be(openConnection ? ConnectionState.Open : ConnectionState.Closed); |
| 594 | + database.Connection.Open(); |
522 | 595 | } |
| 596 | + |
| 597 | + await testAction(database); |
| 598 | + database.Connection.State.Should().Be(openConnection ? ConnectionState.Open : ConnectionState.Closed); |
523 | 599 | } |
524 | 600 |
|
525 | 601 | private void DatabaseShouldContainInvoices(Database korm, IEnumerable<Invoice> expected) |
|
0 commit comments