Testes
npm testOs testes cobrem as regras que decidem o que conta como aprendizagem e as contas académicas — o sítio onde um erro silencioso faria a app mentir ao estudante.
| Ficheiro | O que garante |
|---|---|
tests/learning.test.mjs | Domínio só de testes sem ajuda (R7); prática com ajuda à parte; aviso de dependência; excesso de confiança (R6) e a ordem do Progresso; distribuição ECTS × défice com mínimo de 10% (R9); prioridade do exame próximo e véspera (R3); base fraca dá tempo sem mexer no domínio |
tests/curriculum.test.mjs | Média por ECTS truncada (verificada contra um histórico real: 16,57 com 78 ECTS); nota para não baixar e para um objetivo; grupos de escolha; arredondamento oficial; avaliação distribuída com mínimos; recurso e época especial; próxima prova; pré-requisitos; ligação percurso → plano |
tests/backup.test.mjs | A cópia de segurança recupera tudo menos o dono; ficheiros de outra app, não-JSON ou de versões futuras são recusados; linhas inválidas descartadas |
tests/import.test.mjs | A saída da IA na importação por foto é limpa (notas 0–20, datas ISO, linhas vazias fora); só imagens JPEG/PNG/WebP |
Mutações
Um teste que passa não prova nada se também passasse com a regra partida. Por isso cada regra foi estragada de propósito e confirmou-se que pelo menos um teste falha:
| Mutação | Apanhada |
|---|---|
| Domínio conta testes com ajuda / conta prática | ✅ |
| Limiar de excesso de confiança removido | ✅ |
| Mínimo de 10% não aplicado | ✅ |
| Défice ignora o domínio | ✅ |
| Janela do exame ignorada / véspera desfasada um dia | ✅ |
| Progresso ignora o excesso de confiança | ✅ |
| Dependência de ajuda nunca avisa | ✅ |
| Média não ponderada / arredondada em vez de truncada | ✅ |
| Nota mínima ignorada / recurso não substitui / nota de aprovação fixa | ✅ |
| Grupos de escolha contados em duplicado | ✅ |
| "Para não baixar" arredondado para baixo | ✅ |
| Base fraca ignora "por fazer" ou o limiar | ✅ |
| Depois de reprovar, a época normal continua a marcar a data | ✅ (teste acrescentado quando esta mutação sobreviveu) |
| Data derivada gravada como manual | ✅ |
Ao alterar uma regra, repete o exercício: estraga-a, corre npm test, confirma que falha.
Capturas da documentação
As imagens deste site são geradas por um script, com um estudante fictício:
cd docs
npm install
npm run screenshotsO script arranca o servidor local, semeia dados de demonstração, simula respostas do servidor onde é preciso (por exemplo, o painel todo verde) e grava cada ecrã em docs/public/screenshots/ com o Edge ou o Chrome já instalados. Quando a interface muda, corre-o outra vez.