90 lines
3.5 KiB
TypeScript
90 lines
3.5 KiB
TypeScript
import { prisma } from '../../src/db/prisma';
|
|
import {
|
|
getBranca,
|
|
getCategoria,
|
|
getMateriale,
|
|
getPeriodoAnno,
|
|
getSearch,
|
|
} from '../../src/modules/autocomplete/autocomplete.service';
|
|
|
|
// Questo servizio legge solo le anagrafiche di base (branca, categoria,
|
|
// periodo_anno, materiale) gia' popolate dal seed: niente resetDatabase()
|
|
// completo qui, altrimenti perderemmo quei dati. L'unica tabella che questa
|
|
// suite potrebbe "sporcare" e' `materiale` (il seed non ne inserisce
|
|
// nessuno), quindi la puliamo prima di ogni test.
|
|
beforeEach(async () => {
|
|
await prisma.materiale.deleteMany();
|
|
});
|
|
|
|
function nomi(list: { nome: string | null }[]): string[] {
|
|
return list.map((item) => item.nome ?? '').sort();
|
|
}
|
|
|
|
describe('autocomplete.service', () => {
|
|
test('getBranca è case-insensitive e restituisce il gruppo "branca"', async () => {
|
|
const risultati = await getBranca('e/g');
|
|
|
|
expect(risultati).toHaveLength(1);
|
|
expect(risultati[0]).toMatchObject({ nome: 'E/G', gruppo: 'branca' });
|
|
});
|
|
|
|
test('getCategoria("gioco") trova la categoria e le sue sotto-categorie che contengono "gioco"', async () => {
|
|
const risultati = await getCategoria('gioco');
|
|
|
|
expect(nomi(risultati)).toEqual(
|
|
['gioco', "gioco d'acqua", 'gioco giungla', 'gioco notturno', 'grande gioco'].sort(),
|
|
);
|
|
expect(risultati.every((r) => r.gruppo === 'categoria')).toBe(true);
|
|
expect(nomi(risultati)).not.toContain('torneo');
|
|
expect(nomi(risultati)).not.toContain('olimpiadi');
|
|
});
|
|
|
|
test('getPeriodoAnno("campo") trova i periodi "campo" ma non "promessa"', async () => {
|
|
const risultati = await getPeriodoAnno('campo');
|
|
|
|
expect(nomi(risultati)).toEqual(['campo estivo', 'campo invernale'].sort());
|
|
expect(risultati.every((r) => r.gruppo === 'periodoAnno')).toBe(true);
|
|
});
|
|
|
|
test('getMateriale su un database senza materiali restituisce array vuoto', async () => {
|
|
const risultati = await getMateriale('corda');
|
|
|
|
expect(risultati).toEqual([]);
|
|
});
|
|
|
|
test('getSearch(null) contiene sempre il gruppo Testo, popola Branca/Categoria/Periodo anno con tutte le righe e omette Materiale (vuoto)', async () => {
|
|
const gruppi = await getSearch(null);
|
|
|
|
expect(gruppi[0]).toEqual({
|
|
label: 'Testo',
|
|
objectsList: [{ id: null, nome: null, gruppo: 'testo' }],
|
|
});
|
|
|
|
const branca = gruppi.find((g) => g.label === 'Branca');
|
|
const categoria = gruppi.find((g) => g.label === 'Categoria');
|
|
const periodoAnno = gruppi.find((g) => g.label === 'Periodo anno');
|
|
const materiale = gruppi.find((g) => g.label === 'Materiale');
|
|
|
|
expect(branca?.objectsList).toHaveLength(await prisma.branca.count());
|
|
expect(categoria?.objectsList).toHaveLength(await prisma.categoria.count());
|
|
expect(periodoAnno?.objectsList).toHaveLength(await prisma.periodoAnno.count());
|
|
expect(materiale).toBeUndefined();
|
|
});
|
|
|
|
test('getSearch("gioco") restituisce Testo e Categoria ma non Branca, Periodo anno o Materiale', async () => {
|
|
const gruppi = await getSearch('gioco');
|
|
|
|
const labels = gruppi.map((g) => g.label);
|
|
expect(labels).toContain('Testo');
|
|
expect(labels).toContain('Categoria');
|
|
expect(labels).not.toContain('Branca');
|
|
expect(labels).not.toContain('Periodo anno');
|
|
expect(labels).not.toContain('Materiale');
|
|
|
|
const categoria = gruppi.find((g) => g.label === 'Categoria');
|
|
expect(nomi(categoria!.objectsList)).toEqual(
|
|
['gioco', "gioco d'acqua", 'gioco giungla', 'gioco notturno', 'grande gioco'].sort(),
|
|
);
|
|
});
|
|
});
|