Remove initial server health check and bump Harbor versions
This commit is contained in:
@@ -5,6 +5,7 @@ import test from 'node:test';
|
||||
|
||||
const root = path.resolve(import.meta.dirname, '../..');
|
||||
const styles = fs.readFileSync(path.join(root, 'src/web/styles.css'), 'utf8');
|
||||
const component = fs.readFileSync(path.join(root, 'src/web/components/ClientOverviewPage.jsx'), 'utf8');
|
||||
|
||||
function rule(selector, source = styles) {
|
||||
const escaped = selector.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
||||
@@ -33,12 +34,15 @@ test('desktop layout keeps the power control on a symmetric center axis', () =>
|
||||
test('server rows scroll without moving the subscription column or showing a scrollbar', () => {
|
||||
const scroll = rule('.client-server-scroll');
|
||||
const simpleScroll = rule('.client-server-mode-panel.is-simple .client-server-scroll');
|
||||
const grid = rule('.client-server-grid');
|
||||
|
||||
assert.match(scroll, /overflow-y:\s*auto/);
|
||||
assert.match(scroll, /scrollbar-width:\s*none/);
|
||||
assert.match(styles, /\.client-server-scroll::-webkit-scrollbar\s*\{[\s\S]*display:\s*none/);
|
||||
assert.match(simpleScroll, /max-height:\s*none/);
|
||||
assert.match(simpleScroll, /overflow:\s*visible/);
|
||||
assert.match(grid, /width:\s*min\(100%, 150px\)/);
|
||||
assert.doesNotMatch(rule('.client-servers.is-scalable .client-server-grid'), /width:/);
|
||||
});
|
||||
|
||||
test('tablet and mobile regions use normal flow with viewport-safe widths', () => {
|
||||
@@ -92,3 +96,21 @@ test('tooltips stay opaque, above adjacent content, and do not stick after point
|
||||
assert.match(rule('.harbor-version-tooltip'), /background:\s*oklch\(0\.14 0\.012 145\)/);
|
||||
assert.match(rule('.harbor-mode-tooltip'), /background:\s*oklch\(0\.14 0\.012 145\)/);
|
||||
});
|
||||
|
||||
test('subscription validation waits for the provider and keeps diagnostics below errors', () => {
|
||||
assert.match(component, /api\.subscription\.validate\(normalizedSubscriptionUrl/);
|
||||
assert.match(component, /status: 'checking'/);
|
||||
assert.match(component, /status: 'valid'/);
|
||||
assert.match(component, /message: ERROR_DEFINITIONS\.SUBSCRIPTION_INVALID\.message/);
|
||||
assert.match(component, /subscriptionValidationStatus === 'checking' \? '…' : '×'/);
|
||||
assert.match(component, /if \(error\?\.context === 'subscription'\) onDismissError\(\)/);
|
||||
assert.match(component, /error\.retry[\s\S]*error\.correlationId/);
|
||||
assert.match(rule('.client-inline-error.is-subscription small'), /flex-basis:\s*100%/);
|
||||
assert.match(rule('.client-inline-error.is-subscription small'), /opacity:\s*0\.45/);
|
||||
assert.match(styles, /@keyframes client-subscription-error-in[\s\S]*filter:\s*blur\(7px\)/);
|
||||
assert.match(styles, /@keyframes client-subscription-code-in[\s\S]*transform:\s*translateY\(-2px\)/);
|
||||
assert.match(
|
||||
/@media \(prefers-reduced-motion: reduce\) \{([\s\S]*)\n\}/.exec(styles)?.[1] || '',
|
||||
/\.client-inline-error\.is-subscription > \*/,
|
||||
);
|
||||
});
|
||||
|
||||
@@ -17,8 +17,11 @@ test('rule editor add latency stays constant and dirty exits are guarded', () =>
|
||||
assert.match(component, /activeLocalRules/);
|
||||
assert.match(component, /localRulesRevision/);
|
||||
assert.match(component, /Не сохранено/);
|
||||
assert.match(component, /if \(!runtimeActive\) return \['saved', 'Сохранено'\]/);
|
||||
assert.match(component, /Ждёт перезапуска/);
|
||||
assert.match(component, /Перезапустить VPN/);
|
||||
assert.match(component, /const localRulesPendingRestart = connected && state\?\.route\?\.localRulesPendingRestart === true/);
|
||||
assert.match(component, /if \(!connected \|\| !result\.state\.route\.localRulesPendingRestart\) setLocalRulesOpen\(false\)/);
|
||||
assert.match(component, /client-deletable-row/);
|
||||
assert.match(component, /className="client-delete-strike"[\s\S]*onAnimationEnd/);
|
||||
assert.doesNotMatch(component, /client-rule-delete-cross/);
|
||||
|
||||
@@ -36,11 +36,9 @@ test('server picker handles 1, 30 and 300 stable-ID servers with duplicate label
|
||||
assert.equal(SERVER_RESULT_WINDOW, 60);
|
||||
});
|
||||
|
||||
test('server picker checks health once on load, keeps manual refresh and bounds the result window', () => {
|
||||
test('server picker checks health only on manual refresh and bounds the result window', () => {
|
||||
assert.doesNotMatch(overview, /pingAll|servers\.ping/);
|
||||
assert.match(picker, /const initialCheckStarted = useRef\(false\)/);
|
||||
assert.match(picker, /if \(initialCheckStarted\.current \|\| !servers\.length\) return/);
|
||||
assert.match(picker, /initialCheckStarted\.current = true;\s*checkVisible\(\)/);
|
||||
assert.doesNotMatch(picker, /checkVisible\(\);/);
|
||||
assert.match(picker, /onClick={checkVisible}/);
|
||||
assert.match(picker, /\{ \.\.\.current\[id\], checking: true \}/);
|
||||
assert.match(picker, /700 - \(performance\.now\(\) - startedAt\)/);
|
||||
|
||||
Reference in New Issue
Block a user