Skip to content

Commit 10c0bec

Browse files
committed
Tests - Execute Transaction (MSSQL/MySQL/PostgreSQL)
1 parent 765ea3f commit 10c0bec

File tree

3 files changed

+402
-0
lines changed

3 files changed

+402
-0
lines changed

QueryDB.Core.Tests/MSSQLTests.cs

Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using Microsoft.VisualStudio.TestTools.UnitTesting;
22
using QueryDB.Exceptions;
33
using System;
4+
using System.Collections.Generic;
45
using System.Linq;
56

67
namespace QueryDB.Core.Tests
@@ -480,6 +481,139 @@ public void Test_MSSQL_ExecuteCommand_DCL_Queries()
480481

481482
#endregion
482483

484+
#region Execute Transaction Tests - << bool ExecuteTransaction(List<string> sqlStatements) >>
485+
486+
[TestMethod]
487+
[TestCategory(DB_TESTS), TestCategory(MSSQL_TESTS)]
488+
public void Test_MSSQL_ExecuteTransaction_DDL_Multiple_Queries()
489+
{
490+
var createTableSql = Queries.MSSQLQueries.TestDB.DDL.Create_Table;
491+
var alterTableSql = Queries.MSSQLQueries.TestDB.DDL.Alter_Table;
492+
var truncateTableSql = Queries.MSSQLQueries.TestDB.DDL.Truncate_Table;
493+
var renameTableSql = Queries.MSSQLQueries.TestDB.DDL.Rename_Table;
494+
var dropTableSql = Queries.MSSQLQueries.TestDB.DDL.Drop_Table;
495+
var dDLExecutionCheckSql = Queries.MSSQLQueries.TestDB.DDL.DDL_Execute_check;
496+
497+
// Create, Alter & Truncate
498+
var statements = new List<string>
499+
{
500+
createTableSql,
501+
alterTableSql,
502+
truncateTableSql
503+
};
504+
var dbContext = new DBContext(DB.MSSQL, MSSQLConnectionString);
505+
var result = dbContext.ExecuteTransaction(statements);
506+
Assert.AreEqual(true, result);
507+
508+
var tableCount = dbContext
509+
.FetchData(string.Format(dDLExecutionCheckSql, "dbo", "Employee"));
510+
Assert.AreEqual("1", tableCount[0].ReferenceData["Table_Count"]);
511+
512+
// Rename & Drop
513+
statements = new List<string>
514+
{
515+
renameTableSql,
516+
dropTableSql
517+
};
518+
result = dbContext.ExecuteTransaction(statements);
519+
Assert.AreEqual(true, result);
520+
521+
tableCount = dbContext
522+
.FetchData(string.Format(dDLExecutionCheckSql, "dbo", "Employees"));
523+
Assert.AreEqual("0", tableCount[0].ReferenceData["Table_Count"]);
524+
}
525+
526+
[TestMethod]
527+
[TestCategory(DB_TESTS), TestCategory(MSSQL_TESTS)]
528+
public void Test_MSSQL_ExecuteTransaction_DML_Multiple_Queries()
529+
{
530+
var insertSql = Queries.MSSQLQueries.TestDB.DML.InsertSql;
531+
var updateSql = Queries.MSSQLQueries.TestDB.DML.UpdateSql;
532+
var deleteSql = Queries.MSSQLQueries.TestDB.DML.DeleteSql;
533+
var verifyDMLExecution = Queries.MSSQLQueries.TestDB.DML.VerifyDMLExecution;
534+
535+
var statements = new List<string>
536+
{
537+
insertSql,
538+
updateSql
539+
};
540+
var dbContext = new DBContext(DB.MSSQL, MSSQLConnectionString);
541+
542+
// Insert & Update
543+
var result = dbContext.ExecuteTransaction(statements);
544+
Assert.AreEqual(true, result);
545+
var data = dbContext.FetchData(verifyDMLExecution);
546+
Assert.IsTrue(data.Count == 1);
547+
var agent = data.FirstOrDefault();
548+
Assert.AreEqual("A020", agent.ReferenceData["Agent_Code"]);
549+
Assert.AreEqual("John", agent.ReferenceData["Agent_Name"]);
550+
Assert.AreEqual("Wick", agent.ReferenceData["Working_Area"]);
551+
Assert.AreEqual("0.15", agent.ReferenceData["Commission"]);
552+
Assert.AreEqual("010-44536178", agent.ReferenceData["Phone_No"]);
553+
Assert.AreEqual("", agent.ReferenceData["Country"]);
554+
555+
// Delete
556+
statements = new List<string>
557+
{
558+
deleteSql
559+
};
560+
result = dbContext.ExecuteTransaction(statements);
561+
Assert.AreEqual(true, result);
562+
data = dbContext.FetchData(verifyDMLExecution);
563+
Assert.IsTrue(data.Count == 0);
564+
}
565+
566+
[TestMethod]
567+
[TestCategory(DB_TESTS), TestCategory(MSSQL_TESTS)]
568+
public void Test_MSSQL_ExecuteTransaction_Incomplete_Transaction_Rollback_On_Error()
569+
{
570+
var insertSql = Queries.MSSQLQueries.TestDB.DML.InsertSql;
571+
var updateSql = Queries.MSSQLQueries.TestDB.DML.UpdateSql;
572+
var updateErrorSql = "UPDATE";
573+
var verifyDMLExecution = Queries.MSSQLQueries.TestDB.DML.VerifyDMLExecution;
574+
575+
var statements = new List<string>
576+
{
577+
insertSql,
578+
updateSql,
579+
updateErrorSql
580+
};
581+
var dbContext = new DBContext(DB.MSSQL, MSSQLConnectionString);
582+
583+
// Insert & Update
584+
var result = dbContext.ExecuteTransaction(statements);
585+
Assert.AreEqual(false, result);
586+
var data = dbContext.FetchData(verifyDMLExecution);
587+
Assert.IsTrue(data.Count == 0);
588+
}
589+
590+
[TestMethod]
591+
[TestCategory(DB_TESTS), TestCategory(MSSQL_TESTS)]
592+
public void Test_MSSQL_ExecuteTransaction_DML_Unsupported_SELECT_Queries()
593+
{
594+
var selectSql = Queries.MSSQLQueries.TestDB.DML.SelectSql;
595+
596+
// Select
597+
try
598+
{
599+
var statements = new List<string>
600+
{
601+
selectSql
602+
};
603+
var dbContext = new DBContext(DB.MSSQL, MSSQLConnectionString);
604+
var result = dbContext.ExecuteTransaction(statements);
605+
Assert.Fail("No Exception");
606+
}
607+
catch (QueryDBException ex)
608+
{
609+
Assert.AreEqual("SELECT queries are not supported here.", ex.Message);
610+
Assert.AreEqual("UnsupportedCommand", ex.ErrorType);
611+
Assert.AreEqual("'ExecuteTransaction' doesn't support SELECT queries.", ex.AdditionalInfo);
612+
}
613+
}
614+
615+
#endregion
616+
483617
#endregion
484618

