화면
", appearance, StringComparison.Ordinal); Assert.Contains("id=\"operator-color-theme\"", appearance, StringComparison.Ordinal); Assert.Contains("value=\"system\">자동", appearance, StringComparison.Ordinal); Assert.Contains("value=\"light\">라이트", appearance, StringComparison.Ordinal); Assert.Contains("value=\"dark\">다크", appearance, StringComparison.Ordinal); Assert.Contains("id=\"operator-view-mode\"", appearance, StringComparison.Ordinal); Assert.Contains("그래픽 목록", appearance, StringComparison.Ordinal); Assert.Contains("value=\"automatic\">자동", appearance, StringComparison.Ordinal); Assert.Contains("value=\"compact\">간결한 목록", appearance, StringComparison.Ordinal); Assert.Contains("value=\"cards\">비주얼 카드", appearance, StringComparison.Ordinal); Assert.Contains("id=\"operator-start-workspace\"", appearance, StringComparison.Ordinal); Assert.Contains("value=\"stockCut\">종목·컷", appearance, StringComparison.Ordinal); Assert.Contains("value=\"lastWorkspace\">마지막 화면", appearance, StringComparison.Ordinal); Assert.DoesNotContain("()); Assert.Contains("pendingOperatorSettingsFocusId", settingsRender, StringComparison.Ordinal); Assert.Contains("target.focus({ preventScroll: true });", settingsRender, StringComparison.Ordinal); } [Fact] public void SettingsKeepsSafeDiagnosticsWithoutProtectedValueExplanations() { foreach (var id in new[] { "operator-settings-app-version", "operator-settings-playout-mode", "operator-settings-playout-connection", "operator-settings-oracle-state", "operator-settings-maria-state", "operator-settings-db-monitor" }) { Assert.Contains($"id=\"{id}\"", Markup, StringComparison.Ordinal); } Assert.Contains("id=\"operator-navigation-expanded\"", Markup, StringComparison.Ordinal); Assert.Contains("databasePollingSeconds", App, StringComparison.Ordinal); Assert.Contains("LegacyOperatorFolderValidator.TryValidate", SettingsHost, StringComparison.Ordinal); Assert.Contains("CanReadSelectedDatabaseProfile", SettingsHost, StringComparison.Ordinal); Assert.Contains("ResolveDatabaseHealthLabel", SettingsHost, StringComparison.Ordinal); Assert.Contains("\"저장됨\"", SettingsHost, StringComparison.Ordinal); Assert.Contains("\"저장됨 · 재시작 필요\"", SettingsHost, StringComparison.Ordinal); Assert.Contains("\"초기화됨 · 재시작 필요\"", SettingsHost, StringComparison.Ordinal); Assert.Contains("\"사용 가능\"", SettingsHost, StringComparison.Ordinal); Assert.DoesNotContain("외부 영상", SettingsHost, StringComparison.Ordinal); Assert.DoesNotContain("보호되는 운영 설정", Markup, StringComparison.Ordinal); Assert.DoesNotContain("DB 자격 증명", Markup, StringComparison.Ordinal); Assert.DoesNotContain("Tornado2 송출 대상", Markup, StringComparison.Ordinal); Assert.DoesNotContain("Live/DryRun 권한", Markup, StringComparison.Ordinal); Assert.DoesNotContain("장면 허용 목록", Markup, StringComparison.Ordinal); } private static string Slice(string source, string startMarker, string endMarker) { var start = source.IndexOf(startMarker, StringComparison.Ordinal); Assert.True(start >= 0, $"Missing start marker: {startMarker}"); var end = source.IndexOf(endMarker, start, StringComparison.Ordinal); Assert.True(end > start, $"Missing end marker: {endMarker}"); return source[start..end]; } 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."); } }