fix: initialize selected runtime for live playout

This commit is contained in:
2026-07-28 20:44:20 +09:00
parent 18d40e892f
commit 818acad646
24 changed files with 906 additions and 391 deletions

View File

@@ -117,7 +117,7 @@ public sealed class LegacyDevelopmentLiveStartupContractTests
}
[Fact]
public void AppliedDevelopmentLiveUsesSelectedRuntimePathsAndProtectedDatabaseInputs()
public void AppliedDevelopmentLiveUsesSelectedRuntimePathsAndSelectedResDatabaseAuthority()
{
var window = File.ReadAllText(Path.Combine(ParityRoot, "MainWindow.xaml.cs"));
var playout = File.ReadAllText(Path.Combine(
@@ -142,14 +142,15 @@ public sealed class LegacyDevelopmentLiveStartupContractTests
window,
StringComparison.Ordinal);
Assert.Contains(
"_isDevelopmentLiveLaunch ||\n" +
"var selectedLegacyDatabaseIni =\n" +
" selectedResourceDirectory is null\n" +
" ? null",
window.ReplaceLineEndings("\n"),
StringComparison.Ordinal);
Assert.Contains(
"DatabaseRuntime.CreateDevelopmentLiveLocalOverride()",
window,
"? DatabaseRuntime.CreateDevelopmentLiveLocalOverride(\n" +
" selectedResourceDirectory)",
window.ReplaceLineEndings("\n"),
StringComparison.Ordinal);
Assert.Contains(
"? PlayoutOptionsLoader.LoadDevelopmentLive(",
@@ -168,7 +169,7 @@ public sealed class LegacyDevelopmentLiveStartupContractTests
}
[Fact]
public void DatabaseFailureDoesNotDowngradeOrBlockValidatedLiveEngine()
public void InvalidDevelopmentLiveDatabaseConfigurationBlocksEngineAndAutomaticConnect()
{
var window = File.ReadAllText(Path.Combine(ParityRoot, "MainWindow.xaml.cs"))
.ReplaceLineEndings("\n");
@@ -177,44 +178,50 @@ public sealed class LegacyDevelopmentLiveStartupContractTests
"MainWindow.Playout.cs"))
.ReplaceLineEndings("\n");
var runtimeReset = window.IndexOf(
"_databaseRuntime = null;",
var databaseFailureCondition = window.IndexOf(
"_isDevelopmentLiveLaunch &&\n" +
" exception is DatabaseConfigurationException;",
StringComparison.Ordinal);
var pagePlanReset = window.IndexOf(
"fixedPagePlanProvider = null;",
runtimeReset,
var startupBlock = window.IndexOf(
"_developmentLiveStartupBlocked = true;",
databaseFailureCondition,
StringComparison.Ordinal);
var databaseFailureEnd = window.IndexOf(
"_industryWorkflow = new LegacyIndustrySelectionWorkflow(",
pagePlanReset,
var safeMessage = window.IndexOf(
"\"Development Live 데이터베이스 설정을 확인할 수 없습니다.\"",
startupBlock,
StringComparison.Ordinal);
var playoutInitialization = window.IndexOf(
"InitializePlayoutRuntime();",
safeMessage,
StringComparison.Ordinal);
var automaticConnectGuard = window.IndexOf(
"if (!_developmentLiveStartupBlocked)",
playoutInitialization,
StringComparison.Ordinal);
var automaticConnect = window.IndexOf(
"await ConnectPlayoutAsync(_lifetimeCancellation.Token);",
automaticConnectGuard,
StringComparison.Ordinal);
var earlyBlock = playout.IndexOf(
"if (_developmentLiveStartupBlocked)",
StringComparison.Ordinal);
var earlyReturn = playout.IndexOf(
"return;",
earlyBlock,
StringComparison.Ordinal);
var createEngine = playout.IndexOf(
"_playoutEngine = PlayoutEngineFactory.Create(",
StringComparison.Ordinal);
Assert.True(runtimeReset >= 0);
Assert.True(pagePlanReset > runtimeReset);
Assert.True(databaseFailureEnd > pagePlanReset);
Assert.True(playoutInitialization > databaseFailureEnd);
Assert.DoesNotContain(
"_developmentLiveStartupBlocked = true;",
window[runtimeReset..databaseFailureEnd],
StringComparison.Ordinal);
Assert.DoesNotContain("databaseInitializationSucceeded", window,
StringComparison.Ordinal);
Assert.Contains(
"_isDevelopmentLiveLaunch\n" +
" ? PlayoutOptionsLoader.LoadDevelopmentLive(",
playout,
StringComparison.Ordinal);
Assert.Contains(
"if (_playoutOptions.Mode != PlayoutMode.Live)",
playout,
StringComparison.Ordinal);
Assert.Contains(
"_playoutEngine = PlayoutEngineFactory.Create(",
playout,
StringComparison.Ordinal);
Assert.True(databaseFailureCondition >= 0);
Assert.True(startupBlock > databaseFailureCondition);
Assert.True(safeMessage > startupBlock);
Assert.True(playoutInitialization > safeMessage);
Assert.True(automaticConnectGuard > playoutInitialization);
Assert.True(automaticConnect > automaticConnectGuard);
Assert.True(earlyBlock >= 0);
Assert.True(earlyReturn > earlyBlock);
Assert.True(createEngine > earlyReturn);
}
[Fact]