PlayerHUD Availability Restriction

Condição de restrição de acesso do ecossistema PlayerHUD — documentação completa.

English | Português

View on GitHub Download .zip

🧪 Testes Automatizados

O plugin inclui testes unitários/integração (PHPUnit) e de aceitação em navegador (Behat), executados a cada push de CI contra a matriz completa (Moodle 4.5 → 5.2, PostgreSQL & MariaDB).

PHPUnit — Testes Unitários e de Integração

Arquivo de teste Casos O que é coberto
backup/restore_test.php 2 Um round-trip real de backup/restore de curso remapeia o itemid de uma restrição de posse de item, e o classid de uma restrição de classe RPG, para apontar pro item/classe do próprio curso restaurado — não o id do curso de origem (um id obsoleto faria o operador < sempre resolver a contagem de inventário como 0, desbloqueando todo mundo silenciosamente)
condition_test.php 24 Fallback sem bloco; acesso por nível no limite exato, acima e abaixo; checagem de quantidade de item nos quatro operadores (≥, >, <, =); atribuição de classe RPG (presente, uma classe diferente, classid = 0, sem linha de progresso RPG); gamificação ativa/desativada/sem registro de jogador; subtype desconhecido cai em false; configdata do bloco corrompido ou vazio degrada com segurança; strings de descrição para todos os subtypes e operadores; serialização de save(), incluindo os casts para int; get_debug_string(); um payload forjado de levelval/itemqty é convertido para int tanto por save() quanto por get_description() em vez de ser renderizado como HTML cru (regressão de XSS armazenado); um configdata de bloco adulterado contendo um objeto serializado de uma classe arbitrária nunca é instanciado, provando que unserialize_object() bloqueia isso em vez de um unserialize() puro; get_description() e is_available() nunca resolvem nomes de item/classe nem contam inventário de uma instância de bloco PlayerHUD de outro curso (regressão de isolamento de instância, três testes dedicados); uma checagem de quantidade de item reconhece saldo mantido só no motor novo de quantidade (baseado em stack) do bloco, não apenas na tabela legada de inventário
frontend_test.php 5 allow_add() com o bloco presente e ausente; get_javascript_init_params() com itens/classes populados e sem bloco; get_javascript_strings() retorna todas as chaves esperadas
privacy/provider_test.php 1 get_reason() retorna a chave de string privacy:metadata
Total 32  
vendor/bin/phpunit --testsuite availability_playerhud

Cobertura de linhas por classe (PHPUnit + Xdebug):

Classe Cobertura de linhas
frontend 100%
privacy\provider 100%
condition 91%
Total 94%

As linhas não cobertas de condition estão no ramo level de is_available() (o fallback return false; só executado se a classe \block_playerhud\game não existir — o Bloco PlayerHUD é uma dependência obrigatória declarada, então essa classe sempre existe em qualquer instalação real) e alguns ramos de borda na delegação de quantidade de item adicionada pro motor novo baseado em stack. O arquivo de round-trip de backup/restore não é atribuído a uma única classe de classes/ — ele exercita o pipeline real de restauração de ponta a ponta em vez de uma classe isolada, então não aparece na tabela por classe acima apesar de cobrir o remapeamento em tempo de restauração de condition.

Behat — Testes de Aceitação

Arquivo de feature Cenários O que é coberto
allow_add.feature 2 A opção de restrição PlayerHUD é oferecida ao adicionar uma restrição somente se o bloco existe no curso, e fica oculta caso contrário
restriction_level.feature 2 Um estudante abaixo do nível necessário vê o aviso de restrição (“Você deve alcançar…”); um estudante no nível ou acima acessa a atividade sem restrição
restriction_gamification.feature 2 Um estudante com gamificação desativada vê o aviso de restrição; um estudante com ela ativada acessa a atividade sem restrição
Total 6  
php admin/tool/behat/cli/init.php
vendor/bin/behat --tags=@availability_playerhud --profile=chrome