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

91 lines
3.6 KiB
C#

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\">해외종목</button>", 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.");
}
}