diff --git a/ui/package-lock.json b/ui/package-lock.json index 2ddc1a2..f9d66c8 100644 --- a/ui/package-lock.json +++ b/ui/package-lock.json @@ -1,12 +1,12 @@ { "name": "shellforge-ui", - "version": "0.1.5", + "version": "1.0.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "shellforge-ui", - "version": "0.1.5", + "version": "1.0.3", "dependencies": { "dagre": "^0.8.5", "js-pretty-icons": "^0.3.0", @@ -43,11 +43,17 @@ }, "..": { "name": "shellforge", - "version": "0.1.5", + "version": "1.0.3", "license": "ISC", "dependencies": { "puppeteer": "^22.9.0", "uuid": "^9.0.1" + }, + "devDependencies": { + "@eslint/js": "^10.0.1", + "c8": "^10.1.3", + "eslint": "^10.4.1", + "globals": "^17.6.0" } }, "node_modules/@adobe/css-tools": { diff --git a/ui/package.json b/ui/package.json index 8485343..226d49b 100644 --- a/ui/package.json +++ b/ui/package.json @@ -1,6 +1,6 @@ { "name": "shellforge-ui", - "version": "1.0.2", + "version": "1.0.3", "description": "ShellForge desktop manager for Windows PowerShell automation", "author": "João Luiz de Castro", "private": true, diff --git a/utils/tests/getConfig.test.js b/utils/tests/getConfig.test.js index 66a0362..735298d 100644 --- a/utils/tests/getConfig.test.js +++ b/utils/tests/getConfig.test.js @@ -12,6 +12,9 @@ const { } = require("../getConfig"); const { getPackagedUserDataRoot } = require("../shellforgePaths"); +const RUNTIME_ROOT = path.resolve(__dirname, "..", ".."); +const RUNTIME_CONFIG_PATH = path.join(RUNTIME_ROOT, "config", "config.json"); + function createTempRoot(prefix) { return fs.mkdtempSync(path.join(os.tmpdir(), prefix)); } @@ -43,6 +46,25 @@ function withSavedEnv(envKeys, runTest) { }; } +function withRuntimeConfigBackup(runTest) { + const hadRuntimeConfig = fs.existsSync(RUNTIME_CONFIG_PATH); + const runtimeConfigBackup = hadRuntimeConfig + ? fs.readFileSync(RUNTIME_CONFIG_PATH, "utf8") + : null; + + return async () => { + try { + await runTest(); + } finally { + if (hadRuntimeConfig && runtimeConfigBackup !== null) { + fs.writeFileSync(RUNTIME_CONFIG_PATH, runtimeConfigBackup, "utf8"); + } else if (fs.existsSync(RUNTIME_CONFIG_PATH)) { + fs.unlinkSync(RUNTIME_CONFIG_PATH); + } + } + }; +} + test("resolveUserDataRootFromInputs prefers envUserDataRoot when set", () => { const envRoot = createTempRoot("shellforge-env-root-"); @@ -126,3 +148,23 @@ test( assert.equal(resolveUserDataRoot(), path.resolve(envRoot)); }) ); + +test( + "resolveUserDataRoot wrapper uses AppData when runtime config is missing", + withSavedEnv(["SHELLFORGE_USER_DATA", "APPDATA"], async () => { + delete process.env.SHELLFORGE_USER_DATA; + + const appDataRoot = createTempRoot("shellforge-wrapper-appdata-"); + const packagedUserDataRoot = getPackagedUserDataRoot(appDataRoot); + writeConfigAtRoot(packagedUserDataRoot, '{"actionRunner":{}}'); + process.env.APPDATA = appDataRoot; + + await withRuntimeConfigBackup(async () => { + if (fs.existsSync(RUNTIME_CONFIG_PATH)) { + fs.unlinkSync(RUNTIME_CONFIG_PATH); + } + + assert.equal(resolveUserDataRoot(), packagedUserDataRoot); + })(); + }) +);