OverviewFilesCommitsIssuesDocsReleasesPeers

hyper-wallet-desktop / test / helpers / index.cjs

105 lines · javascript ref:
// 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)
}