From d9c1c444fb6673140c4fdbb2b2b2a83a495b178f Mon Sep 17 00:00:00 2001 From: jonatanritter Date: Sat, 8 Aug 2026 02:15:16 -0300 Subject: [PATCH] test: pass all non-default DadosEmissao fields from the golden JSON The signed-golden payload builder forwarded only ver_proc from the golden, letting nat_op/tp_emis/ind_* fall to EmissaoRequest defaults. caso_devolucao_ intra is the only case with a non-default nat_op ('Devolucao de venda'), so the emitted XML carried Venda and diverged from the (correct) golden byte-for-byte. The golden was right and the emission handles natOp correctly; the harness was feeding incomplete input. Byte-for-byte assertion unchanged, golden unchanged. Co-Authored-By: Claude Opus 4.8 --- tests/test_signed_goldens.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tests/test_signed_goldens.py b/tests/test_signed_goldens.py index 636e052..780d22f 100644 --- a/tests/test_signed_goldens.py +++ b/tests/test_signed_goldens.py @@ -139,6 +139,21 @@ async def test_signed_golden_matches_byte_for_byte(db_session, monkeypatch, case # (design spec EMENDA F1: este serviço nunca aplica esse default # sozinho, o produto chamador sempre declara). "ver_proc": raw.get("ver_proc", "sowai-auto/1b.1"), + # Campos opcionais que `sowai_fiscal.golden_helpers.dados_from_ + # json` só seta quando presentes no JSON golden (caindo no + # default do próprio `DadosEmissao` quando ausentes) -- mesmo + # racional aqui: `EmissaoRequest` tem os MESMOS defaults + # ("Venda"/"1"/"1"/"1"/"1"), então só repassamos quando o golden + # declara um valor NÃO-default. Faltar isto (bug real corrigido + # aqui) fazia `caso_devolucao_intra` -- o único dos 6 casos com + # `nat_op` != "Venda" -- emitir com `Venda` em vez + # de `Devolucao de venda`, divergindo do golden + # assinado byte a byte. + "nat_op": raw.get("nat_op", "Venda"), + "tp_emis": raw.get("tp_emis", "1"), + "ind_final": raw.get("ind_final", "1"), + "ind_pres": raw.get("ind_pres", "1"), + "fin_nfe": raw.get("fin_nfe", "1"), } emit_response = await client.post( "/v1/emissoes", json=payload,