feat: align legacy operator and playout behavior

This commit is contained in:
2026-07-15 21:04:05 +09:00
parent 06a16e5741
commit 83398044c6
77 changed files with 6377 additions and 391 deletions

View File

@@ -89,6 +89,9 @@ public sealed class LegacyNamedPlaylistOperatorIntegrationTests
Assert.Equal("005930", row.StockCode);
Assert.Equal("5001", row.SceneAlias);
Assert.Equal("코스피", row.PlayoutSelection?.GroupCode);
Assert.True(row.IsActive);
Assert.False(row.IsSelected);
Assert.Equal(0, controller.CreatePlayoutRequest().SelectedIndexZeroBased);
}
[Fact]
@@ -156,6 +159,45 @@ public sealed class LegacyNamedPlaylistOperatorIntegrationTests
saved.NamedPlaylist?.LastMutationOutcome);
}
[Fact]
public async Task NamedPlaylistIdentityDoesNotChangeWhenMovingAveragesChange()
{
var persistence = new OperatorNamedPlaylistPersistence([]);
var controller = CreateController(persistence);
controller.SelectTab(LegacyOperatorTabId.Index);
var candle = LegacyFixedActionCatalog.Default
.GetActions(LegacyFixedMarket.Index)
.First(action => action.SupportsMovingAverages);
controller.SetMovingAverages(ma5: false, ma20: false);
var added = controller.ActivateFixedAction(candle.Id);
var raw = Assert.Single(added.Playlist);
Assert.Equal(string.Empty, raw.PlayoutSelection!.GraphicType);
controller.SetMovingAverages(ma5: true, ma20: false);
Assert.Equal(
"MA5",
Assert.Single(controller.CreatePlayoutRequest().Playlist).Selection!.GraphicType);
var listed = await controller.RefreshNamedPlaylistsAsync();
controller.SelectNamedPlaylist(
Assert.Single(listed.NamedPlaylist!.Definitions).DefinitionId);
await controller.SaveCurrentNamedPlaylistAsync();
var firstStored = Assert.Single(persistence.LastReplaceItems!).Selection;
controller.SetMovingAverages(ma5: false, ma20: true);
Assert.Equal(
"MA20",
Assert.Single(controller.CreatePlayoutRequest().Playlist).Selection!.GraphicType);
await controller.SaveCurrentNamedPlaylistAsync();
var secondStored = Assert.Single(persistence.LastReplaceItems!).Selection;
Assert.Equal(firstStored, secondStored);
Assert.Equal(raw.GraphicType, secondStored.GraphicType);
Assert.DoesNotContain("MA5", secondStored.GraphicType, StringComparison.Ordinal);
Assert.DoesNotContain("MA20", secondStored.GraphicType, StringComparison.Ordinal);
Assert.Equal(string.Empty,
Assert.Single(controller.Current.Playlist).PlayoutSelection!.GraphicType);
}
[Fact]
public async Task Save_to_opaque_id_selects_and_writes_once_in_one_native_command()
{