97 lines
2.7 KiB
TypeScript
97 lines
2.7 KiB
TypeScript
/// <reference types="node" />
|
|
|
|
import { beforeEach, afterEach, describe, expect, test } from "vitest";
|
|
import {
|
|
existsSync,
|
|
mkdtempSync,
|
|
readFileSync,
|
|
rmSync,
|
|
writeFileSync,
|
|
} from "node:fs";
|
|
import { join } from "node:path";
|
|
import { tmpdir } from "node:os";
|
|
|
|
import { SettingsService } from "../../src/services/settings";
|
|
|
|
/**
|
|
* Tests for SettingsService persistence and migration behavior.
|
|
*/
|
|
describe("SettingsService", () => {
|
|
let testDir: string;
|
|
let settingsPath: string;
|
|
|
|
beforeEach(() => {
|
|
testDir = mkdtempSync(join(tmpdir(), "xo-cli-settings-test-"));
|
|
settingsPath = join(testDir, ".wallet");
|
|
});
|
|
|
|
afterEach(() => {
|
|
rmSync(testDir, { recursive: true, force: true });
|
|
});
|
|
|
|
test("returns defaults when settings file does not exist", () => {
|
|
const settings = new SettingsService(settingsPath);
|
|
|
|
expect(settings.getDefaultMnemonic()).toBeUndefined();
|
|
expect(settings.getCurrency()).toBe("USD");
|
|
expect(settings.getSettings()).toEqual({ currency: "USD" });
|
|
expect(existsSync(settingsPath)).toBe(false);
|
|
});
|
|
|
|
test("migrates legacy .wallet plaintext mnemonic to JSON", () => {
|
|
writeFileSync(settingsPath, "mnemonic-legacy", "utf8");
|
|
|
|
const settings = new SettingsService(settingsPath);
|
|
|
|
expect(settings.getDefaultMnemonic()).toBe("mnemonic-legacy");
|
|
expect(settings.getCurrency()).toBe("USD");
|
|
|
|
const persisted = JSON.parse(readFileSync(settingsPath, "utf8")) as {
|
|
"default-mnemonic"?: string;
|
|
currency: string;
|
|
};
|
|
expect(persisted).toEqual({
|
|
"default-mnemonic": "mnemonic-legacy",
|
|
currency: "USD",
|
|
});
|
|
});
|
|
|
|
test("normalizes and persists currency and default-mnemonic", () => {
|
|
const settings = new SettingsService(settingsPath);
|
|
|
|
settings.setDefaultMnemonic(" mnemonic-primary ");
|
|
settings.setCurrency("aud");
|
|
|
|
expect(settings.getSettings()).toEqual({
|
|
"default-mnemonic": "mnemonic-primary",
|
|
currency: "AUD",
|
|
});
|
|
|
|
const persisted = JSON.parse(readFileSync(settingsPath, "utf8")) as {
|
|
"default-mnemonic"?: string;
|
|
currency: string;
|
|
};
|
|
expect(persisted).toEqual({
|
|
"default-mnemonic": "mnemonic-primary",
|
|
currency: "AUD",
|
|
});
|
|
});
|
|
|
|
test("emits settings-updated events on setting changes", () => {
|
|
const settings = new SettingsService(settingsPath);
|
|
const events: Array<{ key: string; value: string | undefined }> = [];
|
|
|
|
settings.on("settings-updated", (event) => {
|
|
events.push({ key: event.key, value: event.value });
|
|
});
|
|
|
|
settings.setCurrency("cad");
|
|
settings.setDefaultMnemonic("mnemonic-blue");
|
|
|
|
expect(events).toEqual([
|
|
{ key: "currency", value: "CAD" },
|
|
{ key: "default-mnemonic", value: "mnemonic-blue" },
|
|
]);
|
|
});
|
|
});
|