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
187 lines
3.9 KiB
TypeScript
187 lines
3.9 KiB
TypeScript
import { describe, it, expect } from 'vitest'
|
|
import { capitalizeFirstLetter, formatBytes, extractFileName, generateRandomString } from '~/lib/util'
|
|
|
|
describe('capitalizeFirstLetter', () => {
|
|
it('deve capitalizar a primeira letra de uma string', () => {
|
|
// Cenário
|
|
const entrada = 'hello'
|
|
|
|
// Ação
|
|
const resultado = capitalizeFirstLetter(entrada)
|
|
|
|
// Validação
|
|
expect(resultado).toBe('Hello')
|
|
})
|
|
|
|
it('deve retornar string vazia para entrada vazia', () => {
|
|
// Cenário
|
|
const entrada = ''
|
|
|
|
// Ação
|
|
const resultado = capitalizeFirstLetter(entrada)
|
|
|
|
// Validação
|
|
expect(resultado).toBe('')
|
|
})
|
|
|
|
it('deve retornar string vazia para null', () => {
|
|
// Cenário
|
|
const entrada = null
|
|
|
|
// Ação
|
|
const resultado = capitalizeFirstLetter(entrada)
|
|
|
|
// Validação
|
|
expect(resultado).toBe('')
|
|
})
|
|
|
|
it('deve retornar string vazia para undefined', () => {
|
|
// Cenário
|
|
const entrada = undefined
|
|
|
|
// Ação
|
|
const resultado = capitalizeFirstLetter(entrada)
|
|
|
|
// Validação
|
|
expect(resultado).toBe('')
|
|
})
|
|
})
|
|
|
|
describe('formatBytes', () => {
|
|
it('deve retornar "0 Bytes" para 0 bytes', () => {
|
|
// Cenário
|
|
const bytes = 0
|
|
|
|
// Ação
|
|
const resultado = formatBytes(bytes)
|
|
|
|
// Validação
|
|
expect(resultado).toBe('0 Bytes')
|
|
})
|
|
|
|
it('deve formatar 1024 bytes como "1 KB"', () => {
|
|
// Cenário
|
|
const bytes = 1024
|
|
|
|
// Ação
|
|
const resultado = formatBytes(bytes)
|
|
|
|
// Validação
|
|
expect(resultado).toBe('1 KB')
|
|
})
|
|
|
|
it('deve formatar 1048576 bytes como "1 MB"', () => {
|
|
// Cenário
|
|
const bytes = 1048576
|
|
|
|
// Ação
|
|
const resultado = formatBytes(bytes)
|
|
|
|
// Validação
|
|
expect(resultado).toBe('1 MB')
|
|
})
|
|
|
|
it('deve formatar 1073741824 bytes como "1 GB"', () => {
|
|
// Cenário
|
|
const bytes = 1073741824
|
|
|
|
// Ação
|
|
const resultado = formatBytes(bytes)
|
|
|
|
// Validação
|
|
expect(resultado).toBe('1 GB')
|
|
})
|
|
|
|
it('deve formatar 500 bytes como "500 Bytes"', () => {
|
|
// Cenário
|
|
const bytes = 500
|
|
|
|
// Ação
|
|
const resultado = formatBytes(bytes)
|
|
|
|
// Validação
|
|
expect(resultado).toBe('500 Bytes')
|
|
})
|
|
})
|
|
|
|
describe('extractFileName', () => {
|
|
it('deve extrair nome do arquivo de caminho Unix', () => {
|
|
// Cenário
|
|
const caminho = '/home/user/file.txt'
|
|
|
|
// Ação
|
|
const resultado = extractFileName(caminho)
|
|
|
|
// Validação
|
|
expect(resultado).toBe('file.txt')
|
|
})
|
|
|
|
it('deve extrair nome do arquivo de caminho Windows', () => {
|
|
// Cenário
|
|
const caminho = 'C:\\Users\\file.txt'
|
|
|
|
// Ação
|
|
const resultado = extractFileName(caminho)
|
|
|
|
// Validação
|
|
expect(resultado).toBe('file.txt')
|
|
})
|
|
|
|
it('deve retornar o próprio nome quando não há caminho', () => {
|
|
// Cenário
|
|
const caminho = 'file.txt'
|
|
|
|
// Ação
|
|
const resultado = extractFileName(caminho)
|
|
|
|
// Validação
|
|
expect(resultado).toBe('file.txt')
|
|
})
|
|
|
|
it('deve retornar string vazia para entrada vazia', () => {
|
|
// Cenário
|
|
const caminho = ''
|
|
|
|
// Ação
|
|
const resultado = extractFileName(caminho)
|
|
|
|
// Validação
|
|
expect(resultado).toBe('')
|
|
})
|
|
})
|
|
|
|
describe('generateRandomString', () => {
|
|
it('deve gerar string com o tamanho especificado', () => {
|
|
// Cenário
|
|
const tamanho = 10
|
|
|
|
// Ação
|
|
const resultado = generateRandomString(tamanho)
|
|
|
|
// Validação
|
|
expect(resultado).toHaveLength(10)
|
|
})
|
|
|
|
it('deve retornar string vazia para tamanho 0', () => {
|
|
// Cenário
|
|
const tamanho = 0
|
|
|
|
// Ação
|
|
const resultado = generateRandomString(tamanho)
|
|
|
|
// Validação
|
|
expect(resultado).toBe('')
|
|
})
|
|
|
|
it('deve conter apenas caracteres alfanuméricos', () => {
|
|
// Cenário
|
|
const tamanho = 100
|
|
|
|
// Ação
|
|
const resultado = generateRandomString(tamanho)
|
|
|
|
// Validação
|
|
expect(resultado).toMatch(/^[A-Za-z0-9]+$/)
|
|
})
|
|
})
|