SuivisControllerTest.php 10.4 KB
<?php
namespace App\Test\TestCase\Controller;

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

/**
 * App\Controller\SuivisController Test Case
 */
//class SuivisControllerTest extends IntegrationTestCase
class SuivisControllerTest extends General
{

    // nb suivis dans la BD
    private $nb_entities_in_fixture = 3;
    
    /**
     * Fixtures
     *
     * @var array
     */
    public $fixtures = [
        'app.suivis',
        'app.materiels',
        'app.sur_categories',
        'app.categories',
        'app.sous_categories',
        'app.groupes_thematiques',
        'app.groupes_metiers',
        'app.fakeldapusers',
        'app.users',
        'app.organismes',
        'app.sites',
        'app.documents',
        'app.emprunts',
    	'app.configurations',
    	'app.type_suivis',
    	'app.type_documents',
		'app.unites',
		'app.fichemetrologiques'
		];

    /*
     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 index method
     *
     * @return void
     */
    public function testIndex()
    {
        //$this->authUser();
        $this->authSuperAdmin();
            
        	// 1) On doit pouvoir accéder à la page une fois authentifié
        	$this->get('/suivis/index');
        	$this->assertNoRedirect("Authentifié mais redirection vers /users/login.");
    
        	// 2) On doit avoir N suivis
        	$nb = $this->nb_entities_in_fixture;
        	$this->assertResponseContains("Liste des suivis ($nb)", "Le nombre de suivis renvoyé est incorrect.");
    }

    /**
     * Test view method
     *
     * @return void
     */
	public function testView()
    {
    //$this->authUser();
    $this->authSuperAdmin();
        
    	$this->get('/suivis/view/2');

        $this->assertResponseOk();
		
    	$this->assertResponseContains("TEST VIEW SUIVI VALIDE", "Le suivi retourné n'est pas celui demandé.");
    }

    /**
     * Test add method
     *
     * @return void
     */
    public function testAdd()
    {
    
        $matos_created_id = 1;
        $matos_validated_id = 3;
    	$data = [
    		// (EP) pas utile car auto
    		//'id' => 5,
    		
    	    //'materiel_id' => 1, // created
    	    'materiel_id' => $matos_validated_id, // validated
    		'date_controle' => '2016-04-19',
    		'date_prochain_controle' => '2016-04-19',
    		'type_suivi_id' => 1,
    		'groupes_metier_id' => 1,
    		'groupes_thematique_id' => 1,
    		'organisme' => 'Lorem ipsum dolor sit amet',
    		'frequence' => 1,
    		'type_frequence' => '/ Jours',
    		'commentaire' => ' TEST ADD SUIVI VALIDE ',
    		'nom_createur' => 'Lorem ipsum dolor sit amet',
    		'nom_modificateur' => 'Lorem ipsum dolor sit amet',
    		'created' => '2016-04-19 09:09:28',
    		'modified' => '2016-04-19 09:09:28'
    	];
    	
        //$this->authUser();
        $this->authSuperAdmin();
    
        // Methode commune de la classe parente
        $this->_testAddEntitiesRelatedToMateriel("suivi", $this->nb_entities_in_fixture, $data);
        
        /*        
        $this->post('/suivis/add/1', $data);
    	$this->get('/suivis/index');
    	$this->assertResponseContains("Liste des suivis (3)", "Le suivi ne s'ajoute pas correctement.");
    	*/
    	
    }

    /**
     * Test edit method
     *
     * @return void
     */
   public function testEdit()
    {
		
        //$this->authUser();
        $this->authSuperAdmin();
        
    	$data = [
    		'materiel_id' => 1,
    		'date_controle' => '2016-04-19',
    		'date_prochain_controle' => '2016-04-19',
    		'type_suivi_id' => 1,
    		'groupes_metier_id' => 1,
    		'groupes_thematique_id' => 1,
    		'organisme' => 'Lorem ipsum dolor sit amet',
    		'frequence' => 1,
    		'type_frequence' => '/ Jours',
    		'commentaire' => ' TEST EDIT SUIVI VALIDE ',
    		'nom_createur' => 'Lorem ipsum dolor sit amet',
    		'nom_modificateur' => 'Lorem ipsum dolor sit amet',
    		'created' => '2016-04-19 09:09:28',
    		'modified' => '2016-04-19 09:09:28'
    	];
    	$this->post('/suivis/edit/1', $data);
    	$this->get('/suivis/view/1');
		$this->assertResponseContains("TEST EDIT SUIVI VALIDE", "Le suivi n'a pas était édité correctement");
    	
    }

