# Testes — migracao-imports-missoes-sondas

## Cobertura

| Componente | Tipo | Path | Status |
|---|---|---|---|
| CriarMissaoLaboratorio + Callbacks (ciclo de vida, validação pura) | TDD standalone | `componentes/Missoes/Logistica/sinais/Designacoes/Testes/Laboratorios/CriarMissaoStandaloneTddTest.php` | PASS (23/23) |
| BuscarProdutosLaboratorio | TDD standalone | `componentes/Missoes/Logistica/sinais/Designacoes/Testes/Laboratorios/BuscarProdutosStandaloneTddTest.php` | PASS (18/18) |
| MissaoListaEnriquecedorLaboratorio | TDD standalone | `componentes/Missoes/Logistica/sinais/Designacoes/Testes/Laboratorios/MissaoListaEnriquecedorStandaloneTddTest.php` | PASS (18/18) |
| MissaoPainelEstatisticasLaboratorio | TDD standalone | `componentes/Missoes/Logistica/sinais/Designacoes/Testes/Laboratorios/MissaoPainelEstatisticasStandaloneTddTest.php` | PASS (29/29) |
| MissaoLogisticaSonda (propriedades, make) | TDD standalone | `componentes/Missoes/Logistica/sinais/Designacoes/Testes/Sondas/MissaoLogisticaSondaStandaloneTddTest.php` | PASS (13/13) |
| MissaoLogisticaCallbackRegistry | TDD standalone | `componentes/Missoes/Logistica/sinais/Designacoes/Testes/Callbacks/MissaoLogisticaCallbackRegistryTddTest.php` | PASS (23/23) |
| MissaoLogisticaEvento (enum) | TDD standalone | `componentes/Missoes/Logistica/sinais/Designacoes/Testes/Eventos/MissaoLogisticaEventoTddTest.php` | PASS (12/12) |
| MissionInputNormalizerResolver | TDD standalone | `componentes/Missoes/Logistica/sinais/Designacoes/Testes/Resolvers/MissionInputNormalizerTddTest.php` | PASS (5/5) |
| MissionOriginResolver | TDD standalone | `componentes/Missoes/Logistica/sinais/Designacoes/Testes/Resolvers/MissionOriginResolverTddTest.php` | PASS (5/5) |
| DesignarMissaoValidator | TDD standalone | `componentes/Missoes/Logistica/sinais/Designacoes/Testes/Validators/DesignarMissaoValidatorTddTest.php` | PASS (32/32) |
| AprovarMissaoUI (grep view) | TDD standalone | `componentes/Missoes/Logistica/sinais/Designacoes/Testes/Html/AprovarMissaoUiTddTest.php` | PASS (18/18) |
| DetalhesFaltasSatelite | TDD standalone | `componentes/Missoes/Logistica/sinais/Designacoes/Testes/Satelites/DetalhesFaltasSateliteTddTest.php` | PASS (3/3) |
| PesagemHandler (Grupo C — handler migrado) | TDD standalone | `componentes/Missoes/Logistica/sinais/App/Testes/Handlers/PesagemHandlerTddTest.php` | PASS (15/15) |
| AcessoPesagemUI | TDD standalone | `componentes/Missoes/Logistica/sinais/App/Testes/Html/AcessoPesagemUiTddTest.php` | PASS (23/23) |
| LacreValidador | TDD standalone | `componentes/Missoes/Logistica/sinais/Lacres/Testes/LacreValidadorTest.php` | PASS (87/87) |
| SolicitacaoSonda | TDD standalone | `componentes/Missoes/Logistica/sinais/Solicitacoes/Testes/Sondas/SolicitacaoSondaTddTest.php` | PASS (5/5) |
| CriarSolicitacaoLaboratorio | TDD standalone | `componentes/Missoes/Logistica/sinais/Solicitacoes/Testes/Laboratorios/CriarSolicitacaoLaboratorioTddTest.php` | PASS (8/8) |
| RetornarPedidoAoMapaLaboratorio | TDD standalone | `componentes/Missoes/Logistica/sinais/Ocorrencias/Testes/Laboratorios/RetornarPedidoAoMapaLaboratorioTddTest.php` | PASS (5/5) |
| MissaoValidatorTddTest (Grupo E — migrado) | TDD standalone | `componentes/Missoes/Logistica/sinais/Missao/Testes/Validators/MissaoValidatorTddTest.php` | **FAIL** — bug #1 (ver abaixo) |
| SeparacaoEnderecamentoStrategyTest — CE3 (Grupo H) | unit standalone | `tests/unit/Strategies/SeparacaoEnderecamentoStrategyTest.php` | **FAIL** — bug #2 pré-existente (ver abaixo) |
| Smoke gate: grep V1 namespace fora de Inteligencias | grep gate | — | **PARCIAL** — ver abaixo |

