-
Notifications
You must be signed in to change notification settings - Fork 20
Expand file tree
/
Copy pathchallenge.test.js
More file actions
139 lines (122 loc) · 4.35 KB
/
challenge.test.js
File metadata and controls
139 lines (122 loc) · 4.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
import { describe, it, expect } from 'vitest';
import {
buscarNotaPorId,
buscarNotaPorTituloExacto,
filtrarNotasPorCategoria,
filtrarNotasPorLongitudMinima,
sumarIds,
concatenarTitulos,
contarNotasPorCategoria,
calcularPromedioDeIds,
} from './challenge';
const notas = [
{ id: 1, title: 'Comprar leche', content: 'Ir al supermercado', category: 'personal' },
{
id: 2,
title: 'Reunión con equipo',
content: 'Discutir el proyecto de la próxima semana y asignar tareas',
category: 'trabajo',
},
{
id: 3,
title: 'Estudiar JavaScript',
content: 'Repasar map, filter y reduce',
category: 'estudio',
},
{ id: 4, title: 'Llamar al banco', content: 'Consultar saldo', category: 'personal' },
{
id: 5,
title: 'Code review',
content: 'Revisar PRs pendientes del equipo de backend',
category: 'trabajo',
},
];
describe('find - buscar un solo elemento', () => {
it('buscarNotaPorId retorna la nota con el id especificado', () => {
const resultado = buscarNotaPorId(notas, 2);
expect(resultado).toEqual({
id: 2,
title: 'Reunión con equipo',
content: 'Discutir el proyecto de la próxima semana y asignar tareas',
category: 'trabajo',
});
});
it('buscarNotaPorId retorna undefined si no existe', () => {
const resultado = buscarNotaPorId(notas, 999);
expect(resultado).toBeUndefined();
});
it('buscarNotaPorTituloExacto retorna la nota con el título exacto', () => {
const resultado = buscarNotaPorTituloExacto(notas, 'Estudiar JavaScript');
expect(resultado).toEqual({
id: 3,
title: 'Estudiar JavaScript',
content: 'Repasar map, filter y reduce',
category: 'estudio',
});
});
it('buscarNotaPorTituloExacto retorna undefined si no hay coincidencia exacta', () => {
const resultado = buscarNotaPorTituloExacto(notas, 'estudiar javascript');
expect(resultado).toBeUndefined();
});
});
describe('filter - obtener múltiples coincidencias', () => {
it('filtrarNotasPorCategoria retorna todas las notas de esa categoría', () => {
const resultado = filtrarNotasPorCategoria(notas, 'trabajo');
expect(resultado).toHaveLength(2);
expect(resultado.every((nota) => nota.category === 'trabajo')).toBe(true);
});
it('filtrarNotasPorCategoria retorna array vacío si no hay coincidencias', () => {
const resultado = filtrarNotasPorCategoria(notas, 'inexistente');
expect(resultado).toEqual([]);
});
it('filtrarNotasPorLongitudMinima retorna notas con content suficientemente largo', () => {
const resultado = filtrarNotasPorLongitudMinima(notas, 30);
expect(resultado).toHaveLength(2);
expect(resultado.map((n) => n.id)).toContain(2);
expect(resultado.map((n) => n.id)).toContain(5);
});
it('filtrarNotasPorLongitudMinima retorna array vacío si ninguna cumple', () => {
const resultado = filtrarNotasPorLongitudMinima(notas, 1000);
expect(resultado).toEqual([]);
});
});
describe('reduce - acumular resultados', () => {
it('sumarIds retorna la suma de todos los ids', () => {
const resultado = sumarIds(notas);
expect(resultado).toBe(15);
});
it('sumarIds retorna 0 para array vacío', () => {
const resultado = sumarIds([]);
expect(resultado).toBe(0);
});
it('concatenarTitulos retorna string con títulos separados por guión', () => {
const resultado = concatenarTitulos(notas);
expect(resultado).toBe(
'Comprar leche-Reunión con equipo-Estudiar JavaScript-Llamar al banco-Code review',
);
});
it('concatenarTitulos retorna string vacío para array vacío', () => {
const resultado = concatenarTitulos([]);
expect(resultado).toBe('');
});
it('contarNotasPorCategoria retorna objeto con conteos correctos', () => {
const resultado = contarNotasPorCategoria(notas);
expect(resultado).toEqual({
personal: 2,
trabajo: 2,
estudio: 1,
});
});
it('contarNotasPorCategoria retorna objeto vacío para array vacío', () => {
const resultado = contarNotasPorCategoria([]);
expect(resultado).toEqual({});
});
it('calcularPromedioDeIds retorna el promedio correcto', () => {
const resultado = calcularPromedioDeIds(notas);
expect(resultado).toBe(3);
});
it('calcularPromedioDeIds retorna 0 para array vacío', () => {
const resultado = calcularPromedioDeIds([]);
expect(resultado).toBe(0);
});
});