fix(tests): initialize shared SQLite schema once (#10596)

This commit is contained in:
Miheichev Aleksandr Sergeevich
2026-11-14 02:52:21 +00:00
committed by GitHub
parent a189c659c6
commit f2f336d97c
5 changed files with 47 additions and 7 deletions
@@ -98,7 +98,7 @@ public class CoreConfigContextBuilderTests
private static async Task UpsertProfilesAsync(params ProfileItem[] profiles)
{
SQLiteHelper.Instance.CreateTable<ProfileItem>();
TestDatabase.Initialize();
foreach (var profile in profiles)
{
await SQLiteHelper.Instance.ReplaceAsync(profile);
@@ -16,8 +16,7 @@ public class ConfigHandlerCustomSubscriptionTests
{
var config = CoreConfigTestFactory.CreateConfig();
CoreConfigTestFactory.BindAppManagerConfig(config);
SQLiteHelper.Instance.CreateTable<SubItem>();
SQLiteHelper.Instance.CreateTable<ProfileItem>();
TestDatabase.Initialize();
var subId = $"sub-{Guid.NewGuid():N}";
await SQLiteHelper.Instance.ReplaceAsync(new SubItem
@@ -50,8 +49,7 @@ public class ConfigHandlerCustomSubscriptionTests
{
var config = CoreConfigTestFactory.CreateConfig();
CoreConfigTestFactory.BindAppManagerConfig(config);
SQLiteHelper.Instance.CreateTable<SubItem>();
SQLiteHelper.Instance.CreateTable<ProfileItem>();
TestDatabase.Initialize();
var subId = $"sub-failed-{Guid.NewGuid():N}";
await SQLiteHelper.Instance.ReplaceAsync(new SubItem
@@ -13,6 +13,33 @@ public class SQLiteHelperTests
return database;
});
[Test]
public async Task RepeatedSharedSchemaInitialization_ShouldSucceedDuringAnExclusiveTransaction()
{
TestDatabase.Initialize();
var database = Database.Value;
var item = new SubItem { Id = Guid.NewGuid().ToString("N"), Remarks = "schema-init", Url = "http://127.0.0.1/sub" };
await database.InsertAsync(item);
try
{
await database.ExecuteAsync("BEGIN EXCLUSIVE");
try
{
TestDatabase.Initialize();
var saved = await database.TableAsync<SubItem>().Where(row => row.Id == item.Id).FirstAsync();
await saved.Id.Should().BeEqualTo(item.Id);
}
finally
{
await database.ExecuteAsync("ROLLBACK");
}
}
finally
{
await database.DeleteAsync(item);
}
}
[Test]
public async Task SingleWrites_ShouldPreserveValuesAndDeleteByPrimaryKey()
{
@@ -5,7 +5,7 @@ public class ProfileExManagerPersistenceTests
[Test]
public async Task SaveTo_NewProfilesWithRepeatedResults_ShouldPersistEveryProfile()
{
SQLiteHelper.Instance.CreateTable<ProfileExItem>();
TestDatabase.Initialize();
var manager = new ProfileExManager();
var ids = Enumerable.Range(0, 3).Select(_ => Guid.NewGuid().ToString("N")).ToArray();
@@ -46,7 +46,7 @@ public class ProfileExManagerPersistenceTests
[Test]
public async Task SaveTo_MixedNewAndExistingProfiles_ShouldInsertAndUpdateResults()
{
SQLiteHelper.Instance.CreateTable<ProfileExItem>();
TestDatabase.Initialize();
var manager = new ProfileExManager();
var existingId = Guid.NewGuid().ToString("N");
var newId = Guid.NewGuid().ToString("N");
+15
View File
@@ -0,0 +1,15 @@
namespace ServiceLib.Tests;
internal static class TestDatabase
{
private static readonly Lazy<SQLiteHelper> Database = new(() =>
{
var database = SQLiteHelper.Instance;
database.CreateTable<SubItem>();
database.CreateTable<ProfileItem>();
database.CreateTable<ProfileExItem>();
return database;
});
public static void Initialize() => _ = Database.Value;
}