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) } }