using System.Text.RegularExpressions; namespace MBN_STOCK_WEBVIEW.LegacyWeb.Tests; public sealed class LegacyGraphClickParityWebTests { private static readonly string App = File.ReadAllText(Path.Combine( FindRepositoryRoot(), "src", "MBN_STOCK_WEBVIEW.LegacyParityApp", "Web", "app.js")); [Fact] public void Uc3_targets_select_on_single_click_and_fill_slots_only_on_double_click() { var doubleStart = App.IndexOf( "categoryTree.addEventListener(\"dblclick\"", StringComparison.Ordinal); var clickStart = App.IndexOf( "categoryTree.addEventListener(\"click\"", doubleStart + 1, StringComparison.Ordinal); var changeStart = App.IndexOf( "categoryTree.addEventListener(\"change\"", clickStart + 1, StringComparison.Ordinal); Assert.True(doubleStart >= 0 && clickStart > doubleStart && changeStart > clickStart); var doubleClick = App[doubleStart..clickStart]; var singleClick = App[clickStart..changeStart]; foreach (var intent in new[] { "choose-comparison-domestic", "choose-comparison-world", "choose-comparison-fixed" }) { Assert.Contains($"\"{intent}\"", doubleClick, StringComparison.Ordinal); Assert.DoesNotContain($"\"{intent}\"", singleClick, StringComparison.Ordinal); } foreach (var intent in new[] { "select-comparison-domestic", "select-comparison-world", "select-comparison-fixed" }) { Assert.Contains($"\"{intent}\"", singleClick, StringComparison.Ordinal); Assert.DoesNotContain($"\"{intent}\"", doubleClick, StringComparison.Ordinal); } Assert.Contains("comparisonTargetClickTimer", singleClick, StringComparison.Ordinal); Assert.Contains("}, 250);", singleClick, StringComparison.Ordinal); } [Fact] public void Vi_result_single_click_selects_and_double_click_adds_without_duplicate_intent() { var start = App.IndexOf("function renderManualLists", StringComparison.Ordinal); var end = App.IndexOf("function openNamedPlaylist", start, StringComparison.Ordinal); Assert.True(start >= 0 && end > start); var manual = App[start..end]; Assert.Matches( new Regex( "addEventListener\\(\"click\"[\\s\\S]*?setTimeout[\\s\\S]*?send\\(\"select-manual-vi-result\"", RegexOptions.CultureInvariant), manual); Assert.Matches( new Regex( "addEventListener\\(\"dblclick\"[\\s\\S]*?clearDelayedClick\\(manualViResultClickTimer\\)[\\s\\S]*?send\\(\"add-manual-vi-result\"", RegexOptions.CultureInvariant), manual); } 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 was not found."); } }