Files
BetterDesk/web-nodejs/tests/helpers.js
T
UNITRONIX d39110b2ae Add tests, i18n updates, chat & remote fixes
Add unit tests and test helpers (5 suites, 41 tests) and test npm scripts; introduce deviceStatusPush service and WS real-time device status push integration. Fix chatRelay to acknowledge connections (send `welcome`), and apply multiple web remote/rdclient fixes (video ack/timing, keyframe refresh, SourceBuffer trimming, input focus handling) to improve FPS and control. Add new server route file (system.routes.js), new device-status service, update server.js and package.json, and modify various frontend CSS/JS/views. Update English and Polish locale files with many new widget/i18n keys and remove the Russian locale file (ru.json). Also include assorted UI/desktop-widget dashboard tweaks and documentation status updates in .github/copilot-instructions.md.
2026-03-27 00:34:12 +01:00

110 lines
3.1 KiB
JavaScript

/**
* BetterDesk Console - Test Helper
* Creates a minimal Express app with mocked services for unit testing.
*/
const express = require('express');
const session = require('express-session');
const path = require('path');
/**
* Create a minimal Express app for testing routes.
* Mocks session, i18n, CSRF, and template engine.
*/
function createTestApp() {
const app = express();
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
// Session middleware (in-memory for tests)
app.use(session({
secret: 'test-secret-key-for-unit-tests',
resave: false,
saveUninitialized: true,
cookie: { secure: false }
}));
// Mock i18n - req.t() returns the key
app.use((req, _res, next) => {
req.t = (key) => key;
next();
});
// EJS view engine (templates not rendered in most API tests)
app.set('view engine', 'ejs');
app.set('views', path.join(__dirname, '..', 'views'));
return app;
}
/**
* Helper to set a session on the test agent.
* Uses a small middleware to inject session values.
*/
function withAuth(app, user = {}) {
const defaults = {
id: 1,
username: 'admin',
role: 'admin',
...user
};
app.use((req, _res, next) => {
if (!req._authApplied) {
req.session.userId = defaults.id;
req.session.user = defaults;
req._authApplied = true;
}
next();
});
}
/**
* Create a mock database service.
*/
function createMockDb() {
return {
logAction: jest.fn().mockResolvedValue(undefined),
getUser: jest.fn().mockResolvedValue(null),
getAllUsers: jest.fn().mockResolvedValue([]),
createUser: jest.fn().mockResolvedValue({ id: 1 }),
updateUser: jest.fn().mockResolvedValue(undefined),
deleteUser: jest.fn().mockResolvedValue(undefined),
getPeerSysinfo: jest.fn().mockResolvedValue(null),
getLatestPeerMetric: jest.fn().mockResolvedValue(null),
getPeerMetrics: jest.fn().mockResolvedValue([]),
getDeviceGroupsForPeer: jest.fn().mockResolvedValue([]),
getFolders: jest.fn().mockResolvedValue([]),
createFolder: jest.fn().mockResolvedValue({ id: 1 }),
updateFolder: jest.fn().mockResolvedValue(undefined),
deleteFolder: jest.fn().mockResolvedValue(undefined),
cleanupDeletedPeerData: jest.fn().mockResolvedValue(undefined),
getAuditLog: jest.fn().mockResolvedValue([])
};
}
/**
* Create a mock serverBackend service.
*/
function createMockBackend() {
return {
getAllDevices: jest.fn().mockResolvedValue([]),
getDeviceById: jest.fn().mockResolvedValue(null),
updateDevice: jest.fn().mockResolvedValue(undefined),
deleteDevice: jest.fn().mockResolvedValue(undefined),
getServerStats: jest.fn().mockResolvedValue({
totalDevices: 0,
onlineDevices: 0,
offlineDevices: 0
})
};
}
module.exports = {
createTestApp,
withAuth,
createMockDb,
createMockBackend
};