feat: agregar help centralizado y tests de contenido

Co-authored-by: aider (openrouter/openai/gpt-5) <aider@aider.chat>
webui
brobert 2 weeks ago
parent b19336659c
commit b8979b8205

@ -0,0 +1,100 @@
/**
* Centralización de contenidos de ayuda (Help v2)
* Nota: Solo copy; no depende de flags ni del runtime. Integración en command.ts llega en Fase 4.
*/
import { section, bullets, code, italic } from '../../utils/formatting';
export function getQuickHelp(baseUrl?: string): string {
const parts: string[] = [];
parts.push(section('Comandos básicos'));
parts.push(
bullets([
`${code('/t n ...')} crear (acepta fecha y menciones)`,
`${code('/t ver')} en grupo · ${code('/t ver mis')} por DM · ${code('/t ver todos')}`,
`${code('/t x 26')} completar (máx. 10) · ${code('/t tomar 12')} · ${code('/t soltar 26')}`,
`${code('/t configurar diario|l-v|semanal|off [HH:MM]')}`,
`${code('/t web')}`,
])
);
parts.push(
italic('_El bot responde por DM, incluso si escribes desde un grupo._')
);
return parts.join('\n');
}
export function getFullHelp(baseUrl?: string): string {
const out: string[] = [];
// Crear
out.push(section('Crear'));
out.push(
bullets([
`${code('/t n Descripción [YYYY-MM-DD|YY-MM-DD|hoy|mañana] [@menciones...]')}`,
'En DM: sin menciones → asignada al creador.',
'En grupo: sin menciones → queda “sin responsable”.',
'Fechas: usa la última válida encontrada; no acepta pasadas.',
])
);
// Listados
out.push('');
out.push(section('Listados'));
out.push(
bullets([
`${code('/t ver grupo')} pendientes del grupo actual (desde grupo activo).`,
`${code('/t ver mis')} tus pendientes (por DM).`,
`${code('/t ver todos')} tus pendientes + “sin responsable”.`,
'En grupo: “sin responsable” solo del grupo actual.',
'En DM: “sin responsable” de grupos donde eres miembro activo (si la snapshot es fresca).',
`${code('/t ver sin')} solo “sin responsable” del grupo actual (desde grupo).`,
'Máx. 10 elementos por sección; se añade “… y N más” si hay más.',
'Fechas en DD/MM y ⚠️ si están vencidas.',
])
);
// Fechas
out.push('');
out.push(section('Fechas'));
out.push(
bullets([
'`YYYY-MM-DD` o `YY-MM-DD` (se expande a `20YY-MM-DD`).',
'`hoy` y `mañana` (según TZ; por defecto Europe/Madrid).',
])
);
// Recordatorios
out.push('');
out.push(section('Recordatorios'));
out.push(
bullets([
`${code('/t configurar diario|l-v|semanal|off [HH:MM]')}`,
'Alias: diario/diaria, laborables (l-v/lv), semanal, off/apagar.',
'Si omites hora, se conserva la anterior o se usa 08:30 por defecto (semanal asume lunes).',
])
);
// Acceso web
out.push('');
out.push(section('Acceso web'));
out.push(
bullets([
`${code('/t web')} genera un enlace de acceso de un solo uso (10 min).`,
])
);
// Otros
out.push('');
out.push(section('Otros'));
out.push(
bullets([
'IDs visibles con 4 dígitos, pero puedes escribirlos sin ceros (ej.: 26).',
'Máx. 10 IDs en completar/tomar; separa por espacios o comas.',
'En “gating” estricto de grupos, el bot puede no responder en grupos no permitidos.',
])
);
return out.join('\n');
}

@ -0,0 +1,38 @@
import { describe, it, expect } from 'bun:test';
import { getQuickHelp, getFullHelp } from '../../../src/services/messages/help';
describe('Help content (centralizado)', () => {
it('quick help incluye comandos básicos y /t web', () => {
const s = getQuickHelp();
expect(s).toContain('/t n');
expect(s).toContain('/t ver mis');
expect(s).toContain('/t x 26');
expect(s).toContain('/t configurar');
expect(s).toContain('/t web');
// Debe usar etiquetas en español para configurar
expect(s).toContain('diario|l-v|semanal|off');
expect(s).not.toContain('daily|l-v|weekly|off');
});
it('full help cubre scopes de "ver", formatos de fecha y límites', () => {
const s = getFullHelp();
// Scopes
expect(s).toContain('/t ver grupo');
expect(s).toContain('/t ver mis');
expect(s).toContain('/t ver todos');
expect(s).toContain('/t ver sin');
// Fechas
expect(s).toContain('YY-MM-DD');
expect(s).toContain('20YY');
expect(s).toContain('hoy');
expect(s).toContain('mañana');
// Límites
expect(s).toContain('Máx. 10');
// Configuración en español
expect(s).toContain('diario|l-v|semanal|off');
expect(s).not.toContain('daily|l-v|weekly|off');
});
});
Loading…
Cancel
Save