Páginas de configuração de teste com AbstractBackendController: testAclNoAccess falham

10

Estou escrevendo um teste de integração para uma seção de configuração e encontrei a seguinte falha nos casos de teste padrão:

My\Module\ConfigTest::testAclNoAccess
Failed asserting that 302 is identical to 403

Tanto quanto eu vejo, tudo funciona como deveria, mas o Magento envia uma resposta de redirecionamento em vez de "Proibido" quando o acesso é negado em uma seção de configuração.

Faz sentido alterar o teste para esperar um código de status 302? Prefiro não remover esse caso de teste, pois ele já me ajudou a capturar um identificador de recurso errado.

Este é o código relevante:

namespace My\Module;

use Magento\TestFramework\TestCase\AbstractBackendController;

class ConfigTest extends AbstractBackendController
{

    protected function setUp()
    {
        parent::setUp();
        $this->uri = 'backend/admin/system_config/edit';
        $this->resource = 'My_Module::config_my_module';
        $this->getRequest()->setParam('section', 'my_module');
    }

    // [other tests]
}
Fabian Schmengler
fonte

Respostas:

3

Faz sentido alterar o teste para esperar um código de status 302?

Sim. A tabela a seguir substitui a implementação padrão de testAclNoAccess () e verifica se um redirecionamento ocorre ao acessar a área de configuração do sistema com permissões insuficientes.

public function testAclNoAccess()
{
    $this->_objectManager->get('Magento\Framework\Acl\Builder')
        ->getAcl()
        ->deny(null, $this->resource);
    $this->dispatch($this->uri);

    //denied access in the system config redirects
    $this->assertTrue($this->getResponse()->isRedirect());
}
Kristof na Fooman
fonte
1

Estou postando um acompanhamento, mesmo que pareça menos relacionado ao problema, mas isso pode ajudar a mim e a outras pessoas. Eu recebo o mesmo erro em um teste de controlador de back-end:Failed asserting that 302 is identical to 403

No entanto, no meu caso, esse erro é gerado em todos os testes de integração (!) Do núcleo ou dos meus próprios módulos. Eu reduzi as coisas até o seguinte teste falhando:

$this->assertTrue($this->_session->isLoggedIn());
$this->dispatch($this->uri);
$this->assertTrue($this->_session->isLoggedIn(), 'Session is no longer valid');

Portanto, por algum motivo, uma vez despachada, a sessão é interrompida. Eu tentei reproduzir isso em outro ambiente, mas falhei: os testes funcionam em outro lugar, provando que isso é interrompido não por causa do código de teste errado, mas por algo no ambiente. Eu já passei por todas as etapas lógicas (dir de sessão gravável, usando Redis, outras configurações de sessão e cookie, alternando PHP), mas ainda não resolvi isso.

Eu queria postar isso, porque pode ser que outras pessoas estejam enfrentando o mesmo erro, embora não esteja relacionado ao teste em si, mas ao ambiente em si.

Jisse Reitsma
fonte