    /**
     * Test delete method
     *
     * @return void
     */
    /**
     * @dataProvider dataProviderRoles5
     */
    public function testDelete($role)
    //public function testDelete()
    {
        //$this->authUser();
        //$this->authSuperAdmin();
        $this->authAs($role);
        
        $nb = 3;
        $this->_testNbEntitiesInIndexView('suivis', $nb);
        
        if ($this->USER_IS_USER()) {
            // 1) delete pas possible car le matos n'est pas au user
            $this->_testDelete(3, false, $nb);
            // 2) delete possible car le matos est au user
            $this->_testDelete(2, true, $nb);
        }
        elseif ($this->USER_IS_RESP()) {
            // 1) delete pas possible car le matos n'est pas du meme groupe (metier ou thematique)
            $this->_testDelete(3, false, $nb);
            // 2) delete possible car le matos est du meme groupe
            $this->_testDelete(2, true, $nb);
        }
        elseif ($this->USER_IS_ADMIN() || $this->USER_IS_ADMIN_PLUS()) {
            // 1) delete pas possible car un admin(+) n'a pas ce droit (sauf s'il est proprio du matos)
            $this->_testDelete(3, false, $nb);
            // 2) delete pas possible car un admin(+) n'a pas ce droit (sauf s'il est proprio du matos)
            $this->_testDelete(2, false, $nb);
        }
        // superadmin
        else {
            // 1) delete toujours possible
            $this->_testDelete(3, true, $nb); 
            $nb--;
            $this->_testDelete(2, true, $nb);
        }
        /*
    	//$this->post('/suivis/delete/1');
    	$this->post('/suivis/delete/2');
    	$nb--;
    	$this->_testNbEntitiesInIndexView('suivis', $nb, "Le suivi n'as pas été supprimé");
    	*/
    	/*
    	$this->get('/suivis/index');
    	$this->assertResponseContains("Liste des suivis $nb)", "Le suivi n'as pas été supprimé.");
    	*/
    	
    	/* Ca marche pas car bien que delete est autorisé pour superadmin, ça ne se fait pas car ce suivi a des docs attachés 
    	//$this->authAdmin();
    	$this->post('/suivis/delete/1');
    	//$nb--;
    	$this->_testNbEntitiesInIndexView('suivis', $nb, "Le suivi a été supprimé alors que ça ne devrait pas être possible");
    	*/
    }
    
    private function _testDelete($id, $delete_should_be_ok=false, $nb)
    {
        //$this->post('/suivis/delete/1');
        $this->post("/suivis/delete/$id");
        // delete possible
        if ($delete_should_be_ok) {
            $nb--;
            $error_msg = "Le suivi $id n'as pas été supprimé alors que ça devrait être possible !";
        }
        // delete PAS possible
        else
            $error_msg = "Le suivi $id a été supprimé alors que ça ne devrait PAS être possible !";
        $this->_testNbEntitiesInIndexView('suivis', $nb, $error_msg);
    }
    
   
    /**
     * Test find method
     *
     * @return void
     */
    public function testFind()
    {
        //$this->authUser();
        $this->authSuperAdmin();
        
    	$dataSearch = [
    			's_type_suivi_id' => '1',
    			's_groupes_metier_id' => '',
    			's_groupes_thematique_id' => '',
    			's_organisme' => '',
    			's_date_controle' => '',
    			's_periode_controle1' => '',
    			's_periode_controle2' => '',
    	];
		
    	$nb = $this->nb_entities_in_fixture;
    	
    	//Test sans aucun champ
    	$this->get('/suivis/find');
    	$this->assertResponseContains("Aucun résultats pour cette recherche.", "Le contenu de la recherche devrait être vide.");
    
    	//Test champ type suivi
    	$this->post('/suivis/find', $dataSearch);
    	$nbfound = $nb;
    	$this->assertResponseContains("Résultats ($nbfound)", "Le nb de suivis pour la recherche par type de suivi est incorrecte.");
    	  
    	//Test champ organisme
    	$dataSearch['s_type_suivi_id'] = '';
    	$dataSearch['s_organisme'] = 'Lorem ipsum';
    	$this->post('/suivis/find', $dataSearch);
    	$nbfound = $nb-1;
    	$this->assertResponseContains("Résultats ($nbfound)", "Le nb de suivis pour la recherche par organisme est incorrecte.");
		
    	//Test champ date_controle
    	$dataSearch['s_organisme'] = '';
    	$dataSearch['s_date_controle'] = '2016-04-19';
    	$this->post('/suivis/find', $dataSearch);
    	$nbfound = $nb-2;
    	$this->assertResponseContains("Résultats ($nbfound)", "Le nb de suivis pour la recherche par date de controle est incorrecte.");
    	 
    	//Test champ periode_controle1 (debut)
    	$dataSearch['s_date_controle'] = '';
    	$dataSearch['s_periode_controle1'] = '2017-01-01';
    	$this->post('/suivis/find', $dataSearch);
    	$nbfound = $nb-1;
    	$this->assertResponseContains("Résultats ($nbfound)", "Le nb de suivis pour la recherche par debut de periode de controle est incorrecte.");
    	 
    	//Test champ periode_acquisition1 (debut) && champ periode_acquisition2 (fin)
    	$dataSearch['s_periode_controle2'] = '2018-01-01';
    	$this->post('/suivis/find', $dataSearch);
    	$this->assertResponseContains("Aucun résultats pour cette recherche.", "Le nb de suivis pour la recherche par intervalle entre la periode de controle 1 (debut) et la periode de controle 2 (fin) est incorrecte.");
    	 
    	//Test champ periode_acquisition2 (fin)
    	$dataSearch['s_periode_controle1'] = '';
    	$this->post('/suivis/find', $dataSearch);
    	$nbfound = $nb-2;
    	$this->assertResponseContains("Résultats ($nbfound)", "Le nb de suivis pour la recherche par fin de periode de controle est incorrecte.");
    		 
    }
   

    /**
     * Test ACLIndexResponsable
     *
     * @return void
     */
	public function testACLIndexResponsable() {
	    $nb = $this->nb_entities_in_fixture;
	    //$this->authUser();
	    $this->authSuperAdmin();
	    
    	$this->get('/suivis/index?GM=1');
    	$this->assertResponseContains("Liste des suivis ($nb)", "La liste de suivis selon le groupe métier est incorrect.");
    }
    
}