Tester les pages de configuration avec AbstractBackendController: testAclNoAccess échoue

10

J'écris un test d'intégration pour une section de configuration et j'ai rencontré l'échec suivant des cas de test par défaut:

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

Pour autant que je vois, tout fonctionne comme il se doit, mais Magento envoie une réponse de redirection au lieu de "Interdit" lorsque l'accès est refusé dans une section de configuration.

Est-il judicieux de modifier le test pour attendre un code d'état 302? Je préfère ne pas supprimer ce cas de test car il m'a déjà aidé à attraper un mauvais identifiant de ressource.

Voici le code pertinent:

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
la source

Réponses:

3

Est-il judicieux de modifier le test pour attendre un code d'état 302?

Oui. Ce qui suit remplace l'implémentation par défaut de testAclNoAccess () et vérifie qu'une redirection se produit lors de l'accès à la zone System Config avec des autorisations insuffisantes.

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 chez Fooman
la source
1

Je poste un suivi, même s'il semble qu'il soit moins lié au problème, mais cela pourrait m'aider et aider les autres. J'obtiens la même erreur dans un test de contrôleur principal:Failed asserting that 302 is identical to 403

Cependant, dans mon cas, cette erreur est lancée sur tous les tests d'intégration (!) Du noyau ou de mes propres modules. J'ai réduit les choses à l'échec du test suivant:

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

Donc, pour une raison quelconque, une fois envoyée, la session se brise. J'ai essayé de reproduire cela sur un autre environnement, mais j'ai échoué: les tests fonctionnent ailleurs, prouvant que cela ne se casse pas à cause d'un mauvais code de test, mais à la place dans l'environnement. J'ai déjà parcouru toutes les étapes logiques (répertoire de session accessible en écriture, en utilisant Redis à la place, autres paramètres de session et de cookie, changement de PHP) mais je n'ai pas encore résolu cela.

Je voulais poster ceci, car il se peut que d'autres rencontrent la même erreur, alors qu'elle n'est pas liée au test lui-même, mais à l'environnement lui-même.

Jisse Reitsma
la source