35 lines
2.0 KiB
JavaScript
35 lines
2.0 KiB
JavaScript
import { app, safeStorage } from 'electron'
|
|
import { mkdtemp, readFile, writeFile } from 'node:fs/promises'
|
|
import { tmpdir } from 'node:os'
|
|
import { resolve, join } from 'node:path'
|
|
import assert from 'node:assert/strict'
|
|
import { createMobileWindow } from '../../desktop/electron/mobile-host.mjs'
|
|
import { MobileVault } from '../../desktop/electron/mobile-secrets.mjs'
|
|
const directory = await mkdtemp(join(tmpdir(), 'aiturk-mobile-electron-'))
|
|
app.setPath('userData', join(directory, 'electron-profile'))
|
|
void app.whenReady().then(async () => {
|
|
let window
|
|
try {
|
|
assert.ok(safeStorage.isEncryptionAvailable(), 'Windows encryption unavailable')
|
|
window = createMobileWindow({ directory, assets: resolve('apps/desktop/dist'), show: false,
|
|
resolveBackend: async () => { throw new Error('No live backend in vault smoke test') } })
|
|
await new Promise(resolve => window.webContents.once('did-finish-load', resolve))
|
|
const result = await window.webContents.executeJavaScript(`(async () => {
|
|
const before = await mobileHost.call('setup');
|
|
await mobileHost.call('account.save', {token:'local-fake-account-for-encryption-test'});
|
|
const after = await mobileHost.call('setup');
|
|
return {before,after,heading:document.querySelector('h1').textContent};
|
|
})()`)
|
|
assert.equal(result.before.hasAccount, false); assert.equal(result.after.hasAccount, true)
|
|
const blob = await readFile(join(directory, 'mobile', 'mobile-secrets.bin'))
|
|
assert.ok(!blob.includes(Buffer.from('local-fake-account-for-encryption-test')))
|
|
const vault = new MobileVault(join(directory, 'mobile'), safeStorage)
|
|
assert.equal((await vault.load()).accountToken, 'local-fake-account-for-encryption-test')
|
|
await vault.save({})
|
|
const receipt = { realElectronIpc: 'passed', windowsSafeStorage: 'passed', heading: result.heading, checkedAt: new Date().toISOString() }
|
|
await writeFile('apps/mobile/test-results/electron-smoke.json', JSON.stringify(receipt))
|
|
console.log(JSON.stringify(receipt))
|
|
window.destroy(); app.exit(0)
|
|
} catch (error) { console.error(error); window?.destroy(); app.exit(1) }
|
|
})
|