You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
EntityFrameworkCore.Jet/test/EFCore.Jet.Data.Tests/SchemaOperationsTest.cs

123 lines
3.9 KiB
C#

using System.IO;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace EntityFrameworkCore.Jet.Data.Tests
{
[TestClass]
public class SchemaOperationsTest
{
private const string StoreName = nameof(SchemaOperationsTest) + ".accdb";
private JetConnection _connection;
private ISchemaOperationsProvider _schemaOperationsProvider;
[TestInitialize]
public void Setup()
{
_connection = Helpers.CreateAndOpenDatabase(StoreName);
CreateTable();
AssertTableExists("tableName");
AssertColumnExists("tableName", "columnName");
AssertIndexExists("indexName");
_schemaOperationsProvider = SchemaProvider.CreateInstance(_connection.SchemaProviderType, _connection, false);
}
[TestCleanup]
public void TearDown()
{
_schemaOperationsProvider?.Dispose();
_connection?.Close();
Helpers.DeleteDatabase(StoreName);
}
[TestMethod]
public void CreateDatabase()
{
Assert.IsTrue(File.Exists(StoreName));
}
[TestMethod]
public void RenameTable_Provider()
{
_schemaOperationsProvider.RenameTable("tableName", "newTableName");
ReOpenConnection();
AssertTableExists("newTableName");
}
[TestMethod]
public void RenameTable_Query()
{
_connection.CreateCommand("ALTER TABLE tableName RENAME TO newTableName")
.ExecuteNonQuery();
ReOpenConnection();
AssertTableExists("newTableName");
}
[TestMethod]
public void RenameColumn_Provider()
{
_schemaOperationsProvider.RenameColumn("tableName", "columnName", "newColumnName");
ReOpenConnection();
AssertColumnExists("tableName", "newColumnName");
}
[TestMethod]
public void RenameColumn_Query()
{
_connection.CreateCommand("ALTER TABLE tableName RENAME COLUMN columnName TO newColumnName")
.ExecuteNonQuery();
ReOpenConnection();
AssertColumnExists("tableName", "newColumnName");
}
private void ReOpenConnection()
{
_connection.Close();
JetConnection.ClearAllPools();
_connection.Open();
}
private void AssertTableExists(string tableName)
{
using var command = _connection.CreateCommand($"SELECT * FROM `INFORMATION_SCHEMA.TABLES` WHERE `TABLE_NAME` = '{tableName}'");
using var reader = command.ExecuteReader();
Assert.IsTrue(reader.HasRows, $"Table `{tableName}` not found.");
}
private void AssertColumnExists(string tableName, string columnName)
{
var command = _connection.CreateCommand($"SELECT * FROM `INFORMATION_SCHEMA.COLUMNS` WHERE `TABLE_NAME` = '{tableName}' AND `COLUMN_NAME` = '{columnName}'");
using var reader = command.ExecuteReader();
Assert.IsTrue(reader.HasRows, $"Column `{tableName}`.`{columnName}` not found.");
}
private void AssertIndexExists(string indexName)
{
var command = _connection.CreateCommand($"SELECT * FROM `INFORMATION_SCHEMA.INDEXES` WHERE `INDEX_NAME` = '{indexName}'");
using var reader = command.ExecuteReader();
Assert.IsTrue(reader.HasRows, $"Index `{indexName}` not found.");
}
private void CreateTable()
{
using var command = _connection.CreateCommand(
"""
CREATE TABLE tableName (columnName int);
CREATE INDEX indexName ON tableName (columnName);
""");
command.ExecuteNonQuery();
}
}
}