Skip to content

Commit 3f7e504

Browse files
Ja bist du narrischJa bist du narrisch
authored andcommitted
SQLite: Added integrity tests, AddForeignKey Tests, PK composite tests, test base
1 parent decfbca commit 3f7e504

9 files changed

+275
-176
lines changed

src/Migrator.Tests/MigratorTestDates.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,6 @@ void SetUpCurrentVersion(long version, List<long> appliedVersions, bool assertRo
7474

7575
_migrator = new Migrator((ITransformationProvider)providerMock.MockInstance, Assembly.GetExecutingAssembly(), false);
7676

77-
// Enl�ve toutes les migrations trouv�e automatiquement
7877
_migrator.MigrationsTypes.Clear();
7978
_upCalled.Clear();
8079
_downCalled.Clear();
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
using DotNetProjects.Migrator.Providers.Impl.SQLite;
2+
using Migrator.Providers.SQLite;
3+
using Migrator.Tests.Settings;
4+
using NUnit.Framework;
5+
6+
namespace Migrator.Tests.Providers.SQLite.Base;
7+
8+
[TestFixture]
9+
[Category("SQLite")]
10+
public class SQLiteTransformationProviderTestBase : TransformationProviderBase
11+
{
12+
[SetUp]
13+
public void SetUp()
14+
{
15+
var configReader = new ConfigurationReader();
16+
var connectionString = configReader.GetDatabaseConnectionConfigById("SQLiteConnectionString")
17+
.ConnectionString;
18+
19+
_provider = new SQLiteTransformationProvider(new SQLiteDialect(), connectionString, "default", null);
20+
_provider.BeginTransaction();
21+
22+
AddDefaultTable();
23+
}
24+
}
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
using System.Data;
2+
using System.Linq;
3+
using DotNetProjects.Migrator.Providers.Impl.SQLite;
4+
using Migrator.Framework;
5+
using Migrator.Tests.Providers.SQLite.Base;
6+
using NUnit.Framework;
7+
8+
namespace Migrator.Tests.Providers.SQLite;
9+
10+
[TestFixture]
11+
[Category("SQLite")]
12+
public class SQLiteTransformationProviderTests : SQLiteTransformationProviderTestBase
13+
{
14+
[Test]
15+
public void GetTables()
16+
{
17+
var tables = _provider.GetTables();
18+
19+
Assert.That("TestTwo", Is.EqualTo(tables.Single()));
20+
}
21+
22+
[Test]
23+
public void CanParseColumnDefForNotNull()
24+
{
25+
const string nullString = "bar TEXT";
26+
const string notNullString = "baz INTEGER NOT NULL";
27+
28+
Assert.That(((SQLiteTransformationProvider)_provider).IsNullable(nullString), Is.True);
29+
Assert.That(((SQLiteTransformationProvider)_provider).IsNullable(notNullString), Is.False);
30+
}
31+
32+
[Test]
33+
public void RemoveDefaultValue_Success()
34+
{
35+
// Arrange
36+
var testTableName = "MyDefaultTestTable";
37+
var columnName = "Bla";
38+
39+
_provider.AddTable(testTableName, new Column(columnName, DbType.Int32, (object)55));
40+
var tableInfoBefore = ((SQLiteTransformationProvider)_provider).GetSQLiteTableInfo(testTableName);
41+
var createScriptBefore = ((SQLiteTransformationProvider)_provider).GetSqlCreateTableScript(testTableName);
42+
43+
// Act
44+
_provider.RemoveColumnDefaultValue(testTableName, columnName);
45+
46+
// Assert
47+
var tableInfoAfter = ((SQLiteTransformationProvider)_provider).GetSQLiteTableInfo(testTableName);
48+
var createScriptAfter = ((SQLiteTransformationProvider)_provider).GetSqlCreateTableScript(testTableName);
49+
var tableNames = ((SQLiteTransformationProvider)_provider).GetTables();
50+
51+
Assert.That(tableInfoBefore.Columns.Single().DefaultValue, Is.EqualTo(55));
52+
Assert.That(tableInfoAfter.Columns.Single().DefaultValue, Is.Null);
53+
Assert.That(createScriptBefore, Does.Contain("DEFAULT 55"));
54+
Assert.That(createScriptAfter, Does.Not.Contain("DEFAULT"));
55+
56+
// Check for intermediate table residues.
57+
Assert.That(tableNames.Where(x => x.Contains(testTableName)), Has.Exactly(1).Items);
58+
}
59+
60+
[Test]
61+
public void AddPrimaryKey_CompositePrimaryKey_Success()
62+
{
63+
// Arrange
64+
var testTableName = "MyDefaultTestTable";
65+
66+
_provider.AddTable(testTableName,
67+
new Column("Id", DbType.Int32),
68+
new Column("Color", DbType.Int32),
69+
new Column("NotAPrimaryKey", DbType.Int32)
70+
);
71+
72+
var tableInfoBefore = ((SQLiteTransformationProvider)_provider).GetSQLiteTableInfo(testTableName);
73+
74+
// Act
75+
_provider.AddPrimaryKey("MyPrimaryKeyName", testTableName, "Id", "Color");
76+
77+
// Assert
78+
Assert.That(tableInfoBefore.Columns.Single(x => x.Name == "Id").ColumnProperty.HasFlag(ColumnProperty.PrimaryKey), Is.False);
79+
Assert.That(tableInfoBefore.Columns.Single(x => x.Name == "Color").ColumnProperty.HasFlag(ColumnProperty.PrimaryKey), Is.False);
80+
Assert.That(tableInfoBefore.Columns.Single(x => x.Name == "NotAPrimaryKey").ColumnProperty.HasFlag(ColumnProperty.PrimaryKey), Is.False);
81+
82+
var tableInfoAfter = ((SQLiteTransformationProvider)_provider).GetSQLiteTableInfo(testTableName);
83+
var tableNames = ((SQLiteTransformationProvider)_provider).GetTables();
84+
85+
Assert.That(tableInfoAfter.Columns.Single(x => x.Name == "Id").ColumnProperty.HasFlag(ColumnProperty.PrimaryKey), Is.True);
86+
Assert.That(tableInfoAfter.Columns.Single(x => x.Name == "Color").ColumnProperty.HasFlag(ColumnProperty.PrimaryKey), Is.True);
87+
Assert.That(tableInfoAfter.Columns.Single(x => x.Name == "NotAPrimaryKey").ColumnProperty.HasFlag(ColumnProperty.PrimaryKey), Is.False);
88+
89+
// Check for intermediate table residues.
90+
Assert.That(tableNames.Where(x => x.Contains(testTableName)), Has.Exactly(1).Items);
91+
}
92+
93+
[Test]
94+
public void AddUnique_Success()
95+
{
96+
// TODO
97+
98+
// Arrange
99+
var testTableName = "MyDefaultTestTable";
100+
101+
_provider.AddTable(testTableName,
102+
new Column("Color", DbType.Int32, ColumnProperty.Unique)
103+
);
104+
105+
var tableInfoBefore = ((SQLiteTransformationProvider)_provider).GetSQLiteTableInfo(testTableName);
106+
107+
// // Act
108+
// _provider.AddPrimaryKey("MyPrimaryKeyName", testTableName, "Id", "Color");
109+
110+
// // Assert
111+
// Assert.That(tableInfoBefore.Columns.Single(x => x.Name == "Id").ColumnProperty.HasFlag(ColumnProperty.PrimaryKey), Is.False);
112+
// Assert.That(tableInfoBefore.Columns.Single(x => x.Name == "Color").ColumnProperty.HasFlag(ColumnProperty.PrimaryKey), Is.False);
113+
// Assert.That(tableInfoBefore.Columns.Single(x => x.Name == "NotAPrimaryKey").ColumnProperty.HasFlag(ColumnProperty.PrimaryKey), Is.False);
114+
115+
// var tableInfoAfter = ((SQLiteTransformationProvider)_provider).GetSQLiteTableInfo(testTableName);
116+
// var tableNames = ((SQLiteTransformationProvider)_provider).GetTables();
117+
118+
// Assert.That(tableInfoAfter.Columns.Single(x => x.Name == "Id").ColumnProperty.HasFlag(ColumnProperty.PrimaryKey), Is.True);
119+
// Assert.That(tableInfoAfter.Columns.Single(x => x.Name == "Color").ColumnProperty.HasFlag(ColumnProperty.PrimaryKey), Is.True);
120+
// Assert.That(tableInfoAfter.Columns.Single(x => x.Name == "NotAPrimaryKey").ColumnProperty.HasFlag(ColumnProperty.PrimaryKey), Is.False);
121+
122+
// // Check for intermediate table residues.
123+
// Assert.That(tableNames.Where(x => x.Contains(testTableName)), Has.Exactly(1).Items);
124+
}
125+
}

src/Migrator.Tests/Providers/SQLite/SQLiteTransformationProviderAddForeignKeyTests.cs renamed to src/Migrator.Tests/Providers/SQLite/SQLiteTransformationProvider_AddForeignKeyTests.cs

Lines changed: 6 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,15 @@
1-
#region License
2-
3-
//The contents of this file are subject to the Mozilla Public License
4-
//Version 1.1 (the "License"); you may not use this file except in
5-
//compliance with the License. You may obtain a copy of the License at
6-
//http://www.mozilla.org/MPL/
7-
//Software distributed under the License is distributed on an "AS IS"
8-
//basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
9-
//License for the specific language governing rights and limitations
10-
//under the License.
11-
12-
#endregion
13-
141
using System.Linq;
152
using DotNetProjects.Migrator.Framework;
163
using DotNetProjects.Migrator.Providers.Impl.SQLite;
17-
using Migrator.Providers.SQLite;
18-
using Migrator.Tests.Settings;
4+
using Migrator.Tests.Providers.SQLite.Base;
195
using NUnit.Framework;
206

21-
namespace Migrator.Tests.Providers;
7+
namespace Migrator.Tests.Providers.SQLite;
228

239
[TestFixture]
2410
[Category("SQLite")]
25-
public class SQLiteTransformationProviderAddForeignKeyTests : TransformationProviderBase
11+
public class SQLiteTransformationProvider_AddForeignKeyTests : SQLiteTransformationProviderTestBase
2612
{
27-
[SetUp]
28-
public void SetUp()
29-
{
30-
var configReader = new ConfigurationReader();
31-
var connectionString = configReader.GetDatabaseConnectionConfigById("SQLiteConnectionString")
32-
.ConnectionString;
33-
34-
_provider = new SQLiteTransformationProvider(new SQLiteDialect(), connectionString, "default", null);
35-
_provider.BeginTransaction();
36-
37-
AddDefaultTable();
38-
}
39-
4013
[Test]
4114
public void AddForeignKey()
4215
{
@@ -76,14 +49,16 @@ public void AddForeignKey_RenameParentColumWithForeignKeyAndData_ForeignKeyPoint
7649
_provider.AddForeignKey("FK name is not supported by SQLite", parentTable: "Test", parentColumn: "Id", childTable: "TestTwo", childColumn: "TestId", ForeignKeyConstraintType.Cascade);
7750

7851
// Act
52+
// Rename column in parent
7953
_provider.RenameColumn("Test", "Id", "IdNew");
8054

8155
// Assert
8256
var foreignKeyConstraints = ((SQLiteTransformationProvider)_provider).GetForeignKeyConstraints("TestTwo");
8357
var tableSQLCreateScript = ((SQLiteTransformationProvider)_provider).GetSqlCreateTableScript("TestTwo");
8458

8559
Assert.That(tableSQLCreateScript, Does.Contain("CREATE TABLE \"TestTwo\""));
86-
Assert.That(tableSQLCreateScript, Does.Contain(", FOREIGN KEY (TestId) REFERENCES Test(Id))"));
60+
Assert.That(tableSQLCreateScript, Does.Contain(", FOREIGN KEY (TestId) REFERENCES Test(IdNew))"));
61+
Assert.That(foreignKeyConstraints.Single().ParentColumns.Single(), Is.EqualTo("IdNew"));
8762

8863
var result = ((SQLiteTransformationProvider)_provider).CheckForeignKeyIntegrity();
8964
Assert.That(result, Is.True);
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
using DotNetProjects.Migrator.Framework;
2+
using DotNetProjects.Migrator.Providers.Impl.SQLite;
3+
using Migrator.Tests.Providers.SQLite.Base;
4+
using NUnit.Framework;
5+
6+
namespace Migrator.Tests.Providers.SQLite;
7+
8+
[TestFixture]
9+
[Category("SQLite")]
10+
public class SQLiteTransformationProvider_CheckForeignKeyIntegrityTests : SQLiteTransformationProviderTestBase
11+
{
12+
[Test]
13+
public void CheckForeignKeyIntegrity_IntegrityViolated_ReturnsFalse()
14+
{
15+
// Arrange
16+
AddTableWithPrimaryKey();
17+
_provider.ExecuteNonQuery("INSERT INTO Test (Id, name) VALUES (1, 'my name')");
18+
_provider.ExecuteNonQuery("INSERT INTO TestTwo (TestId) VALUES (44444)");
19+
_provider.AddForeignKey("FK name is not supported by SQLite", parentTable: "Test", parentColumn: "Id", childTable: "TestTwo", childColumn: "TestId", ForeignKeyConstraintType.Cascade);
20+
21+
// Act
22+
var result = ((SQLiteTransformationProvider)_provider).CheckForeignKeyIntegrity();
23+
24+
// Assert
25+
Assert.That(result, Is.False);
26+
}
27+
28+
[Test]
29+
public void CheckForeignKeyIntegrity_IntegrityOk_ReturnsTrue()
30+
{
31+
// Arrange
32+
AddTableWithPrimaryKey();
33+
_provider.ExecuteNonQuery("INSERT INTO Test (Id, name) VALUES (1, 'my name')");
34+
_provider.ExecuteNonQuery("INSERT INTO TestTwo (TestId) VALUES (1)");
35+
_provider.AddForeignKey("FK name is not supported by SQLite", parentTable: "Test", parentColumn: "Id", childTable: "TestTwo", childColumn: "TestId", ForeignKeyConstraintType.Cascade);
36+
37+
// Act
38+
var result = ((SQLiteTransformationProvider)_provider).CheckForeignKeyIntegrity();
39+
40+
// Assert
41+
Assert.That(result, Is.True);
42+
}
43+
}

src/Migrator.Tests/Providers/SQLiteTransformationProviderTest.cs

Lines changed: 0 additions & 113 deletions
This file was deleted.

src/Migrator/Providers/Impl/SQLite/Models/SQLiteTableInfo.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,9 @@ public class SQLiteTableInfo
3030
/// Gets or sets the column mappings.
3131
/// </summary>
3232
public List<MappingInfo> ColumnMappings { get; set; } = [];
33+
34+
/// <summary>
35+
/// Gets or sets the unique definitions.
36+
/// </summary>
37+
public List<Unique> Uniques { get; set; } = [];
3338
}

0 commit comments

Comments
 (0)