162 lines
7.1 KiB
C#
162 lines
7.1 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("_compositionOptions!.Current.FadeDuration", Playout,
|
|
StringComparison.Ordinal);
|
|
Assert.Contains("workflow.PrepareAsync(", Playout, StringComparison.Ordinal);
|
|
Assert.Contains("workflow.TakeSelectedAsync(", Playout,
|
|
StringComparison.Ordinal);
|
|
Assert.DoesNotContain("workflow.TakeInAsync(", Playout, StringComparison.Ordinal);
|
|
Assert.DoesNotContain(
|
|
"string.IsNullOrWhiteSpace(workflow.State.PreparedCutCode)",
|
|
Playout,
|
|
StringComparison.Ordinal);
|
|
Assert.Contains("workflow.NextAsync(", Playout, StringComparison.Ordinal);
|
|
Assert.Contains("workflow.TakeOutAsync(", Playout, StringComparison.Ordinal);
|
|
Assert.Contains("_controller.ReflectSuccessfulPlayout(", Playout,
|
|
StringComparison.Ordinal);
|
|
Assert.Contains("workflow.State.CurrentEntryId", Playout,
|
|
StringComparison.Ordinal);
|
|
Assert.Contains("LegacyOperatorPlayoutCommand.Prepare or", Playout,
|
|
StringComparison.Ordinal);
|
|
Assert.Contains(
|
|
"command != LegacyOperatorPlayoutCommand.TakeOut",
|
|
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 OriginalDissolveComboAcceptsOnlyItsZeroBasedTwentyItemIndex()
|
|
{
|
|
Assert.Contains("fadeDuration is < 0 or > 19", Playout,
|
|
StringComparison.Ordinal);
|
|
Assert.DoesNotContain("fadeDuration is < 0 or > 60", Playout,
|
|
StringComparison.Ordinal);
|
|
}
|
|
|
|
[Fact]
|
|
public void HomeAndEndStopAutomaticRefreshBeforeChangingTheCandidateRow()
|
|
{
|
|
Assert.Contains(
|
|
"LegacySelectPlaylistBoundaryIntent boundary =>\n" +
|
|
" SelectPlaylistBoundaryAndStopRefresh(boundary.Last)",
|
|
Window.Replace("\r\n", "\n", StringComparison.Ordinal),
|
|
StringComparison.Ordinal);
|
|
Assert.Contains(
|
|
"private LegacyOperatorSnapshot SelectPlaylistBoundaryAndStopRefresh(bool last)",
|
|
Playout,
|
|
StringComparison.Ordinal);
|
|
var helperStart = Playout.IndexOf(
|
|
"private LegacyOperatorSnapshot SelectPlaylistBoundaryAndStopRefresh(bool last)",
|
|
StringComparison.Ordinal);
|
|
var helperEnd = Playout.IndexOf(
|
|
"private async Task<LegacyOperatorSnapshot> ToggleBackgroundAsync",
|
|
helperStart,
|
|
StringComparison.Ordinal);
|
|
Assert.True(helperStart >= 0 && helperEnd > helperStart);
|
|
var helper = Playout[helperStart..helperEnd];
|
|
Assert.True(
|
|
helper.IndexOf("StopRefreshLoop();", StringComparison.Ordinal) <
|
|
helper.IndexOf("_controller.SelectPlaylistBoundary(last)", 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);
|
|
Assert.Contains("LegacyCutPointerDownIntent", Playout,
|
|
StringComparison.Ordinal);
|
|
Assert.Contains("LegacyClearCutSelectionIntent", 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.");
|
|
}
|
|
}
|