UNPKG

vvlad1973-telegram-framework

Version:
128 lines (109 loc) 3.48 kB
import { describe, it, expect, vi, beforeEach } from 'vitest'; import fs from 'fs'; import FormData from 'form-data'; import { createFormData } from '../src/helpers/utils.js'; const dummyBuffer = Buffer.from('%PDF-1.4 test content'); const dummyPath = '/fake/path/to/file.pdf'; global.TelegramBotApiMethodsWithMedia = { SEND_DOCUMENT: 'sendDocument', SEND_MEDIA_GROUP: 'sendMediaGroup', }; global.MediaProperties = { MEDIA: 'media', DOCUMENT: 'document', THUMBNAIL: 'thumbnail', }; vi.mock('fs', async () => { return { default: { readFileSync: vi.fn((filePath) => { if (filePath === dummyPath) return dummyBuffer; throw new Error('File not found'); }), }, }; }); describe('createFormData (JS)', () => { beforeEach(() => { vi.clearAllMocks(); }); it('создаёт FormData из buffer-объекта', () => { const data = { method: 'sendDocument', document: { buffer: dummyBuffer, filename: 'file.pdf', contentType: 'application/pdf', }, }; const form = createFormData(data); expect(form).toBeInstanceOf(FormData); const content = form._streams.join(''); expect(content).toContain('file.pdf'); expect(content).toContain('%PDF-1.4 test content'); }); it('создаёт FormData из file path', () => { const data = { method: 'sendDocument', document: { file: dummyPath, }, }; const form = createFormData(data); expect(fs.readFileSync).toHaveBeenCalledWith(dummyPath); const content = form._streams.join(''); expect(content).toContain('%PDF-1.4 test content'); }); it('обрабатывает media[] массив с вложенным buffer', () => { const data = { method: 'sendMediaGroup', media: [ { type: 'photo', media: { buffer: dummyBuffer, filename: 'image.jpg', contentType: 'image/jpeg', }, thumbnail: { buffer: dummyBuffer, filename: 'thumb.jpg', contentType: 'image/jpeg', }, }, ], }; const form = createFormData(data); const streams = form._streams.join(''); expect(streams).toContain('image.jpg'); expect(streams).toContain('thumb.jpg'); expect(streams).toContain('%PDF-1.4 test content'); expect(data.media[0].media).toMatch(/^attach:\/\/media\.photo\./); expect(data.media[0].thumbnail).toMatch( /^attach:\/\/media\.photo\.thumb\./ ); }); it('сериализует JSON-объект корректно', () => { const data = { method: 'sendDocument', extra: { foo: 'bar', nested: { x: 1 } }, }; const form = createFormData(data); const streams = form._streams.join(''); expect(streams).toContain('"foo":"bar"'); expect(streams).toContain('"nested":{"x":1}'); }); it('выбрасывает ошибку если файл не найден', () => { const badPath = '/nonexistent/file.txt'; const data = { method: 'sendDocument', document: { file: badPath, }, }; fs.readFileSync.mockImplementationOnce(() => { throw new Error('File not found'); }); expect(() => createFormData(data)).toThrow('File not found'); }); });