Files
BetterDesk/web-nodejs/tests/updateService.nonCritical.test.js
UNITRONIX db0dfade24 fix(windows): avoid drive-root PROJECT_ROOT breaking panel updates (Refs #272)
Default C:\BetterDeskConsole installs no longer treat C:\ as the project root, so installer file writes and SHA tracking succeed; NSSM Access Denied on server restart is non-critical.
2026-07-16 19:38:29 +02:00

64 lines
2.7 KiB
JavaScript

'use strict';
const path = require('path');
const {
isNonCriticalUpdateFailure,
NON_CRITICAL_UPDATE_FAILURES,
splitUpdateFailures,
} = require('../lib/updateFailurePolicy');
const { resolveServerSourceRootForUpdate } = require('../services/updateService');
describe('updateService non-critical failures', () => {
test('treats root-owned installer scripts as non-critical', () => {
expect(isNonCriticalUpdateFailure('betterdesk.sh')).toBe(true);
expect(isNonCriticalUpdateFailure('Dockerfile.server')).toBe(true);
expect(isNonCriticalUpdateFailure('docker-compose.quick.single.yml')).toBe(true);
expect(isNonCriticalUpdateFailure('docker-compose.quick.single.macvlan.yml')).toBe(true);
});
test('treats npm install and service unit cleanup as non-critical', () => {
expect(isNonCriticalUpdateFailure('npm install')).toBe(true);
expect(isNonCriticalUpdateFailure('betterdesk-server.service')).toBe(true);
});
test('treats console file failures as critical', () => {
expect(isNonCriticalUpdateFailure('web-nodejs/services/dbAdapter.js')).toBe(false);
});
test('keeps server binary failures non-critical', () => {
expect(NON_CRITICAL_UPDATE_FAILURES.has('betterdesk-server')).toBe(true);
expect(NON_CRITICAL_UPDATE_FAILURES.has('server-source')).toBe(true);
});
test('falls back to console-local server source when legacy root-owned source is not writable', () => {
if (process.platform === 'win32') {
// On Windows the updater always prefers the configured server root
// (no root-owned /opt layout). Skip the Linux-only fallback path.
return;
}
const legacyRoot = '/opt/betterdesk-server';
const consoleRoot = path.join('/opt', 'BetterDeskConsole', 'betterdesk-server');
const selected = resolveServerSourceRootForUpdate(legacyRoot, {
fallbackRoot: consoleRoot,
canWriteDir: (candidate) => candidate === consoleRoot,
});
expect(selected).toBe(consoleRoot);
});
test('keeps legacy server-source failures non-critical while console file failures stay critical', () => {
const { critical, nonCritical } = splitUpdateFailures([
{ file: 'server-source', error: 'Source download failed: EACCES' },
{ file: 'betterdesk-server/api/auth_handlers.go', error: 'EACCES', nonCritical: true },
{ file: 'web-nodejs/services/dbAdapter.js', error: 'disk full' },
]);
expect(nonCritical.map(f => f.file)).toEqual([
'server-source',
'betterdesk-server/api/auth_handlers.go',
]);
expect(critical.map(f => f.file)).toEqual(['web-nodejs/services/dbAdapter.js']);
});
});