42 lines
1.6 KiB
TypeScript
42 lines
1.6 KiB
TypeScript
import fs from 'node:fs'
|
|
import os from 'node:os'
|
|
import path from 'node:path'
|
|
|
|
import { expect, test } from 'vitest'
|
|
|
|
import { isolateUpdateWindowEnvironment } from '../../tests/install/e2e-assets/smoke-env.mjs'
|
|
|
|
test('the update window clones userData without inheriting another Electron singleton', (): void => {
|
|
const root = fs.mkdtempSync(path.join(os.tmpdir(), 'update-window-userdata-'))
|
|
const userData = path.join(root, 'electron-user-data')
|
|
fs.mkdirSync(userData)
|
|
fs.writeFileSync(path.join(userData, 'connections.json'), '{"primary":"local"}\n')
|
|
|
|
for (const name of ['SingletonLock', 'SingletonSocket', 'SingletonCookie']) {
|
|
fs.symlinkSync(path.join(root, `${name}-target`), path.join(userData, name))
|
|
}
|
|
|
|
const captured = {
|
|
HERMES_HOME: path.join(root, 'hermes-home'),
|
|
HERMES_DESKTOP_USER_DATA_DIR: userData,
|
|
PATH: process.env.PATH || '',
|
|
}
|
|
|
|
try {
|
|
const isolated = isolateUpdateWindowEnvironment(captured)
|
|
const isolatedUserData = isolated.HERMES_DESKTOP_USER_DATA_DIR
|
|
|
|
expect(isolatedUserData).not.toBe(userData)
|
|
expect(captured.HERMES_DESKTOP_USER_DATA_DIR).toBe(userData)
|
|
expect(isolated.HERMES_HOME).toBe(captured.HERMES_HOME)
|
|
expect(fs.readFileSync(path.join(isolatedUserData, 'connections.json'), 'utf8')).toBe('{"primary":"local"}\n')
|
|
|
|
for (const name of ['SingletonLock', 'SingletonSocket', 'SingletonCookie']) {
|
|
expect(() => fs.lstatSync(path.join(isolatedUserData, name))).toThrow()
|
|
expect(fs.lstatSync(path.join(userData, name)).isSymbolicLink()).toBe(true)
|
|
}
|
|
} finally {
|
|
fs.rmSync(root, { recursive: true, force: true })
|
|
}
|
|
})
|