Files
gnome-jarvis/scripts/smoke-settings-store.js
T
snxraven a4073b9020
Rolling release / release (push) Successful in 6m36s
Check Point
2026-09-12 09:07:09 -04:00

26 lines
1.7 KiB
JavaScript

import Gio from 'gi://Gio';
import GLib from 'gi://GLib';
import { SettingsEditor } from '../apps/gnome-extension/[email protected]/settings-editor.js';
const configDir = GLib.get_user_config_dir();
if (!configDir.startsWith('/tmp/jarvis-settings-')) throw new Error('Use an isolated /tmp/jarvis-settings-* XDG_CONFIG_HOME for this check');
const root = Gio.File.new_for_uri(import.meta.url).get_parent().get_parent().get_path();
const directory = `${root}/apps/gnome-extension/[email protected]`;
GLib.mkdir_with_parents(`${configDir}/jarvis`, 0o700);
const file = Gio.File.new_for_path(`${configDir}/jarvis/config.json`);
const write = text => file.replace_contents(text, null, false, Gio.FileCreateFlags.REPLACE_DESTINATION, null);
const read = () => new TextDecoder().decode(file.load_contents(null)[1]);
write(JSON.stringify({ ttsEnabled: false, unrelated: 'original' }));
const editor = new SettingsEditor(directory);
if (editor.values.ttsEnabled !== false) throw new Error('Existing settings were lost');
editor.setValue(editor.fields.find(f => f.key === 'voiceId'), 'M5');
write(JSON.stringify({ ttsEnabled: false, unrelated: 'updated elsewhere', ttsSpeed: 1.25 }));
editor.save();
const saved = JSON.parse(read());
if (saved.voiceId !== 'M5' || saved.ttsSpeed !== 1.25 || saved.unrelated !== 'updated elsewhere' || saved.ttsEnabled !== false) throw new Error('Settings merge failed');
write('{ invalid JSON');
let refused = false;
try { editor.save(); } catch { refused = true; }
if (!refused || read() !== '{ invalid JSON') throw new Error('Invalid JSON was overwritten');
file.delete(null);
print('Settings store smoke passed: existing values, concurrent merge, malformed-file protection');