OverviewFilesCommitsIssuesDocsReleasesPeers

hyper-social / bridge-irc / test / adapter.test.js

172 lines · javascript ref:
import test from 'brittle'
import { ircToEnvelope, keetToIrc, envelopeToIrcText } from '../lib/adapter.js'
import { TYPES, PLATFORMS, createEnvelope } from 'bridge-envelope'

test('ircToEnvelope - basic text message', (t) => {
  const env = ircToEnvelope('alice', '#test', 'Hello world!')

  t.is(env.type, TYPES.TEXT)
  t.is(env.platform, PLATFORMS.IRC)
  t.is(env.author, 'alice')
  t.is(env.content, 'Hello world!')
  t.is(env.channel, '#test')
  t.ok(env.id, 'has id')
})

test('ircToEnvelope - ACTION message', (t) => {
  const env = ircToEnvelope('bob', '#test', '\x01ACTION waves hello\x01')

  t.is(env.type, TYPES.TEXT)
  t.is(env.content, '* bob waves hello')
})

test('ircToEnvelope - empty message', (t) => {
  const env = ircToEnvelope('user', '#test', '')
  t.is(env.content, '')
})

test('ircToEnvelope - unicode message', (t) => {
  const env = ircToEnvelope('ユーザー', '#日本語', '🎉 こんにちは')
  t.is(env.author, 'ユーザー')
  t.is(env.channel, '#日本語')
  t.is(env.content, '🎉 こんにちは')
})

test('keetToIrc - basic message', (t) => {
  const msg = {
    memberId: 'member-123',
    name: 'Alice',
    text: 'Hello from Keet!',
    timestamp: Date.now()
  }

  const result = keetToIrc(msg, 'bridge-identity')
  t.ok(result)
  t.is(result.nick, 'Alice')
  t.ok(result.text.includes('Alice'))
  t.ok(result.text.includes('Hello from Keet!'))
})

test('keetToIrc - skips own messages', (t) => {
  const msg = {
    memberId: 'bridge-identity',
    name: 'Bridge',
    text: 'echoed message'
  }

  const result = keetToIrc(msg, 'bridge-identity')
  t.is(result, null, 'skips bridge identity messages')
})

test('keetToIrc - skips system messages', (t) => {
  const msg = {
    memberId: 'member-456',
    name: 'System',
    text: 'User joined',
    system: { type: 'join' }
  }

  const result = keetToIrc(msg, 'bridge-identity')
  t.is(result, null, 'skips system messages')
})

test('keetToIrc - skips empty text', (t) => {
  const msg = {
    memberId: 'member-789',
    name: 'User',
    text: '   '
  }

  const result = keetToIrc(msg, 'bridge-identity')
  t.is(result, null)
})

test('keetToIrc - anonymous if no name', (t) => {
  const msg = {
    memberId: 'member-abc',
    text: 'hello'
  }

  const result = keetToIrc(msg, 'bridge-identity')
  t.is(result.nick, 'anonymous')
})

test('envelopeToIrcText - keet text message', (t) => {
  const env = createEnvelope({
    type: TYPES.TEXT,
    platform: PLATFORMS.KEET,
    author: 'Alice',
    content: 'Hello!'
  })

  const text = envelopeToIrcText(env)
  t.ok(text.includes('[keet]'))
  t.ok(text.includes('Alice'))
  t.ok(text.includes('Hello!'))
})

test('envelopeToIrcText - irc message has no prefix', (t) => {
  const env = createEnvelope({
    type: TYPES.TEXT,
    platform: PLATFORMS.IRC,
    author: 'bob',
    content: 'Hi there'
  })

  const text = envelopeToIrcText(env)
  t.absent(text.includes('[irc]'), 'no platform prefix for IRC messages')
  t.ok(text.includes('bob'))
  t.ok(text.includes('Hi there'))
})

test('envelopeToIrcText - discord message', (t) => {
  const env = createEnvelope({
    type: TYPES.TEXT,
    platform: PLATFORMS.DISCORD,
    author: 'user#1234',
    content: 'From Discord'
  })

  const text = envelopeToIrcText(env)
  t.ok(text.includes('[discord]'))
  t.ok(text.includes('user#1234'))
})

test('envelopeToIrcText - media message', (t) => {
  const env = createEnvelope({
    type: TYPES.MEDIA,
    platform: PLATFORMS.KEET,
    author: 'Alice',
    content: 'Check this',
    mediaUrl: 'https://example.com/img.png'
  })

  const text = envelopeToIrcText(env)
  t.ok(text.includes('https://example.com/img.png'))
})

test('envelopeToIrcText - reaction', (t) => {
  const env = createEnvelope({
    type: TYPES.REACTION,
    platform: PLATFORMS.KEET,
    author: 'Alice',
    content: '👍'
  })

  const text = envelopeToIrcText(env)
  t.ok(text.includes('reacted'))
  t.ok(text.includes('👍'))
})

test('envelopeToIrcText - system message', (t) => {
  const env = createEnvelope({
    type: TYPES.SYSTEM,
    platform: PLATFORMS.KEET,
    content: 'User joined the room'
  })

  const text = envelopeToIrcText(env)
  t.ok(text.includes('**'))
  t.ok(text.includes('User joined the room'))
})