mirror of
				https://codeberg.org/yeentown/barkey.git
				synced 2025-11-04 15:34:13 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			157 lines
		
	
	
	
		
			3.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			157 lines
		
	
	
	
		
			3.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import { Parser } from '@/parser'
 | 
						|
import Entity from '@/entity'
 | 
						|
 | 
						|
const account: Entity.Account = {
 | 
						|
  id: '1',
 | 
						|
  username: 'h3poteto',
 | 
						|
  acct: 'h3poteto@pleroma.io',
 | 
						|
  display_name: 'h3poteto',
 | 
						|
  locked: false,
 | 
						|
  group: false,
 | 
						|
  noindex: null,
 | 
						|
  suspended: null,
 | 
						|
  limited: null,
 | 
						|
  created_at: '2019-03-26T21:30:32',
 | 
						|
  followers_count: 10,
 | 
						|
  following_count: 10,
 | 
						|
  statuses_count: 100,
 | 
						|
  note: 'engineer',
 | 
						|
  url: 'https://pleroma.io',
 | 
						|
  avatar: '',
 | 
						|
  avatar_static: '',
 | 
						|
  header: '',
 | 
						|
  header_static: '',
 | 
						|
  emojis: [],
 | 
						|
  moved: null,
 | 
						|
  fields: [],
 | 
						|
  bot: false
 | 
						|
}
 | 
						|
 | 
						|
const status: Entity.Status = {
 | 
						|
  id: '1',
 | 
						|
  uri: 'http://example.com',
 | 
						|
  url: 'http://example.com',
 | 
						|
  account: account,
 | 
						|
  in_reply_to_id: null,
 | 
						|
  in_reply_to_account_id: null,
 | 
						|
  reblog: null,
 | 
						|
  content: 'hoge',
 | 
						|
  plain_content: 'hoge',
 | 
						|
  created_at: '2019-03-26T21:40:32',
 | 
						|
  edited_at: null,
 | 
						|
  emojis: [],
 | 
						|
  replies_count: 0,
 | 
						|
  reblogs_count: 0,
 | 
						|
  favourites_count: 0,
 | 
						|
  reblogged: null,
 | 
						|
  favourited: null,
 | 
						|
  muted: null,
 | 
						|
  sensitive: false,
 | 
						|
  spoiler_text: '',
 | 
						|
  visibility: 'public',
 | 
						|
  media_attachments: [],
 | 
						|
  mentions: [],
 | 
						|
  tags: [],
 | 
						|
  card: null,
 | 
						|
  poll: null,
 | 
						|
  application: {
 | 
						|
    name: 'Web'
 | 
						|
  } as Entity.Application,
 | 
						|
  language: null,
 | 
						|
  pinned: null,
 | 
						|
  emoji_reactions: [],
 | 
						|
  bookmarked: false,
 | 
						|
  quote: false
 | 
						|
}
 | 
						|
 | 
						|
const notification: Entity.Notification = {
 | 
						|
  id: '1',
 | 
						|
  account: account,
 | 
						|
  status: status,
 | 
						|
  type: 'favourite',
 | 
						|
  created_at: '2019-04-01T17:01:32'
 | 
						|
}
 | 
						|
 | 
						|
const conversation: Entity.Conversation = {
 | 
						|
  id: '1',
 | 
						|
  accounts: [account],
 | 
						|
  last_status: status,
 | 
						|
  unread: true
 | 
						|
}
 | 
						|
 | 
						|
describe('Parser', () => {
 | 
						|
  let parser: Parser
 | 
						|
 | 
						|
  beforeEach(() => {
 | 
						|
    parser = new Parser()
 | 
						|
  })
 | 
						|
 | 
						|
  describe('parse', () => {
 | 
						|
    describe('message is heartbeat', () => {
 | 
						|
      const message: string = ':thump\n'
 | 
						|
      it('should be called', () => {
 | 
						|
        const spy = jest.fn()
 | 
						|
        parser.on('heartbeat', spy)
 | 
						|
        parser.parse(message)
 | 
						|
        expect(spy).toHaveBeenLastCalledWith({})
 | 
						|
      })
 | 
						|
    })
 | 
						|
 | 
						|
    describe('message is not json', () => {
 | 
						|
      describe('event is delete', () => {
 | 
						|
        const message = `event: delete\ndata: 12asdf34\n\n`
 | 
						|
        it('should be called', () => {
 | 
						|
          const spy = jest.fn()
 | 
						|
          parser.once('delete', spy)
 | 
						|
          parser.parse(message)
 | 
						|
          expect(spy).toHaveBeenCalledWith('12asdf34')
 | 
						|
        })
 | 
						|
      })
 | 
						|
 | 
						|
      describe('event is not delete', () => {
 | 
						|
        const message = `event: event\ndata: 12asdf34\n\n`
 | 
						|
        it('should be error', () => {
 | 
						|
          const error = jest.fn()
 | 
						|
          const deleted = jest.fn()
 | 
						|
          parser.once('error', error)
 | 
						|
          parser.once('delete', deleted)
 | 
						|
          parser.parse(message)
 | 
						|
          expect(error).toHaveBeenCalled()
 | 
						|
          expect(deleted).not.toHaveBeenCalled()
 | 
						|
        })
 | 
						|
      })
 | 
						|
    })
 | 
						|
 | 
						|
    describe('message is json', () => {
 | 
						|
      describe('event is update', () => {
 | 
						|
        const message = `event: update\ndata: ${JSON.stringify(status)}\n\n`
 | 
						|
        it('should be called', () => {
 | 
						|
          const spy = jest.fn()
 | 
						|
          parser.once('update', spy)
 | 
						|
          parser.parse(message)
 | 
						|
          expect(spy).toHaveBeenCalledWith(status)
 | 
						|
        })
 | 
						|
      })
 | 
						|
 | 
						|
      describe('event is notification', () => {
 | 
						|
        const message = `event: notification\ndata: ${JSON.stringify(notification)}\n\n`
 | 
						|
        it('should be called', () => {
 | 
						|
          const spy = jest.fn()
 | 
						|
          parser.once('notification', spy)
 | 
						|
          parser.parse(message)
 | 
						|
          expect(spy).toHaveBeenCalledWith(notification)
 | 
						|
        })
 | 
						|
      })
 | 
						|
 | 
						|
      describe('event is conversation', () => {
 | 
						|
        const message = `event: conversation\ndata: ${JSON.stringify(conversation)}\n\n`
 | 
						|
        it('should be called', () => {
 | 
						|
          const spy = jest.fn()
 | 
						|
          parser.once('conversation', spy)
 | 
						|
          parser.parse(message)
 | 
						|
          expect(spy).toHaveBeenCalledWith(conversation)
 | 
						|
        })
 | 
						|
      })
 | 
						|
    })
 | 
						|
  })
 | 
						|
})
 |