Skip to content

Corrige a baseline da suíte de validação SPS#1259

Open
pitangainnovare wants to merge 16 commits into
scieloorg:masterfrom
pitangainnovare:fix/validation-tests
Open

Corrige a baseline da suíte de validação SPS#1259
pitangainnovare wants to merge 16 commits into
scieloorg:masterfrom
pitangainnovare:fix/validation-tests

Conversation

@pitangainnovare

Copy link
Copy Markdown
Contributor

O que esse PR faz?

Corrige a baseline da suíte de testes de packtools.sps.validation, conforme descrito na issue #1258.

As alterações:

  • declaram como dependências de runtime os pacotes utilizados pelos validadores SPS;
  • corrigem a ausência da importação de format_response em journal_meta.py;
  • tratam configurações de licença ausentes para determinados idiomas;
  • tornam determinística a ordem das tags inválidas de mixed-citation;
  • removem o teste obsoleto do módulo inexistente footnotes;
  • atualizam as expectativas dos testes para o contrato atual de build_response() e format_response();
  • diferenciam resultados de validação bem-sucedidos (OK) de erros CRITICAL;
  • atualizam os cenários de peer_review para as regras atuais de related-article;
  • substituem consultas reais ao Crossref por mocks;
  • preservam a cobertura do tratamento de títulos e autores em handle_doi_response().

Ao final, a suíte específica de validação passou de uma baseline com falhas e erros para:

Ran 1098 tests
OK (skipped=3)

Onde a revisão poderia começar?

Sugestão de ordem para revisão:

  1. setup.py, para conferir as dependências utilizadas em runtime;
  2. packtools/sps/validation/journal_meta.py;
  3. packtools/sps/validation/article_license.py;
  4. packtools/sps/validation/references.py;
  5. tests/sps/validation/, onde foram atualizados os cenários e as respostas esperadas.

Como este poderia ser testado manualmente?

Crie e ative um ambiente virtual:

python3.11 -m venv /tmp/packtools-dependency-test
source /tmp/packtools-dependency-test/bin/activate

Instale o projeto:

python -m pip install --upgrade pip
python -m pip install -e ".[webapp]"

Execute a suíte de validação SPS:

python -m unittest discover \
  -s tests/sps/validation \
  -p "test_*.py" \
  -v

Resultado esperado:

Ran 1098 tests
OK (skipped=3)

Como verificação adicional de possíveis efeitos colaterais, também foi executada a suíte geral:

python -m unittest discover \
  -s tests \
  -p "test_*.py" \
  -v

A suíte geral ainda apresenta 34 falhas, 20 erros e 30 testes ignorados. As ocorrências observadas estão fora de tests/sps/validation e incluem testes antigos de modelos, geradores HTML, utilitários XML, módulos removidos, fixtures ausentes e dependências de teste não instaladas.

Essas ocorrências não foram corrigidas neste PR porque estão fora do escopo da issue #1258. Não foram identificadas novas falhas dentro da suíte de validação modificada por este PR.

Algum cenário de contexto que queira dar?

A baseline instável dificultava distinguir regressões reais de expectativas antigas, especialmente antes da implementação da internacionalização proposta na issue #1257.

Este PR não implementa a internacionalização. Ele prepara essa implementação ao:

  • estabilizar os testes que verificam message, advice, msg_text, msg_params, adv_text e adv_params;
  • manter explícita a compatibilidade das respostas já consumidas por outros projetos;
  • remover falhas ambientais e dependências de serviços externos;
  • permitir que alterações futuras em templates, parâmetros e traduções sejam identificadas como mudanças intencionais;
  • estabelecer uma baseline verde para os testes de validação antes da introdução dos catálogos gettext.

Na implementação da #1257, algumas expectativas de msg_text e adv_text deverão ser alteradas intencionalmente: esses campos passarão a representar templates traduzíveis, enquanto msg_params e adv_params carregarão os valores de interpolação. Os campos legados message e advice deverão continuar formatados em inglês para preservar compatibilidade retroativa.

Screenshots

N/A

Quais são os tickets relevantes?

Resolve #1258.

Prepara a baseline necessária para #1257, sem implementar ainda a internacionalização.

Referências


Segurança da informação (NSI.04)

Seção obrigatória. Marque as opções aplicáveis e justifique quando necessário. Referência: NSI.04 - Norma de Desenvolvimento Seguro.

Este PR manipula dados sensíveis ou pessoais (LGPD)?

  • Sim — descreva os controles de proteção aplicados:
  • Não

Este PR altera autenticação, autorização, controle de acesso ou gerenciamento de sessão?

  • Sim — descreva o que mudou e por quê:
  • Não

Este PR introduz, atualiza ou remove dependências de terceiros?

  • Sim — dependências já utilizadas pelos validadores foram declaradas em install_requires.
    • Verificado e aprovado no SBOM/Trivy
    • Pendente — confirmar o resultado após a execução do pipeline do PR
  • Não

