Pruebe las páginas de configuración con AbstractBackendController: testAclNoAccess falla

10

Estoy escribiendo una prueba de integración para una sección de configuración y encontré el siguiente error de los casos de prueba predeterminados:

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

Por lo que veo, todo funciona como debería, pero Magento envía una respuesta de redireccionamiento en lugar de "Prohibido" cuando se niega el acceso en una sección de configuración.

¿Tiene sentido cambiar la prueba para esperar un código de estado 302? Preferiría no eliminar ese caso de prueba ya que ya me ayudó a detectar un identificador de recurso incorrecto.

Este es el 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
fuente

Respuestas:

3

¿Tiene sentido cambiar la prueba para esperar un código de estado 302?

Si. Lo siguiente anula la implementación predeterminada para testAclNoAccess () y comprueba que se produce una redirección cuando se accede al área de Configuración del sistema con permisos 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 en Fooman
fuente
1

Estoy publicando un seguimiento, aunque parece que está menos relacionado con el problema, pero podría ayudarme a mí y a otros. Me sale el mismo error en una prueba de controlador de back-end:Failed asserting that 302 is identical to 403

Sin embargo, en mi caso, este error aparece en todas las pruebas de integración (!) De los módulos principales o de mis propios módulos. He reducido las cosas a la siguiente falla de prueba:

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

Entonces, por alguna razón, una vez despachada, la sesión se interrumpe. Intenté reproducir esto en otro entorno, pero fallé: las pruebas funcionan en otro lugar, lo que demuestra que esto no funciona debido a un código de prueba incorrecto, sino a algo en el entorno. Ya he pasado por todos los pasos lógicos (directorio de sesión grabable, usando Redis en su lugar, otra configuración de sesión y cookie, cambiando PHP) pero aún no lo he resuelto.

Quería publicar esto, porque podría ser que otros estén experimentando el mismo error, mientras que no está relacionado con la prueba en sí, sino con el entorno en sí.

Jisse Reitsma
fuente