## Testes não executados (PHPUnit obrigatório)

Os seguintes arquivos na suíte existente declaram `extends TestCase` e requerem PHPUnit instalado. Não são executáveis com `php <arquivo>`. Não foram modificados por esta feature e nenhum deles usa namespace V1 (`Inteligencias`).

- `DesignacoesBadgeTddTest.php`
- `TransicionarStatusMissaoTddTest.php`
- `ClassificarPrimariosStatusLaboratorioTddTest.php`
- `CarregamentoRetiraTabsTddTest.php`
- `SeparacaoRetiraTabsTddTest.php`
- `PedidosHandlerTddTest.php` — usa PHPUnit; o `use MissaoLogisticaSonda` migrado está correto (linha 7: `MissaoLogisticaSonda` sem duplo sufixo). Bloqueado apenas pelo runtime do PHPUnit.
- `PesagemTitleTddTest.php`
- `BotaoCancelarVermelhoTddTest.php`
- `ExecucaoCardPesoTddTest.php`
- `MissaoLogisticaCallbackRegistryTest.php`
- `MissaoLogisticaSondaTest.php`

## Gaps de cobertura (e justificativa)

- **Grupo A (28 arquivos Constelacoes)** — Satelites, Traits, Strategies, Sondas e Laboratorios em `componentes/Constelacoes/Logistica/MissaoLogistica/`. Esses arquivos não possuem TDD standalone próprio; os testes de integração associados (`MissaoLogisticaCicloVidaIntegrationTest`, `MissaoLogisticaCallbackIntegrationTest`) requerem banco `dev_gx_goldie` e não foram executados nesta sessão. O `php -l` passou para todos os arquivos do Grupo A que foram verificados individualmente.
- **Grupo B (Central.php CE1)** — Não há TDD isolado para `Central.php`. Coberto apenas via lint (`php -l`).
- **Grupo F (DashboardApi 8 Laboratorios)** — Não há TDD standalone para esses Laboratórios. `TimelineLaboratorio.php` tem o bug #3 que impede execução. Os demais passam em `php -l`.
- **Testes de integração** — `MissaoLogisticaCicloVidaIntegrationTest.php` e `MissaoLogisticaCallbackIntegrationTest.php` exigem banco real. Não executados (fora do escopo desta sessão de QA).
- **Tests PHPUnit** — 11 arquivos `extends TestCase` não são executáveis standalone. PHPUnit não está disponível como CLI direto no ambiente.

## Grep gate — Verificação de namespace V1

Comando do techplan (Passo 4):
```
grep -rn 'GalaxiaConstelacoes\\Logistica\\MissaoLogistica\\Inteligencias' --include='*.php' componentes/ | grep -v '/Inteligencias/' | grep -v 'BKP-' | grep -v '\.bak'
```

Resultado real (saída NÃO vazia):
```
componentes/Constelacoes/Logistica/MissaoLogistica/Testes/Satelites/ReprodaBugBipagemTddTest.php:82:namespace GalaxiaConstelacoes\Logistica\MissaoLogistica\Inteligencias {
componentes/Missoes/Logistica/sinais/Designacoes/Sondas/MissaoLogisticaExtratoSonda.php:11: * Substitui GalaxiaConstelacoes\...\MissaoLogisticaExtrato (V1).
[+ 7 outras linhas PHPDoc nos arquivos Sondas/*.php]
```

