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'))
})