unrip/test/operator-dashboard-ui-static.test.mjs
philipp 99ca09b69e
All checks were successful
deploy / deploy (push) Successful in 33s
Surface NEAR Intents upstream status truth
Proof: npm test; npm run operator-dashboard:build; node --test test/near-intents-status.test.mjs test/operator-dashboard.test.mjs test/operator-dashboard-ui-static.test.mjs; PYTHONPATH=. python3 test/repo_deployments_test.py; kubectl kustomize deploy/k8s/base; live normalization against https://status.near-intents.org returned disrupted/upstream paused for the current 1Click quoting pause.

Assumptions: NEAR Intents public status page API is the official upstream disruption source for operator display; relay websocket reachability remains separately observed by ingest and executor state.

Still fake: This does not add an alternate quote source or recover trading while NEAR Intents quoting is paused; it only makes the upstream disruption explicit and separates it from local service freshness.
2026-04-16 16:03:31 +02:00

57 lines
3.1 KiB
JavaScript

import test from 'node:test';
import assert from 'node:assert/strict';
import { readFileSync } from 'node:fs';
const strategySource = readFileSync(new URL('../src/operator-dashboard/static/pages/StrategyPage.jsx', import.meta.url), 'utf8');
const fundsSource = readFileSync(new URL('../src/operator-dashboard/static/pages/FundsPage.jsx', import.meta.url), 'utf8');
const stylesSource = readFileSync(new URL('../src/operator-dashboard/static/styles.css', import.meta.url), 'utf8');
const serviceCardSource = readFileSync(new URL('../src/operator-dashboard/static/components/ServiceCard.jsx', import.meta.url), 'utf8');
const statusBarSource = readFileSync(new URL('../src/operator-dashboard/static/components/StatusBar.jsx', import.meta.url), 'utf8');
test('strategy page owns consolidated quote lifecycle and successful trade tables', () => {
assert.match(strategySource, /Quote lifecycle/);
assert.match(strategySource, /Incoming quotes and what happened next/);
assert.match(strategySource, /Responded\?/);
assert.match(strategySource, /Successful trades only/);
assert.match(strategySource, /Gross edge est\./);
assert.match(strategySource, /successful_trade_gross_edge_estimate_eure/);
assert.match(strategySource, /before fees/);
assert.match(strategySource, /Show lifecycle/);
assert.match(strategySource, /formatAgeFromTimestamp/);
assert.match(strategySource, /quote-row-flash/);
assert.match(strategySource, /Submitted means the relay accepted the response; it does not prove a trade\./);
assert.doesNotMatch(strategySource, /Actionable|actionable/);
});
test('funds page no longer renders duplicate quote and submission tables', () => {
assert.doesNotMatch(fundsSource, /Recent incoming quotes/);
assert.doesNotMatch(fundsSource, /Recent submitted quote terms/);
assert.doesNotMatch(fundsSource, /Submitted quote responses/);
assert.doesNotMatch(fundsSource, /Durable ledger/);
});
test('dashboard freshness surfaces show age and exact timestamp evidence', () => {
assert.match(serviceCardSource, /formatAgeFromTimestamp\(service\.freshness_at, now\)/);
assert.match(serviceCardSource, /formatTimestamp\(service\.freshness_at\)/);
assert.match(serviceCardSource, /Freshness at/);
assert.match(stylesSource, /\.quote-row-flash td/);
assert.match(stylesSource, /@keyframes quote-row-flash-cell/);
});
test('mobile status bar uses normal document flow instead of sticky viewport positioning', () => {
assert.match(
stylesSource,
/@media \(max-width: 720px\)[\s\S]*?\.status-bar \{[\s\S]*?position: static;[\s\S]*?top: auto;[\s\S]*?z-index: auto;[\s\S]*?\}/,
);
});
test('dashboard UI exposes official NEAR upstream status separately from local freshness', () => {
assert.match(statusBarSource, /NEAR Intents/);
assert.match(statusBarSource, /near_intents_upstream_label/);
assert.match(statusBarSource, /near_intents_upstream_reason/);
assert.match(statusBarSource, /Official status at/);
assert.match(serviceCardSource, /upstream_status/);
assert.match(serviceCardSource, /Upstream at/);
assert.match(serviceCardSource, /decisive_reason/);
});