Este PR foi validado pelo pipeline de segurança (SonarQube / Trivy)?

  • Sim — link do job: preencher após a execução do pipeline
  • Não aplicável a este PR

Status: pendente até a execução do pipeline do PR.

Este PR concatena, monta ou executa comandos SQL, HTML ou JavaScript a partir de entrada externa?

  • Sim — confirme que há sanitização/parametrização:
  • Não

Este PR expõe novos endpoints, telas ou serviços?

  • Sim — HTTPS obrigatório está garantido e o acesso segue o princípio de menor privilégio?
  • Não

Algum segredo, senha, chave ou token está sendo adicionado ao código-fonte?

  • Não, nenhum segredo foi commitado
  • Sim (bloquear merge e corrigir antes de prosseguir)

Adiciona aiohttp, langdetect, requests e tenacity a
INSTALL_REQUIRES, pois esses pacotes são importados diretamente
por módulos do packtools.

Remove aiohttp, requests e tenacity de TESTS_REQUIRE, evitando que
dependências de execução sejam instaladas somente no ambiente de
testes.

Corrige erros ModuleNotFoundError que impediam a execução de:

- tests.sps.validation.test_history_integration
- tests.sps.validation.test_list
- tests.sps.validation.test_sec
- tests.sps.validation.test_supplementary_material
Atualiza TestSupplementaryMaterialValidation.test_validate_full_workflow
para refletir a separação das validações de acessibilidade realizada
no fluxo de validação.

As validações de alt-text, long-desc, transcript, speaker/speech e
structure são executadas separadamente por
XMLAccessibilityDataValidation e não fazem mais parte dos resultados
de XmlSupplementaryMaterialValidation.

Ajusta o total esperado de resultados de 20 para 10 e substitui as
asserções duplicadas de @id e @xLink:href por verificações explícitas
de suas duas ocorrências.

Teste executado:

python -m unittest -v tests.sps.validation.test_supplementary_material
Adiciona o import de format_response em journal_meta.py, corrigindo o
NameError nas validações de presença, unicidade, formato de ISSN e
atributos de journal-meta.

A correção elimina os 22 erros que impediam a execução das classes:

- JournalMetaPresenceTest
- ISSNFormatTest
- JournalMetaAttributeTest

Testes executados:

python -m unittest -v \
  tests.sps.validation.test_journal_meta.JournalMetaPresenceTest \
  tests.sps.validation.test_journal_meta.ISSNFormatTest \
  tests.sps.validation.test_journal_meta.JournalMetaAttributeTest
Evita o acesso aos campos de uma licença esperada inexistente quando
o XML contém um idioma não configurado pelo periódico.

Nessa situação, produz uma orientação para cadastrar dados de licença
compatíveis com o idioma encontrado, preservando o texto renderizado
e os campos internacionalizáveis advice_text e advice_params.

Corrige o TypeError nos cenários exercitados por:

- test_validate_license_3_expected_1_obtained_not_ok
- test_validate_license_3_expected_3_obtained_not_ok
Atualiza os resultados esperados dos cenários de validação de licença
para incluir os campos internacionalizáveis produzidos por
build_response: msg_text, msg_params, adv_text e adv_params.

Contempla a resposta inválida para uma licença em idioma não
configurado e as respostas válidas em português e espanhol.

Atualiza os testes:

- test_validate_license_3_expected_1_obtained_not_ok
- test_validate_license_3_expected_3_obtained_not_ok
Remove test_footnotes.py, que ainda importava o módulo inexistente
packtools.sps.validation.footnotes e interrompia a descoberta da suíte
com ModuleNotFoundError.

O módulo footnotes.py foi removido como obsoleto no commit 4a42032,
por meio do PR scieloorg#845. Sua implementação havia sido substituída por
packtools.sps.validation.fn no commit b9134dc, por meio do PR scieloorg#844.

A cobertura atual está em test_fn.py, utilizando FnValidation e
XMLFnGroupValidation. A suíte substituta executa 7 testes com sucesso.
Atualiza os testes de idioma e tipo de artigo para refletir o contrato
atual de build_response, no qual expected_value preserva a lista de
valores permitidos mesmo quando a validação é bem-sucedida.

As expectativas passam a ser construídas a partir dos parâmetros do
validador, cobrindo configurações padrão e listas customizadas sem
duplicar seus valores nos testes.

A mudança de contrato ocorreu na migração de format_response para
build_response realizada no commit a055d3f, por meio do PR scieloorg#1080.

Atualiza os testes:

- test_validate_language_with_valid_language
- test_validate_language_with_custom_language_codes
- test_validate_article_type_with_valid_type
- test_validate_article_type_with_custom_list
Atualiza os testes de modo de disponibilidade de dados para refletir
o contrato de build_response nas validações do tipo value in list.

As expectativas passam a usar a lista configurada em
specific_use_list com o prefixo "one of", tanto nos cenários válidos
quanto no cenário inválido.

