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.
98 lines
2.8 KiB
TypeScript
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);
|
|
});
|
|
});
|