已完成迁移验收和清理。
删除全部 Node.js 后端、.mjs 测试、辅助脚本、package*.json、node_modules 和迁移对照工具。 浏览器前端保留并迁入 [Eis.Web/wwwroot](C:/Users/BI/Documents/EIS-dotnet/src/Eis.Web/wwwroot/index.html),统一改为 .js 模块。 修复一个隐藏遗漏:.NET 仍依赖 schema.mjs,且 MySQL 结构解析可能被转义反引号截断。现已改为原生 [SQLite SQL](C:/Users/BI/Documents/EIS-dotnet/src/Eis.Infrastructure/Data/Schema.sqlite.sql) 和 [MySQL SQL](C:/Users/BI/Documents/EIS-dotnet/src/Eis.Infrastructure/Data/Schema.mysql.sql) 资源。 更新了 [DatabaseInitializer.cs](C:/Users/BI/Documents/EIS-dotnet/src/Eis.Infrastructure/Data/DatabaseInitializer.cs)、项目配置、README 和迁移文档。 data 目录和现有数据库未修改;测试仅使用系统临时 SQLite 数据库。
This commit is contained in:
@@ -6,6 +6,29 @@ namespace Eis.Infrastructure.Tests.Data;
|
||||
|
||||
public sealed class DatabaseInitializerTests
|
||||
{
|
||||
[Fact]
|
||||
public async Task EmbeddedSchemas_AreNativeSqlResources()
|
||||
{
|
||||
var assembly = typeof(DatabaseInitializer).Assembly;
|
||||
var resourceNames = assembly.GetManifestResourceNames();
|
||||
var sqliteName = Assert.Single(resourceNames, name => name.EndsWith("Schema.sqlite.sql", StringComparison.Ordinal));
|
||||
var mysqlName = Assert.Single(resourceNames, name => name.EndsWith("Schema.mysql.sql", StringComparison.Ordinal));
|
||||
|
||||
var sqlite = await ReadResourceAsync(assembly, sqliteName);
|
||||
var mysql = (await ReadResourceAsync(assembly, mysqlName)).ReplaceLineEndings("\n");
|
||||
var mysqlStatements = mysql.Split(
|
||||
"\n-- EIS-STATEMENT\n",
|
||||
StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);
|
||||
|
||||
Assert.Contains("CREATE TABLE IF NOT EXISTS schema_metadata", sqlite, StringComparison.Ordinal);
|
||||
Assert.DoesNotContain("export const", sqlite, StringComparison.Ordinal);
|
||||
Assert.True(mysqlStatements.Length >= 30);
|
||||
Assert.All(mysqlStatements, statement =>
|
||||
Assert.StartsWith("CREATE TABLE IF NOT EXISTS", statement, StringComparison.Ordinal));
|
||||
Assert.Contains("`separator` VARCHAR(10)", mysql, StringComparison.Ordinal);
|
||||
Assert.DoesNotContain("export const", mysql, StringComparison.Ordinal);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task InitializeAsync_CreatesFreshDatabaseAndIsIdempotent()
|
||||
{
|
||||
@@ -49,4 +72,12 @@ public sealed class DatabaseInitializerTests
|
||||
command.CommandText = sql;
|
||||
return Convert.ToInt64(await command.ExecuteScalarAsync());
|
||||
}
|
||||
|
||||
private static async Task<string> ReadResourceAsync(System.Reflection.Assembly assembly, string name)
|
||||
{
|
||||
await using var stream = assembly.GetManifestResourceStream(name)
|
||||
?? throw new InvalidOperationException($"Missing resource: {name}");
|
||||
using var reader = new StreamReader(stream);
|
||||
return await reader.ReadToEndAsync();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user