// test/helpers/index.js - Shared test utilities and factories
const crypto = require('hypercore-crypto')
const b4a = require('b4a')
const path = require('bare-path')
const fs = require('bare-fs')
/**
* Create temporary directory for test
* Automatically cleaned up after test via t.teardown()
*/
exports.createTempDir = async function (t) {
const tmpDir = await t.tmp()
return tmpDir
}
/**
* Create mock encrypted files in temp directory
*/
exports.createMockWallet = async function (t, opts = {}) {
const tmpDir = await t.tmp()
const walletDir = path.join(tmpDir, '.hyper-wallet')
fs.mkdirSync(walletDir, { recursive: true, mode: 0o700 })
const {
identityMnemonic = 'abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon art',
walletMnemonic = 'abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about',
token = b4a.toString(crypto.randomBytes(32), 'hex')
} = opts
if (identityMnemonic) {
fs.writeFileSync(
path.join(walletDir, '.identity-mnemonic'),
identityMnemonic,
{ mode: 0o600 }
)
}
if (walletMnemonic) {
fs.writeFileSync(
path.join(walletDir, '.wallet-mnemonic'),
walletMnemonic,
{ mode: 0o600 }
)
}
if (token) {
fs.writeFileSync(
path.join(walletDir, '.token'),
token,
{ mode: 0o600 }
)
}
return {
tmpDir,
walletDir,
identityMnemonic,
walletMnemonic,
token
}
}
/**
* Event flush - wait for async operations to complete
*/
exports.eventFlush = async function () {
await new Promise((resolve) => setImmediate(resolve))
}
/**
* Sleep for specified milliseconds
*/
exports.sleep = function (ms) {
return new Promise(resolve => setTimeout(resolve, ms))
}
/**
* Generate test token
*/
exports.generateTestToken = function (bytes = 32) {
return b4a.toString(crypto.randomBytes(bytes), 'hex')
}
/**
* Create mock WDK instance (returns mocked WDK)
*/
exports.createMockWDK = function (t, mnemonic) {
const { MockWDK } = require('../mocks/wdk-mock.cjs')
const wdk = new MockWDK(mnemonic)
// No teardown needed for mock - it's stateless
return wdk
}
/**
* Load test fixtures
*/
exports.loadFixture = function (name) {
const fixturePath = path.join(__dirname, '..', 'fixtures', `${name}.json`)
const content = fs.readFileSync(fixturePath, 'utf8')
return JSON.parse(content)
}