djangoapp-integrador_ava

Guia de testes — Integrador AVA

Este documento indexa a documentação de testes do Integrador AVA. Os testes são todos do tipo unittest (Django TestCase) e rodam com PostgreSQL.

Para rodar, use o ava CLI do workspace:

cd ~/projetos/IFRN/sas/workspace
./ava test integrador                # suíte completa do app integrador
./ava test integrador <TestCase>     # apenas um TestCase específico

Apps e seus TestCases

App Arquivo de referência Principais TestCases
base base ActiveMixinTestCase,BasicModelAdminTestCase,BaseModelAdminTestCase
coorte coorte EnrolmentModelTestCase, RoleAdminTestCase, CohortAdminTestCase
health health HealthViewTestCase, HealthURLsTestCase, HealthMonitoringTestCase
integrador integrador Ver tabela abaixo
settings settings SettingsAppsTestCase, SettingsSecuritiesTestCase

App integrador — TestCases detalhados

TestCase O que testa
AmbienteModelTestCase Modelo Ambiente, expressao_seletora, seleciona_ambiente
SolicitacaoModelTestCase Modelo Solicitacao, auto-populate no save(), status_merged
SyncErrorTestCase Classe SyncError com código HTTP customizado
UtilsFunctionsTestCase http_get, http_post,http_get_json,http_post_json
LocalSuapHTTPMockTestCase Mock HTTP do plugin local_suap: auth, endpoints, 422, sync_up/down
ToolSgaHTTPMockTestCase Mock HTTP do plugin tool_sga: 400/401/404/501 (stub)
AmbienteSelecaoTestCase Seleção de ambiente: múltiplas regras, ordem, sem ambiente, inativo
CohortSelecaoTestCase Seleção de cohorts via rule_diario e rule_coordenacao
DecoratorsTestCase 8 decorators: json_response, valid_token, check_is_post, etc.
TrySolicitacaoDecoratorTestCase try_solicitacao: criação de Solicitacao, tratamento de exceções
MiddlewareTestCase DisableCSRFForAPIMiddleware com padrões de URL para isenção
BaseBrokerTestCase BaseBroker: credentials, get_cohort, métodos abstratos
Suap2LocalSuapBrokerTestCase Broker suap2local_suap: sync_up_enrolments, sync_down_grades, 422
ManagementCommandTestCase atualiza_solicitacoes (migração de registros antigos)
IntegrationTestCase Fluxo completo de sync_up_enrolments com todos os decorators
EdgeCasesTestCase Múltiplos ambientes, JSON incompleto, expressões complexas

Receitas rápidas (QA)

1) Rodar suíte completa

cd ~/projetos/IFRN/sas/workspace
./ava test integrador

2) Rodar apenas os testes do mock de Moodle

./ava test integrador \
    integrador.tests.LocalSuapHTTPMockTestCase \
    integrador.tests.ToolSgaHTTPMockTestCase \
    integrador.tests.Suap2LocalSuapBrokerTestCase

3) Rodar integração sem Moodle real (forçando mock)

docker compose run --rm \
    -e MOODLE_HTTP_MOCK_ENABLED=true \
    integrador \
    coverage run manage.py test --verbosity 1 integrador.tests

4) Subir ambiente para teste de interface com mock em background

No docker-compose.yml do workspace, manter no serviço integrador:

MOODLE_HTTP_MOCK_ENABLED: "true"
MOODLE_HTTP_MOCK_BACKGROUND: "true"
MOODLE_HTTP_MOCK_HOST: "0.0.0.0"
MOODLE_HTTP_MOCK_PORT: "18091"

Depois subir normalmente:

cd ~/projetos/IFRN/sas/workspace
./ava launch integrador

5) Quando desabilitar o mock

Use Moodle real para validar contrato fim a fim:

docker compose run --rm \
    -e MOODLE_HTTP_MOCK_ENABLED=false \
    integrador \
    python manage.py test --verbosity 1 integrador.tests.Suap2LocalSuapBrokerTestCase

Mock HTTP de Moodle

Para detalhes sobre os mocks HTTP (LocalSuapHTTPMock, ToolSgaHTTPMock) e como usá-los em testes de integração sem Moodle real, consulte:


Testes de Integração Reais (Docker)

Para validar o contrato fim-a-fim contra um Moodle real em contêineres:


Cobertura

A política de cobertura exige mínimo 91% (meta: 95%). O gate é aplicado em pre-push e no CI.

Para gerar e verificar localmente:

coverage run --rcfile=src/.coveragerc src/manage.py test --verbosity 1
coverage report --fail-under=91