From 27a02f31095c8d5d48bf15574c63e14d88f3e5cb Mon Sep 17 00:00:00 2001 From: Michael Pendon Date: Fri, 9 Oct 2020 23:21:19 +0200 Subject: [PATCH] #234 #235 #236 #237 #238 #239 - Integration Tests for MySqlConnector. --- .../Helper.cs | 280 ++++++++++++++++-- .../Operations/InsertAllTest.cs | 96 ++++++ .../Operations/InsertTest.cs | 100 +++++++ .../Operations/MergeAllTest.cs | 113 ++++++- .../Operations/MergeTest.cs | 95 ++++++ .../Operations/UpdateAllTest.cs | 57 ++++ .../Operations/UpdateTest.cs | 94 +++++- 7 files changed, 795 insertions(+), 40 deletions(-) diff --git a/RepoDb.MySqlConnector/RepoDb.MySqlConnector.IntegrationTests/Helper.cs b/RepoDb.MySqlConnector/RepoDb.MySqlConnector.IntegrationTests/Helper.cs index 5d28383e7..e04cf6b2e 100644 --- a/RepoDb.MySqlConnector/RepoDb.MySqlConnector.IntegrationTests/Helper.cs +++ b/RepoDb.MySqlConnector/RepoDb.MySqlConnector.IntegrationTests/Helper.cs @@ -16,6 +16,8 @@ static Helper() EpocDate = new DateTime(1970, 1, 1, 0, 0, 0); } + #region Properties + /// /// Gets the value of the Epoc date. /// @@ -26,6 +28,10 @@ static Helper() /// public static Random Randomizer => new Random(1); + #endregion + + #region Helpers + /// /// Asserts the properties equality of 2 types. /// @@ -143,13 +149,15 @@ public static void AssertMembersEquality(object obj, IDictionary }); } + #endregion + #region CompleteTable /// - /// Creates a list of objects. + /// /// - /// The number of rows. - /// A list of objects. + /// + /// public static List CreateCompleteTables(int count) { var tables = new List(); @@ -207,9 +215,9 @@ public static List CreateCompleteTables(int count) } /// - /// Update the properties of instance. + /// /// - /// The instance to be updated. + /// public static void UpdateCompleteTableProperties(CompleteTable table) { var now = DateTime.SpecifyKind( @@ -238,7 +246,7 @@ public static void UpdateCompleteTableProperties(CompleteTable table) //table.ColumnMultiPolygon = Encoding.Default.GetBytes($"ColumnMultiPolygon:{1}"); //table.ColumnPoint = Encoding.Default.GetBytes($"ColumnPoint:{1}"); //table.ColumnPolygon = Encoding.Default.GetBytes($"ColumnPolygon:{1}"); - table.ColumnBigint = 1; + table.ColumnBigint = Convert.ToInt64(1); table.ColumnDecimal = Convert.ToDecimal(1); table.ColumnDouble = Convert.ToDouble(1); table.ColumnFloat = Convert.ToSingle(1); @@ -259,10 +267,10 @@ public static void UpdateCompleteTableProperties(CompleteTable table) } /// - /// Creates a list of objects represented as dynamics. + /// /// - /// The number of rows. - /// A list of objects represented as dynamics. + /// + /// public static List CreateCompleteTablesAsDynamics(int count) { var tables = new List(); @@ -321,9 +329,9 @@ public static List CreateCompleteTablesAsDynamics(int count) } /// - /// Update the properties of instance represented asy dynamic. + /// /// - /// The instance to be updated. + /// public static void UpdateCompleteTableAsDynamicProperties(dynamic table) { var now = DateTime.SpecifyKind( @@ -352,7 +360,7 @@ public static void UpdateCompleteTableAsDynamicProperties(dynamic table) //table.ColumnMultiPolygon = Encoding.Default.GetBytes($"ColumnMultiPolygon:{1}"); //table.ColumnPoint = Encoding.Default.GetBytes($"ColumnPoint:{1}"); //table.ColumnPolygon = Encoding.Default.GetBytes($"ColumnPolygon:{1}"); - table.ColumnBigint = 1; + table.ColumnBigint = Convert.ToInt64(1); table.ColumnDecimal = Convert.ToDecimal(1); table.ColumnDouble = Convert.ToDouble(1); table.ColumnFloat = Convert.ToSingle(1); @@ -372,15 +380,129 @@ public static void UpdateCompleteTableAsDynamicProperties(dynamic table) table.ColumnBit = (UInt64)1; } + /// + /// + /// + /// + /// + public static List CreateCompleteTablesAsExpandoObjects(int count) + { + var tables = new List(); + var now = DateTime.SpecifyKind( + DateTime.Parse(DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss.fffff")), + DateTimeKind.Unspecified); + for (var i = 0; i < count; i++) + { + var item = new ExpandoObject() as IDictionary; + item["Id"] = (long)(i + 1); + item["ColumnVarchar"] = $"ColumnVarChar:{i}"; + item["ColumnInt"] = i; + item["ColumnDecimal2"] = Convert.ToDecimal(i); + item["ColumnDateTime"] = EpocDate; + item["ColumnBlob"] = Encoding.Default.GetBytes($"ColumnBlob:{i}"); + item["ColumnBlobAsArray"] = Encoding.Default.GetBytes($"ColumnBlobAsArray:{i}"); + item["ColumnBinary"] = Encoding.Default.GetBytes($"ColumnBinary:{i}"); + item["ColumnLongBlob"] = Encoding.Default.GetBytes($"ColumnLongBlob:{i}"); + item["ColumnMediumBlob"] = Encoding.Default.GetBytes($"ColumnMediumBlob:{i}"); + item["ColumnTinyBlob"] = Encoding.Default.GetBytes($"ColumnTinyBlob:{i}"); + item["ColumnVarBinary"] = Encoding.Default.GetBytes($"ColumnVarBinary:{i}"); + item["ColumnDate"] = EpocDate; + item["ColumnDateTime2"] = now; + item["ColumnTime"] = EpocDate.AddHours(5).AddMinutes(7).AddSeconds(12).TimeOfDay; + item["ColumnTimeStamp"] = now; + item["ColumnYear"] = Convert.ToInt16(now.Year); + //item["ColumnGeometry"] = Encoding.Default.GetBytes($"POLYGON ((0 0; 50 0; 50 50; 0 50; 0 0))"); + //item["ColumnLineString"] = Encoding.Default.GetBytes($"LINESTRING (-122.36 47.656; -122.343 47.656)"); + //item["ColumnMultiLineString"] = Encoding.Default.GetBytes($"ColumnMultiLineString:{i}"); + //item["ColumnMultiPoint"] = Encoding.Default.GetBytes($"ColumnMultiPoint:{i}"); + //item["ColumnMultiPolygon"] = Encoding.Default.GetBytes($"ColumnMultiPolygon:{i}"); + //item["ColumnPoint"] = Encoding.Default.GetBytes($"ColumnPoint:{i}"); + //item["ColumnPolygon"] = Encoding.Default.GetBytes($"ColumnPolygon:{i}"); + item["ColumnBigint"] = Convert.ToInt64(i); + item["ColumnDecimal"] = Convert.ToDecimal(i); + item["ColumnDouble"] = Convert.ToDouble(i); + item["ColumnFloat"] = Convert.ToSingle(i); + item["ColumnInt2"] = i; + item["ColumnMediumInt"] = i; + item["ColumnReal"] = Convert.ToDouble(i); + item["ColumnSmallInt"] = Convert.ToInt16(i); + item["ColumnTinyInt"] = (SByte)i; + item["ColumnChar"] = "C"; + item["ColumnJson"] = "{\"Field1\": \"Value1\", \"Field2\": \"Value2\"}"; + item["ColumnNChar"] = "C"; + item["ColumnNVarChar"] = $"ColumnNVarChar:{i}"; + item["ColumnLongText"] = $"ColumnLongText:{i}"; + item["ColumnMediumText"] = $"ColumnMediumText:{i}"; + item["ColumnText"] = $"ColumText:{i}"; + item["ColumnTinyText"] = $"ColumnTinyText:{i}"; + item["ColumnBit"] = (UInt64)1; + tables.Add((ExpandoObject)item); + } + return tables; + } + + /// + /// + /// + /// + public static void UpdateCompleteTableAsExpandoObjectProperties(ExpandoObject table) + { + var now = DateTime.SpecifyKind( + DateTime.Parse(DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss.fffff")), + DateTimeKind.Unspecified); + var item = table as IDictionary; + item["ColumnVarchar"] = $"ColumnVarChar:{2}"; + item["ColumnInt"] = 2; + item["ColumnDecimal2"] = Convert.ToDecimal(2); + item["ColumnDateTime"] = EpocDate; + item["ColumnBlob"] = Encoding.Default.GetBytes($"ColumnBlob:{2}"); + item["ColumnBlobAsArray"] = Encoding.Default.GetBytes($"ColumnBlobAsArray:{2}"); + item["ColumnBinary"] = Encoding.Default.GetBytes($"ColumnBinary:{2}"); + item["ColumnLongBlob"] = Encoding.Default.GetBytes($"ColumnLongBlob:{2}"); + item["ColumnMediumBlob"] = Encoding.Default.GetBytes($"ColumnMediumBlob:{2}"); + item["ColumnTinyBlob"] = Encoding.Default.GetBytes($"ColumnTinyBlob:{2}"); + item["ColumnVarBinary"] = Encoding.Default.GetBytes($"ColumnVarBinary:{2}"); + item["ColumnDate"] = EpocDate; + item["ColumnDateTime2"] = now; + item["ColumnTime"] = EpocDate.AddHours(5).AddMinutes(7).AddSeconds(12).TimeOfDay; + item["ColumnTimeStamp"] = now; + item["ColumnYear"] = Convert.ToInt16(now.Year); + //item["ColumnGeometry"] = Encoding.Default.GetBytes($"POLYGON ((0 0; 50 0; 50 50; 0 50; 0 0))"); + //item["ColumnLineString"] = Encoding.Default.GetBytes($"LINESTRING (-122.36 47.656; -122.343 47.656)"); + //item["ColumnMultiLineString"] = Encoding.Default.GetBytes($"ColumnMultiLineString:{2}"); + //item["ColumnMultiPoint"] = Encoding.Default.GetBytes($"ColumnMultiPoint:{2}"); + //item["ColumnMultiPolygon"] = Encoding.Default.GetBytes($"ColumnMultiPolygon:{2}"); + //item["ColumnPoint"] = Encoding.Default.GetBytes($"ColumnPoint:{2}"); + //item["ColumnPolygon"] = Encoding.Default.GetBytes($"ColumnPolygon:{2}"); + item["ColumnBigint"] = Convert.ToInt64(2); + item["ColumnDecimal"] = Convert.ToDecimal(2); + item["ColumnDouble"] = Convert.ToDouble(2); + item["ColumnFloat"] = Convert.ToSingle(2); + item["ColumnInt2"] = 2; + item["ColumnMediumInt"] = 2; + item["ColumnReal"] = Convert.ToDouble(2); + item["ColumnSmallInt"] = Convert.ToInt16(2); + item["ColumnTinyInt"] = (SByte)2; + item["ColumnChar"] = "C"; + item["ColumnJson"] = "{\"Field1\": \"Value1\", \"Field2\": \"Value2\"}"; + item["ColumnNChar"] = "C"; + item["ColumnNVarChar"] = $"ColumnNVarChar:{2}"; + item["ColumnLongText"] = $"ColumnLongText:{2}"; + item["ColumnMediumText"] = $"ColumnMediumText:{2}"; + item["ColumnText"] = $"ColumText:{2}"; + item["ColumnTinyText"] = $"ColumnTinyText:{2}"; + item["ColumnBit"] = (UInt64)1; + } + #endregion #region NonIdentityCompleteTable /// - /// Creates a list of objects. + /// /// - /// The number of rows. - /// A list of objects. + /// + /// public static List CreateNonIdentityCompleteTables(int count) { var tables = new List(); @@ -439,9 +561,9 @@ public static List CreateNonIdentityCompleteTables(int } /// - /// Update the properties of instance. + /// /// - /// The instance to be updated. + /// public static void UpdateNonIdentityCompleteTableProperties(NonIdentityCompleteTable table) { var now = DateTime.SpecifyKind( @@ -491,10 +613,10 @@ public static void UpdateNonIdentityCompleteTableProperties(NonIdentityCompleteT } /// - /// Creates a list of objects represented as dynamics. + /// /// - /// The number of rows. - /// A list of objects represented as dynamics. + /// + /// public static List CreateNonIdentityCompleteTablesAsDynamics(int count) { var tables = new List(); @@ -553,9 +675,9 @@ public static List CreateNonIdentityCompleteTablesAsDynamics(int count) } /// - /// Update the properties of instance represented asy dynamic. + /// /// - /// The instance to be updated. + /// public static void UpdateNonIdentityCompleteTableAsDynamicProperties(dynamic table) { var now = DateTime.SpecifyKind( @@ -604,6 +726,120 @@ public static void UpdateNonIdentityCompleteTableAsDynamicProperties(dynamic tab table.ColumnBit = (UInt64)1; } + /// + /// + /// + /// + /// + public static List CreateNonIdentityCompleteTablesAsExpandoObjects(int count) + { + var tables = new List(); + var now = DateTime.SpecifyKind( + DateTime.Parse(DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss.fffff")), + DateTimeKind.Unspecified); + for (var i = 0; i < count; i++) + { + var item = new ExpandoObject() as IDictionary; + item["Id"] = (long)(i + 1); + item["ColumnVarchar"] = $"ColumnVarChar:{i}"; + item["ColumnInt"] = i; + item["ColumnDecimal2"] = Convert.ToDecimal(i); + item["ColumnDateTime"] = EpocDate; + item["ColumnBlob"] = Encoding.Default.GetBytes($"ColumnBlob:{i}"); + item["ColumnBlobAsArray"] = Encoding.Default.GetBytes($"ColumnBlobAsArray:{i}"); + item["ColumnBinary"] = Encoding.Default.GetBytes($"ColumnBinary:{i}"); + item["ColumnLongBlob"] = Encoding.Default.GetBytes($"ColumnLongBlob:{i}"); + item["ColumnMediumBlob"] = Encoding.Default.GetBytes($"ColumnMediumBlob:{i}"); + item["ColumnTinyBlob"] = Encoding.Default.GetBytes($"ColumnTinyBlob:{i}"); + item["ColumnVarBinary"] = Encoding.Default.GetBytes($"ColumnVarBinary:{i}"); + item["ColumnDate"] = EpocDate; + item["ColumnDateTime2"] = now; + item["ColumnTime"] = EpocDate.AddHours(5).AddMinutes(7).AddSeconds(12).TimeOfDay; + item["ColumnTimeStamp"] = now; + item["ColumnYear"] = Convert.ToInt16(now.Year); + //item["ColumnGeometry"] = Encoding.Default.GetBytes($"POLYGON ((0 0; 50 0; 50 50; 0 50; 0 0))"); + //item["ColumnLineString"] = Encoding.Default.GetBytes($"LINESTRING (-122.36 47.656; -122.343 47.656)"); + //item["ColumnMultiLineString"] = Encoding.Default.GetBytes($"ColumnMultiLineString:{i}"); + //item["ColumnMultiPoint"] = Encoding.Default.GetBytes($"ColumnMultiPoint:{i}"); + //item["ColumnMultiPolygon"] = Encoding.Default.GetBytes($"ColumnMultiPolygon:{i}"); + //item["ColumnPoint"] = Encoding.Default.GetBytes($"ColumnPoint:{i}"); + //item["ColumnPolygon"] = Encoding.Default.GetBytes($"ColumnPolygon:{i}"); + item["ColumnBigint"] = Convert.ToInt64(i); + item["ColumnDecimal"] = Convert.ToDecimal(i); + item["ColumnDouble"] = Convert.ToDouble(i); + item["ColumnFloat"] = Convert.ToSingle(i); + item["ColumnInt2"] = i; + item["ColumnMediumInt"] = i; + item["ColumnReal"] = Convert.ToDouble(i); + item["ColumnSmallInt"] = Convert.ToInt16(i); + item["ColumnTinyInt"] = (SByte)i; + item["ColumnChar"] = "C"; + item["ColumnJson"] = "{\"Field1\": \"Value1\", \"Field2\": \"Value2\"}"; + item["ColumnNChar"] = "C"; + item["ColumnNVarChar"] = $"ColumnNVarChar:{i}"; + item["ColumnLongText"] = $"ColumnLongText:{i}"; + item["ColumnMediumText"] = $"ColumnMediumText:{i}"; + item["ColumnText"] = $"ColumText:{i}"; + item["ColumnTinyText"] = $"ColumnTinyText:{i}"; + item["ColumnBit"] = (UInt64)1; + tables.Add((ExpandoObject)item); + } + return tables; + } + + /// + /// + /// + /// + public static void UpdateNonIdentityCompleteTableAsExpandoObjectProperties(ExpandoObject table) + { + var now = DateTime.SpecifyKind( + DateTime.Parse(DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss.fffff")), + DateTimeKind.Unspecified); + var item = table as IDictionary; + item["ColumnVarchar"] = $"ColumnVarChar:{2}"; + item["ColumnInt"] = 2; + item["ColumnDecimal2"] = Convert.ToDecimal(2); + item["ColumnDateTime"] = EpocDate; + item["ColumnBlob"] = Encoding.Default.GetBytes($"ColumnBlob:{2}"); + item["ColumnBlobAsArray"] = Encoding.Default.GetBytes($"ColumnBlobAsArray:{2}"); + item["ColumnBinary"] = Encoding.Default.GetBytes($"ColumnBinary:{2}"); + item["ColumnLongBlob"] = Encoding.Default.GetBytes($"ColumnLongBlob:{2}"); + item["ColumnMediumBlob"] = Encoding.Default.GetBytes($"ColumnMediumBlob:{2}"); + item["ColumnTinyBlob"] = Encoding.Default.GetBytes($"ColumnTinyBlob:{2}"); + item["ColumnVarBinary"] = Encoding.Default.GetBytes($"ColumnVarBinary:{2}"); + item["ColumnDate"] = EpocDate; + item["ColumnDateTime2"] = now; + item["ColumnTime"] = EpocDate.AddHours(5).AddMinutes(7).AddSeconds(12).TimeOfDay; + item["ColumnTimeStamp"] = now; + item["ColumnYear"] = Convert.ToInt16(now.Year); + //item["ColumnGeometry"] = Encoding.Default.GetBytes($"POLYGON ((0 0; 50 0; 50 50; 0 50; 0 0))"); + //item["ColumnLineString"] = Encoding.Default.GetBytes($"LINESTRING (-122.36 47.656; -122.343 47.656)"); + //item["ColumnMultiLineString"] = Encoding.Default.GetBytes($"ColumnMultiLineString:{2}"); + //item["ColumnMultiPoint"] = Encoding.Default.GetBytes($"ColumnMultiPoint:{2}"); + //item["ColumnMultiPolygon"] = Encoding.Default.GetBytes($"ColumnMultiPolygon:{2}"); + //item["ColumnPoint"] = Encoding.Default.GetBytes($"ColumnPoint:{2}"); + //item["ColumnPolygon"] = Encoding.Default.GetBytes($"ColumnPolygon:{2}"); + item["ColumnBigint"] = Convert.ToInt64(2); + item["ColumnDecimal"] = Convert.ToDecimal(2); + item["ColumnDouble"] = Convert.ToDouble(2); + item["ColumnFloat"] = Convert.ToSingle(2); + item["ColumnInt2"] = 2; + item["ColumnMediumInt"] = 2; + item["ColumnReal"] = Convert.ToDouble(2); + item["ColumnSmallInt"] = Convert.ToInt16(2); + item["ColumnTinyInt"] = (SByte)2; + item["ColumnChar"] = "C"; + item["ColumnJson"] = "{\"Field1\": \"Value1\", \"Field2\": \"Value2\"}"; + item["ColumnNChar"] = "C"; + item["ColumnNVarChar"] = $"ColumnNVarChar:{2}"; + item["ColumnLongText"] = $"ColumnLongText:{2}"; + item["ColumnMediumText"] = $"ColumnMediumText:{2}"; + item["ColumnText"] = $"ColumText:{2}"; + item["ColumnTinyText"] = $"ColumnTinyText:{2}"; + item["ColumnBit"] = (UInt64)1; + } + #endregion } } diff --git a/RepoDb.MySqlConnector/RepoDb.MySqlConnector.IntegrationTests/Operations/InsertAllTest.cs b/RepoDb.MySqlConnector/RepoDb.MySqlConnector.IntegrationTests/Operations/InsertAllTest.cs index 9271a58a4..967aab6fc 100644 --- a/RepoDb.MySqlConnector/RepoDb.MySqlConnector.IntegrationTests/Operations/InsertAllTest.cs +++ b/RepoDb.MySqlConnector/RepoDb.MySqlConnector.IntegrationTests/Operations/InsertAllTest.cs @@ -180,6 +180,30 @@ public void TestMySqlConnectionInsertAllViaTableNameAsDynamicsForIdentity() } } + [TestMethod] + public void TestMySqlConnectionInsertAllViaTableNameAsExpandoObjectsForIdentity() + { + // Setup + var tables = Helper.CreateCompleteTablesAsExpandoObjects(10); + + using (var connection = new MySqlConnection(Database.ConnectionString)) + { + // Act + var result = connection.InsertAll(ClassMappedNameCache.Get(), + tables); + + // Assert + Assert.AreEqual(tables.Count, connection.CountAll()); + Assert.AreEqual(tables.Count, result); + + // Act + var queryResult = connection.QueryAll(); + + // Assert + tables.ForEach(table => Helper.AssertMembersEquality(queryResult.First(e => e.Id == ((dynamic)table).Id), table)); + } + } + [TestMethod] public void TestMySqlConnectionInsertAllViaTableNameForNonIdentity() { @@ -228,6 +252,30 @@ public void TestMySqlConnectionInsertAllViaTableNameAsDynamicsForNonIdentity() } } + [TestMethod] + public void TestMySqlConnectionInsertAllViaTableNameAsExpandoObjectsForNonIdentity() + { + // Setup + var tables = Helper.CreateNonIdentityCompleteTablesAsExpandoObjects(10); + + using (var connection = new MySqlConnection(Database.ConnectionString)) + { + // Act + var result = connection.InsertAll(ClassMappedNameCache.Get(), + tables); + + // Assert + Assert.AreEqual(tables.Count, connection.CountAll()); + Assert.AreEqual(tables.Count, result); + + // Act + var queryResult = connection.QueryAll(); + + // Assert + tables.ForEach(table => Helper.AssertMembersEquality(queryResult.First(e => e.Id == ((dynamic)table).Id), table)); + } + } + #endregion #region Async @@ -280,6 +328,30 @@ public void TestMySqlConnectionInsertAllAsyncViaTableNameAsDynamicsForIdentity() } } + [TestMethod] + public void TestMySqlConnectionInsertAllAsyncViaTableNameAsExpandoObjectsForIdentity() + { + // Setup + var tables = Helper.CreateCompleteTablesAsExpandoObjects(10); + + using (var connection = new MySqlConnection(Database.ConnectionString)) + { + // Act + var result = connection.InsertAllAsync(ClassMappedNameCache.Get(), + tables).Result; + + // Assert + Assert.AreEqual(tables.Count, connection.CountAll()); + Assert.AreEqual(tables.Count, result); + + // Act + var queryResult = connection.QueryAll(); + + // Assert + tables.ForEach(table => Helper.AssertMembersEquality(queryResult.First(e => e.Id == ((dynamic)table).Id), table)); + } + } + [TestMethod] public void TestMySqlConnectionInsertAllViaTableNameAsyncForNonIdentity() { @@ -328,6 +400,30 @@ public void TestMySqlConnectionInsertAllAsyncViaTableNameAsDynamicsForNonIdentit } } + [TestMethod] + public void TestMySqlConnectionInsertAllAsyncViaTableNameAsExpandoObjectsForNonIdentity() + { + // Setup + var tables = Helper.CreateNonIdentityCompleteTablesAsExpandoObjects(10); + + using (var connection = new MySqlConnection(Database.ConnectionString)) + { + // Act + var result = connection.InsertAllAsync(ClassMappedNameCache.Get(), + tables).Result; + + // Assert + Assert.AreEqual(tables.Count, connection.CountAll()); + Assert.AreEqual(tables.Count, result); + + // Act + var queryResult = connection.QueryAll(); + + // Assert + tables.ForEach(table => Helper.AssertMembersEquality(queryResult.First(e => e.Id == ((dynamic)table).Id), table)); + } + } + #endregion #endregion diff --git a/RepoDb.MySqlConnector/RepoDb.MySqlConnector.IntegrationTests/Operations/InsertTest.cs b/RepoDb.MySqlConnector/RepoDb.MySqlConnector.IntegrationTests/Operations/InsertTest.cs index 08efcc036..b1767091d 100644 --- a/RepoDb.MySqlConnector/RepoDb.MySqlConnector.IntegrationTests/Operations/InsertTest.cs +++ b/RepoDb.MySqlConnector/RepoDb.MySqlConnector.IntegrationTests/Operations/InsertTest.cs @@ -187,6 +187,31 @@ public void TestMySqlConnectionInsertViaTableNameAsDynamicForIdentity() } } + [TestMethod] + public void TestMySqlConnectionInsertViaTableNameAsExpandoObjectForIdentity() + { + // Setup + var table = Helper.CreateCompleteTablesAsExpandoObjects(1).First(); + + using (var connection = new MySqlConnection(Database.ConnectionString)) + { + // Act + var result = connection.Insert(ClassMappedNameCache.Get(), + table); + + // Assert + Assert.AreEqual(1, connection.CountAll()); + Assert.IsTrue(Convert.ToInt64(result) > 0); + + // Act + var queryResult = connection.Query(result); + + // Assert + Assert.AreEqual(1, queryResult?.Count()); + Helper.AssertMembersEquality(queryResult.First(), table); + } + } + [TestMethod] public void TestMySqlConnectionInsertViaTableNameForNonIdentity() { @@ -237,6 +262,31 @@ public void TestMySqlConnectionInsertViaTableNameAsDynamicForNonIdentity() } } + [TestMethod] + public void TestMySqlConnectionInsertViaTableNameAsExpandoObjectForNonIdentity() + { + // Setup + var table = Helper.CreateNonIdentityCompleteTablesAsExpandoObjects(1).First(); + + using (var connection = new MySqlConnection(Database.ConnectionString)) + { + // Act + var result = connection.Insert(ClassMappedNameCache.Get(), + table); + + // Assert + Assert.AreEqual(1, connection.CountAll()); + Assert.IsTrue(Convert.ToInt64(result) > 0); + + // Act + var queryResult = connection.Query(result); + + // Assert + Assert.AreEqual(1, queryResult?.Count()); + Helper.AssertMembersEquality(queryResult.First(), table); + } + } + #endregion #region Async @@ -291,6 +341,31 @@ public void TestMySqlConnectionInsertAsyncViaTableNameAsDynamicForIdentity() } } + [TestMethod] + public void TestMySqlConnectionInsertAsyncViaTableNameAsExpandoObjectForIdentity() + { + // Setup + var table = Helper.CreateCompleteTablesAsExpandoObjects(1).First(); + + using (var connection = new MySqlConnection(Database.ConnectionString)) + { + // Act + var result = connection.InsertAsync(ClassMappedNameCache.Get(), + table).Result; + + // Assert + Assert.AreEqual(1, connection.CountAll()); + Assert.IsTrue(Convert.ToInt64(result) > 0); + + // Act + var queryResult = connection.Query(result); + + // Assert + Assert.AreEqual(1, queryResult?.Count()); + Helper.AssertMembersEquality(queryResult.First(), table); + } + } + [TestMethod] public void TestMySqlConnectionInsertViaTableNameAsyncForNonIdentity() { @@ -341,6 +416,31 @@ public void TestMySqlConnectionInsertAsyncViaTableNameAsDynamicForNonIdentity() } } + [TestMethod] + public void TestMySqlConnectionInsertAsyncViaTableNameAsExpandoObjectForNonIdentity() + { + // Setup + var table = Helper.CreateNonIdentityCompleteTablesAsExpandoObjects(1).First(); + + using (var connection = new MySqlConnection(Database.ConnectionString)) + { + // Act + var result = connection.InsertAsync(ClassMappedNameCache.Get(), + table).Result; + + // Assert + Assert.AreEqual(1, connection.CountAll()); + Assert.IsTrue(Convert.ToInt64(result) > 0); + + // Act + var queryResult = connection.Query(result); + + // Assert + Assert.AreEqual(1, queryResult?.Count()); + Helper.AssertMembersEquality(queryResult.First(), table); + } + } + #endregion #endregion diff --git a/RepoDb.MySqlConnector/RepoDb.MySqlConnector.IntegrationTests/Operations/MergeAllTest.cs b/RepoDb.MySqlConnector/RepoDb.MySqlConnector.IntegrationTests/Operations/MergeAllTest.cs index 92c0cf30f..ee0255748 100644 --- a/RepoDb.MySqlConnector/RepoDb.MySqlConnector.IntegrationTests/Operations/MergeAllTest.cs +++ b/RepoDb.MySqlConnector/RepoDb.MySqlConnector.IntegrationTests/Operations/MergeAllTest.cs @@ -1,9 +1,10 @@ using Microsoft.VisualStudio.TestTools.UnitTesting; -using RepoDb.Extensions; -using System.Linq; -using RepoDb.MySqlConnector.IntegrationTests.Setup; using MySqlConnector; +using RepoDb.Extensions; using RepoDb.MySqlConnector.IntegrationTests.Models; +using RepoDb.MySqlConnector.IntegrationTests.Setup; +using System.Collections.Generic; +using System.Linq; namespace RepoDb.MySqlConnector.IntegrationTests.Operations { @@ -392,6 +393,31 @@ public void TestMySqlConnectionMergeAllViaTableNameForIdentityForEmptyTable() } } + [TestMethod] + public void TestMySqlConnectionMergeAllAsExpandoObjectViaTableNameForIdentityForEmptyTable() + { + // Setup + var tables = Helper.CreateCompleteTablesAsExpandoObjects(10); + + using (var connection = new MySqlConnection(Database.ConnectionString)) + { + // Act + var result = connection.MergeAll(ClassMappedNameCache.Get(), + tables); + + // Assert + Assert.AreEqual(tables.Count, connection.CountAll()); + Assert.AreEqual(tables.Count, result); + + // Act + var queryResult = connection.QueryAll(); + + // Assert + Assert.AreEqual(tables.Count, queryResult.Count()); + tables.ForEach(table => Helper.AssertMembersEquality(queryResult.First(e => e.Id == ((dynamic)table).Id), table)); + } + } + [TestMethod] public void TestMySqlConnectionMergeAllViaTableNameForIdentityForNonEmptyTable() { @@ -419,6 +445,34 @@ public void TestMySqlConnectionMergeAllViaTableNameForIdentityForNonEmptyTable() } } + [TestMethod] + public void TestMySqlConnectionMergeAllAsExpandoObjectViaTableNameForIdentityForNonEmptyTable() + { + // Setup + var entities = Database.CreateCompleteTables(10).AsList(); + + using (var connection = new MySqlConnection(Database.ConnectionString)) + { + // Setup + var tables = Helper.CreateCompleteTablesAsExpandoObjects(10).AsList(); + tables.ForEach(e => ((IDictionary)e)["Id"] = entities[tables.IndexOf(e)].Id); + + // Act + var result = connection.MergeAll(ClassMappedNameCache.Get(), + tables); + + // Assert + Assert.AreEqual(entities.Count, connection.CountAll()); + + // Act + var queryResult = connection.QueryAll(); + + // Assert + Assert.AreEqual(entities.Count, queryResult.Count()); + tables.ForEach(table => Helper.AssertMembersEquality(queryResult.First(e => e.Id == ((dynamic)table).Id), table)); + } + } + [TestMethod] public void TestMySqlConnectionMergeAllViaTableNameForIdentityForNonEmptyTableWithQualifiers() { @@ -732,6 +786,31 @@ public void TestMySqlConnectionMergeAllViaTableNameAsyncForIdentityForEmptyTable } } + [TestMethod] + public void TestMySqlConnectionMergeAllAsyncAsExpandoObjectViaTableNameForIdentityForEmptyTable() + { + // Setup + var tables = Helper.CreateCompleteTablesAsExpandoObjects(10); + + using (var connection = new MySqlConnection(Database.ConnectionString)) + { + // Act + var result = connection.MergeAllAsync(ClassMappedNameCache.Get(), + tables).Result; + + // Assert + Assert.AreEqual(tables.Count, connection.CountAll()); + Assert.AreEqual(tables.Count, result); + + // Act + var queryResult = connection.QueryAll(); + + // Assert + Assert.AreEqual(tables.Count, queryResult.Count()); + tables.ForEach(table => Helper.AssertMembersEquality(queryResult.First(e => e.Id == ((dynamic)table).Id), table)); + } + } + [TestMethod] public void TestMySqlConnectionMergeAllViaTableNameAsyncForIdentityForNonEmptyTable() { @@ -759,6 +838,34 @@ public void TestMySqlConnectionMergeAllViaTableNameAsyncForIdentityForNonEmptyTa } } + [TestMethod] + public void TestMySqlConnectionMergeAllAsyncAsExpandoObjectViaTableNameForIdentityForNonEmptyTable() + { + // Setup + var entities = Database.CreateCompleteTables(10).AsList(); + + using (var connection = new MySqlConnection(Database.ConnectionString)) + { + // Setup + var tables = Helper.CreateCompleteTablesAsExpandoObjects(10).AsList(); + tables.ForEach(e => ((IDictionary)e)["Id"] = entities[tables.IndexOf(e)].Id); + + // Act + var result = connection.MergeAllAsync(ClassMappedNameCache.Get(), + tables).Result; + + // Assert + Assert.AreEqual(entities.Count, connection.CountAll()); + + // Act + var queryResult = connection.QueryAll(); + + // Assert + Assert.AreEqual(entities.Count, queryResult.Count()); + tables.ForEach(table => Helper.AssertMembersEquality(queryResult.First(e => e.Id == ((dynamic)table).Id), table)); + } + } + [TestMethod] public void TestMySqlConnectionMergeAllViaTableNameAsyncForIdentityForNonEmptyTableWithQualifiers() { diff --git a/RepoDb.MySqlConnector/RepoDb.MySqlConnector.IntegrationTests/Operations/MergeTest.cs b/RepoDb.MySqlConnector/RepoDb.MySqlConnector.IntegrationTests/Operations/MergeTest.cs index 639bbc2a0..b1cb393c1 100644 --- a/RepoDb.MySqlConnector/RepoDb.MySqlConnector.IntegrationTests/Operations/MergeTest.cs +++ b/RepoDb.MySqlConnector/RepoDb.MySqlConnector.IntegrationTests/Operations/MergeTest.cs @@ -3,6 +3,7 @@ using RepoDb.MySqlConnector.IntegrationTests.Models; using RepoDb.MySqlConnector.IntegrationTests.Setup; using System; +using System.Collections.Generic; using System.Linq; namespace RepoDb.MySqlConnector.IntegrationTests.Operations @@ -212,6 +213,25 @@ public void TestMySqlConnectionMergeViaTableNameForIdentityForEmptyTable() } } + [TestMethod] + public void TestMySqlConnectionMergeAsExpandoObjectViaTableNameForIdentityForEmptyTable() + { + // Setup + var table = Helper.CreateCompleteTablesAsExpandoObjects(1).First(); + + using (var connection = new MySqlConnection(Database.ConnectionString)) + { + // Act + var result = connection.Merge(ClassMappedNameCache.Get(), + table); + var queryResult = connection.Query(result); + + // Assert + Assert.AreEqual(1, connection.CountAll()); + Helper.AssertMembersEquality(queryResult.First(), table); + } + } + [TestMethod] public void TestMySqlConnectionMergeViaTableNameForIdentityForNonEmptyTable() { @@ -239,6 +259,34 @@ public void TestMySqlConnectionMergeViaTableNameForIdentityForNonEmptyTable() } } + [TestMethod] + public void TestMySqlConnectionMergeAsExpandoObjectViaTableNameForIdentityForNonEmptyTable() + { + // Setup + var table = Database.CreateCompleteTables(1).First(); + + using (var connection = new MySqlConnection(Database.ConnectionString)) + { + // Setup + var entity = Helper.CreateCompleteTablesAsExpandoObjects(1).First(); + ((IDictionary)entity)["Id"] = table.Id; + + // Act + var result = connection.Merge(ClassMappedNameCache.Get(), + entity); + + // Assert + Assert.AreEqual(1, connection.CountAll()); + Assert.AreEqual(table.Id, result); + + // Act + var queryResult = connection.Query(result); + + // Assert + Helper.AssertMembersEquality(queryResult.First(), entity); + } + } + [TestMethod] public void TestMySqlConnectionMergeViaTableNameForIdentityForNonEmptyTableWithQualifiers() { @@ -379,6 +427,25 @@ public void TestMySqlConnectionMergeAsyncViaTableNameForIdentityForEmptyTable() } } + [TestMethod] + public void TestMySqlConnectionMergeAsyncAsExpandoObjectViaTableNameForIdentityForEmptyTable() + { + // Setup + var table = Helper.CreateCompleteTablesAsExpandoObjects(1).First(); + + using (var connection = new MySqlConnection(Database.ConnectionString)) + { + // Act + var result = connection.MergeAsync(ClassMappedNameCache.Get(), + table).Result; + var queryResult = connection.Query(result); + + // Assert + Assert.AreEqual(1, connection.CountAll()); + Helper.AssertMembersEquality(queryResult.First(), table); + } + } + [TestMethod] public void TestMySqlConnectionMergeAsyncViaTableNameForIdentityForNonEmptyTable() { @@ -406,6 +473,34 @@ public void TestMySqlConnectionMergeAsyncViaTableNameForIdentityForNonEmptyTable } } + [TestMethod] + public void TestMySqlConnectionMergeAsyncAsExpandoObjectViaTableNameForIdentityForNonEmptyTable() + { + // Setup + var table = Database.CreateCompleteTables(1).First(); + + using (var connection = new MySqlConnection(Database.ConnectionString)) + { + // Setup + var entity = Helper.CreateCompleteTablesAsExpandoObjects(1).First(); + ((IDictionary)entity)["Id"] = table.Id; + + // Act + var result = connection.MergeAsync(ClassMappedNameCache.Get(), + entity).Result; + + // Assert + Assert.AreEqual(1, connection.CountAll()); + Assert.AreEqual(table.Id, result); + + // Act + var queryResult = connection.Query(result); + + // Assert + Helper.AssertMembersEquality(queryResult.First(), entity); + } + } + [TestMethod] public void TestMySqlConnectionMergeAsyncViaTableNameForIdentityForNonEmptyTableWithQualifiers() { diff --git a/RepoDb.MySqlConnector/RepoDb.MySqlConnector.IntegrationTests/Operations/UpdateAllTest.cs b/RepoDb.MySqlConnector/RepoDb.MySqlConnector.IntegrationTests/Operations/UpdateAllTest.cs index 556a5c67c..382f4e245 100644 --- a/RepoDb.MySqlConnector/RepoDb.MySqlConnector.IntegrationTests/Operations/UpdateAllTest.cs +++ b/RepoDb.MySqlConnector/RepoDb.MySqlConnector.IntegrationTests/Operations/UpdateAllTest.cs @@ -3,6 +3,7 @@ using RepoDb.Extensions; using RepoDb.MySqlConnector.IntegrationTests.Models; using RepoDb.MySqlConnector.IntegrationTests.Setup; +using System.Collections.Generic; using System.Linq; namespace RepoDb.MySqlConnector.IntegrationTests.Operations @@ -117,6 +118,34 @@ public void TestMySqlConnectionUpdateAllViaTableName() } } + [TestMethod] + public void TestMySqlConnectionUpdateAllViaTableNameAsExpandoObjects() + { + // Setup + var entities = Database.CreateCompleteTables(10).AsList(); + + using (var connection = new MySqlConnection(Database.ConnectionString)) + { + // Setup + var tables = Helper.CreateCompleteTablesAsExpandoObjects(10).AsList(); + tables.ForEach(e => ((IDictionary)e)["Id"] = entities[tables.IndexOf(e)].Id); + + // Act + var result = connection.UpdateAll(ClassMappedNameCache.Get(), + tables); + + // Assert + Assert.AreEqual(10, result); + + // Act + var queryResult = connection.QueryAll(); + + // Assert + tables.AsList().ForEach(table => + Helper.AssertMembersEquality(queryResult.First(e => e.Id == ((dynamic)table).Id), table)); + } + } + #endregion #region Async @@ -147,6 +176,34 @@ public void TestMySqlConnectionUpdateAllAsyncViaTableName() } } + [TestMethod] + public void TestMySqlConnectionUpdateAllAsyncViaTableNameAsExpandoObjects() + { + // Setup + var entities = Database.CreateCompleteTables(10).AsList(); + + using (var connection = new MySqlConnection(Database.ConnectionString)) + { + // Setup + var tables = Helper.CreateCompleteTablesAsExpandoObjects(10).AsList(); + tables.ForEach(e => ((IDictionary)e)["Id"] = entities[tables.IndexOf(e)].Id); + + // Act + var result = connection.UpdateAllAsync(ClassMappedNameCache.Get(), + tables).Result; + + // Assert + Assert.AreEqual(10, result); + + // Act + var queryResult = connection.QueryAll(); + + // Assert + tables.AsList().ForEach(table => + Helper.AssertMembersEquality(queryResult.First(e => e.Id == ((dynamic)table).Id), table)); + } + } + #endregion #endregion diff --git a/RepoDb.MySqlConnector/RepoDb.MySqlConnector.IntegrationTests/Operations/UpdateTest.cs b/RepoDb.MySqlConnector/RepoDb.MySqlConnector.IntegrationTests/Operations/UpdateTest.cs index ea3ba6119..2d5a75b89 100644 --- a/RepoDb.MySqlConnector/RepoDb.MySqlConnector.IntegrationTests/Operations/UpdateTest.cs +++ b/RepoDb.MySqlConnector/RepoDb.MySqlConnector.IntegrationTests/Operations/UpdateTest.cs @@ -2,6 +2,7 @@ using MySqlConnector; using RepoDb.MySqlConnector.IntegrationTests.Models; using RepoDb.MySqlConnector.IntegrationTests.Setup; +using System.Collections.Generic; using System.Linq; namespace RepoDb.MySqlConnector.IntegrationTests.Operations @@ -360,6 +361,33 @@ public void TestMySqlConnectionUpdateAsyncViaQueryGroup() #region Sync + [TestMethod] + public void TestMySqlConnectionUpdateViaTableNameViaExpandoObject() + { + // Setup + var table = Database.CreateCompleteTables(1).First(); + + using (var connection = new MySqlConnection(Database.ConnectionString)) + { + // Setup + var entity = Helper.CreateCompleteTablesAsExpandoObjects(1).First(); + ((IDictionary)entity)["Id"] = table.Id; + + // Act + var result = connection.Update(ClassMappedNameCache.Get(), + entity); + + // Assert + Assert.AreEqual(1, result); + + // Act + var queryResult = connection.Query(table.Id).First(); + + // Assert + Helper.AssertMembersEquality(queryResult, entity); + } + } + [TestMethod] public void TestMySqlConnectionUpdateViaTableNameViaDataEntity() { @@ -372,13 +400,14 @@ public void TestMySqlConnectionUpdateViaTableNameViaDataEntity() Helper.UpdateCompleteTableProperties(table); // Act - var result = DbConnectionExtension.Update(connection, ClassMappedNameCache.Get(), table); + var result = connection.Update(ClassMappedNameCache.Get(), + table); // Assert Assert.AreEqual(1, result); // Act - var queryResult = connection.Query(ClassMappedNameCache.Get(), table.Id).First(); + var queryResult = connection.Query(table.Id).First(); // Assert Helper.AssertPropertiesEquality(table, queryResult); @@ -397,13 +426,15 @@ public void TestMySqlConnectionUpdateViaTableNameViaDynamic() Helper.UpdateCompleteTableProperties(table); // Act - var result = DbConnectionExtension.Update(connection, ClassMappedNameCache.Get(), table, new { table.Id }); + var result = connection.Update(ClassMappedNameCache.Get(), + table, + new { table.Id }); // Assert Assert.AreEqual(1, result); // Act - var queryResult = connection.Query(ClassMappedNameCache.Get(), table.Id).First(); + var queryResult = connection.Query(table.Id).First(); // Assert Helper.AssertPropertiesEquality(table, queryResult); @@ -422,13 +453,15 @@ public void TestMySqlConnectionUpdateViaTableNameViaQueryField() Helper.UpdateCompleteTableProperties(table); // Act - var result = DbConnectionExtension.Update(connection, ClassMappedNameCache.Get(), table, new QueryField("Id", table.Id)); + var result = connection.Update(ClassMappedNameCache.Get(), + table, + new QueryField("Id", table.Id)); // Assert Assert.AreEqual(1, result); // Act - var queryResult = connection.Query(ClassMappedNameCache.Get(), table.Id).First(); + var queryResult = connection.Query(table.Id).First(); // Assert Helper.AssertPropertiesEquality(table, queryResult); @@ -452,13 +485,15 @@ public void TestMySqlConnectionUpdateViaTableNameViaQueryFields() Helper.UpdateCompleteTableProperties(table); // Act - var result = DbConnectionExtension.Update(connection, ClassMappedNameCache.Get(), table, queryFields); + var result = connection.Update(ClassMappedNameCache.Get(), + table, + queryFields); // Assert Assert.AreEqual(1, result); // Act - var queryResult = connection.Query(ClassMappedNameCache.Get(), table.Id).First(); + var queryResult = connection.Query(table.Id).First(); // Assert Helper.AssertPropertiesEquality(table, queryResult); @@ -483,13 +518,15 @@ public void TestMySqlConnectionUpdateViaTableNameViaQueryGroup() Helper.UpdateCompleteTableProperties(table); // Act - var result = DbConnectionExtension.Update(connection, ClassMappedNameCache.Get(), table, queryGroup); + var result = connection.Update(ClassMappedNameCache.Get(), + table, + queryGroup); // Assert Assert.AreEqual(1, result); // Act - var queryResult = connection.Query(ClassMappedNameCache.Get(), table.Id).First(); + var queryResult = connection.Query(table.Id).First(); // Assert Helper.AssertPropertiesEquality(table, queryResult); @@ -500,6 +537,33 @@ public void TestMySqlConnectionUpdateViaTableNameViaQueryGroup() #region Async + [TestMethod] + public void TestMySqlConnectionUpdateAsyncViaTableNameViaExpandoObject() + { + // Setup + var table = Database.CreateCompleteTables(1).First(); + + using (var connection = new MySqlConnection(Database.ConnectionString)) + { + // Setup + var entity = Helper.CreateCompleteTablesAsExpandoObjects(1).First(); + ((IDictionary)entity)["Id"] = table.Id; + + // Act + var result = connection.UpdateAsync(ClassMappedNameCache.Get(), + entity).Result; + + // Assert + Assert.AreEqual(1, result); + + // Act + var queryResult = connection.Query(table.Id).First(); + + // Assert + Helper.AssertMembersEquality(queryResult, entity); + } + } + [TestMethod] public void TestMySqlConnectionUpdateAsyncViaTableNameViaDataEntity() { @@ -518,7 +582,7 @@ public void TestMySqlConnectionUpdateAsyncViaTableNameViaDataEntity() Assert.AreEqual(1, result); // Act - var queryResult = connection.Query(ClassMappedNameCache.Get(), table.Id).First(); + var queryResult = connection.Query(table.Id).First(); // Assert Helper.AssertPropertiesEquality(table, queryResult); @@ -543,7 +607,7 @@ public void TestMySqlConnectionUpdateAsyncViaTableNameViaDynamic() Assert.AreEqual(1, result); // Act - var queryResult = connection.Query(ClassMappedNameCache.Get(), table.Id).First(); + var queryResult = connection.Query(table.Id).First(); // Assert Helper.AssertPropertiesEquality(table, queryResult); @@ -568,7 +632,7 @@ public void TestMySqlConnectionUpdateAsyncViaTableNameViaQueryField() Assert.AreEqual(1, result); // Act - var queryResult = connection.Query(ClassMappedNameCache.Get(), table.Id).First(); + var queryResult = connection.Query(table.Id).First(); // Assert Helper.AssertPropertiesEquality(table, queryResult); @@ -598,7 +662,7 @@ public void TestMySqlConnectionUpdateAsyncViaTableNameViaQueryFields() Assert.AreEqual(1, result); // Act - var queryResult = connection.Query(ClassMappedNameCache.Get(), table.Id).First(); + var queryResult = connection.Query(table.Id).First(); // Assert Helper.AssertPropertiesEquality(table, queryResult); @@ -629,7 +693,7 @@ public void TestMySqlConnectionUpdateAsyncViaTableNameViaQueryGroup() Assert.AreEqual(1, result); // Act - var queryResult = connection.Query(ClassMappedNameCache.Get(), table.Id).First(); + var queryResult = connection.Query(table.Id).First(); // Assert Helper.AssertPropertiesEquality(table, queryResult);