485619
}

QueryDB.Core.Tests/MySQLTests.cs

Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using Microsoft.VisualStudio.TestTools.UnitTesting;
22
using QueryDB.Exceptions;
33
using System;
4+
using System.Collections.Generic;
45
using System.Linq;
56

67
namespace QueryDB.Core.Tests
@@ -452,6 +453,139 @@ public void Test_MySQL_ExecuteCommand_DCL_Queries()
452453

453454
#endregion
454455

456+
#region Execute Transaction Tests - << bool ExecuteTransaction(List<string> sqlStatements) >>
457+
458+
[TestMethod]
459+
[TestCategory(DB_TESTS), TestCategory(MYSQL_TESTS)]
460+
public void Test_MySQL_ExecuteTransaction_DDL_Multiple_Queries()
461+
{
462+
var createTableSql = Queries.MySQLQueries.TestDB.DDL.Create_Table;
463+
var alterTableSql = Queries.MySQLQueries.TestDB.DDL.Alter_Table;
464+
var truncateTableSql = Queries.MySQLQueries.TestDB.DDL.Truncate_Table;
465+
var renameTableSql = Queries.MySQLQueries.TestDB.DDL.Rename_Table;
466+
var dropTableSql = Queries.MySQLQueries.TestDB.DDL.Drop_Table;
467+
var dDLExecutionCheckSql = Queries.MySQLQueries.TestDB.DDL.DDL_Execute_check;
468+
469+
// Create, Alter & Truncate
470+
var statements = new List<string>
471+
{
472+
createTableSql,
473+
alterTableSql,
474+
truncateTableSql
475+
};
476+
var dbContext = new DBContext(DB.MySQL, MySQLConnectionString);
477+
var result = dbContext.ExecuteTransaction(statements);
478+
Assert.AreEqual(true, result);
479+
480+
var tableCount = dbContext
481+
.FetchData(string.Format(dDLExecutionCheckSql, "mysql", "Employee"));
482+
Assert.AreEqual("1", tableCount[0].ReferenceData["Table_Count"]);
483+
484+
// Rename & Drop
485+
statements = new List<string>
486+
{
487+
renameTableSql,
488+
dropTableSql
489+
};
490+
result = dbContext.ExecuteTransaction(statements);
491+
Assert.AreEqual(true, result);
492+
493+
tableCount = dbContext
494+
.FetchData(string.Format(dDLExecutionCheckSql, "mysql", "Employees"));
495+
Assert.AreEqual("0", tableCount[0].ReferenceData["Table_Count"]);
496+
}
497+
498+
[TestMethod]
499+
[TestCategory(DB_TESTS), TestCategory(MYSQL_TESTS)]
500+
public void Test_MySQL_ExecuteTransaction_DML_Multiple_Queries()
501+
{
502+
var insertSql = Queries.MySQLQueries.TestDB.DML.InsertSql;
503+
var updateSql = Queries.MySQLQueries.TestDB.DML.UpdateSql;
504+
var deleteSql = Queries.MySQLQueries.TestDB.DML.DeleteSql;
505+
var verifyDMLExecution = Queries.MySQLQueries.TestDB.DML.VerifyDMLExecution;
506+
507+
var statements = new List<string>
508+
{
509+
insertSql,
510+
updateSql
511+
};
512+
var dbContext = new DBContext(DB.MySQL, MySQLConnectionString);
513+
514+
// Insert & Update
515+
var result = dbContext.ExecuteTransaction(statements);
516+
Assert.AreEqual(true, result);
517+
var data = dbContext.FetchData(verifyDMLExecution);
518+
Assert.IsTrue(data.Count == 1);
519+
var agent = data.FirstOrDefault();
520+
Assert.AreEqual("A020", agent.ReferenceData["Agent_Code"]);
521+
Assert.AreEqual("John", agent.ReferenceData["Agent_Name"]);
522+
Assert.AreEqual("Wick", agent.ReferenceData["Working_Area"]);
523+
Assert.AreEqual("0.15", agent.ReferenceData["Commission"]);
524+
Assert.AreEqual("010-44536178", agent.ReferenceData["Phone_No"]);
525+
Assert.AreEqual("", agent.ReferenceData["Country"]);
526+
527+
// Delete
528+
statements = new List<string>
529+
{
530+
deleteSql
531+
};
532+
result = dbContext.ExecuteTransaction(statements);
533+
Assert.AreEqual(true, result);
534+
data = dbContext.FetchData(verifyDMLExecution);
535+
Assert.IsTrue(data.Count == 0);
536+
}
537+
538+
[TestMethod]
539+
[TestCategory(DB_TESTS), TestCategory(MYSQL_TESTS)]
540+
public void Test_MySQL_ExecuteTransaction_Incomplete_Transaction_Rollback_On_Error()
541+
{
542+
var insertSql = Queries.MySQLQueries.TestDB.DML.InsertSql;
543+
var updateSql = Queries.MySQLQueries.TestDB.DML.UpdateSql;
544+
var updateErrorSql = "UPDATE";
545+
var verifyDMLExecution = Queries.MySQLQueries.TestDB.DML.VerifyDMLExecution;
546+
547+
var statements = new List<string>
548+
{
549+
insertSql,
550+
updateSql,
551+
updateErrorSql
552+
};
553+
var dbContext = new DBContext(DB.MySQL, MySQLConnectionString);
554+
555+
// Insert & Update
556+
var result = dbContext.ExecuteTransaction(statements);
557+
Assert.AreEqual(false, result);
558+
var data = dbContext.FetchData(verifyDMLExecution);
559+
Assert.IsTrue(data.Count == 0);
560+
}
561+
562+
[TestMethod]
563+
[TestCategory(DB_TESTS), TestCategory(MYSQL_TESTS)]
564+
public void Test_MySQL_ExecuteTransaction_DML_Unsupported_SELECT_Queries()
565+
{
566+
var selectSql = Queries.MySQLQueries.TestDB.DML.SelectSql;
567+
568+
// Select
569+
try
570+
{
571+
var statements = new List<string>
572+
{
573+
selectSql
574+
};
575+
var dbContext = new DBContext(DB.MySQL, MySQLConnectionString);
576+
var result = dbContext.ExecuteTransaction(statements);
577+
Assert.Fail("No Exception");
578+
}
579+
catch (QueryDBException ex)
580+
{
581+
Assert.AreEqual("SELECT queries are not supported here.", ex.Message);
582+
Assert.AreEqual("UnsupportedCommand", ex.ErrorType);
583+
Assert.AreEqual("'ExecuteTransaction' doesn't support SELECT queries.", ex.AdditionalInfo);
584+
}
585+
}
586+
587+
#endregion
588+
455589
#endregion
456590

457591
}

0 commit comments

Comments
 (0)