Newer
Older
<?php
/**
* Copyright (c) 2012, Agence Française Informatique (AFI). All rights reserved.
*
* AFI-OPAC 2.0 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.
*
* There are special exceptions to the terms and conditions of the AGPL as it
* is applied to this software (see README file).
*
* AFI-OPAC 2.0 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 AFI-OPAC 2.0; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
require_once 'AbstractControllerTestCase.php';
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
trait TAbonneControllerMultimediaFixtureHoldSuccessOnSept12 {
protected function _launch() {
$this->onLoaderOfModel('Class_Multimedia_Location')
->whenCalled('findByIdOrigine')
->answers(Class_Multimedia_Location::newInstanceWithId(1));
$this->onLoaderOfModel('Class_Multimedia_Device')
->whenCalled('findByIdOrigineAndLocation')
->answers(Class_Multimedia_Device::newInstanceWithId(1));
$this->onLoaderOfModel('Class_Multimedia_DeviceHold')
->whenCalled('getHoldOnDeviceAtTime')
->answers(Class_Multimedia_DeviceHold::newInstanceWithId(333)
->setIdUser($this->_user->getId())
->setEnd(strtotime('2012-09-12 16:40:00')));
parent::_launch();
}
}
trait TAbonneControllerMultimediaFixtureWithUserLaurentInDevsAgiles {
protected function _initUser() {
$this->_user = AbonneControllerMultimediaUsersFixtures::getLaurent();
$this->_group= 'Devs agiles';
}
}
abstract class AbonneControllerMultimediaAuthenticateTestCase extends AbstractControllerTestCase {
protected $_json;
public function setUp() {
parent::setUp();
Zend_Auth::getInstance()->clearIdentity();
}
/**
* @param $url string
* @return stdClass
*/
protected function getJson($url) {
$this->dispatch($url, true);
return json_decode($this->_response->getBody());
}
/**
* @param $user Class_Users
*/
protected function _expectUserToLoad($user) {
Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Users')
->whenCalled('findFirstBy')
->with(array('login'=> $user->getLogin()))
->answers($user)
->whenCalled('findFirstBy')
->answers(null);
}
/**
* @param $user Class_Users
* @param $group_label string
*/
protected function _expectGroupForUser($user, $group_label) {
Storm_Test_ObjectWrapper::onLoaderOfModel('Class_UserGroupMembership')
->whenCalled('findAllBy')
->answers(array(Class_UserGroupMembership::getLoader()
->newInstance()
->setUserGroup(Class_UserGroup::getLoader()
->newInstanceWithId(1)
->setLibelle($group_label))));
Storm_Test_ObjectWrapper::onLoaderOfModel('Class_UserGroup')
->whenCalled('findAllBy')
->with(['role_level' => $user->getRoleLevel(),
'group_type' => Class_UserGroup::TYPE_DYNAMIC])
->answers([]);
}
}