Atualiza os testes:

- test_validate_data_availability_fn_ok
- test_validate_data_availability_sec_ok
- test_validate_data_availability_fn_not_ok

Os 9 testes de test_article_data_availability passam após o ajuste.
Atualiza os resultados esperados das validações de licença
bem-sucedidas para incluir os campos msg_text, msg_params, adv_text e
adv_params produzidos por build_response.

Contempla licenças em inglês, português e espanhol nos cenários com
uma ou três licenças obtidas.

Atualiza os testes:

- test_validate_license_3_expected_1_obtained_ok
- test_validate_license_3_expected_3_obtained_ok

Os dois testes passam após o ajuste, cobrindo quatro resultados de
validação.
Atualiza os seis resultados esperados de validate_license_code para
refletir o contrato atual do modelo e de build_response.

Inclui type, code e original_article_type nos dados da licença, além
dos campos msg_text, msg_params, adv_text e adv_params nas respostas
de validação.

Nos cenários inválidos, atualiza também a orientação para indicar como
corrigir o código presente no endereço da licença Creative Commons.

Os dados adicionais do modelo foram introduzidos no commit 9ca9c35,
por meio do PR scieloorg#861. Os campos internacionalizáveis da resposta foram
adicionados no commit a055d3f, por meio do PR scieloorg#1080.

Atualiza os testes:

- test_validate_license_code_ok
- test_validate_license_code_not_ok

Os 6 testes de test_article_license passam após os ajustes.
Atualiza os resultados esperados das validações de journal-meta para
refletir os templates e parâmetros produzidos por build_response.

Separa os textos renderizados em advice dos templates presentes em
adv_text e registra seus valores dinâmicos em adv_params para
acrônimo, ISSN, identificador NLM e nomes de editoras.

Atualiza também msg_params para representar listas como strings,
conforme o contrato atual das respostas.

A estrutura internacionalizável foi introduzida no commit a055d3f,
por meio do PR scieloorg#1080.

Atualiza os testes:

- test_acronym_validation_fail
- test_validate_issn_not_ok
- test_nlm_ta_id_validation_fail
- test_validate_publisher_names_one_fail
- test_validate_publisher_names_more_than_one_fail
- test_validate_publisher_names_XML_has_not_expected_items
- test_validate_publisher_names_function_has_not_expected_items

Os 39 testes de test_journal_meta passam após os ajustes.
Atualiza os resultados esperados das validações de consistência entre
os idiomas de título, resumo e palavras-chave do artigo e de
subartigos.

Adota "article title" como nome do elemento de título e atualiza os
conselhos para o formato "Mark ... for ... language", conforme a
implementação atual.

Inclui também msg_text, msg_params, adv_text e adv_params nas
respostas esperadas.

A nomenclatura e os conselhos foram atualizados no commit e6224c7,
por meio do PR scieloorg#933. Os campos internacionalizáveis foram adicionados
no commit a055d3f, por meio do PR scieloorg#1080.

Atualiza os testes:

- test_validate_without_title
- test_validate_sub_article_lang_without_title
- test_validate_sub_article_lang_with_title_only
- test_validate_without_abstract
- test_validate_sub_article_lang_without_abstract
- test_validate_without_kwd_group
- test_validate_sub_article_lang_without_kwd_group

Os 9 testes de test_metadata_langs passam após os ajustes.
Considera somente respostas CRITICAL nos testes
test_valid_article_type, test_valid_contributor,
test_valid_history_dates, test_valid_custom_meta,
test_invalid_contributor_type e test_valid_sub_article, pois os
validadores também retornam resultados OK.

Adiciona o atributo id aos related-article válidos e atualiza
test_valid_related_article e test_invalid_related_article_type para as
regras introduzidas no PR scieloorg#1140, removendo expectativas obsoletas sobre
ausência de ID e ordem dos atributos.

Refs scieloorg#1258
Atualiza test_validate_multiple_sections_same_language para esperar
WARNING quando as seções do periódico não são informadas.

Remove o parâmetro obsoleto error_level_section, que não é consumido
pelo validador atual.

Refs scieloorg#1258
Substitui a diferença entre conjuntos em
validate_mixed_citation_sub_tags por uma filtragem que mantém a ordem
original das tags encontradas.

Evita resultados não determinísticos em
test_validate_mixed_citation_sub_tags_disallowed conforme o valor de
PYTHONHASHSEED.

Refs scieloorg#1258
Atualiza test_get_doi_information para o contrato introduzido no
PR scieloorg#874, substituindo consultas reais ao Crossref por mock de
fetch_data.

Adiciona test_get_doi_information_request_error para cobrir falhas na
requisição e test_handle_doi_response para preservar a cobertura do
tratamento de títulos e autores.

Evita dependência de rede e de dados externos mutáveis nos testes.

Refs scieloorg#1258
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.

Corrigir a baseline da suíte de testes de packtools.sps.validation

2 participants