Iniciativa Cidadã Independente · Transparência Parlamentar
TS60 linhas1.602 bytes

apps/web/src/lib/donations.test.ts

SHA-256

c0069ba62dff07521e3ecd9a4b73674923455ff2e03ef8bae69ed842b74fe7c7

Somente leiturafonte-acf635076da2
import assert from 'node:assert/strict'
import test from 'node:test'
import {
  explorerHref,
  parseDonationWallets,
  paymentUri,
} from './donations'

const valid = {
  asset: 'Bitcoin',
  symbol: 'BTC',
  network: 'Bitcoin',
  address: 'bc1qexampleaddress000000000000000000000000',
  uriScheme: 'bitcoin',
  explorerBaseUrl: 'https://mempool.space/address/',
  networkWarning: 'Envie somente BTC pela rede Bitcoin.',
}

test('aceita carteira completa e cria links', () => {
  const [wallet] = parseDonationWallets(JSON.stringify([valid]))

  assert.equal(paymentUri(wallet), `bitcoin:${valid.address}`)
  assert.equal(
    explorerHref(wallet),
    `https://mempool.space/address/${valid.address}`,
  )
})

test('omite entradas incompletas e explorador sem HTTPS', () => {
  const wallets = parseDonationWallets(
    JSON.stringify([
      valid,
      { ...valid, address: '' },
      { ...valid, explorerBaseUrl: 'http://example.com/' },
    ]),
  )

  assert.equal(wallets.length, 1)
})

test('retorna vazio para configuração ausente ou inválida', () => {
  assert.deepEqual(parseDonationWallets(undefined), [])
  assert.deepEqual(parseDonationWallets('{invalid'), [])
})

test('rejeita credenciais e parâmetros no explorador', () => {
  const credentialUrl = [
    'https://user:pass',
    'example.com/address/',
  ].join(String.fromCharCode(64))
  const wallets = parseDonationWallets(
    JSON.stringify([
      { ...valid, explorerBaseUrl: credentialUrl },
      { ...valid, explorerBaseUrl: 'https://example.com/address/?source=site' },
    ]),
  )

  assert.deepEqual(wallets, [])
})