BillTracker/tests/updateCheckOptOut.test.js

61 lines
2.0 KiB
JavaScript
Raw Normal View History

'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 */ }
}
});