67 lines
4.7 KiB
C#
67 lines
4.7 KiB
C#
using dy.net.extension;
|
|
using dy.net.model.entity;
|
|
using dy.net.service;
|
|
using dy.net.Tests.TestInfrastructure;
|
|
using Microsoft.Data.Sqlite;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using SqlSugar;
|
|
|
|
namespace dy.net.Tests;
|
|
|
|
public class LegacyDatabaseUpgradeTests
|
|
{
|
|
[Fact]
|
|
public void LegacyDatabase_UpgradeBacksUpAndPreservesRowsWhileAddingMigrationSchema()
|
|
{
|
|
using var temporary = new TemporaryDirectory();
|
|
var dbRoot = Path.Combine(temporary.Path, "db");
|
|
Directory.CreateDirectory(Path.Combine(dbRoot, "keys"));
|
|
File.WriteAllText(Path.Combine(dbRoot, "keys", "key.xml"), "persistent-key");
|
|
var databasePath = Path.Combine(dbRoot, "dy.sqlite");
|
|
using (var connection = new SqliteConnection($"Data Source={databasePath}"))
|
|
{
|
|
connection.Open();
|
|
using var command = connection.CreateCommand();
|
|
command.CommandText = "CREATE TABLE dy_collect_video (Id TEXT PRIMARY KEY, AwemeId TEXT, VideoSavePath TEXT);" +
|
|
"INSERT INTO dy_collect_video (Id, AwemeId, VideoSavePath) VALUES ('old-1','aweme-old','/old/video.mp4');";
|
|
command.ExecuteNonQuery();
|
|
}
|
|
|
|
var backup = DatabaseUpgradeBackup.Prepare(temporary.Path);
|
|
var services = new ServiceCollection();
|
|
services.AddSqlsugar(temporary.Path);
|
|
using var provider = services.BuildServiceProvider();
|
|
using var scope = provider.CreateScope();
|
|
var db = scope.ServiceProvider.GetRequiredService<ISqlSugarClient>();
|
|
|
|
Assert.Equal("/old/video.mp4", db.Queryable<DouyinVideo>().Where(x => x.Id == "old-1").Select(x => x.VideoSavePath).Single());
|
|
Assert.True(db.DbMaintenance.IsAnyTable("storage_migration_task", false));
|
|
Assert.True(db.DbMaintenance.IsAnyTable("storage_migration_item", false));
|
|
Assert.True(db.DbMaintenance.IsAnyTable("video_download_task", false));
|
|
Assert.True(db.DbMaintenance.IsAnyTable("video_download_task_item", false));
|
|
Assert.True(db.DbMaintenance.IsAnyTable("media_storage_health", false));
|
|
Assert.True(db.DbMaintenance.IsAnyTable("dy_openlist_settings", false));
|
|
Assert.True(db.DbMaintenance.IsAnyTable("openlist_transfer_job", false));
|
|
Assert.Contains(db.DbMaintenance.GetColumnInfosByTableName("storage_migration_task", false), x => x.DbColumnName == "RemovedCount");
|
|
Assert.Contains(db.DbMaintenance.GetColumnInfosByTableName("storage_migration_task", false), x => x.DbColumnName == "IsArchived");
|
|
Assert.Contains(db.DbMaintenance.GetColumnInfosByTableName("storage_migration_task", false), x => x.DbColumnName == "TargetStorageType");
|
|
Assert.Contains(db.DbMaintenance.GetColumnInfosByTableName("storage_migration_item", false), x => x.DbColumnName == "SourceStorageType");
|
|
Assert.Contains(db.DbMaintenance.GetColumnInfosByTableName("storage_migration_item", false), x => x.DbColumnName == "AdoptExistingTarget");
|
|
Assert.Contains(db.DbMaintenance.GetColumnInfosByTableName("dy_collect_video", false), x => x.DbColumnName == "StorageType");
|
|
Assert.Contains(db.DbMaintenance.GetColumnInfosByTableName("dy_rd_video", false), x => x.DbColumnName == "TaskId");
|
|
Assert.Contains(db.DbMaintenance.GetColumnInfosByTableName("dy_delete_video", false), x => x.DbColumnName == "RestoreSnapshotJson");
|
|
Assert.Contains(db.DbMaintenance.GetColumnInfosByTableName("dy_cookie", false), x => x.DbColumnName == "SourceCooldownUntil");
|
|
Assert.Contains(db.DbMaintenance.GetColumnInfosByTableName("dy_cookie", false), x => x.DbColumnName == "SourceRequiresAuthorization");
|
|
Assert.Contains(db.DbMaintenance.GetColumnInfosByTableName("dy_cookie", false), x => x.DbColumnName == "LiveCheckCooldownUntil");
|
|
Assert.Contains(db.DbMaintenance.GetColumnInfosByTableName("dy_follow", false), x => x.DbColumnName == "LiveMonitorEnabled");
|
|
Assert.Contains(db.DbMaintenance.GetColumnInfosByTableName("dy_follow", false), x => x.DbColumnName == "LiveStatus");
|
|
Assert.Contains(db.DbMaintenance.GetColumnInfosByTableName("dy_follow", false), x => x.DbColumnName == "LiveEmailNotificationEnabled");
|
|
Assert.True(db.DbMaintenance.IsAnyTable("dy_email_notification_settings", false));
|
|
Assert.Contains(db.DbMaintenance.GetColumnInfosByTableName("video_download_task_item", false), x => x.DbColumnName == "HttpStatusCode");
|
|
var backupDirectory = Directory.GetDirectories(Path.Combine(dbRoot, "upgrade-backups")).Single();
|
|
Assert.True(File.Exists(Path.Combine(backupDirectory, "dy.sqlite")));
|
|
Assert.Equal("persistent-key", File.ReadAllText(Path.Combine(backupDirectory, "keys", "key.xml")));
|
|
backup.MarkSchemaReady();
|
|
}
|
|
}
|