namespace MBN_STOCK_WEBVIEW.LegacyWeb.Tests; public sealed class LegacyOverseasParityWebTests { private static readonly string RepositoryRoot = FindRepositoryRoot(); private static readonly string WebRoot = Path.Combine( RepositoryRoot, "src", "MBN_STOCK_WEBVIEW.LegacyParityApp", "Web"); private static readonly string App = File.ReadAllText(Path.Combine(WebRoot, "app.js")); private static readonly string Markup = File.ReadAllText(Path.Combine(WebRoot, "index.html")); private static readonly string Styles = File.ReadAllText(Path.Combine(WebRoot, "styles.css")); [Fact] public void OverseasTabRendersFixedIndustryStockAndActionWorkspaces() { Assert.Contains("data-tab-id=\"overseasStocks\">해외종목", Markup); Assert.Contains("function renderOverseas(state)", App, StringComparison.Ordinal); Assert.Contains("overseas-fixed-list", App, StringComparison.Ordinal); Assert.Contains("미국 해외업종", App, StringComparison.Ordinal); Assert.Contains("미국·대만 해외종목", App, StringComparison.Ordinal); Assert.Contains("overseas-action-panel", App, StringComparison.Ordinal); Assert.Contains("renderOverseas(state);", App, StringComparison.Ordinal); foreach (var selector in new[] { ".overseas-workspace", ".overseas-fixed-list", ".overseas-searches", ".overseas-results", ".overseas-action-panel" }) { Assert.Contains(selector, Styles, StringComparison.Ordinal); } } [Fact] public void OverseasEventsSendOnlyQueriesAndOpaqueIds() { foreach (var intent in new[] { "select-overseas-fixed-index", "search-overseas-industries", "search-overseas-stocks", "select-overseas-industry", "select-overseas-stock", "activate-overseas-action" }) { Assert.Contains($"\"{intent}\"", App, StringComparison.Ordinal); } Assert.Contains("data-overseas-action-id", App, StringComparison.Ordinal); Assert.Contains("event.key === \"Enter\"", App, StringComparison.Ordinal); var clickStart = App.IndexOf( "categoryTree.addEventListener(\"click\"", StringComparison.Ordinal); var changeStart = App.IndexOf( "categoryTree.addEventListener(\"change\"", clickStart, StringComparison.Ordinal); Assert.True(clickStart >= 0 && changeStart > clickStart); Assert.Contains( "button[data-overseas-action-id]", App[clickStart..changeStart], StringComparison.Ordinal); Assert.DoesNotContain("NAS@IXIC", App, StringComparison.Ordinal); Assert.DoesNotContain("FOREIGN_INDEX", App, StringComparison.Ordinal); Assert.DoesNotContain("index-candle-20d", App, StringComparison.Ordinal); } private static string FindRepositoryRoot() { var current = new DirectoryInfo(AppContext.BaseDirectory); while (current is not null) { if (Directory.Exists(Path.Combine(current.FullName, "src")) && Directory.Exists(Path.Combine(current.FullName, "tests"))) { return current.FullName; } current = current.Parent; } throw new DirectoryNotFoundException("Repository root was not found."); } }