mirror of
https://github.com/Crosstalk-Solutions/project-nomad.git
synced 2026-03-29 04:59:26 +02: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
105 lines
2.4 KiB
TypeScript
105 lines
2.4 KiB
TypeScript
import { describe, it, expect } from 'vitest'
|
|
import { formatSpeed, toTitleCase, parseBoolean } from '#app/utils/misc'
|
|
|
|
describe('formatSpeed', () => {
|
|
it('formata bytes por segundo', () => {
|
|
// Cenário / Ação
|
|
const resultado = formatSpeed(500)
|
|
|
|
// Validação
|
|
expect(resultado).toBe('500 B/s')
|
|
})
|
|
|
|
it('formata kilobytes por segundo', () => {
|
|
// Cenário / Ação
|
|
const resultado = formatSpeed(1024)
|
|
|
|
// Validação
|
|
expect(resultado).toBe('1.0 KB/s')
|
|
})
|
|
|
|
it('formata megabytes por segundo', () => {
|
|
// Cenário / Ação
|
|
const resultado = formatSpeed(1048576)
|
|
|
|
// Validação
|
|
expect(resultado).toBe('1.0 MB/s')
|
|
})
|
|
|
|
it('formata zero bytes por segundo', () => {
|
|
// Cenário / Ação
|
|
const resultado = formatSpeed(0)
|
|
|
|
// Validação
|
|
expect(resultado).toBe('0 B/s')
|
|
})
|
|
})
|
|
|
|
describe('toTitleCase', () => {
|
|
it('converte texto minúsculo para title case', () => {
|
|
// Cenário / Ação
|
|
const resultado = toTitleCase('hello world')
|
|
|
|
// Validação
|
|
expect(resultado).toBe('Hello World')
|
|
})
|
|
|
|
it('converte texto maiúsculo para title case', () => {
|
|
// Cenário / Ação
|
|
const resultado = toTitleCase('HELLO WORLD')
|
|
|
|
// Validação
|
|
expect(resultado).toBe('Hello World')
|
|
})
|
|
|
|
it('converte texto com caixa mista para title case', () => {
|
|
// Cenário / Ação
|
|
const resultado = toTitleCase('hELLO')
|
|
|
|
// Validação
|
|
expect(resultado).toBe('Hello')
|
|
})
|
|
})
|
|
|
|
describe('parseBoolean', () => {
|
|
it('retorna true para boolean true', () => {
|
|
expect(parseBoolean(true)).toBe(true)
|
|
})
|
|
|
|
it('retorna false para boolean false', () => {
|
|
expect(parseBoolean(false)).toBe(false)
|
|
})
|
|
|
|
it('retorna true para string "true"', () => {
|
|
expect(parseBoolean('true')).toBe(true)
|
|
})
|
|
|
|
it('retorna false para string "false"', () => {
|
|
expect(parseBoolean('false')).toBe(false)
|
|
})
|
|
|
|
it('retorna true para string "1"', () => {
|
|
expect(parseBoolean('1')).toBe(true)
|
|
})
|
|
|
|
it('retorna false para string "0"', () => {
|
|
expect(parseBoolean('0')).toBe(false)
|
|
})
|
|
|
|
it('retorna true para número 1', () => {
|
|
expect(parseBoolean(1)).toBe(true)
|
|
})
|
|
|
|
it('retorna false para número 0', () => {
|
|
expect(parseBoolean(0)).toBe(false)
|
|
})
|
|
|
|
it('retorna false para null', () => {
|
|
expect(parseBoolean(null)).toBe(false)
|
|
})
|
|
|
|
it('retorna false para undefined', () => {
|
|
expect(parseBoolean(undefined)).toBe(false)
|
|
})
|
|
})
|