using System.Text.RegularExpressions; namespace MBN_STOCK_WEBVIEW.LegacyWeb.Tests; public sealed class LegacyWorkspaceLayoutContractTests { private static readonly string RepositoryRoot = FindRepositoryRoot(); private static readonly string WebRoot = Path.Combine( RepositoryRoot, "src", "MBN_STOCK_WEBVIEW.LegacyParityApp", "Web"); private static readonly string Markup = File.ReadAllText(Path.Combine(WebRoot, "index.html")); private static readonly string Styles = File.ReadAllText(Path.Combine(WebRoot, "styles.css")); private static readonly string Navigation = File.ReadAllText( Path.Combine(WebRoot, "workspace-navigation.js")); [Fact] public void ShellUsesSwitchableWorkspaceBesidePersistentSchedule() { var workspaceStart = Markup.IndexOf("id=\"workspace-region\"", StringComparison.Ordinal); var stockStart = Markup.IndexOf("id=\"stock-workspace\"", StringComparison.Ordinal); var catalogStart = Markup.IndexOf("id=\"catalog-workspace\"", StringComparison.Ordinal); var scheduleStart = Markup.IndexOf("class=\"playlist-panel\"", StringComparison.Ordinal); Assert.True(workspaceStart >= 0); Assert.True(stockStart > workspaceStart); Assert.True(catalogStart > stockStart); Assert.True(scheduleStart > catalogStart); Assert.Matches( @"<\/section>\s*<\/div>\s*<\/section>\s*<\/section>\s*
]*hidden inert", Markup); Assert.Contains("항상 표시

송출 스케줄

", Markup, StringComparison.Ordinal); } [Fact] public void WorkAndScheduleUseResponsiveTwoToOneColumns() { Assert.Contains( "grid-template-columns: minmax(900px, 2fr) minmax(600px, 1fr);", Styles, StringComparison.Ordinal); Assert.Matches( new Regex( @"\.playlist-toolbar\s*\{[^}]*flex-wrap:\s*wrap", RegexOptions.CultureInvariant), Styles); Assert.Matches( new Regex( @"\.playlist-row\s*\{[^}]*min-width:\s*600px", RegexOptions.CultureInvariant), Styles); } [Fact] public void NavigationChangesPresentationWithoutNativeOrStoredState() { Assert.Contains("entry.view.hidden = !isCurrent", Navigation, StringComparison.Ordinal); Assert.Contains( "entry.view.toggleAttribute(\"inert\", !isCurrent)", Navigation, StringComparison.Ordinal); Assert.Contains("nav-collapsed", Navigation, StringComparison.Ordinal); Assert.DoesNotContain("postMessage", Navigation, StringComparison.Ordinal); Assert.DoesNotContain("localStorage", Navigation, StringComparison.Ordinal); Assert.DoesNotContain("sessionStorage", Navigation, StringComparison.Ordinal); } private static string FindRepositoryRoot() { var directory = new DirectoryInfo(AppContext.BaseDirectory); while (directory is not null) { if (File.Exists(Path.Combine(directory.FullName, "MBN_STOCK_WEBVIEW.sln"))) { return directory.FullName; } directory = directory.Parent; } throw new DirectoryNotFoundException("Repository root could not be located."); } }