llaffont
committed
class AbonneControllerMultimediaAuthenticateValidationTest extends AbonneControllerMultimediaAuthenticateTestCase {
public function setUp() {
parent::setUp();
$this->_expectUserToLoad(AbonneControllerMultimediaUsersFixtures::getLaurent());
/** @test */
public function responseShouldNotBeARedirect() {
$json = $this->getJson('/abonne/authenticate/login/any/password/any');
/** @test */
public function withoutPosteShouldReturnErrorMissingParameter() {
$json = $this->getJson('/abonne/authenticate/login/any');
$this->assertEquals('MissingParameter', $json->error);
}
/** @test */
public function withoutSiteShouldReturnErrorMissingParameter() {
$json = $this->getJson('/abonne/authenticate/login/any/password/any/poste/1');
$this->assertEquals('MissingParameter', $json->error);
}
/** @test */
public function getAbonneZorkShouldReturnErrorUserNotFound() {
$json = $this->getJson('/abonne/authenticate/login/any/password/toto/poste/1/site/1');
$this->assertEquals("UserNotFound", $json->error);
}
/** @test */
public function authenticateAbonneLaurentPasswordXXXShouldReturnWrongPassword() {
$json = $this->getJson('/abonne/authenticate/login/laurent/password/xxx/poste/1/site/1');
$this->assertEquals("PasswordIsWrong", $json->error);
}

llaffont
committed
class AbonneControllerMultimediaAuthenticateMireilleTest extends AbonneControllerMultimediaAuthenticateTestCase {
public function setUp() {
parent::setUp();
$user = AbonneControllerMultimediaUsersFixtures::getMireille();
$this->_expectUserToLoad($user);
$this->_json = $this->getJson('/abonne/authenticate/login/mireille/password/afi/poste/1/site/1');
}
public function shouldReturnSubscriptionExpired() {
$this->assertEquals('SubscriptionExpired', $this->_json->error);
}
}

llaffont
committed
abstract class AbonneControllerMultimediaAuthenticateValidTestCase extends AbonneControllerMultimediaAuthenticateTestCase {
protected $_user;
protected $_group;
public function setUp() {
parent::setUp();
$this->_initUser();
$this->_expectUserToLoad($this->_user);
$this->_expectGroupForUser($this->_user, $this->_group);
$this->_launch();
}
protected function _launch() {
$this->_json = $this->getJson(sprintf('/abonne/authenticate/login/%s/password/%s/poste/1/site/1',
$this->_user->getLogin(),
$this->_user->getPassword()));
}
protected function _initUser() {}
}

llaffont
committed
class AbonneControllerMultimediaAuthenticateLaurentTest extends AbonneControllerMultimediaAuthenticateValidTestCase {
use
TAbonneControllerMultimediaFixtureHoldSuccessOnSept12,
TAbonneControllerMultimediaFixtureWithUserLaurentInDevsAgiles;
/** @test */
public function shouldNotReturnError() {
$this->assertFalse(property_exists($this->_json, 'error'));
/** @test */
public function idShoudBe8() {
$this->assertEquals('8', $this->_json->id);
/** @test */
public function loginShoudBelaurent() {
$this->assertEquals('laurent', $this->_json->login);
/** @test */
public function passwordShoudBeAfi() {
$this->assertEquals('afi', $this->_json->password);
}
/** @test */
public function nomShoudBelaffont() {
$this->assertEquals('laffont', $this->_json->nom);
/** @test */
public function prenomShoudBelaurent() {
$this->assertEquals('laurent', $this->_json->prenom);
/** @test */
public function dateNaissanceShoudBe1978_02_17() {
$this->assertEquals('1978/02/17', $this->_json->date_naissance);
/** @test */
public function groupShoudBeAdulteAbonneAdminAndAgile() {
$this->assertEquals(array('adulte','abonne','admin_bib', 'Devs agiles'),
$this->_json->groupes);
/** @test */
public function shouldHaveHold() {
$this->assertEquals(1, $this->_json->auth);
public function holdShouldLastUntil16h40() {

llaffont
committed
$this->assertEquals('2012-09-12T16:40:00+02:00', $this->_json->until);
}

llaffont
committed

llaffont
committed
class AbonneControllerMultimediaAuthenticateLaurentDeviceNotHeldByUserTest extends AbonneControllerMultimediaAuthenticateValidTestCase {
use TAbonneControllerMultimediaFixtureWithUserLaurentInDevsAgiles;
protected function _launch() {
$this->onLoaderOfModel('Class_Multimedia_Location')
->whenCalled('findByIdOrigine')

llaffont
committed
->answers($location = Class_Multimedia_Location::newInstanceWithId(1)
->setAuthDelay(1)
->setAutohold(1));
$this->onLoaderOfModel('Class_Multimedia_Device')
->whenCalled('findByIdOrigineAndLocation')
->answers(Class_Multimedia_Device::newInstanceWithId(1)
->setGroup(Class_Multimedia_DeviceGroup::newInstanceWithId(34)->setLocation($location)));

llaffont
committed
$this->onLoaderOfModel('Class_Multimedia_DeviceHold')
->whenCalled('getHoldOnDeviceAtTime')
->answers(Class_Multimedia_DeviceHold::newInstanceWithId(333)
->setIdUser(9878)
->setStart(strtotime('2012-09-12 08:30:00'))
->setEnd(strtotime('2012-09-12 16:40:00')));

llaffont
committed
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
parent::_launch();
}
/** @test */
public function jsonShouldContainsErrorDeviceNotHeldByUser() {
$this->assertEquals('DeviceNotHeldByUser', $this->_json->error);
}
/** @test */
public function loginShoudBelaurent() {
$this->assertEquals('laurent', $this->_json->login);
}
/** @test */
public function authShouldBeZero() {
$this->assertEquals('0', $this->_json->auth);
}
}
class AbonneControllerMultimediaAuthenticateLaurentDeviceNotFoundTest extends AbonneControllerMultimediaAuthenticateValidTestCase {
use TAbonneControllerMultimediaFixtureWithUserLaurentInDevsAgiles;
protected function _launch() {
$this->onLoaderOfModel('Class_Multimedia_Location')
->whenCalled('findByIdOrigine')
->answers(Class_Multimedia_Location::newInstanceWithId(1));
$this->onLoaderOfModel('Class_Multimedia_Device')
->whenCalled('findByIdOrigineAndLocation')
->answers(null);
parent::_launch();
}
/** @test */
public function jsonShouldContainsErrorDeviceNotFound() {
$this->assertEquals('DeviceNotFound', $this->_json->error);
}

llaffont
committed
/** @test */
public function loginShoudBelaurent() {
$this->assertEquals('laurent', $this->_json->login);
}
}
class AbonneControllerMultimediaAuthenticateArnaudTest extends AbonneControllerMultimediaAuthenticateValidTestCase {
use TAbonneControllerMultimediaFixtureHoldSuccessOnSept12;
protected function _initUser() {
$this->_user = AbonneControllerMultimediaUsersFixtures::getArnaud();
$this->_group= 'Patrons';
public function groupsShouldBeInviteAndPatrons() {
$this->assertEquals(array('invite', 'Patrons'), $this->_json->groupes);
}
/** @test */
public function shouldNotReturnError() {
$this->assertFalse(property_exists($this->_json, 'error'));
}
}
class AbonneControllerMultimediaAuthenticateBaptisteTest extends AbonneControllerMultimediaAuthenticateValidTestCase {
use TAbonneControllerMultimediaFixtureHoldSuccessOnSept12;
protected function _initUser() {
$this->_user = AbonneControllerMultimediaUsersFixtures::getBaptiste();
$this->_group= 'Devs Oldschool';
}
/** @test */
public function groupsShouldBeMineurAbonneAndOldSchool() {
$this->assertEquals(array('mineur','abonne_sigb', 'Devs Oldschool'), $this->_json->groupes);

llaffont
committed

llaffont
committed
/* Début test du workflow de réservation */
abstract class AbonneControllerMultimediaHoldTestCase extends AbstractControllerTestCase {
protected $_session;

pbarroca
committed
protected $_bean;
public function setUp() {
parent::setUp();
$this->_session = new Zend_Session_Namespace('abonneController');

pbarroca
committed
$bean = new stdClass();
$bean->location = 0;
$bean->day = '';
$bean->time = '';
$bean->duration = 0;
$bean->device = 0;

pbarroca
committed
$this->_session->holdBean = $this->_bean = $bean;

llaffont
committed
Class_Users::getIdentity()
->setUserGroups([Class_UserGroup::newInstanceWithId(12)
->setMaxDay(120)
->setMaxWeek(240)
->setMaxMonth(360)]);

llaffont
committed
$this
->onLoaderOfModel('Class_Multimedia_DeviceHold')
->whenCalled('getDurationForUserBetweenTimes')
->answers(0);
}
protected function _prepareLocationInSession() {

pbarroca
committed
$this->_bean->location = 123;

llaffont
committed
Class_Bib::newInstanceWithId(3)
->setLibelle('Antibes');

llaffont
committed

llaffont
committed
Class_Multimedia_Location::newInstanceWithId(123)
->setIdSite(3)
->setLibelle('Antibes')
->setSlotSize(30)
->setMaxSlots(4)
->setHoldDelayMin(0)
->setHoldDelayMax(60)
->setOuvertures([Class_Ouverture::chaqueLundi('08:30', '12:00', '12:00', '17:45')->setId(1)->cache(),
Class_Ouverture::chaqueMercredi('08:30', '12:00', '12:00', '17:45')->setId(3)->cache(),
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
Class_Ouverture::chaqueJeudi('08:30', '12:00', '12:00', '17:45')->setId(4)->cache()])
->setGroups([Class_Multimedia_DeviceGroup::newInstanceWithId(3)
->setLibelle('Musique')
->setDevices([Class_Multimedia_Device::getLoader()
->newInstanceWithId(1)
->setLibelle('Poste 1')
->setOs('Ubuntu Lucid')
->setDisabled(0),
Class_Multimedia_Device::getLoader()
->newInstanceWithId(3)
->setLibelle('Poste 3')
->setOs('OSX')
->setDisabled(0)]),
Class_Multimedia_DeviceGroup::newInstanceWithId(5)
->setLibelle('Jeunesse')
->setDevices([
Class_Multimedia_Device::getLoader()
->newInstanceWithId(2)
->setLibelle('Poste 2')
->setOs('Windows XP')
->setDisabled(0),
Class_Multimedia_Device::getLoader()
->newInstanceWithId(4)
->setLibelle('Poste 4')
->setOs('Amiga OS')
->setDisabled(0)])
]);

pbarroca
committed
protected function _prepareDayInSession() {

llaffont
committed
$this->_bean->day = '2012-09-12';

pbarroca
committed
}
protected function _prepareTimeAndDurationInSession() {
$this->_bean->time = '9:45';
$this->_bean->duration = 45;
}
protected function _prepareGroupInSession() {
$this->_bean->group = 5;
}

pbarroca
committed
protected function _assertCurrentTimelineStep($step) {
$this->_assertTimeLineStepWithClass($step, 'selected');
}
protected function _assertPassedTimelineStep($step) {
$this->_assertTimeLineStepWithClass($step, 'passed');
}
protected function _assertTimeLineStepWithClass($step, $class) {
$this->assertXPathContentContains('//div[@class="timeline"]//li[@class="' . $class . '"]',
$step);
}

llaffont
committed
/* Premier écran de choix du lieu */
class AbonneControllerMultimediaHoldLocationTest extends AbonneControllerMultimediaHoldTestCase {
public function setUp() {
parent::setUp();
Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Multimedia_Location')
->whenCalled('findAllBy')
->answers([
Class_Multimedia_Location::newInstanceWithId(1)
->setLibelle('Salle 1')
->setBib(Class_Bib::newInstanceWithId(1))
->setOuvertures([Class_Ouverture::chaqueLundi('8:00', '12:00', '13:00', '18:00')->cache()]),
Class_Multimedia_Location::newInstanceWithId(2)
->setLibelle('Salle 2')
->setBib(Class_Bib::newInstanceWithId(2))
->setOuvertures([Class_Ouverture::chaqueMercredi('8:00', '12:00', '13:00', '18:00')->cache()]),
Class_Multimedia_Location::newInstanceWithId(3)
->setLibelle('Salle 3')
->setBib(Class_Bib::newInstanceWithId(3))
->setOuvertures([])
]);
$this->dispatch('/abonne/multimedia-hold-location', true);
}
/** @test */
public function bodyShouldContainsClass_abonne_multimedia_hold_location() {
$this->assertXPath('//body[contains(@class, "abonne_multimedia-hold-location")]');
}
/** @test */
public function currentTimelineStepShouldBeLieu() {
$this->_assertCurrentTimelineStep('Lieu');
}
/** @test */
public function locationSalle1ShouldBePresent() {

pbarroca
committed
$this->assertXPathContentContains('//a[contains(@href, "/multimedia-hold-location/location/1")]', 'Salle 1');
}
/** @test */
public function locationSalle2ShouldBePresent() {

pbarroca
committed
$this->assertXPathContentContains('//a[contains(@href, "/multimedia-hold-location/location/2")]', 'Salle 2');
}
/** @test */
public function locationSalle3WithoutAnyOuvertureShouldNotBePresent() {
$this->assertNotXPath('//a[contains(@href, "/multimedia-hold-location/location/3")]');
}

pbarroca
committed
}

llaffont
committed
/* Validation du lieu, on est redirigé sur l'écran choix du jour */

pbarroca
committed
class AbonneControllerMultimediaHoldLocationChoiceTest extends AbonneControllerMultimediaHoldTestCase {
public function setUp() {
parent::setUp();
$this->dispatch('/abonne/multimedia-hold-location/location/1', true);
}
/** @test */
public function shouldRedirectToNextStep() {
$this->assertRedirectTo('/abonne/multimedia-hold-day');
}
/** @test */
public function beanShouldHaveLocationSet() {
$this->assertEquals(1, $this->_session->holdBean->location);

llaffont
committed
/* Second écran choix du jour */
class AbonneControllerMultimediaHoldDayTest extends AbonneControllerMultimediaHoldTestCase {
public function setUp() {
parent::setUp();

pbarroca
committed
$this->_prepareLocationInSession();
$this->dispatch('/abonne/multimedia-hold-day', true);
/** @test */
public function bodyShouldContainsClass_abonne_multimedia_hold_location() {
$this->assertXPath('//body[contains(@class, "abonne_multimedia-hold-day")]');
}
/** @test */
public function currentTimelineStepShouldBeJour() {
$this->_assertCurrentTimelineStep('Jour');
}
/** @test */
public function timelineStepShouldBePassed() {
$this->_assertPassedTimelineStep('Lieu');
}
/** @test */
public function calendarShouldBePresent() {
$this->assertXPath('//div[@class="calendar"]');
}
}

llaffont
committed
/* Validation du second écran choix du jour, redirection vers le choix de l'heure */

pbarroca
committed
class AbonneControllerMultimediaHoldDayChoiceTest extends AbonneControllerMultimediaHoldTestCase {
public function setUp() {
parent::setUp();
$this->_prepareLocationInSession();

llaffont
committed
$this->dispatch('/abonne/multimedia-hold-day/day/2012-09-12', true);

pbarroca
committed
}
/** @test */
public function shouldRedirectToNextStep() {
$this->assertRedirectTo('/abonne/multimedia-hold-hours');
}
/** @test */
public function beanShouldHaveDaySet() {

llaffont
committed
$this->assertEquals('2012-09-12', $this->_session->holdBean->day);

pbarroca
committed
}
}

llaffont
committed
/* Validation du second écran mais l'utilisateur a dépassé son quota de réservation */
class AbonneControllerMultimediaHoldDayChoiceWithOverQuotaTest extends AbonneControllerMultimediaHoldTestCase {
public function setUp() {
parent::setUp();
$this->_prepareLocationInSession();
Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Multimedia_DeviceHold')
->whenCalled('getDurationForUserBetweenTimes')
->answers(8000);

llaffont
committed
$this->dispatch('/abonne/multimedia-hold-day/day/2012-09-12', true);
}
/** @test */
public function shouldNotRedirect() {
$this->assertNotRedirect();
}
/** @test */
public function quotaErrorShouldBePresent() {
$this->assertXPathContentContains('//div', 'Quota déjà atteint ce jour');
}
}

llaffont
committed
/* Troisième écran choix de l'heure de début de réservation */
class AbonneControllerMultimediaHoldHoursTest extends AbonneControllerMultimediaHoldTestCase {
public function setUp() {
parent::setUp();
$this->_prepareLocationInSession();

pbarroca
committed
$this->_prepareDayInSession();
Class_Multimedia_Location::setTimeSource(Storm_Test_ObjectWrapper::mock()
->whenCalled('time')

llaffont
committed
->willDo(function() {return strtotime('2012-09-12 09:00:00');}));

pbarroca
committed
$this->dispatch('/abonne/multimedia-hold-hours', true);
/** @test */
public function currentTimelineStepShouldBeHoraires() {
$this->_assertCurrentTimelineStep('Horaires');
}
/** @test */
public function listOfStartTimesShouldBePresent() {
$this->assertXPathCount('//select[@id="time"]/option', 17, $this->_response->getBody());
}
/** @test */
public function startingAt10ShouldBePossible() {
$this->assertXPathContentContains('//option[@value="10:00"]', '10h00');
}
/** @test */
public function startingAt8AndHalfShouldNotBePossible() {
$this->assertNotXpath('//option[@value="08:30"]');
}

pbarroca
committed
public function oneHourDurationOptionShouldBePresent() {
$this->assertXPathContentContains('//option[@value="60"]', '1h');
}
/** @test */
public function oneHourAndAHalfDurationLinkShouldBePresent() {

pbarroca
committed
$this->assertXPathContentContains('//option[@value="90"]', '1h30mn');
}
}

llaffont
committed
/* Troisième écran choix de l'heure, redirection sur le choix du poste */

pbarroca
committed
class AbonneControllerMultimediaHoldHoursChoiceTest extends AbonneControllerMultimediaHoldTestCase {
public function setUp() {
parent::setUp();
$this->_prepareLocationInSession();
$this->_prepareDayInSession();
$this->dispatch('/abonne/multimedia-hold-hours/time/' . urlencode('9:45') . '/duration/45', true);
}
/** @test */
public function shouldRedirectToNextStep() {
$this->assertRedirectTo('/abonne/multimedia-hold-group');

pbarroca
committed
}
/** @test */
public function beanShouldHaveTimeAndDurationSet() {
$this->assertEquals('9:45', $this->_session->holdBean->time);
$this->assertEquals('45', $this->_session->holdBean->duration);

llaffont
committed
/* Troisième écran choix d'une heure déjà allouée */

pbarroca
committed
class AbonneControllerMultimediaHoldHoursChooseAlreadyHeldTest extends AbonneControllerMultimediaHoldTestCase {
public function setUp() {
parent::setUp();
$this->_prepareLocationInSession();
$this->_prepareDayInSession();
Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Multimedia_DeviceHold')
->whenCalled('countBetweenTimesForUser')
->answers(1);
$this->dispatch('/abonne/multimedia-hold-hours/time/' . urlencode('9:45') . '/duration/45', true);
}
/** @test */
public function errorMessageShouldBePresent() {
$this->assertXPathContentContains('//div[@class="error"]', 'Vous avez déjà une réservation dans ce créneau horaire');
}
}

llaffont
committed
/* Quatrième écran choix du groupe de postes */
class AbonneControllerMultimediaHoldGroupTest extends AbonneControllerMultimediaHoldTestCase {
public function setUp() {
parent::setUp();
$this->_prepareLocationInSession();

pbarroca
committed
$this->_prepareDayInSession();
$this->_prepareTimeAndDurationInSession();
$this->dispatch('/abonne/multimedia-hold-group', true);
}
/** @test */
public function pageShouldContainsLinkToGroupMusique() {
$this->assertXPathContentContains('//a[contains(@href, "/multimedia-hold-group/group/3")]', 'Musique');
}
/** @test */
public function pageShouldContainsLinkToGroupJeunesse() {
$this->assertXPathContentContains('//a[contains(@href, "/multimedia-hold-group/group/5")]', 'Jeunesse');
}
/** @test */
public function currentTimelineShouldBeSection() {
$this->_assertCurrentTimelineStep('Section');
}
/** @test */
public function timelinePreviousActionsShouldHaveLink() {
$this->assertXPathContentContains('//div[@class="timeline"]//li//a[contains(@href, abonne/multimedia-hold-location)]', 'Lieu');
$this->assertXPathContentContains('//div[@class="timeline"]//li//a[contains(@href, abonne/multimedia-hold-day)]', 'Jour');
$this->assertXPathContentContains('//div[@class="timeline"]//li//a[contains(@href, abonne/multimedia-hold-hours)]', 'Horaires');
$this->assertNotXPathContentContains('//div[@class="timeline"]//li//a', 'Section');
$this->assertNotXPathContentContains('//div[@class="timeline"]//li//a', 'Poste');
$this->assertNotXPathContentContains('//div[@class="timeline"]//li//a', 'Confirmation');
}
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
}
/* Quatrième écran validation du choix du groupe de postes, redirection vers le choix du poste */
class AbonneControllerMultimediaHoldGroupChoiceTest extends AbonneControllerMultimediaHoldTestCase {
public function setUp() {
parent::setUp();
$this->_prepareLocationInSession();
$this->_prepareDayInSession();
$this->_prepareTimeAndDurationInSession();
$this->dispatch('/abonne/multimedia-hold-group/group/5', true);
}
/** @test */
public function shouldRedirectToStepHoldDevice() {
$this->assertRedirectTo('/abonne/multimedia-hold-device');
}
/** @test */
public function beanShouldHaveGroupSetToFive() {
$this->assertEquals(5, $this->_session->holdBean->group);
}
}
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
/* Quatrième écran validation du choix du groupe de postes, redirection vers le choix du poste */
class AbonneControllerMultimediaHoldGroupChoiceErrorTest extends AbonneControllerMultimediaHoldTestCase {
/** @test */
public function withoutHoursShouldRedirectToHoldHours() {
$this->_prepareLocationInSession();
$this->_prepareDayInSession();
$this->dispatch('/abonne/multimedia-hold-group/group/5', true);
$this->assertRedirectTo('/abonne/multimedia-hold-hours');
}
/** @test */
public function withoutDayShouldRedirectToHoldDay() {
$this->_prepareLocationInSession();
$this->_prepareTimeAndDurationInSession();
$this->dispatch('/abonne/multimedia-hold-group/group/5', true);
$this->assertRedirectTo('/abonne/multimedia-hold-day');
}
/** @test */
public function withoutLocationShouldRedirectToHoldLocation() {
$this->_prepareDayInSession();
$this->_prepareTimeAndDurationInSession();
$this->dispatch('/abonne/multimedia-hold-group/group/5', true);
$this->assertRedirectTo('/abonne/multimedia-hold-location');
}
}
/* Cinquième écran choix du poste */
class AbonneControllerMultimediaHoldDeviceTest extends AbonneControllerMultimediaHoldTestCase {
public function setUp() {
parent::setUp();
$this->_prepareLocationInSession();
$this->_prepareDayInSession();
$this->_prepareTimeAndDurationInSession();
$this->_prepareGroupInSession();
Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Multimedia_DeviceHold')
->whenCalled('countBy')
->answers(0);

pbarroca
committed
$this->dispatch('/abonne/multimedia-hold-device', true);
/** @test */
public function currentTimelineStepShouldBePoste() {
$this->_assertCurrentTimelineStep('Poste');
}
public function posteUnShouldNotBeHoldable() {
$this->assertNotXPathContentContains('//a','Poste 1');
}
/** @test */
public function posteDeuxShouldBeHoldable() {
$this->assertXPathContentContains('//a[contains(@href, "multimedia-hold-device/device/2")]','Poste 2');

pbarroca
committed
}
}

llaffont
committed
/* Cinquième écran validation du choix du poste, redirection vers la confirmation */

pbarroca
committed
class AbonneControllerMultimediaHoldDeviceChoiceTest extends AbonneControllerMultimediaHoldTestCase {
public function setUp() {
parent::setUp();
$this->_prepareLocationInSession();
$this->_prepareDayInSession();
$this->_prepareTimeAndDurationInSession();
$this->_prepareGroupInSession();

pbarroca
committed
$this->dispatch('/abonne/multimedia-hold-device/device/1', true);
}
/** @test */
public function shouldRedirectToNextStep() {
$this->assertRedirectTo('/abonne/multimedia-hold-confirm');
}
/** @test */
public function beanShouldHaveDeviceSet() {
$this->assertEquals(1, $this->_session->holdBean->device);
}
}

llaffont
committed
class AbonneControllerMultimediaHoldDeviceChoiceErrorTest extends AbonneControllerMultimediaHoldTestCase {
/** @test */
public function withoutGroupShouldRedirectToHoldGroup() {
parent::setUp();
$this->_prepareLocationInSession();
$this->_prepareDayInSession();
$this->_prepareTimeAndDurationInSession();
$this->dispatch('/abonne/multimedia-hold-device/device/1', true);
$this->assertRedirectTo('/abonne/multimedia-hold-group');
}
}
/* Sixième écran confirmation de la réservation */

pbarroca
committed
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
class AbonneControllerMultimediaHoldConfirmTest extends AbonneControllerMultimediaHoldTestCase {
public function setUp() {
parent::setUp();
$this->_prepareLocationInSession();
$this->_prepareDayInSession();
$this->_prepareTimeAndDurationInSession();
$this->_bean->device = 23;
Class_Multimedia_Device::getLoader()->newInstanceWithId(23)
->setLibelle('Poste 1')
->setOs('Ubuntu Lucid');
$this->dispatch('/abonne/multimedia-hold-confirm', true);
}
/** @test */
public function currentTimelineStepShouldBeConfirmation() {
$this->_assertCurrentTimelineStep('Confirmation');
}
/** @test */
public function locationShouldBeAntibes() {
$this->assertXPathContentContains('//li', 'Lieu : Antibes');
}
/** @test */

llaffont
committed
public function dayShouldBeSeptemberTwelve2012() {
$this->assertXPathContentContains('//li', 'Jour : 12 septembre 2012');