Files
hermes-agent/apps/desktop/electron/data-paths.test.ts

79 lines
2.9 KiB
TypeScript

import assert from 'node:assert/strict'
import os from 'node:os'
import path from 'node:path'
import { afterEach, test, vi } from 'vitest'
import { platformDefaultHermesHome, resolveDesktopHermesHome, resolveDesktopUserData } from './data-paths'
import { controlSocketPath } from './ssh-connection'
afterEach((): void => {
vi.unstubAllEnvs()
})
test.skipIf(process.platform === 'win32')('local SSH sockets use the suffixed default root', (): void => {
vi.stubEnv('HERMES_DATA_DIR_SUFFIX', 'magic-test')
const socket: string = controlSocketPath('user', 'host', 22)
assert.equal(path.dirname(socket), path.join(platformDefaultHermesHome(os.homedir()), 'desktop-ssh'))
})
test('default data roots append the suffix literally on each platform', (): void => {
for (const platform of ['linux', 'darwin', 'win32'] as const) {
const paths: typeof path = platform === 'win32' ? path.win32 : path.posix
const home: string = platform === 'win32' ? 'C:\\Users\\test' : '/home/test'
const local: string = paths.join(home, 'AppData', 'Local')
const userData: string = paths.join(home, 'app-data', 'Hermes')
const base: string = platform === 'win32' ? paths.join(local, 'hermes') : paths.join(home, '.hermes')
for (const suffix of ['', '-asdfasdf', 'magic-test', ' spaced ']) {
const env: NodeJS.ProcessEnv = { LOCALAPPDATA: local, HERMES_DATA_DIR_SUFFIX: suffix }
assert.equal(platformDefaultHermesHome(home, env, platform), base + suffix)
assert.equal(resolveDesktopUserData(userData, env), userData + suffix)
assert.equal(
resolveDesktopHermesHome({ home, env, platform, directoryExists: (): boolean => false }),
base + suffix
)
}
}
})
test('explicit homes and userData retain precedence, and suffixed Windows homes never use legacy state', (): void => {
const home: string = '/home/test'
const env: NodeJS.ProcessEnv = {
HERMES_DATA_DIR_SUFFIX: 'magic-test',
HERMES_HOME: '/explicit/home',
HERMES_DESKTOP_USER_DATA_DIR: '/explicit/electron'
}
assert.equal(resolveDesktopUserData('/default/electron', env), path.resolve(env.HERMES_DESKTOP_USER_DATA_DIR!))
assert.equal(resolveDesktopHermesHome({ home, env, platform: 'linux' }), env.HERMES_HOME)
delete env.HERMES_HOME
assert.equal(resolveDesktopHermesHome({ home, env, platform: 'linux' }), '/explicit/electron/hermes-home')
const windowsHome: string = 'C:\\Users\\test'
const windowsEnv: NodeJS.ProcessEnv = { HERMES_DATA_DIR_SUFFIX: 'magic-test' }
const expected: string = path.win32.join(windowsHome, 'AppData', 'Local', 'hermesmagic-test')
assert.equal(
resolveDesktopHermesHome({
home: windowsHome,
env: windowsEnv,
platform: 'win32',
directoryExists: (): boolean => true
}),
expected
)
assert.equal(
resolveDesktopHermesHome({
home: windowsHome,
env: windowsEnv,
platform: 'win32',
readWindowsHome: (): string => 'C:\\custom'
}),
'C:\\custom'
)
})