Skip to content

Commit acaf01d

Browse files
authored
Merge pull request #50 from dotnetprojects/Sqlite
ChangeColumn test
2 parents c8c85a6 + 42d0d82 commit acaf01d

File tree

3 files changed

+82
-4
lines changed

3 files changed

+82
-4
lines changed

src/Migrator.Tests/Providers/SQLite/SQLiteTransformationProvider_AddColumnTests.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public class SQLiteTransformationProvider_AddColumnTests : SQLiteTransformationP
1818
/// We use a NULL column as new column here. NOT NULL will fail as expected. The user should handle that on his own.
1919
/// </summary>
2020
[Test]
21-
public void RemovePrimaryKey_HavingColumnPropertyUniqueAndIndex_RebuildSucceeds()
21+
public void AddColumn_HavingColumnPropertyUniqueAndIndex_RebuildSucceeds()
2222
{
2323
// Arrange
2424
var testTableName = "MyDefaultTestTable";
@@ -38,8 +38,8 @@ public void RemovePrimaryKey_HavingColumnPropertyUniqueAndIndex_RebuildSucceeds(
3838
_provider.ExecuteNonQuery($"INSERT INTO {testTableName} ({propertyName1}, {propertyName2}) VALUES (1, 2)");
3939

4040
// Act
41-
((SQLiteTransformationProvider)_provider).AddColumn(table: testTableName, new Column(newColumn, DbType.String, ColumnProperty.Null));
42-
_provider.ExecuteNonQuery($"INSERT INTO {testTableName} ({propertyName1}, {propertyName2}, {newColumn}) VALUES (2, 3, 'Hello')");
41+
_provider.AddColumn(table: testTableName, new Column(newColumn, DbType.String, ColumnProperty.Null));
42+
_provider.ExecuteNonQuery($"INSERT INTO {testTableName} ({propertyName1}, {propertyName2}, {newColumn}) VALUES (2, 3, 'Hello')");
4343

4444
// Assert
4545
using var command = _provider.GetCommand();
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
using System.Data;
2+
using System.Linq;
3+
using DotNetProjects.Migrator.Framework;
4+
using DotNetProjects.Migrator.Providers.Impl.SQLite;
5+
using Migrator.Framework;
6+
using Migrator.Tests.Providers.SQLite.Base;
7+
using NUnit.Framework;
8+
using NUnit.Framework.Legacy;
9+
10+
namespace Migrator.Tests.Providers.SQLite;
11+
12+
[TestFixture]
13+
[Category("SQLite")]
14+
public class SQLiteTransformationProvider_ChangeTests : SQLiteTransformationProviderTestBase
15+
{
16+
[Test]
17+
public void ChangeColumn_HavingColumnPropertyUniqueAndIndex_RebuildSucceeds()
18+
{
19+
// Arrange
20+
var testTableName = "MyDefaultTestTable";
21+
var propertyName1 = "Color1";
22+
var propertyName2 = "Color2";
23+
var indexName = "MyIndexName";
24+
25+
_provider.AddTable(testTableName,
26+
new Column(propertyName1, DbType.Int32, ColumnProperty.PrimaryKey),
27+
new Column(propertyName2, DbType.Int32, ColumnProperty.NotNull)
28+
);
29+
30+
_provider.AddIndex(indexName, testTableName, [propertyName1, propertyName2]);
31+
var tableInfoBefore = ((SQLiteTransformationProvider)_provider).GetSQLiteTableInfo(testTableName);
32+
33+
_provider.ExecuteNonQuery($"INSERT INTO {testTableName} ({propertyName1}, {propertyName2}) VALUES (1, 2)");
34+
35+
// Act
36+
_provider.ChangeColumn(table: testTableName, new Column(propertyName2, DbType.String, ColumnProperty.Unique | ColumnProperty.Null));
37+
_provider.ExecuteNonQuery($"INSERT INTO {testTableName} ({propertyName1}, {propertyName2}) VALUES (2, 3)");
38+
39+
// Assert
40+
using var command = _provider.GetCommand();
41+
using var reader = _provider.ExecuteQuery(command, $"SELECT COUNT(*) as Count from {testTableName}");
42+
reader.Read();
43+
var count = reader.GetInt32(reader.GetOrdinal("Count"));
44+
Assert.That(count, Is.EqualTo(2));
45+
46+
var tableInfoAfter = ((SQLiteTransformationProvider)_provider).GetSQLiteTableInfo(testTableName);
47+
48+
Assert.That(tableInfoBefore.Columns.Single(x => x.Name == propertyName1).ColumnProperty.HasFlag(ColumnProperty.PrimaryKey), Is.True);
49+
Assert.That(tableInfoBefore.Columns.Single(x => x.Name == propertyName2).ColumnProperty.HasFlag(ColumnProperty.Unique), Is.False);
50+
Assert.That(tableInfoBefore.Columns.Single(x => x.Name == propertyName2).ColumnProperty.HasFlag(ColumnProperty.NotNull), Is.True);
51+
Assert.That(tableInfoBefore.Columns.Single(x => x.Name == propertyName2).ColumnProperty.HasFlag(ColumnProperty.Null), Is.False);
52+
53+
Assert.That(tableInfoAfter.Columns.Single(x => x.Name == propertyName1).ColumnProperty.HasFlag(ColumnProperty.PrimaryKey), Is.True);
54+
Assert.That(tableInfoAfter.Columns.Single(x => x.Name == propertyName2).ColumnProperty.HasFlag(ColumnProperty.Unique), Is.True);
55+
Assert.That(tableInfoAfter.Columns.Single(x => x.Name == propertyName2).ColumnProperty.HasFlag(ColumnProperty.NotNull), Is.False);
56+
Assert.That(tableInfoAfter.Columns.Single(x => x.Name == propertyName2).ColumnProperty.HasFlag(ColumnProperty.Null), Is.True);
57+
58+
var indexAfter = tableInfoAfter.Indexes.Single();
59+
Assert.That(indexAfter.Name, Is.EqualTo(indexName));
60+
CollectionAssert.AreEquivalent(indexAfter.KeyColumns, new string[] { propertyName1, propertyName2 });
61+
}
62+
}
63+
64+
65+
66+
67+
68+
69+
70+
71+
72+
73+
74+

src/Migrator/Providers/Impl/SQLite/SQLiteTransformationProvider.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -540,12 +540,16 @@ public override void ChangeColumn(string table, Column column)
540540
}
541541

542542
var sqliteInfo = GetSQLiteTableInfo(table);
543+
543544
if (!sqliteInfo.ColumnMappings.Select(x => x.OldName).ToList().Contains(column.Name))
544545
{
545546
throw new Exception("Column does not exists.");
546547
}
547548

548-
sqliteInfo.Columns.Where(x => !x.Name.Equals(column.Name, StringComparison.InvariantCultureIgnoreCase));
549+
sqliteInfo.Columns = sqliteInfo.Columns
550+
.Where(x => !x.Name.Equals(column.Name, StringComparison.InvariantCultureIgnoreCase))
551+
.ToList();
552+
549553
sqliteInfo.Columns.Add(column);
550554

551555
RecreateTable(sqliteInfo);

0 commit comments

Comments
 (0)