ProyectoGrupal/VerifactuMidAPI/internal/transformer_test.go

132 lines
3.6 KiB
Go
Raw Normal View History

package internal
import (
"testing"
"time"
)
func TestTransformToInvoiceData_CamposBasicos(t *testing.T) {
in := facturaValida()
data, err := TransformToInvoiceData(in)
if err != nil {
t.Fatalf("TransformToInvoiceData devolvió error inesperado: %v", err)
}
if data.EmisorNIF != "A1234567B" {
t.Errorf("EmisorNIF: esperado A1234567B, obtuvo %s", data.EmisorNIF)
}
if data.NumSerie != "INV-2026-001" {
t.Errorf("NumSerie: esperado INV-2026-001, obtuvo %s", data.NumSerie)
}
if data.TipoFactura != "F1" {
t.Errorf("TipoFactura: esperado F1, obtuvo %s", data.TipoFactura)
}
if data.ImporteTotal != 121.0 {
t.Errorf("ImporteTotal: esperado 121.0, obtuvo %f", data.ImporteTotal)
}
}
func TestTransformToInvoiceData_FechaParsedaCorrecta(t *testing.T) {
in := facturaValida()
data, err := TransformToInvoiceData(in)
if err != nil {
t.Fatalf("error inesperado: %v", err)
}
esperada := time.Date(2026, 5, 28, 0, 0, 0, 0, time.UTC)
if !data.Fecha.Equal(esperada) {
t.Errorf("Fecha: esperado %v, obtuvo %v", esperada, data.Fecha)
}
}
func TestTransformToInvoiceData_CuotaTotalSumada(t *testing.T) {
in := facturaValida()
in.Factura.IVA = []IVAInput{
{Base: 100, Cuota: 21, Tipo: 21},
{Base: 200, Cuota: 10, Tipo: 5},
}
data, err := TransformToInvoiceData(in)
if err != nil {
t.Fatalf("error inesperado: %v", err)
}
if data.CuotaTotal != 31.0 {
t.Errorf("CuotaTotal: esperado 31.0, obtuvo %f", data.CuotaTotal)
}
}
func TestTransformToInvoiceData_DescripcionPorDefecto(t *testing.T) {
in := facturaValida()
in.Factura.Descripcion = ""
data, err := TransformToInvoiceData(in)
if err != nil {
t.Fatalf("error inesperado: %v", err)
}
if data.Descripcion != "Factura" {
t.Errorf("descripción por defecto: esperado 'Factura', obtuvo %q", data.Descripcion)
}
}
func TestTransformToInvoiceData_SinDestinatario(t *testing.T) {
in := facturaValida()
in.Factura.Destinatario = nil
data, err := TransformToInvoiceData(in)
if err != nil {
t.Fatalf("error inesperado: %v", err)
}
if data.Destinatario != nil {
t.Error("sin destinatario en entrada, data.Destinatario debería ser nil")
}
}
func TestTransformToInvoiceData_ConDestinatario(t *testing.T) {
in := facturaValida()
in.Factura.Destinatario = &DestinatarioInput{Nombre: "Cliente SA", NIF: "B11111118"}
data, err := TransformToInvoiceData(in)
if err != nil {
t.Fatalf("error inesperado: %v", err)
}
if data.Destinatario == nil {
t.Fatal("destinatario no debería ser nil")
}
if data.Destinatario.Nombre != "Cliente SA" {
t.Errorf("nombre destinatario: esperado 'Cliente SA', obtuvo %q", data.Destinatario.Nombre)
}
}
func TestTransformToInvoiceData_IVAClaveRegimenDefecto(t *testing.T) {
in := facturaValida()
data, err := TransformToInvoiceData(in)
if err != nil {
t.Fatalf("error inesperado: %v", err)
}
for i, iva := range data.IVA {
if iva.ClaveRegimen != "01" {
t.Errorf("IVA[%d].ClaveRegimen: esperado '01', obtuvo %q", i, iva.ClaveRegimen)
}
if iva.Calificacion != "S1" {
t.Errorf("IVA[%d].Calificacion: esperado 'S1', obtuvo %q", i, iva.Calificacion)
}
}
}
func TestTransformToInvoiceData_SistemaDefecto(t *testing.T) {
in := facturaValida()
data, err := TransformToInvoiceData(in)
if err != nil {
t.Fatalf("error inesperado: %v", err)
}
if data.Sistema.TipoUsoVerifactu != "S" {
t.Errorf("TipoUsoVerifactu: esperado 'S', obtuvo %q", data.Sistema.TipoUsoVerifactu)
}
if data.Sistema.TipoUsoMultiOT != "N" {
t.Errorf("TipoUsoMultiOT: esperado 'N', obtuvo %q", data.Sistema.TipoUsoMultiOT)
}
if data.Sistema.IDSistema != "1" {
t.Errorf("IDSistema: esperado '1', obtuvo %q", data.Sistema.IDSistema)
}
}