Skip to content

fix(tablewrap): corrige validação de caption — usa presença de <title> em vez de conteúdo textual#1212

Open
Rossi-Luciano wants to merge 5 commits intoscieloorg:masterfrom
Rossi-Luciano:feat/tablewrap-caption-has-title
Open

fix(tablewrap): corrige validação de caption — usa presença de <title> em vez de conteúdo textual#1212
Rossi-Luciano wants to merge 5 commits intoscieloorg:masterfrom
Rossi-Luciano:feat/tablewrap-caption-has-title

Conversation

@Rossi-Luciano
Copy link
Copy Markdown
Collaborator

Descrição

Problema

validate_label_or_caption avaliava bool(caption), onde caption é o texto extraído por ET.tostring(..., method="text"). Isso produzia dois comportamentos incorretos:

  • Falso negativo estrutural: <caption><title/></caption> (título vazio, mas estruturalmente válido per SPS) retornava "" e era tratado como ausente — a validação falhava indevidamente.
  • Falso positivo estrutural: <caption>texto livre</caption> (sem <title>) retornava o texto e era aceito como válido — a validação passava indevidamente.

O problema foi identificado na revisão do Copilot do PR #1130.

Solução

models/tablewrap.py

  • Adicionada a propriedade caption_has_title: verifica a presença do elemento <title> dentro de <caption> via caption_element.find("title") is not None, independente do seu conteúdo.
  • Chave caption_has_title exposta em TableWrap.data.

validation/tablewrap.py

  • validate_label_or_caption substitui bool(caption) por bool(caption_has_title).
  • Adicionado comentário em get_default_params registrando que as chaves label_error_level e caption_error_level foram descontinuadas em favor de label_or_caption_error_level.

tests/sps/validation/test_tablewrap.py

  • Corrigido o docstring de test_valid_table_wrap_with_empty_title: o teste passava por causa do <label>, não do <caption><title/> — o docstring anterior era enganoso.
  • Adicionado test_label_or_caption_only_caption_with_empty_title: isola o cenário em que apenas <caption><title/> está presente (sem <label>) — deve retornar OK.
  • Adicionado test_label_or_caption_only_caption_without_title_fails: <caption> sem <title> e sem <label> — deve retornar CRITICAL.

tests/sps/models/test_tablewrap.py

  • Adicionada a chave caption_has_title: True nos 9 dicts expected dos testes do modelo, sincronizando-os com o contrato atual de TableWrap.data.

Testes

pytest tests/sps/models/test_tablewrap.py tests/sps/validation/test_tablewrap.py

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Este PR corrige a validação “label or caption” de <table-wrap> para seguir a regra SPS de forma estrutural: considerar válida a presença de <caption><title> mesmo quando <title/> está vazio, e rejeitar <caption> sem <title>.

Changes:

  • Adiciona caption_has_title ao modelo TableWrap e expõe a chave em TableWrap.data.
  • Atualiza validate_label_or_caption para usar caption_has_title em vez de bool(caption_text).
  • Ajusta/expande testes para cobrir os casos isolados de <caption><title/> (OK) e <caption> sem <title> (CRITICAL).

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.

File Description
packtools/sps/models/tablewrap.py Introduz caption_has_title e adiciona o campo ao payload data.
packtools/sps/validation/tablewrap.py Troca a regra de validação para checar a presença estrutural de <title> em <caption>.
tests/sps/validation/test_tablewrap.py Corrige docstring e adiciona testes cobrindo os cenários de <caption> com/sem <title>.
tests/sps/models/test_tablewrap.py Atualiza os dicionários esperados para incluir caption_has_title.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Returns:
bool: True if <caption><title> exists (even if empty), False otherwise.
"""
caption_element = self.element.find(".//caption")
Comment thread tests/sps/validation/test_tablewrap.py Outdated
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants