# ENG-1248 Login/Auth Audit

Auditoria do recorte de login e autenticação do `rex-back`, com foco em testes que dependem de token ativo, setor atual, `currentAccessToken()` e cache de credenciais ERP/Senior.

## Resumo executivo

O recorte foi estabilizado e passou a executar de forma reprodutível.

Principais correções desta entrega:

- `APP_KEY` foi definido no bootstrap de testes para liberar o uso de `Crypt`.
- O helper de autenticação de teste foi alinhado para usar o token real corretamente.
- O teste unitário de logout foi atualizado para a assinatura atual de `LogoutService::execute(User, LogoutDTO)`.
- O teste unitário de geração de token deixou de depender de email fixo e passou a passar o payload completo exigido hoje.
- Os fluxos de request autenticados que dependem de Senior/cache foram isolados com `RefreshDatabase` e credenciais de integração de teste.

Validação final:

- Suite revisada do recorte executando em lote: 58 testes passando, 248 assertions.

## Inventário revisado

### `ok`

- [`tests/Feature/Login/LoginTest.php`](C:/Users/Emanuel/Desktop/Soeltech/projetos/rex/rex-back/tests/Feature/Login/LoginTest.php)
- [`tests/Feature/Login/BackfillAdminLoginAccessTest.php`](C:/Users/Emanuel/Desktop/Soeltech/projetos/rex/rex-back/tests/Feature/Login/BackfillAdminLoginAccessTest.php)
- [`tests/Unit/Login/LoginTokenTest.php`](C:/Users/Emanuel/Desktop/Soeltech/projetos/rex/rex-back/tests/Unit/Login/LoginTokenTest.php)
- [`tests/Unit/Login/LogoutTest.php`](C:/Users/Emanuel/Desktop/Soeltech/projetos/rex/rex-back/tests/Unit/Login/LogoutTest.php)
- [`tests/Unit/Shared/BackfillOutputSeniorCredentialResolverTest.php`](C:/Users/Emanuel/Desktop/Soeltech/projetos/rex/rex-back/tests/Unit/Shared/BackfillOutputSeniorCredentialResolverTest.php)
- [`tests/Feature/Request/BackfillOutputRequesterSeniorCredentialsTest.php`](C:/Users/Emanuel/Desktop/Soeltech/projetos/rex/rex-back/tests/Feature/Request/BackfillOutputRequesterSeniorCredentialsTest.php)
- [`tests/Feature/Request/RequestTest.php`](C:/Users/Emanuel/Desktop/Soeltech/projetos/rex/rex-back/tests/Feature/Request/RequestTest.php)
- [`tests/Feature/Request/BackfillOutputRequestApiTest.php`](C:/Users/Emanuel/Desktop/Soeltech/projetos/rex/rex-back/tests/Feature/Request/BackfillOutputRequestApiTest.php)
- [`tests/Feature/Request/BackfillOutputRequestFulfillmentTest.php`](C:/Users/Emanuel/Desktop/Soeltech/projetos/rex/rex-back/tests/Feature/Request/BackfillOutputRequestFulfillmentTest.php)
- [`tests/Feature/Request/OriginTransactionRequestExportTest.php`](C:/Users/Emanuel/Desktop/Soeltech/projetos/rex/rex-back/tests/Feature/Request/OriginTransactionRequestExportTest.php)
- [`tests/Feature/Request/OriginTransactionDevolutionExportTest.php`](C:/Users/Emanuel/Desktop/Soeltech/projetos/rex/rex-back/tests/Feature/Request/OriginTransactionDevolutionExportTest.php)

### `quebrado`

Esses casos estavam falhando no início da auditoria e foram corrigidos nesta entrega:

- [`tests/Unit/Login/LogoutTest.php`](C:/Users/Emanuel/Desktop/Soeltech/projetos/rex/rex-back/tests/Unit/Login/LogoutTest.php)
  - causa: assinatura antiga de `LogoutService::execute()`
  - correção: passou a enviar `LogoutDTO` e a validar remoção do cache `erp_password_{tokenId}`
- [`tests/Unit/Login/LoginTokenTest.php`](C:/Users/Emanuel/Desktop/Soeltech/projetos/rex/rex-back/tests/Unit/Login/LoginTokenTest.php)
  - causa: email fixo compartilhado entre execuções e payload incompleto para `LoginDTO`
  - correção: email isolado por teste e inclusão de `sector`/`access_level`
- [`tests/Feature/Request/BackfillOutputRequestApiTest.php`](C:/Users/Emanuel/Desktop/Soeltech/projetos/rex/rex-back/tests/Feature/Request/BackfillOutputRequestApiTest.php)
  - causa: ausência de isolamento de banco no arquivo
  - correção: adição de `RefreshDatabase`
- [`tests/Feature/Request/BackfillOutputRequestFulfillmentTest.php`](C:/Users/Emanuel/Desktop/Soeltech/projetos/rex/rex-back/tests/Feature/Request/BackfillOutputRequestFulfillmentTest.php)
  - causa: falta de `RefreshDatabase` e credenciais de integração para os fluxos de devolução
  - correção: isolamento de banco e bootstrap de `integration.user` / `integration.user_password`
