ProyectoGrupal/VerifactuMidAPI/internal/hash_test.go

95 lines
2.4 KiB
Go
Raw Permalink Normal View History

package internal
import (
"testing"
"time"
)
func TestCalculateHash_DeterministicoConFechaFija(t *testing.T) {
svc := NewHashService()
fechaGen, _ := time.Parse("2006-01-02T15:04:05-07:00", "2026-05-28T10:00:00+02:00")
fecha, _ := time.Parse("02-01-2006", "28-05-2026")
data := &InvoiceData{
EmisorNIF: "A12345678",
NumSerie: "INV-001",
Fecha: fecha,
TipoFactura: "F1",
CuotaTotal: 21.00,
ImporteTotal: 121.00,
FechaGen: fechaGen,
}
hash1 := svc.CalculateHash(data, "")
hash2 := svc.CalculateHash(data, "")
if hash1 != hash2 {
t.Errorf("el hash no es determinístico: %s != %s", hash1, hash2)
}
if len(hash1) != 64 {
t.Errorf("hash SHA-256 debe tener 64 caracteres hex, tiene %d", len(hash1))
}
}
func TestCalculateHash_CambiaConDiferenteHashPrevio(t *testing.T) {
svc := NewHashService()
fechaGen, _ := time.Parse("2006-01-02T15:04:05-07:00", "2026-05-28T10:00:00+02:00")
fecha, _ := time.Parse("02-01-2006", "28-05-2026")
data := &InvoiceData{
EmisorNIF: "A12345678",
NumSerie: "INV-001",
Fecha: fecha,
TipoFactura: "F1",
CuotaTotal: 21.00,
ImporteTotal: 121.00,
FechaGen: fechaGen,
}
hashSinPrev := svc.CalculateHash(data, "")
hashConPrev := svc.CalculateHash(data, "ABCDEF1234567890")
if hashSinPrev == hashConPrev {
t.Error("el hash debería cambiar cuando cambia el hash previo")
}
}
func TestCalculateHash_PrimerRegistroHashVacio(t *testing.T) {
svc := NewHashService()
if !svc.IsFirstRecord() {
t.Error("un HashService nuevo debería indicar que es el primer registro")
}
if svc.GetPreviousHash() != "" {
t.Error("el hash previo del primer registro debe ser cadena vacía")
}
}
func TestCalculateHash_EncadenamientoHashPrevio(t *testing.T) {
svc := NewHashService()
fechaGen, _ := time.Parse("2006-01-02T15:04:05-07:00", "2026-05-28T10:00:00+02:00")
fecha, _ := time.Parse("02-01-2006", "28-05-2026")
data := &InvoiceData{
EmisorNIF: "A12345678",
NumSerie: "INV-001",
Fecha: fecha,
TipoFactura: "F1",
CuotaTotal: 21.00,
ImporteTotal: 121.00,
FechaGen: fechaGen,
}
hash1 := svc.CalculateHash(data, "")
svc.SetLastRecord(&LastRecord{Huella: hash1})
if svc.IsFirstRecord() {
t.Error("después de SetLastRecord no debería ser primer registro")
}
if svc.GetPreviousHash() != hash1 {
t.Errorf("GetPreviousHash devolvió %q, esperaba %q", svc.GetPreviousHash(), hash1)
}
}