- API: /api/ai/chat, /conversations, /documents con embeddings qwen3-embedding, coseno en SQLite, dedup por hash, historial de conversaciones - Base de conocimiento semilla (6 docs, 36 chunks): catálogo DIAGONAL, propuestas del cotizador, créditos, proceso de venta, FAQ, privacidad - App agente-ia (Vite/React/Tailwind, StudioBlank) servida en /ai/ vía nginx - 21 tests nuevos (91/91 verdes)
35 lines
1.0 KiB
TypeScript
35 lines
1.0 KiB
TypeScript
import { describe, expect, it } from 'vitest'
|
|
import { cargarSesion, guardarSesion, limpiarSesion, type StorageLike } from './sesion'
|
|
|
|
function storageFalso(): StorageLike & { datos: Map<string, string> } {
|
|
const datos = new Map<string, string>()
|
|
return {
|
|
datos,
|
|
getItem: (k) => datos.get(k) ?? null,
|
|
setItem: (k, v) => void datos.set(k, v),
|
|
removeItem: (k) => void datos.delete(k),
|
|
}
|
|
}
|
|
|
|
describe('sesion del chat (localStorage)', () => {
|
|
it('devuelve null cuando no hay sesión guardada o está vacía', () => {
|
|
const s = storageFalso()
|
|
expect(cargarSesion(s)).toBeNull()
|
|
s.setItem('frasa-ai:sessionId', '')
|
|
expect(cargarSesion(s)).toBeNull()
|
|
})
|
|
|
|
it('guarda y recupera el sessionId', () => {
|
|
const s = storageFalso()
|
|
guardarSesion('conv-123', s)
|
|
expect(cargarSesion(s)).toBe('conv-123')
|
|
})
|
|
|
|
it('limpiarSesion elimina el sessionId (nueva conversación)', () => {
|
|
const s = storageFalso()
|
|
guardarSesion('conv-123', s)
|
|
limpiarSesion(s)
|
|
expect(cargarSesion(s)).toBeNull()
|
|
})
|
|
})
|