Follows PLAN 4.2: create .ykanban, take the lock, then build the database. SqliteDatabase.Create writes every migration and the preset columns in a single transaction and deletes the file again on failure, so no empty version-0 database is left behind. WorkspaceSession.Initialize keeps the lock into the session instead of releasing and re-acquiring it. A lock conflict while initializing shows the lock-conflict page.
97 lines
3.1 KiB
C#
97 lines
3.1 KiB
C#
using System.Globalization;
|
|
using Microsoft.Data.Sqlite;
|
|
using YKanBan.Storage.Workspace;
|
|
using YKanBan.Tests.TestUtilities;
|
|
|
|
namespace YKanBan.Tests.Storage.Workspace;
|
|
|
|
/// <summary>
|
|
/// Verifies that the preset column titles follow the UI language active when
|
|
/// they are added and then live as ordinary data. These tests mutate the
|
|
/// global <see cref="Resources.Culture"/>, so they are marked do-not-parallelize.
|
|
/// </summary>
|
|
[TestClass]
|
|
[DoNotParallelize]
|
|
public class WorkspacePresetTests
|
|
{
|
|
[TestMethod]
|
|
public void AddPresetColumnsStoresEnglishTitlesUnderEnglishCulture()
|
|
{
|
|
CultureInfo? original = Resources.Culture;
|
|
try
|
|
{
|
|
Resources.Culture = new CultureInfo("en");
|
|
string[] expected =
|
|
[
|
|
Resources.PresetColumn_Todo,
|
|
Resources.PresetColumn_InProgress,
|
|
Resources.PresetColumn_Done,
|
|
];
|
|
|
|
using var directory = new TempDirectory();
|
|
WorkspaceSession.Initialize(directory.FullPath).Dispose();
|
|
|
|
using SqliteConnection connection = SqliteTestHelper.OpenWorkspace(directory.FullPath);
|
|
CollectionAssert.AreEqual(expected, SqliteTestHelper.GetColumnTitles(connection));
|
|
}
|
|
finally
|
|
{
|
|
Resources.Culture = original;
|
|
}
|
|
}
|
|
|
|
[TestMethod]
|
|
public void AddPresetColumnsStoresChineseTitlesUnderChineseCulture()
|
|
{
|
|
CultureInfo? original = Resources.Culture;
|
|
try
|
|
{
|
|
Resources.Culture = new CultureInfo("zh-Hans");
|
|
string[] expected =
|
|
[
|
|
Resources.PresetColumn_Todo,
|
|
Resources.PresetColumn_InProgress,
|
|
Resources.PresetColumn_Done,
|
|
];
|
|
|
|
using var directory = new TempDirectory();
|
|
WorkspaceSession.Initialize(directory.FullPath).Dispose();
|
|
|
|
using SqliteConnection connection = SqliteTestHelper.OpenWorkspace(directory.FullPath);
|
|
CollectionAssert.AreEqual(expected, SqliteTestHelper.GetColumnTitles(connection));
|
|
}
|
|
finally
|
|
{
|
|
Resources.Culture = original;
|
|
}
|
|
}
|
|
|
|
[TestMethod]
|
|
public void PresetTitlesAreDataAndIgnoreLaterCultureChanges()
|
|
{
|
|
CultureInfo? original = Resources.Culture;
|
|
try
|
|
{
|
|
Resources.Culture = new CultureInfo("en");
|
|
string[] expected =
|
|
[
|
|
Resources.PresetColumn_Todo,
|
|
Resources.PresetColumn_InProgress,
|
|
Resources.PresetColumn_Done,
|
|
];
|
|
|
|
using var directory = new TempDirectory();
|
|
WorkspaceSession.Initialize(directory.FullPath).Dispose();
|
|
|
|
// Switching the language after adding the presets must not rewrite stored data.
|
|
Resources.Culture = new CultureInfo("zh-Hans");
|
|
using SqliteConnection connection = SqliteTestHelper.OpenWorkspace(directory.FullPath);
|
|
CollectionAssert.AreEqual(expected, SqliteTestHelper.GetColumnTitles(connection));
|
|
}
|
|
finally
|
|
{
|
|
Resources.Culture = original;
|
|
}
|
|
}
|
|
}
|