Interpretação:
- As 8 linhas nos arquivos `Sondas/*.php` são PHPDoc (`* Substitui ...`) — não são código executável. Aceito pelo 03-backend.md ("PHPDoc em V2 Sondas — não afetam runtime").
- `ReprodaBugBipagemTddTest.php:82` — namespace de mock em arquivo de teste não listado nos 44 arquivos do plano. Reportado em 03-backend.md como "Desvio 2" — precisa de tratamento em PR separado. Este arquivo BLOQUEARÁ o grep gate de PR se usado sem filtro adicional.

Grep filtrado (apenas código executável, excluindo Sondas PHPDoc e arquivos de Testes):
```
grep -rn 'GalaxiaConstelacoes\\Logistica\\MissaoLogistica\\Inteligencias' --include='*.php' componentes/ | grep -v '/Inteligencias/' | grep -v 'BKP-' | grep -v '\.bak' | grep -v '/Sondas/' | grep -v 'Testes/'
```
Saída: **vazia**. Nenhum código executável fora de `Inteligencias/` e `BKP-` usa o namespace V1.

## Output da execução

```
=== CriarMissaoStandaloneTddTest ===
RESULTADO: PASS=23  FAIL=0
TODOS OS TESTES PASSARAM

=== BuscarProdutosStandaloneTddTest ===
RESULTADO: PASS=18  FAIL=0
TODOS OS TESTES PASSARAM

=== MissaoListaEnriquecedorStandaloneTddTest ===
RESULTADO: PASS=18  FAIL=0
TODOS OS TESTES PASSARAM

=== MissaoPainelEstatisticasStandaloneTddTest ===
RESULTADO: PASS=29  FAIL=0
TODOS OS TESTES PASSARAM

=== MissaoLogisticaSondaStandaloneTddTest ===
RESULTADO: PASS=13  FAIL=0
TODOS OS TESTES PASSARAM

=== MissaoLogisticaCallbackRegistryTddTest ===
RESULTADO: PASS=23  FAIL=0
TODOS OS TESTES PASSARAM

=== MissaoLogisticaEventoTddTest ===
RESULTADO: PASS=12  FAIL=0
TODOS OS TESTES PASSARAM

=== MissionInputNormalizerTddTest ===
Passou: 5 / Falhas: 0

=== MissionOriginResolverTddTest ===
Passou: 5 / Falhas: 0

=== DesignarMissaoValidatorTddTest ===
RESULTADO: PASS=32  FAIL=0
TODOS OS TESTES PASSARAM

=== AprovarMissaoUiTddTest ===
RESULTADO GERAL: SUCESSO — Passou: 18 / Falhou: 0

=== DetalhesFaltasSateliteTddTest ===
RESULTADO GERAL: SUCESSO — Passou: 3 / Falhou: 0

=== PesagemHandlerTddTest ===
RESULTADO GERAL: SUCESSO — Passou: 15 / Falhou: 0

=== AcessoPesagemUiTddTest ===
RESULTADO GERAL: SUCESSO — Passou: 23 / Falhou: 0

=== LacreValidadorTest ===
Testes Passaram: 87 — TODOS OS TESTES PASSARAM

=== SolicitacaoSondaTddTest ===
Testes Passaram: 5 — TODOS OS TESTES PASSARAM

=== CriarSolicitacaoLaboratorioTddTest ===
Testes Passaram: 8 — TODOS OS TESTES PASSARAM

=== RetornarPedidoAoMapaLaboratorioTddTest ===
RESULTADO GERAL: SUCESSO — Passou: 5 / Falhou: 0

=== MissaoValidatorTddTest (FAIL — bug #1) ===
PHP Fatal error: Uncaught Error: Failed opening required
'.../Sondas/MissaoLogisticaItemSondaSonda.php'
in MissaoValidatorTddTest.php:17

=== SeparacaoEnderecamentoStrategyTest (FAIL — bug #2 pré-existente) ===
PHP Fatal error: Uncaught Error: Call to undefined method
TestableSeparacaoEnderecamentoStrategy::configurarModoLIFO()
in SeparacaoEnderecamentoStrategy.php:398
```

