You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
taskbot/tests/unit/services/response-queue.reaction.tes...

98 lines
2.8 KiB
TypeScript

import { describe, it, expect, beforeEach, afterEach } from 'bun:test';
import { ResponseQueue } from '../../../src/services/response-queue';
describe('ResponseQueue - payload de reacción', () => {
const OLD_FETCH = globalThis.fetch;
beforeEach(() => {
process.env.EVOLUTION_API_URL = 'http://evolution.local';
process.env.EVOLUTION_API_INSTANCE = 'instance-1';
});
afterEach(() => {
globalThis.fetch = OLD_FETCH;
delete process.env.EVOLUTION_API_URL;
delete process.env.EVOLUTION_API_INSTANCE;
});
it('incluye participant y fromMe cuando están presentes', async () => {
const calls: any[] = [];
globalThis.fetch = (async (url: any, init?: any) => {
calls.push({ url, init });
return {
ok: true,
status: 200,
text: async () => ''
} as any;
}) as any;
const item = {
id: 1,
recipient: '12345-67890@g.us',
message: '',
metadata: JSON.stringify({
kind: 'reaction',
emoji: '✅',
chatId: '12345-67890@g.us',
messageId: 'MSG-123',
fromMe: true,
participant: '34600123456@s.whatsapp.net'
}),
attempts: 0
};
const res = await ResponseQueue.sendOne(item as any);
expect(res.ok).toBe(true);
expect(calls.length).toBe(1);
const { url, init } = calls[0];
expect(String(url)).toBe('http://evolution.local/message/sendReaction/instance-1');
const payload = JSON.parse(String(init.body || '{}'));
expect(payload).toBeTruthy();
expect(payload.reaction).toBe('✅');
expect(payload.key).toEqual({
remoteJid: '12345-67890@g.us',
fromMe: true,
id: 'MSG-123',
participant: '34600123456@s.whatsapp.net'
});
});
it('omite participant y usa fromMe=false por defecto cuando no se proveen', async () => {
const calls: any[] = [];
globalThis.fetch = (async (url: any, init?: any) => {
calls.push({ url, init });
return {
ok: true,
status: 200,
text: async () => ''
} as any;
}) as any;
const item = {
id: 2,
recipient: '12345-67890@g.us',
message: '',
metadata: JSON.stringify({
kind: 'reaction',
emoji: '✅',
chatId: '12345-67890@g.us',
messageId: 'MSG-456'
}),
attempts: 0
};
const res = await ResponseQueue.sendOne(item as any);
expect(res.ok).toBe(true);
const { url, init } = calls[0];
expect(String(url)).toBe('http://evolution.local/message/sendReaction/instance-1');
const payload = JSON.parse(String(init.body || '{}'));
expect(payload.reaction).toBe('✅');
expect(payload.key.remoteJid).toBe('12345-67890@g.us');
expect(payload.key.id).toBe('MSG-456');
expect(payload.key.fromMe).toBe(false);
expect('participant' in payload.key).toBe(false);
});
});