Newer
Older
navi-1 / webclient / tests / unit / components / messages / synapseEventNotice.test.js
import { describe, it, expect, beforeEach } from 'vitest'
import { mount } from '@vue/test-utils'
import SynapseEventNotice from '@/components/messages/SynapseEventNotice.vue'
import { setLocale } from '@/i18n/index.js'

function mountNotice(msg) {
  return mount(SynapseEventNotice, { props: { msg } })
}

describe('SynapseEventNotice', () => {
  beforeEach(() => setLocale('en'))

  it('renders the event as a service record, not a user bubble', () => {
    const wrapper = mountNotice({
      type: 'synapse_event',
      text: 'Пользователь просит напомнить о встрече',
      eventType: 'tg.message',
      time: '2026-10-10T12:30:00Z',
    })

    expect(wrapper.find('.msg-user').exists()).toBe(false)
    expect(wrapper.find('.synapse-event-label').text()).toBe('Synapse event')
    expect(wrapper.find('.synapse-event-type').text()).toBe('tg.message')
    expect(wrapper.find('.synapse-event-body').text()).toContain('напомнить о встрече')
  })

  it('translates its caption with the interface language', () => {
    const wrapper = mountNotice({ type: 'synapse_event', text: 'hi', eventType: '' })
    expect(wrapper.find('.synapse-event-label').text()).toBe('Synapse event')
    setLocale('ru')
    return wrapper.vm.$nextTick().then(() => {
      expect(wrapper.find('.synapse-event-label').text()).toBe('Событие Synapse')
    })
  })

  it('renders markdown in the request body and hides the event type when absent', () => {
    const wrapper = mountNotice({
      type: 'synapse_event',
      text: '**bold** request',
      eventType: '',
    })
    expect(wrapper.find('.synapse-event-body').html()).toContain('<strong>bold</strong>')
    expect(wrapper.find('.synapse-event-type').exists()).toBe(false)
  })
})