61 lines
2.0 KiB
JavaScript
61 lines
2.0 KiB
JavaScript
|
|
'use strict';
|
||
|
|
|
||
|
|
// B16 / QA-B16-01: the external version check must be opt-out-able. When the
|
||
|
|
// `update_check_enabled` setting is 'false', checkForUpdates must make NO network
|
||
|
|
// request and report `disabled`. Default (unset/'true') performs the check.
|
||
|
|
const test = require('node:test');
|
||
|
|
const assert = require('node:assert/strict');
|
||
|
|
const os = require('node:os');
|
||
|
|
const path = require('node:path');
|
||
|
|
const fs = require('node:fs');
|
||
|
|
|
||
|
|
const dbPath = path.join(os.tmpdir(), `bill-tracker-updatecheck-test-${process.pid}.sqlite`);
|
||
|
|
process.env.DB_PATH = dbPath;
|
||
|
|
|
||
|
|
const { getDb, setSetting, closeDb } = require('../db/database');
|
||
|
|
const svc = require('../services/updateCheckService');
|
||
|
|
|
||
|
|
test('disabled: makes no external request and returns disabled', async () => {
|
||
|
|
getDb();
|
||
|
|
setSetting('update_check_enabled', 'false');
|
||
|
|
assert.equal(svc.updateCheckEnabled(), false);
|
||
|
|
|
||
|
|
const orig = global.fetch;
|
||
|
|
let called = false;
|
||
|
|
global.fetch = async () => { called = true; throw new Error('fetch must not be called when disabled'); };
|
||
|
|
try {
|
||
|
|
const r = await svc.checkForUpdates(true);
|
||
|
|
assert.equal(r.disabled, true, 'reports disabled');
|
||
|
|
assert.equal(called, false, 'no external fetch when disabled');
|
||
|
|
} finally {
|
||
|
|
global.fetch = orig;
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
test('enabled (default): performs the version check', async () => {
|
||
|
|
setSetting('update_check_enabled', 'true');
|
||
|
|
assert.equal(svc.updateCheckEnabled(), true);
|
||
|
|
|
||
|
|
const orig = global.fetch;
|
||
|
|
global.fetch = async () => ({
|
||
|
|
ok: true,
|
||
|
|
status: 200,
|
||
|
|
json: async () => ({ tag_name: 'v99.0.0', html_url: 'https://example/rel', published_at: '2026-01-01' }),
|
||
|
|
});
|
||
|
|
try {
|
||
|
|
const r = await svc.checkForUpdates(true);
|
||
|
|
assert.notEqual(r.disabled, true);
|
||
|
|
assert.equal(r.latest_version, '99.0.0');
|
||
|
|
assert.equal(r.has_update, true);
|
||
|
|
} finally {
|
||
|
|
global.fetch = orig;
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
test.after(() => {
|
||
|
|
closeDb();
|
||
|
|
for (const suffix of ['', '-wal', '-shm']) {
|
||
|
|
try { fs.rmSync(dbPath + suffix); } catch { /* ignore */ }
|
||
|
|
}
|
||
|
|
});
|