Add scouthub-attivit-be
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
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(),
|
||||
);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user