UsersControllerTest.php 5.7 KB
<?php
namespace App\Test\TestCase\Controller;

use App\Controller\UsersController;
use Cake\TestSuite\IntegrationTestCase;

/**
 * App\Controller\UsersController Test Case
 */
//class UsersControllerTest extends IntegrationTestCase
class UsersControllerTest extends General
{

    /**
     * Fixtures
     *
     * @var array
     */
    public $fixtures = [
    	'app.Configurations',

        'app.Fakeldapusers',
        'app.Users',
        'app.GroupesMetiers',
        'app.Materiels',
        'app.SurCategories',
        'app.Categories',
        'app.SousCategories',
        'app.GroupesThematiques',
        'app.Organismes',
        'app.Sites',
        'app.Emprunts',
        'app.Documents',
        'app.Suivis',
        'app.TypeSuivis',
    ];

    //@Implement
    protected function getNewEntityWithAllMandatoryFields() {
        return [
            //'nom' => 'test9 test0',
            'nom' => 'user6 USER',
            //'username' => 'testt',
            'username' => 'user6_USER',
            'password' => '$2y$10$VtYdA8Evkc.K.VpvqmF9wui5hc9ep19f8ukWBeFBIlunXSHPqw.K2',
            'email' => 'testt@test.fr',
            'role' => 'Utilisateur',
            'groupes_metier_id' => 1,
            'groupes_thematique_id' => 1
        ];
    }
    static protected function _getEntityIdOkForTesting() {
        return 2;
    }
    
    /*
    public function authUser() {
    	$user = [
    			'Auth' => [
    					'User' => [
    							'sn' => [0 => 'test2'],
    							'mail' => [0 => 'test@test.fr'],
    							'givenname' => [0 => 'test1'],
    							'cn' => [0 => 'user1_SUPER'],
    							'userpassword' => [0 => 'test'],
    					]
    			]
    	];
    	$this->session($user);
    	 
    	$authType = ['authType' => 'cn'];
    	$this->session($authType);
    }
    */
    
    
    
    /**
     * Test UNauthentified access to website
     * 
     * By default, must have ONLY access to /about page, or /login page  
     *
     * @return void
     */
    public function testUser10AccessAsAnonymous() {
        $this->get('/pages/about');
        $this->assertResponseContains('A PROPOS DU LOGICIEL', 'Un utilisateur NON authentifié devrait avoir accès à la page /about');
        $this->get('/');
        $this->assertRedirect('/users/login', 'Un utilisateur NON authentifié devrait etre redirigé sur la page de login');
    }
    
    /**
     * Test login method
     *
     * @return void
     */
    public function testUser20LoginAsSuper()
    {
    	$this->post('/users/login', ['ldap' => 'user1_SUPER', 'password' => 'test']);
    	//$this->assertRedirect('/pages/home', 'Un utilisateur privilégié devrait pouvoir se loguer');
    	$this->assertRedirect('/', 'Un utilisateur privilégié devrait pouvoir se loguer');
    }
    public function testUser21LoginAsUser()
    {
        $this->post('/users/login', ['ldap' => 'user5_USER', 'password' => 'test']);
        //$this->assertRedirect('/pages/home', 'Un utilisateur non privilégié devrait pouvoir se loguer');
        $this->assertRedirect('/', 'Un utilisateur non privilégié devrait pouvoir se loguer');
    }
    

    /**
     * Test logout method
     * TODO: ca marche pas, impossible de simuler un vrai logout, l'utilisateur est toujours connecté !!!
     *
     * @return void
     */
    public function TODOtestUser30Logout()
    {
        //$this->authUser();
        $this->authSuperAdmin();
        $this->get('/pages/home');
        //$this->assertSession(1, 'Auth.User.id'); // Check user is logged in
        $this->assertSession('user1_SUPER', 'Auth.User.cn.0'); // Check user is logged in
        $this->assertSession(['SUPER'], 'Auth.User.sn'); // Check user is logged in

        $this->get('/users/logout');
        $this->assertSession(null, 'Auth.User'); // Check user is logged out
        //unset($this->session);
        //$this->assertRedirect('/pages/home', 'Un utilisateur devrait pouvoir se déloguer');
        //$this->get('/pages/home');
        $this->assertRedirect('/users/login', 'Un utilisateur devrait pouvoir se déloguer et ainsi revenir sur la page login');
        //$this->assertRedirect(['controller' => 'Users', 'action' => 'login']);
        $this->get('/materiels');
        $this->assertResponseNotContains('Liste des', 'On devrait normalement etre dé-logué !!! or on ne l\'est pas');
    }

    /**
     * Test add method
     *
     * @return void
     */
    public function testAdd()
    {
        //$this->authUser();
        $this->authSuperAdmin();
        
    	$data = [
            'id' => 6,
            'nom' => 'Test3 Test4',
            'username' => 'testo',
            'password' => 'test',
            'email' => 'testo@test.fr',
            'role' => 'Super Administrateur',
            'groupes_metier_id' => 1,
    		    'groupes_thematique_id' => 1,
			'sur_categorie_id' => 1
        ];
    	
    	$this->post('/users/add', $data);
    	$this->get('/users/view/6');
    	$this->assertResponseContains('Test3 Test4', 'L\'ajout d\'un utilisateur ne fonctionne pas correctement');
    }
    
    
    /**
     * Test (automatique) de (presque) TOUTES les actions de CE controleur
     *
     * @return void
     *
     * @dataProvider dataProviderActionsAndRoles4
     */
    public function testAuthorizationsForAllActionsOnUsers($action, $role_short, $role_long) {
        /*
         $entities_name = $this->getEntitiesName();
         debug($entities_name);
         $nb = TableRegistry::getTableLocator()->get($entities_name)->find()->count();
         //$nb = $this->getNbEntitiesInFixture();
         debug("nb is $nb");
         $nb = $this->getNbEntitiesInFixture();
         debug("nb is $nb");
         */
        // call parent General
        $this->_testAuthorizationsForAllControllerActions($action, $role_short, $role_long);
    }


}