Testes da extensão assistiva¶
Cobertura automatizada¶
Os testes da extensão cobrem contratos estáticos e runtimes JavaScript executados pelo Node:
- Manifest V3, versão e permissões mínimas;
- pacote contendo somente arquivos de runtime;
- secret scan para padrões Gemini, OpenAI, GitHub e chave privada;
- payload Pydantic compatível com o content script;
- Local Companion restrita a localhost;
- handshake compatível para a extensão atual e warning para versão antiga;
- JSON-LD
JobPostinganinhado, inclusive@typeem URL completa; - precedência de título, organização, localização e descrição estruturados;
- fila deduplicada por URL sem parâmetros de tracking;
retry_count, backoff,next_retry_at, estado e limite de tentativas;- export/import da fila sem campos ou valores com formato de segredo;
- rejeição de paths importados fora de
/capture/; - catálogo real e modelo selecionado exercitados no harness do service worker;
- chaves Gemini/OpenAI fora de content script, página e payload conectado;
- sessão como padrão e IndexedDB somente após consentimento;
- fallback local com provider/modelo/motivo explícitos;
- análise pública de GitHub em modos independente e conectado;
- snapshots de captura/análise e vínculo com Tracker;
- candidatos para Perfil sempre revisáveis.
As fixtures em tests/fixtures/extension/ são fictícias, não contêm chaves e não dependem de
portais reais. Os harnesses principais são:
background_harness.js
queue_runtime_harness.js
content_jobposting_harness.js
Executar¶
pytest -q -k "extension or browser"
Para o conjunto funcional de confiabilidade:
pytest -q tests/test_extension_reliability_runtime.py
Sintaxe JavaScript¶
Valide sem executar rede:
node --check browser-extension/queue_runtime.js
node --check browser-extension/popup.js
node --check browser-extension/background.js
node --check browser-extension/content.js
node --check browser-extension/project_analysis.js
node --check browser-extension/github_injected.js
Validação manual¶
- Inicie
python -m modules.local_api.server. - Carregue
browser-extension/como extensão sem compactação. - Abra o diagnóstico e confirme versões, capabilities e ausência de warnings.
- Capture uma vaga fictícia com JSON-LD e confirme
schema_org_jobpostingno payload. - Capture novamente com parâmetros de tracking diferentes e confirme dedupe.
- Desligue a Companion, capture uma vaga e confira a pendência offline.
- Tente retry antes e depois do backoff; confira contador, erro e estado.
- Exporte e importe a fila; confirme que não há chave, token ou identidade duplicada.
- Capture um edital e confira o snapshot e a revisão no site.
- Analise um repositório público nos modos local, Gemini/OpenAI próprios e IA do SotuHire.
- Confirme no trace o provider/modelo realmente usados e qualquer fallback.
- Gere candidatos para o Perfil e confirme que começam não confirmados.
- Remova uma chave própria e confirme ausência em sessão e IndexedDB.
Nunca use chave real em fixture, screenshot ou gravação Playwright. Testes externos são opt-in e devem usar exclusivamente variáveis temporárias de ambiente.
Screenshots determinísticos¶
scripts/capture_extension_screenshots.py prepara estados com dados fictícios para:
- popup principal, conectada e offline;
- vaga, edital, GitHub e lote;
- fila offline com retry;
- configuração Gemini e OpenAI sem chave;
- contexto seguro e diagnóstico de compatibilidade;
- modal de análise GitHub.
O script não consulta provider nem portal real. Revise visualmente cada arquivo antes de publicar.
Empacotamento¶
python scripts/package_extension.py
O comando valida Manifest, permissões, ícones, queue_runtime.js e padrões de segredo antes de
gerar o ZIP. Confirme também o conteúdo do arquivo:
pytest -q tests/test_extension_store_package.py tests/test_extension_no_secrets_in_package.py