## Bugs encontrados

### Bug #1 — BLOCKER — duplo sufixo `SondaSonda` em `MissaoValidator.php` e `MissaoValidatorTddTest.php`

**Descrição:** A migração aplicou o sufixo `Sonda` sobre um token que já era `MissaoLogisticaItemSonda` (provavelmente a Sonda V2 já estava listada no arquivo antes da migração ou o replace usou regex que capturou substring). O resultado é `MissaoLogisticaItemSondaSonda`, que não existe.

**Arquivos afetados:**
- `componentes/Missoes/Logistica/sinais/Missao/Validators/MissaoValidator.php` — linha 5: `use GalaxiaMissoes\...\MissaoLogisticaItemSondaSonda;`
- `componentes/Missoes/Logistica/sinais/Missao/Testes/Validators/MissaoValidatorTddTest.php` — linhas 14 e 17: mesmo sufixo duplo, mais path de `require_once` apontando para `MissaoLogisticaItemSondaSonda.php`

**Correção esperada (dev backend):** substituir `MissaoLogisticaItemSondaSonda` por `MissaoLogisticaItemSonda` nas três ocorrências.

---

### Bug #2 — duplo sufixo `ExtratoSondaSonda` em `TimelineLaboratorio.php`

**Descrição:** Mesmo padrão do Bug #1. O `use` virou `MissaoLogisticaExtratoSondaSonda`.

**Arquivo afetado:**
- `componentes/Missoes/Logistica/sinais/DashboardApi/Laboratorios/TimelineLaboratorio.php` — linha 6: `use GalaxiaMissoes\...\MissaoLogisticaExtratoSondaSonda;`

**Correção esperada (dev backend):** substituir `MissaoLogisticaExtratoSondaSonda` por `MissaoLogisticaExtratoSonda`.

---

### Bug #3 — pré-existente, NÃO introduzido por esta feature — `SeparacaoEnderecamentoStrategyTest` CE3

**Descrição:** O mock de `BaseExecucaoStrategy` declarado no teste (linhas 24-50) não contém o método `configurarModoLIFO()` que a SUT real chama em `ordenarCandidatosParaExecucao`. O mock foi migrado corretamente pelo CE3 (namespace `Inteligencias` → `Sondas`, classe `MissaoLogisticaItem` → `MissaoLogisticaItemSonda`), mas o método ausente já existia antes da migração — confirmado executando o teste na versão `b879eb80` (base da feature), que falha com o mesmo erro.

**Arquivo:** `tests/unit/Strategies/SeparacaoEnderecamentoStrategyTest.php`

**Status:** pré-existente. Não é responsabilidade desta feature. Reportar ao dev backend como dívida técnica separada.

---

### Observação — testes adicionados por outras features em `dev_team`

Dois arquivos com falha pré-existente chegaram nesta branch via merge de `dev_team`, sem relação com a migração de namespace:

- `componentes/Missoes/Logistica/sinais/Designacoes/Testes/Satelites/DetalhesFaltasUiTddTest.php` — introduzido em `448da19b`; verifica `id="gfMasterSwitch"` e `gf-qty-original` que não existem em `detalhes_faltas.php`. Falha com 0/2 PASS. Responsabilidade da feature que criou o teste.
- `componentes/Missoes/Logistica/sinais/Ocorrencias/Testes/Laboratorios/ProcessarOcorrenciasRetornoLaboratorioTddTest.php` — falha 2/13; sinal `Ocorrencias` fora do escopo desta feature.
- `componentes/Missoes/Logistica/sinais/Solicitacoes/Testes/Laboratorios/AprovarSolicitacaoLaboratorioTddTest.php` — Fatal: arquivo `SolicitacaoAprovadaStrategyInterface.php` não existe. Sinal `Solicitacoes` fora do escopo.
