Files
MBN_STOCK_WEBVIEW/tests/MBN_STOCK_WEBVIEW.LegacyWeb.Tests/LegacyPlayoutNativeContractTests.cs

107 lines
4.6 KiB
C#

namespace MBN_STOCK_WEBVIEW.LegacyWeb.Tests;
public sealed class LegacyPlayoutNativeContractTests
{
private static readonly string RepositoryRoot = FindRepositoryRoot();
private static readonly string AppRoot = Path.Combine(
RepositoryRoot,
"src",
"MBN_STOCK_WEBVIEW.LegacyParityApp");
private static readonly string Playout = File.ReadAllText(
Path.Combine(AppRoot, "MainWindow.Playout.cs"));
private static readonly string Window = File.ReadAllText(
Path.Combine(AppRoot, "MainWindow.xaml.cs"));
private static readonly string Project = File.ReadAllText(
Path.Combine(AppRoot, "MBN_STOCK_WEBVIEW.LegacyParityApp.csproj"));
[Fact]
public void ParityAppComposesTheVerifiedThirtyFiveSceneRuntime()
{
Assert.Contains("LegacySceneRuntimeFactory.cs", Project, StringComparison.Ordinal);
Assert.Contains("LegacySceneRuntimeFactory.Create(", Playout,
StringComparison.Ordinal);
Assert.Contains("trustedManualSource: _manualNetSellStore", Playout,
StringComparison.Ordinal);
Assert.Contains("trustedViSource: _manualViStore", Playout,
StringComparison.Ordinal);
}
[Fact]
public void StartupDefaultBackgroundDependsOnAbsentLocalConfigAndSurfacesWarning()
{
Assert.Contains("File.Exists(", Playout, StringComparison.Ordinal);
Assert.Contains("PlayoutOptionsLoader.DefaultPath", Playout,
StringComparison.Ordinal);
Assert.Contains("LegacyParityStartupCompositionResolver.Resolve(", Playout,
StringComparison.Ordinal);
Assert.Contains("_playoutInitializationWarning ?? status?.Message", Playout,
StringComparison.Ordinal);
}
[Fact]
public void OperatorCommandsUseTheNativeWorkflowAndCSharpPlaylist()
{
Assert.Contains("_controller.CreatePlayoutRequest()", Playout,
StringComparison.Ordinal);
Assert.Contains("workflow.PrepareAsync(", Playout, StringComparison.Ordinal);
Assert.Contains("workflow.PrepareAndTakeInAsync(", Playout,
StringComparison.Ordinal);
Assert.Contains("workflow.TakeInAsync(", Playout, StringComparison.Ordinal);
Assert.Contains("workflow.NextAsync(", Playout, StringComparison.Ordinal);
Assert.Contains("workflow.TakeOutAsync(", Playout, StringComparison.Ordinal);
Assert.Contains("LegacyWorkflowNextKind.PlaylistNext", Playout,
StringComparison.Ordinal);
Assert.Contains("LegacySceneRefreshPolicy.TryGetInterval", Playout,
StringComparison.Ordinal);
Assert.Contains("WaitForPlayCompletionAsync", Playout, StringComparison.Ordinal);
}
[Fact]
public void UnknownOutcomeQuarantinesWithoutAutomaticCommandRetry()
{
Assert.Contains("PlayoutResultCode.OutcomeUnknown", Playout,
StringComparison.Ordinal);
Assert.Contains("PlayoutResultCode.TimedOut", Playout, StringComparison.Ordinal);
Assert.Contains("QuarantinePlayoutAsync", Playout, StringComparison.Ordinal);
Assert.DoesNotContain("MaximumReconnectAttempts", Playout,
StringComparison.Ordinal);
Assert.DoesNotContain("ReconnectAsync", Playout, StringComparison.Ordinal);
}
[Fact]
public void PreparedProgramAndUnknownWriteOutcomesBlockOperatorMutations()
{
Assert.Contains("CanAcceptOperatorMutation()", Window, StringComparison.Ordinal);
Assert.Contains("IsOperatorMutationQuarantined()", Window,
StringComparison.Ordinal);
Assert.Contains("ObserveOperatorMutationQuarantine(state)", Window,
StringComparison.Ordinal);
Assert.Contains("ManualFinancial?.WritesQuarantined", Playout,
StringComparison.Ordinal);
Assert.Contains("NamedPlaylist?.IsWriteQuarantined", Playout,
StringComparison.Ordinal);
Assert.Contains("ManualLists?.WritesQuarantined", Playout,
StringComparison.Ordinal);
Assert.Contains("OperatorCatalog?.WritesQuarantined", Playout,
StringComparison.Ordinal);
Assert.Contains("LegacyConfirmManualListIntent", Playout,
StringComparison.Ordinal);
}
private static string FindRepositoryRoot()
{
var current = new DirectoryInfo(AppContext.BaseDirectory);
while (current is not null)
{
if (File.Exists(Path.Combine(current.FullName, "MBN_STOCK_WEBVIEW.sln")))
{
return current.FullName;
}
current = current.Parent;
}
throw new DirectoryNotFoundException("Repository root was not found.");
}
}