feat: complete legacy parity and modernize operator UI
This commit is contained in:
@@ -4,12 +4,17 @@ namespace MBN_STOCK_WEBVIEW.LegacyWeb.Tests;
|
||||
|
||||
public sealed class LegacyGraphClickParityWebTests
|
||||
{
|
||||
private static readonly string RepositoryRoot = FindRepositoryRoot();
|
||||
private static readonly string App = File.ReadAllText(Path.Combine(
|
||||
FindRepositoryRoot(),
|
||||
RepositoryRoot,
|
||||
"src",
|
||||
"MBN_STOCK_WEBVIEW.LegacyParityApp",
|
||||
"Web",
|
||||
"app.js"));
|
||||
private static readonly string PackageInputHarness = File.ReadAllText(Path.Combine(
|
||||
RepositoryRoot,
|
||||
"scripts",
|
||||
"Test-LegacyPackageInput.mjs"));
|
||||
|
||||
[Fact]
|
||||
public void Uc3_targets_select_on_single_click_and_fill_slots_only_on_double_click()
|
||||
@@ -52,7 +57,12 @@ public sealed class LegacyGraphClickParityWebTests
|
||||
}
|
||||
|
||||
Assert.Contains("comparisonTargetClickTimer", singleClick, StringComparison.Ordinal);
|
||||
Assert.Contains("}, 250);", singleClick, StringComparison.Ordinal);
|
||||
Assert.Contains("beginComparisonTargetPendingSelection", singleClick,
|
||||
StringComparison.Ordinal);
|
||||
Assert.Contains("deferLegacySingleClick(function () {", singleClick,
|
||||
StringComparison.Ordinal);
|
||||
Assert.Contains("clearComparisonTargetPendingSelection(true)", singleClick,
|
||||
StringComparison.Ordinal);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@@ -65,7 +75,7 @@ public sealed class LegacyGraphClickParityWebTests
|
||||
|
||||
Assert.Matches(
|
||||
new Regex(
|
||||
"addEventListener\\(\"click\"[\\s\\S]*?setTimeout[\\s\\S]*?send\\(\"select-manual-vi-result\"",
|
||||
"addEventListener\\(\"click\"[\\s\\S]*?beginManualViResultPendingSelection[\\s\\S]*?deferLegacySingleClick[\\s\\S]*?send\\(\"select-manual-vi-result\"",
|
||||
RegexOptions.CultureInvariant),
|
||||
manual);
|
||||
Assert.Matches(
|
||||
@@ -75,6 +85,79 @@ public sealed class LegacyGraphClickParityWebTests
|
||||
manual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GraphE_stock_candidate_single_click_focuses_and_double_click_selects_once()
|
||||
{
|
||||
var doubleStart = App.IndexOf(
|
||||
"manualWorkspace.addEventListener(\"dblclick\"",
|
||||
StringComparison.Ordinal);
|
||||
var clickStart = App.IndexOf(
|
||||
"manualWorkspace.addEventListener(\"click\"",
|
||||
doubleStart + 1,
|
||||
StringComparison.Ordinal);
|
||||
var keyStart = App.IndexOf(
|
||||
"manualWorkspace.addEventListener(\"keydown\"",
|
||||
clickStart + 1,
|
||||
StringComparison.Ordinal);
|
||||
Assert.True(doubleStart >= 0 && clickStart > doubleStart && keyStart > clickStart);
|
||||
var doubleClick = App[doubleStart..clickStart];
|
||||
var singleClick = App[clickStart..keyStart];
|
||||
|
||||
Assert.Contains("button[data-manual-stock-result-id]", doubleClick,
|
||||
StringComparison.Ordinal);
|
||||
Assert.Contains("selectManualFinancialStock(stock)", doubleClick,
|
||||
StringComparison.Ordinal);
|
||||
Assert.DoesNotContain("focusManualFinancialStock(stock)", doubleClick,
|
||||
StringComparison.Ordinal);
|
||||
Assert.Contains("focusManualFinancialStock(stock)", singleClick,
|
||||
StringComparison.Ordinal);
|
||||
Assert.DoesNotContain("queueManualFinancialStockSelection", App,
|
||||
StringComparison.Ordinal);
|
||||
|
||||
var helperStart = App.IndexOf(
|
||||
"function focusManualFinancialStock",
|
||||
StringComparison.Ordinal);
|
||||
var helperEnd = App.IndexOf(
|
||||
"function captureManualDraftForChangedModel",
|
||||
helperStart,
|
||||
StringComparison.Ordinal);
|
||||
Assert.True(helperStart >= 0 && helperEnd > helperStart);
|
||||
var helper = App[helperStart..helperEnd];
|
||||
Assert.DoesNotContain("deferLegacySingleClick", helper, StringComparison.Ordinal);
|
||||
Assert.Contains("stock.focus({ preventScroll: true })", helper,
|
||||
StringComparison.Ordinal);
|
||||
Assert.Single(
|
||||
Regex.Matches(helper, "send\\(\"select-manual-financial-stock\"")
|
||||
.Cast<Match>());
|
||||
|
||||
var keyDown = App[keyStart..];
|
||||
Assert.Contains("selectManualFinancialStock(stock)", keyDown,
|
||||
StringComparison.Ordinal);
|
||||
Assert.Contains("event.preventDefault();", keyDown, StringComparison.Ordinal);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Packaged_input_harness_double_clicks_GraphE_candidate_and_proves_one_intent()
|
||||
{
|
||||
Assert.Contains("beforeCandidateMessageSequence", PackageInputHarness,
|
||||
StringComparison.Ordinal);
|
||||
Assert.Contains("await pointerDoubleClick(", PackageInputHarness,
|
||||
StringComparison.Ordinal);
|
||||
Assert.Contains("select verified stock by slow Windows double-click", PackageInputHarness,
|
||||
StringComparison.Ordinal);
|
||||
Assert.Contains("message.sequence > beforeCandidateMessageSequence", PackageInputHarness,
|
||||
StringComparison.Ordinal);
|
||||
Assert.Contains("candidateMessages.length !== 1", PackageInputHarness,
|
||||
StringComparison.Ordinal);
|
||||
Assert.Contains("candidateMessages[0].type !== \"select-manual-financial-stock\"",
|
||||
PackageInputHarness,
|
||||
StringComparison.Ordinal);
|
||||
Assert.Contains("await sleep(350);", PackageInputHarness, StringComparison.Ordinal);
|
||||
Assert.Contains("SHOULD_CLEAR_ON_STOCK_CHANGE", PackageInputHarness,
|
||||
StringComparison.Ordinal);
|
||||
Assert.Contains("focusedCandidateId", PackageInputHarness, StringComparison.Ordinal);
|
||||
}
|
||||
|
||||
private static string FindRepositoryRoot()
|
||||
{
|
||||
var directory = new DirectoryInfo(AppContext.BaseDirectory);
|
||||
|
||||
Reference in New Issue
Block a user