Files
BetterDesk/web-nodejs/tests/dbAdapter.userStrategyAssignment.test.js
T
UNITRONIX 780cfb6660 fix(users): implement missing ensureUserGuid for strategy assignment
Refs #384

setUserStrategyAssignment and getUserStrategyGuid called ensureUserGuid in dbAdapter but the helper was never implemented, causing TypeError and generic Server error on every user create/update. Add SQLite and PostgreSQL helpers plus integration tests.

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-08-24 14:25:23 +02:00

69 lines
2.5 KiB
JavaScript

'use strict';
const fs = require('fs');
const os = require('os');
const path = require('path');
const Database = require('better-sqlite3');
describe('dbAdapter user strategy assignment (Issue #384)', () => {
let tempDir;
let adapter;
beforeEach(async () => {
tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'betterdesk-user-strategy-'));
process.env.DATA_DIR = path.join(tempDir, 'panel-data');
process.env.DB_PATH = path.join(tempDir, 'db_v2.sqlite3');
process.env.DB_TYPE = 'sqlite';
jest.resetModules();
const { getAdapter } = require('../services/dbAdapter');
adapter = getAdapter();
await adapter.init();
});
afterEach(async () => {
if (adapter && typeof adapter.close === 'function') {
await adapter.close();
}
delete process.env.DATA_DIR;
delete process.env.DB_PATH;
delete process.env.DB_TYPE;
fs.rmSync(tempDir, { recursive: true, force: true });
});
it('assigns a strategy to a user without guid and auto-generates user guid', async () => {
const user = await adapter.createUser('operator1', 'hash-placeholder', 'operator');
expect(user.id).toBeTruthy();
const strategy = await adapter.createStrategy({
name: 'Remote Operator',
permissions: { remote_control: true },
});
expect(strategy.guid).toBeTruthy();
await expect(
adapter.setUserStrategyAssignment(user.id, strategy.guid)
).resolves.toBe(strategy.guid);
await expect(adapter.getUserStrategyGuid(user.id)).resolves.toBe(strategy.guid);
const db = new Database(process.env.DB_PATH, { readonly: true });
const row = db.prepare('SELECT guid FROM users WHERE id = ?').get(user.id);
db.close();
expect(row.guid).toMatch(
/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i
);
});
it('clears strategy assignment when strategyGuid is empty', async () => {
const user = await adapter.createUser('viewer1', 'hash-placeholder', 'viewer');
const strategy = await adapter.createStrategy({ name: 'Viewer Role' });
await adapter.setUserStrategyAssignment(user.id, strategy.guid);
expect(await adapter.getUserStrategyGuid(user.id)).toBe(strategy.guid);
await expect(adapter.setUserStrategyAssignment(user.id, '')).resolves.toBe('');
expect(await adapter.getUserStrategyGuid(user.id)).toBe('');
});
});