Retomar a oportunidade escolhida apos a entrada do candidato

This commit is contained in:
2026-10-30 21:18:53 +02:00
parent c22846b2b1
commit f5f5649cfc
8 changed files with 136 additions and 2 deletions
+6
View File
@@ -1,5 +1,11 @@
# Desenvolvimento do SGC
## Oportunidade escolhida preservada na entrada, 30 de Outubro de 2026
O botão de entrada de cada oportunidade guarda a escolha no formulário de login e apresenta o título escolhido. Após autenticação válida, o servidor volta a conferir publicação, empresa e prazo e encaminha para o formulário dessa oportunidade. Não aceita URLs de retorno fornecidos pelo cliente. Um identificador inexistente, de outra empresa, retirado ou expirado encaminha para o perfil com mensagem genérica de indisponibilidade. A entrada não envia a candidatura, não modifica o perfil e não dispensa confirmação de email ou requisitos documentais. Criar uma nova conta mantém o percurso de preparação do perfil anteriormente existente.
Verificação dirigida final SQLite: 26 testes/400 asserções. PostgreSQL descartável: 66 testes/1426 asserções sobre os percursos de candidatos e Pessoas, incluindo os novos guardas de destino; a mensagem final de indisponibilidade foi adicionalmente conferida em SQLite e no frontend. Dez testes frontend, PHPStan sem erros, tipos, Pint e lint dirigidos. Sem novas migrações ou instalação no domínio; conferência visual continua pendente. Provas integrais da release bf84575 reutilizadas, sem repetição de toda a suíte. A compilação e prova final constam em `proofs/candidate-opportunity-login.json`.
## Consulta de oportunidades antes do registo, 30 de Outubro de 2026
A entrada da área do candidato mostra oportunidades explicitamente publicadas, abertas e dentro do prazo, com título, tipo, data e descrição pública. Não expõe finalidade interna, regras, candidaturas, avaliações ou documentos. A consulta é paginada por empresa; a última versão da publicação controla a visibilidade, incluindo retirada. O fecho de novos registos mantém a consulta pública e a entrada das contas existentes. Preparar e enviar candidaturas continuam a exigir autenticação própria, perfil e confirmação de email conforme as regras já existentes.
@@ -0,0 +1,16 @@
{
"checked_at": "2026-10-30T19:18:12+00:00",
"database": "disposable PostgreSQL",
"application_role_reused_without_privilege_change": true,
"result": "passed",
"test_files": [
"CandidateSubmissionsTest",
"PeopleHiringTest",
"CandidatePortalTest",
"CandidateDocumentFormatsTest"
],
"original_evaluation_untouched": true,
"database_removed": true,
"tests": 66,
"assertions": 1426
}
@@ -0,0 +1,43 @@
{
"checked_at": "2026-10-30T19:18:47.034145+00:00",
"base_commit": "c22846b",
"scope": [
"selected public opportunity carried into candidate login",
"fixed server-generated redirect after authentication",
"company publication deadline and unknown-id recheck",
"profile fallback with generic unavailable notice",
"no automatic submission or registration flow changes"
],
"module_sqlite": {
"tests": 26,
"assertions": 400,
"passed": true
},
"postgresql": {
"tests": 66,
"assertions": 1426,
"passed": true,
"disposable_database_removed": true,
"final_notice_additionally_checked_in_sqlite_and_frontend": true
},
"frontend": {
"tests": 10,
"status": "passed"
},
"phpstan_errors": 0,
"typescript": true,
"pint": true,
"lint": true,
"build": {
"exit_code": 0,
"completed": true
},
"new_migrations": false,
"production_installed": false,
"visual_review": "pending; unavailable connector",
"source_sha256": {
"app/Http/Controllers/CandidatePortalController.php": "7866cb1c29a85761906637e3caa15f334ee67de8c212ccf4c31f07d021c61b1b",
"resources/js/pages/candidate/entry.tsx": "3c5cae01a0ebd5c2fd65569be5d2e039cb8c3e92e784497bfe8df468bdf13bab",
"resources/js/pages/candidate/profile.tsx": "b13aea00c82e7e35a955d598a65b5b01b3725d50a39a4b38a0b10c4ac6ef6dd2"
}
}