diff --git a/Tests/Controller/AccompanyingPeriodControllerTest.php b/Tests/Controller/AccompanyingPeriodControllerTest.php index 07b489fd4..6cf2d8cb7 100644 --- a/Tests/Controller/AccompanyingPeriodControllerTest.php +++ b/Tests/Controller/AccompanyingPeriodControllerTest.php @@ -75,29 +75,23 @@ class AccompanyingPeriodControllerTest extends WebTestCase ->setGenre(Person::GENRE_MAN) ; - //remove Accompanying periods - $this->person->close($this->person->getCurrentHistory() - ->setDateClosing(new \DateTime('2015-01-05'))); - foreach($this->person->getHistories() as $accompanyingPeriod) { - $this->person->removeHistoryFile($accompanyingPeriod); - } static::$em->persist($this->person); static::$em->flush(); } public function tearDown() { - //static::$em->refresh($this->person); - //static::$em->remove($this->person); + static::$em->refresh($this->person); + static::$em->remove($this->person); - //static::$em->flush(); + static::$em->flush(); } private function generatePeriods(array $periods) { foreach ($periods as $periodDef) { $period = new AccompanyingPeriod(new \DateTime($periodDef['openingDate'])); - var_dump((new \DateTime($periodDef['openingDate']))->format('d-m-Y')); + if (array_key_exists('closingDate', $periodDef)) { if (!array_key_exists('closingMotive', $periodDef)) { throw new \LogicalException('you must define a closing ' @@ -123,6 +117,14 @@ class AccompanyingPeriodControllerTest extends WebTestCase ->availableOptionValues()); } + private function getRandomClosingMotive() + { + $motives = static::$em + ->getRepository('ChillPersonBundle:AccompanyingPeriod\ClosingMotive') + ->findAll(); + return end($motives); + } + /** * Test the closing of a periods * @@ -137,13 +139,6 @@ class AccompanyingPeriodControllerTest extends WebTestCase */ public function testClosingCurrentPeriod() { - - $this->markTestSkipped('not implemented fully'); - - $this->generatePeriods(array( [ - 'openingDate' => '2015-01-05' - ] - )); $crawler = $this->client->request('GET', '/en/person/' .$this->person->getId().'/history/close'); @@ -154,25 +149,63 @@ class AccompanyingPeriodControllerTest extends WebTestCase ->setValue($this->getLastValueOnClosingMotive($form)); $form->get(self::CLOSING_INPUT) ->setValue((new \DateTime('2015-02-01'))->format('d-m-Y')); - var_dump((new \DateTime('2015-02-01'))->format('d-m-Y')); + $cr = $this->client->submit($form); - var_dump($cr->text()); + $this->assertTrue($this->client->getResponse()->isRedirect( '/en/person/'.$this->person->getId().'/history'), 'the server redirects to /history page'); $this->assertGreaterThan(0, $this->client->followRedirect() - ->filter('.success')->count(), - "a 'success' message is shown"); + ->filter('.success')->count(), + "a 'success' element is shown"); } + /** + * Test the closing of a periods + * + * Given that a person as an accompanying period opened since 2015-01-05 + * and we fill the close form (at /en/person/[id]/history/close + * with : dateClosing: 2014-01-01 + * with : the last closing motive in list + * Then the response should redirect to history view + * And the next page should have a `.error` element present in page + * + * @todo + */ + public function testClosingCurrentPeriodWithDateClosingBeforeOpeningFails() + { + + $crawler = $this->client->request('GET', '/en/person/' + .$this->person->getId().'/history/close'); + + $form = $crawler->selectButton('Submit')->form(); + + $form->get(self::CLOSING_MOTIVE_INPUT) + ->setValue($this->getLastValueOnClosingMotive($form)); + $form->get(self::CLOSING_INPUT) + ->setValue((new \DateTime('2014-01-01'))->format('d-m-Y')); + + $crawlerResponse = $this->client->submit($form); + + $this->assertFalse($this->client->getResponse()->isRedirect(), + 'the server stays on the /close page'); + $this->assertGreaterThan(0, $crawlerResponse + ->filter('.error')->count(), + "an '.error' element is shown"); + } + /** + * Test the creation of a new period + * + * Given that a person as an accompanying period opened since 2015-01-05 + * and we create a new period + * with : dateClosing: 2014-12-31 + * with : dateOpening: 2014-01-01 + * with : the last closing motive in list + * Then the response should redirect to history view + */ public function testAddNewPeriodBeforeActual() { - $this->generatePeriods(array( - [ - 'openingDate' => '2015-01-25' - ] - )); $crawler = $this->client->request('GET', '/en/person/' .$this->person->getId().'/history/create'); @@ -192,6 +225,239 @@ class AccompanyingPeriodControllerTest extends WebTestCase 'the server redirects to /history page'); $this->assertGreaterThan(0, $this->client->followRedirect() ->filter('.success')->count(), - "a 'success' message is shown"); + "a 'success' element is shown"); } + + /** + * Create a period with closing after current fails + * + * Given that a person as an accompanying period opened since 2015-01-05 + * and we create a new period + * with : dateClosing: 2015-02-01 (after 2015-01-05) + * with : dateOpening: 2014-12-31 + * with : the last closing motive in list + * Then the response should not redirect to any page + * and an error element is shown + * + * @todo + */ + public function testCreatePeriodWithClosingAfterCurrentFails() + { + + $this->markTestSkipped('this feature is not yet implemented'); + + $crawler = $this->client->request('GET', '/en/person/' + .$this->person->getId().'/history/create'); + + $form = $crawler->selectButton('Submit')->form();; + $form->get(self::CLOSING_MOTIVE_INPUT) + ->setValue($this->getLastValueOnClosingMotive($form)); + $form->get(self::CLOSING_INPUT) + ->setValue('01-02-2015'); + $form->get(self::OPENING_INPUT) + ->setValue('31-12-2014'); + + $crawler = $this->client->submit($form); + + $this->assertFalse($this->client->getResponse()->isRedirect(), + 'the server stay on form page'); + $this->assertGreaterThan(0, $crawler->filter('.error')->count(), + "an 'error' element is shown"); + } + + /** + * Create a period after a current opened period fails + * + * Given that a person as an accompanying period opened since 2015-01-05 + * and we create a new period + * with : dateClosing: 2015-03-01 + * with : dateOpening: 2015-02-01 + * with : the last closing motive in list + * Then the response should not redirect to any page + * and an error element is shown + * + * @todo + */ + public function testCreatePeriodWithOpeningAndClosingAfterCurrentFails() + { + + $this->markTestSkipped('this feature is not yet implemented'); + + $crawler = $this->client->request('GET', '/en/person/' + .$this->person->getId().'/history/create'); + + $form = $crawler->selectButton('Submit')->form();; + $form->get(self::CLOSING_MOTIVE_INPUT) + ->setValue($this->getLastValueOnClosingMotive($form)); + $form->get(self::CLOSING_INPUT) + ->setValue('01-03-2015'); + $form->get(self::OPENING_INPUT) + ->setValue('01-02-2015'); + + $crawler = $this->client->submit($form); + + $this->assertFalse($this->client->getResponse()->isRedirect(), + 'the server stay on form page'); + $this->assertGreaterThan(0, $crawler->filter('.error')->count(), + "an 'error' element is shown"); + } + + /** + * create a period with date end between another period must fails + * + * Given that a person as an accompanying period opened since 2015-01-05 + * and that this person has another accompanying period between 2014-01-01 and 2014-12-31 + * and we create a new period + * with : dateClosing: 2014-16-01 + * with : dateOpening: 2013-01-01 + * with : the last closing motive in list + * Then the response should not redirect + * and a error element is shown on the response page + */ + public function testCreatePeriodWithDateEndBetweenAnotherPeriodFails() + { + + $this->generatePeriods(array( + [ + 'openingDate' => '2014-01-01', + 'closingDate' => '2014-12-31', + 'closingMotive' => $this->getRandomClosingMotive() + ] + )); + + $crawler = $this->client->request('GET', '/en/person/' + .$this->person->getId().'/history/create'); + + $form = $crawler->selectButton('Submit')->form();; + $form->get(self::CLOSING_MOTIVE_INPUT) + ->setValue($this->getLastValueOnClosingMotive($form)); + $form->get(self::CLOSING_INPUT) + ->setValue('31-12-2014'); + $form->get(self::OPENING_INPUT) + ->setValue('01-02-2015'); + + $crawlerResponse = $this->client->submit($form); + + $this->assertFalse($this->client->getResponse()->isRedirect(), + 'the server stay on form page'); + $this->assertGreaterThan(0, $crawlerResponse->filter('.error')->count(), + "an 'error' element is shown"); + } + + /** + * create a period with date closing after opening fails + * + * Given that a person as an accompanying period opened since 2015-01-05 + * and we create a new period + * with : dateClosing: 2014-01-01 (before opening) + * with : dateOpening: 2015-01-01 + * with : the last closing motive in list + * Then the response should redirect to history view + */ + public function testCreatePeriodWithClosingBeforeOpeningFails() + { + $crawler = $this->client->request('GET', '/en/person/' + .$this->person->getId().'/history/create'); + + $form = $crawler->selectButton('Submit')->form();; + $form->get(self::CLOSING_MOTIVE_INPUT) + ->setValue($this->getLastValueOnClosingMotive($form)); + $form->get(self::CLOSING_INPUT) + ->setValue('01-01-2014'); + $form->get(self::OPENING_INPUT) + ->setValue('01-01-2015'); + + $crawler = $this->client->submit($form); + + $this->assertFalse($this->client->getResponse()->isRedirect(), + 'the server stay on form page'); + $this->assertGreaterThan(0, $crawler->filter('.error')->count(), + "an 'error' element is shown"); + } + + /** + * create a period with date closing and date opening inside another period + * fails + * + * Given that a person as an accompanying period opened since 2015-01-05 + * and that this person has another accompanying period between 2014-01-01 and 2014-12-31 + * and we create a new period + * with : dateClosing: 2014-02-01 + * with : dateOpening: 2014-03-01 + * with : the last closing motive in list + * Then the response should not redirect + * and a error element is shown on the response page + */ + public function testCreatePeriodAfterOpeningFails() + { + $this->generatePeriods(array( + [ + 'openingDate' => '2014-01-01', + 'closingDate' => '2014-12-31', + 'closingMotive' => $this->getRandomClosingMotive() + ] + )); + + $crawler = $this->client->request('GET', '/en/person/' + .$this->person->getId().'/history/create'); + + $form = $crawler->selectButton('Submit')->form();; + $form->get(self::CLOSING_MOTIVE_INPUT) + ->setValue($this->getLastValueOnClosingMotive($form)); + $form->get(self::CLOSING_INPUT) + ->setValue('2014-02-01'); + $form->get(self::OPENING_INPUT) + ->setValue('01-03-2014'); + + $crawlerResponse = $this->client->submit($form); + + $this->assertFalse($this->client->getResponse()->isRedirect(), + 'the server stay on form page'); + $this->assertGreaterThan(0, $crawlerResponse->filter('.error')->count(), + "an 'error' element is shown"); + } + + /** + * Create a period with dateOpening between another period must fails + * + * Given that a person as an accompanying period opened since 2015-01-05 + * and that this person has another accompanying period between 2014-01-01 and 2014-12-31 + * and we create a new period + * with : dateClosing: 2015-01-01 + * with : dateOpening: 2014-06-01 + * with : the last closing motive in list + * Then the response should not redirect + * and a error element is shown on the response page + */ + public function testCreatePeriodWithDateOpeningBetweenAnotherPeriodFails() + { + + $this->generatePeriods(array( + [ + 'openingDate' => '2014-01-01', + 'closingDate' => '2014-12-31', + 'closingMotive' => $this->getRandomClosingMotive() + ] + )); + + $crawler = $this->client->request('GET', '/en/person/' + .$this->person->getId().'/history/create'); + + $form = $crawler->selectButton('Submit')->form();; + $form->get(self::CLOSING_MOTIVE_INPUT) + ->setValue($this->getLastValueOnClosingMotive($form)); + $form->get(self::CLOSING_INPUT) + ->setValue('2015-01-01'); + $form->get(self::OPENING_INPUT) + ->setValue('01-06-2014'); + + $crawlerResponse = $this->client->submit($form); + + $this->assertFalse($this->client->getResponse()->isRedirect(), + 'the server stay on form page'); + $this->assertGreaterThan(0, $crawlerResponse->filter('.error')->count(), + "an 'error' element is shown"); + } + + }