From 91bd7a45291e451cdeedb7e4ade883bc289d55c3 Mon Sep 17 00:00:00 2001 From: Marc Ducobu Date: Tue, 18 Aug 2015 09:19:15 +0200 Subject: [PATCH] PersonControllerUpdateTest : refactoring (doc + more tests + indentation) --- .../Controller/PersonControllerUpdateTest.php | 114 ++++++++++-------- 1 file changed, 67 insertions(+), 47 deletions(-) diff --git a/Tests/Controller/PersonControllerUpdateTest.php b/Tests/Controller/PersonControllerUpdateTest.php index 81fc7f591..050f4b73f 100644 --- a/Tests/Controller/PersonControllerUpdateTest.php +++ b/Tests/Controller/PersonControllerUpdateTest.php @@ -20,8 +20,6 @@ namespace Chill\PersonBundle\Tests\Controller; -ini_set('memory_limit', '-1'); - use Chill\PersonBundle\Entity\Person; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; @@ -34,48 +32,42 @@ use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; */ class PersonControllerUpdateTest extends WebTestCase { - /** - * - * @var \Doctrine\ORM\EntityManagerInterface - */ + /** @var \Doctrine\ORM\EntityManagerInterface The entity manager */ private $em; - /** - * - * @var Person - */ + /** @var Person The person on which the test is executed */ private $person; - /** - * - * @var string - */ + /** @var string The url using for editing the person's information */ private $editUrl; + + /** @var string The url using for seeing the person's information */ + private $viewUrl; /** - * prepare client and select a random person + * Prepare client and create a random person */ public function setUp() { static::bootKernel(); $this->em = static::$kernel->getContainer() - ->get('doctrine.orm.entity_manager'); + ->get('doctrine.orm.entity_manager'); $center = $this->em->getRepository('ChillMainBundle:Center') - ->findOneBy(array('name' => 'Center A')); + ->findOneBy(array('name' => 'Center A')); $this->person = (new Person()) - ->setLastName("My Beloved") - ->setFirstName("Jesus") - ->setCenter($center) - ->setGender(Person::MALE_GENDER); + ->setLastName("My Beloved") + ->setFirstName("Jesus") + ->setCenter($center) + ->setGender(Person::MALE_GENDER); $this->em->persist($this->person); $this->em->flush(); $this->editUrl = '/en/person/'.$this->person->getId().'/general/edit'; - $this->seeUrl = '/en/person/'.$this->person->getId().'/general'; + $this->viewUrl = '/en/person/'.$this->person->getId().'/general'; $this->client = static::createClient(array(), array( 'PHP_AUTH_USER' => 'center a_social', @@ -83,35 +75,54 @@ class PersonControllerUpdateTest extends WebTestCase )); } + /** + * Reload the person from the db + */ protected function refreshPerson() { $this->person = $this->em->getRepository('ChillPersonBundle:Person') - ->find($this->person->getId()); + ->find($this->person->getId()); } /** - * Test the edit page exist and rendering is successful + * Test the view & edit page are accessible */ public function testEditPageIsSuccessful() { - $this->client->request('GET', $this->editUrl); - + $this->client->request('GET', $this->viewUrl); $this->assertTrue($this->client->getResponse()->isSuccessful(), - "The person edit form is accessible"); + "The person view form is accessible"); + + + $this->client->request('GET', $this->editUrl); + $this->assertTrue($this->client->getResponse()->isSuccessful(), + "The person edit form is accessible"); } + /** + * Test the view & edit page of a given person are not accessible for a user + * of another center of the person + */ public function testEditPageDeniedForUnauthorized_OutsideCenter() { $client = static::createClient(array(), array( 'PHP_AUTH_USER' => 'center b_social', 'PHP_AUTH_PW' => 'password', )); + + $client->request('GET', $this->viewUrl); + $this->assertEquals(403, $client->getResponse()->getStatusCode(), + "The view page of a person of a center A must not be accessible for user of center B"); $client->request('GET', $this->editUrl); - - $this->assertEquals(403, $client->getResponse()->getStatusCode()); + $this->assertEquals(403, $client->getResponse()->getStatusCode(), + "The edit page of a person of a center A must not be accessible for user of center B"); } + /** + * Test the edit page of a given person are not accessible for an + * administrative user + */ public function testEditPageDeniedForUnauthorized_InsideCenter() { $client = static::createClient(array(), array( @@ -120,12 +131,11 @@ class PersonControllerUpdateTest extends WebTestCase )); $client->request('GET', $this->editUrl); - $this->assertEquals(403, $client->getResponse()->getStatusCode()); } /** - * test the edition of a field + * Test the edition of a field * * Given I fill the field with $value * And I submit the form @@ -142,7 +152,7 @@ class PersonControllerUpdateTest extends WebTestCase $crawler = $this->client->request('GET', $this->editUrl); $form = $crawler->selectButton('Submit') - ->form(); + ->form(); //transform countries into value if needed switch ($field) { case 'nationality': @@ -160,15 +170,25 @@ class PersonControllerUpdateTest extends WebTestCase } $form->get('chill_personbundle_person['.$field. ']') - ->setValue($transformedValue); + ->setValue($transformedValue); $this->client->submit($form); $this->refreshPerson(); - $this->assertTrue($this->client->getResponse()->isRedirect($this->seeUrl), - 'the page is redirected to general view'); + $this->assertTrue($this->client->getResponse()->isRedirect($this->viewUrl), + 'the page is redirected to general view'); $this->assertEquals($value, $callback($this->person), - 'the value '.$field.' is updated in db'); + 'the value '.$field.' is updated in db'); + + $crawler = $this->client->followRedirect(); + $this->assertGreaterThan(0, $crawler->filter('.success')->count(), + 'a element .success is shown'); + + if($field == 'birthdate' or $field == 'memo' or $field == 'countryOfBirth' or $field == 'nationality') { + $this->markTestIncomplete('Test html:contains("'.$value.'") was not performed'); + } else { + $this->assertGreaterThan(0, $crawler->filter('html:contains("'.$value.'")')->count()); + } } public function testEditLanguages() @@ -177,27 +197,27 @@ class PersonControllerUpdateTest extends WebTestCase $selectedLanguages = array('en', 'an', 'bbj'); $form = $crawler->selectButton('Submit') - ->form(); + ->form(); $form->get('chill_personbundle_person[spokenLanguages]') - ->setValue($selectedLanguages); + ->setValue($selectedLanguages); $this->client->submit($form); $this->refreshPerson(); - $this->assertTrue($this->client->getResponse()->isRedirect($this->seeUrl), - 'the page is redirected to /general view'); + $this->assertTrue($this->client->getResponse()->isRedirect($this->viewUrl), + 'the page is redirected to /general view'); //retrieve languages codes present in person foreach($this->person->getSpokenLanguages() as $lang){ $languagesCodesPresents[] = $lang->getId(); } $this->assertEquals(asort($selectedLanguages), asort($languagesCodesPresents), - 'the person speaks the expected languages'); - + 'the person speaks the expected languages'); } /** - * + * Test tbe detection of invalid data during the update procedure + * * @dataProvider providesInvalidFieldsValues * @param string $field * @param string $value @@ -207,16 +227,16 @@ class PersonControllerUpdateTest extends WebTestCase $crawler = $this->client->request('GET', $this->editUrl); $form = $crawler->selectButton('Submit') - ->form(); + ->form(); $form->get('chill_personbundle_person['.$field.']') - ->setValue($value); + ->setValue($value); $crawler = $this->client->submit($form); $this->assertFalse($this->client->getResponse()->isRedirect(), - 'the page is not redirected to /general'); + 'the page is not redirected to /general'); $this->assertGreaterThan(0, $crawler->filter('.error')->count(), - 'a element .error is shown'); + 'a element .error is shown'); } /**