feat: advance legacy UI behavior parity

This commit is contained in:
2026-07-18 10:18:29 +09:00
parent d7ec571343
commit 1302b1b92f
71 changed files with 11244 additions and 1153 deletions

View File

@@ -32,10 +32,10 @@ public sealed class LegacyOverseasOperatorControllerTests
entry.Selection);
Assert.Equal("legacy-overseas-00000001", row.RowId);
Assert.Equal("FOREIGN_INDEX", row.MarketText);
Assert.Equal("나스닥 캔들 20일", row.StockName);
Assert.Equal("해외지수", row.MarketText);
Assert.Equal("나스닥", row.StockName);
Assert.Equal("캔들그래프", row.GraphicType);
Assert.Equal("PRICE", row.Subtype);
Assert.Equal("20일", row.Subtype);
Assert.Equal("1/1", row.PageText);
Assert.Equal("8040", entry.CutCode);
Assert.Equal("FOREIGN_INDEX", selection.GroupCode);
@@ -86,6 +86,32 @@ public sealed class LegacyOverseasOperatorControllerTests
controller.CreatePlayoutRequest().Playlist[1].Selection!.GraphicType);
}
[Fact]
public async Task NonUsStockKeepsOneExactIdentityThroughBothActualUc5SceneAliases()
{
var controller = CreateController(
stocks: [new("London Stock", "LNS@LON", "GB")]);
controller.SelectTab(LegacyOperatorTabId.OverseasStocks);
// UC5's first inserted result is immediately the active RowMode row.
var searched = await controller.SearchOverseasStocksAsync("london");
Assert.Equal("London Stock", searched.Overseas!.Stock.Selected?.InputName);
var oneColumn = controller.ActivateOverseasAction("stock-current");
var candle = controller.ActivateOverseasAction("stock-candle-5d");
var rows = candle.Playlist;
Assert.Equal("5001", rows[0].ToPlayoutEntry().CutCode);
Assert.Equal("8061", rows[1].ToPlayoutEntry().CutCode);
Assert.All(rows, row =>
{
Assert.Equal("FOREIGN_STOCK", row.PlayoutSelection?.GroupCode);
Assert.Equal("London Stock", row.PlayoutSelection?.Subject);
Assert.Equal("LNS@LON|GB|1", row.PlayoutSelection?.DataCode);
});
Assert.Single(oneColumn.Playlist);
}
[Fact]
public async Task OverseasActionsRejectInactiveTabAndStaleSearchIds()
{
@@ -103,7 +129,7 @@ public sealed class LegacyOverseasOperatorControllerTests
var stale = controller.SelectOverseasIndustry(staleId);
Assert.Equal(LegacyOperatorStatusKind.Error, stale.StatusKind);
Assert.Null(stale.Overseas!.Industry.Selected);
Assert.Equal("반도체", stale.Overseas!.Industry.Selected?.KoreanName);
}
private static LegacyOperatorController CreateController(
@@ -147,11 +173,11 @@ public sealed class LegacyOverseasOperatorControllerTests
}
private sealed class StaticStockService(
IReadOnlyList<WorldStockSearchItem> items) : IWorldStockSearchService
IReadOnlyList<WorldStockSearchItem> items) : IOverseasStockSearchService
{
public Task<WorldStockSearchResult> SearchAsync(
string query,
int maximumResults = LegacyWorldStockSearchService.DefaultMaximumResults,
int maximumResults = LegacyOverseasStockSearchService.DefaultMaximumResults,
CancellationToken cancellationToken = default)
{
cancellationToken.ThrowIfCancellationRequested();