mirror of
https://github.com/Crosstalk-Solutions/project-nomad.git
synced 2026-03-28 03:29:25 +01:00
Adiciona 81 testes unitários cobrindo backend e frontend: Backend (50 testes): - utils/version: isNewerVersion, parseMajorVersion (14 testes) - utils/misc: formatSpeed, toTitleCase, parseBoolean (17 testes) - utils/fs: determineFileType, matchesDevice, sanitizeFilename (14 testes) - validators/common: assertNotPrivateUrl - proteção SSRF (9 testes) Frontend (27 testes): - lib/classNames: concatenação condicional de classes (5 testes) - lib/util: capitalizeFirstLetter, formatBytes, extractFileName (12 testes) - hooks/useDiskDisplayData: getAllDiskDisplayItems, getPrimaryDiskInfo (6 testes) Infraestrutura: - Instala vitest, @testing-library/react, jsdom - Configura vitest.config.ts com aliases para ~ e #app - Script npm test:unit para rodar todos os testes Closes #491
68 lines
1.5 KiB
TypeScript
68 lines
1.5 KiB
TypeScript
import { describe, it, expect } from 'vitest'
|
|
import classNames from '~/lib/classNames'
|
|
|
|
describe('classNames', () => {
|
|
it('deve juntar múltiplas strings com espaço', () => {
|
|
// Cenário
|
|
const classes = ['foo', 'bar', 'baz']
|
|
|
|
// Ação
|
|
const resultado = classNames(...classes)
|
|
|
|
// Validação
|
|
expect(resultado).toBe('foo bar baz')
|
|
})
|
|
|
|
it('deve ignorar valores undefined', () => {
|
|
// Cenário
|
|
const classe1 = 'foo'
|
|
const classe2 = undefined
|
|
const classe3 = 'bar'
|
|
|
|
// Ação
|
|
const resultado = classNames(classe1, classe2, classe3)
|
|
|
|
// Validação
|
|
expect(resultado).toBe('foo bar')
|
|
})
|
|
|
|
it('deve ignorar strings vazias', () => {
|
|
// Cenário
|
|
const classe1 = 'foo'
|
|
const classe2 = ''
|
|
const classe3 = 'bar'
|
|
|
|
// Ação
|
|
const resultado = classNames(classe1, classe2, classe3)
|
|
|
|
// Validação
|
|
expect(resultado).toBe('foo bar')
|
|
})
|
|
|
|
it('deve retornar string vazia quando chamado sem argumentos', () => {
|
|
// Cenário
|
|
// (nenhum argumento)
|
|
|
|
// Ação
|
|
const resultado = classNames()
|
|
|
|
// Validação
|
|
expect(resultado).toBe('')
|
|
})
|
|
|
|
it('deve lidar com mix de strings e undefined', () => {
|
|
// Cenário
|
|
const classe1 = undefined
|
|
const classe2 = 'active'
|
|
const classe3 = undefined
|
|
const classe4 = 'visible'
|
|
const classe5 = undefined
|
|
|
|
// Ação
|
|
const resultado = classNames(classe1, classe2, classe3, classe4, classe5)
|
|
|
|
// Validação
|
|
expect(resultado).toBe('active visible')
|
|
})
|
|
})
|