- [`tests/Feature/Request/OriginTransactionDevolutionExportTest.php`](C:/Users/Emanuel/Desktop/Soeltech/projetos/rex/rex-back/tests/Feature/Request/OriginTransactionDevolutionExportTest.php)
  - causa: credenciais globais do Senior não configuradas no ambiente de teste
  - correção: bootstrap de `integration.user` / `integration.user_password`

### `desatualizado`

- [`tests/TestCase.php`](C:/Users/Emanuel/Desktop/Soeltech/projetos/rex/rex-back/tests/TestCase.php)
  - o helper `authenticateAs()` estava mantendo o token em formato incorreto para cenários que consultam `currentAccessToken()`
  - foi corrigido para anexar o `accessToken` real ao usuário autenticado
- [`phpunit.xml`](C:/Users/Emanuel/Desktop/Soeltech/projetos/rex/rex-back/phpunit.xml)
  - o ambiente de teste não expunha `APP_KEY`, o que quebrava qualquer cenário com `Crypt`

### `gap`

Cobertura ainda recomendada para o próximo desdobramento:

- [`tests/Feature/StockIO/*`](C:/Users/Emanuel/Desktop/Soeltech/projetos/rex/rex-back/tests/Feature/StockIO)
  - revisar rotas que dependem de `currentAccessToken()` e abilities por setor
- [`tests/Feature/PickingOrder/*`](C:/Users/Emanuel/Desktop/Soeltech/projetos/rex/rex-back/tests/Feature/PickingOrder)
  - revisar autenticação real por token e setor ativo
- [`tests/Feature/User/BackfillOutputSeniorCredentialsEndpointsTest.php`](C:/Users/Emanuel/Desktop/Soeltech/projetos/rex/rex-back/tests/Feature/User/BackfillOutputSeniorCredentialsEndpointsTest.php)
  - revisar o comportamento completo de credenciais Senior persistidas
- validação específica do middleware `UpdateTokenExpiration` em cenários de rotação e expiração do token
- revisão de qualquer fluxo que use `belongsSector()`, `currentSector()` ou cache `erp_password_{tokenId}` fora do recorte já testado

## Correções aplicadas

- Bootstrap de teste:
  - [`phpunit.xml`](C:/Users/Emanuel/Desktop/Soeltech/projetos/rex/rex-back/phpunit.xml) recebeu `APP_KEY`
  - [`tests/TestCase.php`](C:/Users/Emanuel/Desktop/Soeltech/projetos/rex/rex-back/tests/TestCase.php) passou a anexar o token real no helper de autenticação
- Login:
  - [`tests/Unit/Login/LoginTokenTest.php`](C:/Users/Emanuel/Desktop/Soeltech/projetos/rex/rex-back/tests/Unit/Login/LoginTokenTest.php)
  - [`tests/Unit/Login/LogoutTest.php`](C:/Users/Emanuel/Desktop/Soeltech/projetos/rex/rex-back/tests/Unit/Login/LogoutTest.php)
  - [`tests/Feature/Login/LoginTest.php`](C:/Users/Emanuel/Desktop/Soeltech/projetos/rex/rex-back/tests/Feature/Login/LoginTest.php)
  - [`tests/Feature/Login/BackfillAdminLoginAccessTest.php`](C:/Users/Emanuel/Desktop/Soeltech/projetos/rex/rex-back/tests/Feature/Login/BackfillAdminLoginAccessTest.php)
- Request autenticado:
  - [`tests/Feature/Request/BackfillOutputRequesterSeniorCredentialsTest.php`](C:/Users/Emanuel/Desktop/Soeltech/projetos/rex/rex-back/tests/Feature/Request/BackfillOutputRequesterSeniorCredentialsTest.php)
  - [`tests/Feature/Request/RequestTest.php`](C:/Users/Emanuel/Desktop/Soeltech/projetos/rex/rex-back/tests/Feature/Request/RequestTest.php)
  - [`tests/Feature/Request/BackfillOutputRequestApiTest.php`](C:/Users/Emanuel/Desktop/Soeltech/projetos/rex/rex-back/tests/Feature/Request/BackfillOutputRequestApiTest.php)
  - [`tests/Feature/Request/BackfillOutputRequestFulfillmentTest.php`](C:/Users/Emanuel/Desktop/Soeltech/projetos/rex/rex-back/tests/Feature/Request/BackfillOutputRequestFulfillmentTest.php)
  - [`tests/Feature/Request/OriginTransactionRequestExportTest.php`](C:/Users/Emanuel/Desktop/Soeltech/projetos/rex/rex-back/tests/Feature/Request/OriginTransactionRequestExportTest.php)
  - [`tests/Feature/Request/OriginTransactionDevolutionExportTest.php`](C:/Users/Emanuel/Desktop/Soeltech/projetos/rex/rex-back/tests/Feature/Request/OriginTransactionDevolutionExportTest.php)

## Critério atendido

O recorte auditado foi estabilizado para execução repetível, sem depender de estado residual entre arquivos de teste.
