mirror of
				https://gitlab.com/Chill-Projet/chill-bundles.git
				synced 2025-11-04 03:08:25 +00:00 
			
		
		
		
	Add test for create new report
This commit is contained in:
		
							
								
								
									
										213
									
								
								Tests/Controller/ReportControllerTest.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										213
									
								
								Tests/Controller/ReportControllerTest.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,213 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Chill is a software for social workers
 | 
			
		||||
 * Copyright (C) 2014 Julien Fastré <julien.fastre@champs-libres.coop>
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software: you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU Affero General Public License as published by
 | 
			
		||||
 * the Free Software Foundation, either version 3 of the License, or
 | 
			
		||||
 * (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 * GNU Affero General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU Affero General Public License
 | 
			
		||||
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
namespace Chill\ReportBundle\Tests\Controller;
 | 
			
		||||
 | 
			
		||||
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
 | 
			
		||||
use Symfony\Component\DomCrawler\Form;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Test the life cycles of controllers, according to 
 | 
			
		||||
 * https://redmine.champs-libres.coop/projects/report/wiki/Test_plan_for_report_lifecycle
 | 
			
		||||
 *
 | 
			
		||||
 * @author Julien Fastré <julien.fastre@champs-libres.coop>
 | 
			
		||||
 */
 | 
			
		||||
class ReportControllerTest extends WebTestCase
 | 
			
		||||
{
 | 
			
		||||
    
 | 
			
		||||
    const REPORT_NAME_FIELD = 'cFGroup';
 | 
			
		||||
    
 | 
			
		||||
    /**
 | 
			
		||||
     *
 | 
			
		||||
     * @var \Chill\PersonBundle\Entity\Person 
 | 
			
		||||
     */
 | 
			
		||||
    private static $person;
 | 
			
		||||
    
 | 
			
		||||
    /**
 | 
			
		||||
     *
 | 
			
		||||
     * @var \Symfony\Component\BrowserKit\Client
 | 
			
		||||
     */
 | 
			
		||||
    private static $client;
 | 
			
		||||
    
 | 
			
		||||
    private static $user;
 | 
			
		||||
    
 | 
			
		||||
    public static function setUpBeforeClass()
 | 
			
		||||
    {
 | 
			
		||||
        static::bootKernel();
 | 
			
		||||
        
 | 
			
		||||
        //get a random person
 | 
			
		||||
        $persons = static::$kernel->getContainer()
 | 
			
		||||
              ->get('doctrine.orm.entity_manager')
 | 
			
		||||
              ->getRepository('ChillPersonBundle:Person')
 | 
			
		||||
              ->findAll();
 | 
			
		||||
        static::$person = $persons[array_rand($persons)];
 | 
			
		||||
        
 | 
			
		||||
        static::$client = static::createClient(array(), array(
 | 
			
		||||
           'PHP_AUTH_USER' => 'center a_social',
 | 
			
		||||
           'PHP_AUTH_PW'   => 'password',
 | 
			
		||||
        ));
 | 
			
		||||
        
 | 
			
		||||
        static::$user =  static::$kernel->getContainer()
 | 
			
		||||
                  ->get('doctrine.orm.entity_manager')
 | 
			
		||||
                  ->getRepository('ChillMainBundle:User')
 | 
			
		||||
                  ->findOneBy(array('username' => "center a_social"));
 | 
			
		||||
        
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    /**
 | 
			
		||||
     * 
 | 
			
		||||
     * 
 | 
			
		||||
     * We assume that : 
 | 
			
		||||
     * - we are on a "person" page
 | 
			
		||||
     * - there are more than one report model
 | 
			
		||||
     * 
 | 
			
		||||
     */
 | 
			
		||||
    public function testMenu()
 | 
			
		||||
    {
 | 
			
		||||
        
 | 
			
		||||
        $crawlerPersonPage = static::$client->request('GET', sprintf('/fr/person/%d/general', 
 | 
			
		||||
              static::$person->getId()));
 | 
			
		||||
        
 | 
			
		||||
        if (! static::$client->getResponse()->isSuccessful()) {
 | 
			
		||||
            var_dump($crawlerPersonPage->html());
 | 
			
		||||
            throw new \RuntimeException('the request at person page failed');
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        $link = $crawlerPersonPage->selectLink("Ajout d'un rapport")->link();
 | 
			
		||||
        $this->assertInstanceOf('Symfony\Component\DomCrawler\Link', $link, 
 | 
			
		||||
              "There is a \"add a report\" link in menu");
 | 
			
		||||
        $this->assertContains(sprintf("/fr/person/%d/report/select/type/for/creation",
 | 
			
		||||
              static::$person->getId()), $link->getUri(), 
 | 
			
		||||
              "There is a \"add a report\" link in menu");
 | 
			
		||||
        
 | 
			
		||||
        return $link;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    /**
 | 
			
		||||
     * 
 | 
			
		||||
     * @param \Symfony\Component\DomCrawler\Link $link
 | 
			
		||||
     * @return type
 | 
			
		||||
     * @depends testMenu
 | 
			
		||||
     */
 | 
			
		||||
    public function testChooseReportModelPage(\Symfony\Component\DomCrawler\Link $link) 
 | 
			
		||||
    {
 | 
			
		||||
        
 | 
			
		||||
        // When I click on "adda report" link in menu
 | 
			
		||||
        $crawlerAddAReportPage = static::$client->click($link);
 | 
			
		||||
        
 | 
			
		||||
        $form = $crawlerAddAReportPage->selectButton("Créer un nouveau rapport")->form();
 | 
			
		||||
        
 | 
			
		||||
        $this->assertInstanceOf('Symfony\Component\DomCrawler\Form', $form,
 | 
			
		||||
              'I can see a form with a button "add a new report" ');
 | 
			
		||||
        
 | 
			
		||||
        $this->assertGreaterThan(1, count($form->get(self::REPORT_NAME_FIELD)
 | 
			
		||||
                  ->availableOptionValues()),
 | 
			
		||||
                "I can choose between report models");
 | 
			
		||||
 | 
			
		||||
        $possibleOptionsValue = $form->get(self::REPORT_NAME_FIELD)
 | 
			
		||||
              ->availableOptionValues();
 | 
			
		||||
        $form->get(self::REPORT_NAME_FIELD)->setValue(
 | 
			
		||||
              $possibleOptionsValue[array_rand($possibleOptionsValue)]);
 | 
			
		||||
        
 | 
			
		||||
        static::$client->submit($form);
 | 
			
		||||
        
 | 
			
		||||
        $this->assertTrue(static::$client->getResponse()->isRedirect());
 | 
			
		||||
        return static::$client->followRedirect();
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    /**
 | 
			
		||||
     * 
 | 
			
		||||
     * @param \Symfony\Component\DomCrawler\Crawler $crawlerNewReportPage
 | 
			
		||||
     * @return type
 | 
			
		||||
     * @depends testChooseReportModelPage
 | 
			
		||||
     */
 | 
			
		||||
    public function testNewReportPage(\Symfony\Component\DomCrawler\Crawler $crawlerNewReportPage)
 | 
			
		||||
    {   
 | 
			
		||||
        
 | 
			
		||||
        $addForm = $crawlerNewReportPage
 | 
			
		||||
              ->selectButton('Ajouter le rapport')
 | 
			
		||||
              ->form();
 | 
			
		||||
        
 | 
			
		||||
        $this->assertInstanceOf('Symfony\Component\DomCrawler\Form', $addForm,
 | 
			
		||||
              'I have a report form');
 | 
			
		||||
        
 | 
			
		||||
        $this->isFormAsExpected($addForm);
 | 
			
		||||
        
 | 
			
		||||
        $c = static::$client->submit($addForm);
 | 
			
		||||
 | 
			
		||||
        $this->assertTrue(static::$client->getResponse()->isRedirect(),
 | 
			
		||||
              "The next page is a redirection to the new report's view page");
 | 
			
		||||
        static::$client->followRedirect();
 | 
			
		||||
        
 | 
			
		||||
        $this->assertRegExp("|/fr/person/".static::$person->getId()."/report/[0-9]*/view$|",
 | 
			
		||||
              static::$client->getHistory()->current()->getUri(),
 | 
			
		||||
              "The next page is a redirection to the new report's view page");
 | 
			
		||||
        
 | 
			
		||||
        return $addForm;
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    
 | 
			
		||||
    /**
 | 
			
		||||
     * Test the expected field are present
 | 
			
		||||
     * 
 | 
			
		||||
     * @param Form $form
 | 
			
		||||
     * @param boolean $isDefault if the form should be at default values
 | 
			
		||||
     * 
 | 
			
		||||
     */
 | 
			
		||||
    private function isFormAsExpected(Form $form, $isDefault = true)
 | 
			
		||||
    {
 | 
			
		||||
        $this->assertTrue($form->has('chill_reportbundle_report[date]'), 
 | 
			
		||||
              'the report form have a field "date"' );
 | 
			
		||||
        $this->assertTrue($form->has('chill_reportbundle_report[user]'),
 | 
			
		||||
              'the report form have field "user" ');
 | 
			
		||||
        
 | 
			
		||||
        $this->assertEquals('select', $form->get('chill_reportbundle_report[user]')
 | 
			
		||||
              ->getType(), "the user field is a select input");
 | 
			
		||||
        
 | 
			
		||||
        if ($isDefault) {
 | 
			
		||||
            $date = new \DateTime('now');
 | 
			
		||||
            $this->assertEquals(
 | 
			
		||||
                $date->format('d-m-Y'), 
 | 
			
		||||
                $form->get('chill_reportbundle_report[date]')->getValue(),
 | 
			
		||||
                "the date field contains the current date by default"
 | 
			
		||||
                  );
 | 
			
		||||
            
 | 
			
		||||
            //resolve the user
 | 
			
		||||
            $userId = $form->get('chill_reportbundle_report[user]')->getValue();
 | 
			
		||||
            
 | 
			
		||||
            $this->assertEquals('center a_social', static::$user->getUsername(),
 | 
			
		||||
                  "the user field is the current user by default");
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    /**
 | 
			
		||||
     * 
 | 
			
		||||
     * @param Form $form
 | 
			
		||||
     * @depends testNewReportPage
 | 
			
		||||
     */
 | 
			
		||||
    public function testNullDate(Form $form)
 | 
			
		||||
    {
 | 
			
		||||
        $this->assertTrue(true);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -16,6 +16,7 @@ class AppKernel extends Kernel
 | 
			
		||||
            new Chill\MainBundle\ChillMainBundle(),
 | 
			
		||||
            new Chill\PersonBundle\ChillPersonBundle(),
 | 
			
		||||
            new \Symfony\Bundle\AsseticBundle\AsseticBundle(),
 | 
			
		||||
            new Symfony\Bundle\SecurityBundle\SecurityBundle(),
 | 
			
		||||
        );   
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -26,5 +26,48 @@ doctrine:
 | 
			
		||||
        auto_generate_proxy_classes: "%kernel.debug%"
 | 
			
		||||
        auto_mapping: true
 | 
			
		||||
        
 | 
			
		||||
# Assetic Configuration
 | 
			
		||||
assetic:
 | 
			
		||||
    debug:          "%kernel.debug%"
 | 
			
		||||
    use_controller: false
 | 
			
		||||
    bundles:        [ ]
 | 
			
		||||
    #java: /usr/bin/java
 | 
			
		||||
    filters:
 | 
			
		||||
        cssrewrite: ~
 | 
			
		||||
        
 | 
			
		||||
chill_main:
 | 
			
		||||
    available_languages: [ fr, nl, en ]
 | 
			
		||||
    available_languages: [ fr, nl, en ]
 | 
			
		||||
    
 | 
			
		||||
security:
 | 
			
		||||
    providers:
 | 
			
		||||
        users:
 | 
			
		||||
            entity:
 | 
			
		||||
                class: Chill\MainBundle\Entity\User
 | 
			
		||||
                property: username
 | 
			
		||||
 | 
			
		||||
    encoders:
 | 
			
		||||
        Chill\MainBundle\Entity\User: 
 | 
			
		||||
            algorithm: bcrypt
 | 
			
		||||
 | 
			
		||||
    firewalls:
 | 
			
		||||
        dev:
 | 
			
		||||
            pattern: ^/(_(profiler|wdt)|css|images|js)/
 | 
			
		||||
            security: false
 | 
			
		||||
 | 
			
		||||
            
 | 
			
		||||
            
 | 
			
		||||
        default:
 | 
			
		||||
            anonymous: ~
 | 
			
		||||
            http_basic: ~
 | 
			
		||||
            form_login:
 | 
			
		||||
                csrf_parameter: _csrf_token
 | 
			
		||||
                intention: authenticate
 | 
			
		||||
                csrf_provider: form.csrf_provider
 | 
			
		||||
            
 | 
			
		||||
            logout: ~
 | 
			
		||||
            
 | 
			
		||||
            
 | 
			
		||||
    access_control:
 | 
			
		||||
        - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
 | 
			
		||||
        - { path: ^/admin, roles: ROLE_ADMIN }
 | 
			
		||||
        - { path: ^/, roles: ROLE_USER }
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
parameters:
 | 
			
		||||
    database_host: 127.0.0.1
 | 
			
		||||
    database_port: 5434
 | 
			
		||||
    database_name: symfony
 | 
			
		||||
    database_user: symfony
 | 
			
		||||
    database_password: symfony
 | 
			
		||||
    database_port: 5435
 | 
			
		||||
    database_name: chill
 | 
			
		||||
    database_user: chill
 | 
			
		||||
    database_password: chill
 | 
			
		||||
    locale: fr
 | 
			
		||||
@@ -0,0 +1,11 @@
 | 
			
		||||
chill_person:
 | 
			
		||||
    resource: .
 | 
			
		||||
    type: chill_routes_person
 | 
			
		||||
    
 | 
			
		||||
#load route for reports
 | 
			
		||||
chill_report:
 | 
			
		||||
    resource: .
 | 
			
		||||
    type: chill_routes_report
 | 
			
		||||
    
 | 
			
		||||
chill_main:
 | 
			
		||||
    resource: "@ChillMainBundle/Resources/config/routing.yml"
 | 
			
		||||
		Reference in New Issue
	
	Block a user