123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272 |
- <?php
-
- namespace Muzich\CoreBundle\Tests\Controller;
-
- use Muzich\CoreBundle\lib\FunctionalTest;
- use Muzich\CoreBundle\Tests\lib\Security\Context as SecurityContextTest;
- use Muzich\CoreBundle\Security\Context as SecurityContext;
- use Muzich\CoreBundle\Tests\lib\Security\ContextTestCases;
-
- class PlaylistControllerTest extends FunctionalTest
- {
-
- protected $security_context_test;
- protected $tests_cases;
-
- protected function init()
- {
- $this->client = self::createClient();
- $this->security_context_test = new SecurityContextTest($this->client, $this);
- $this->tests_cases = new ContextTestCases($this->client, $this);
- }
-
- public function testActionsSecurityRoles()
- {
- $this->init();
- $this->checkProhibedActionsForAnonymous();
- $this->checkAutorizedsActionsForAnonymous();
- }
-
- protected function checkProhibedActionsForAnonymous()
- {
- $this->security_context_test->testUserCantMakeActionStatus(
- SecurityContext::ACTION_PLAYLIST_ADD_ELEMENT,
- SecurityContext::CONDITION_USER_NOT_CONNECTED,
- true
- );
-
- $this->security_context_test->testUserCantMakeActionStatus(
- SecurityContext::ACTION_PLAYLIST_UPDATE_ORDER,
- SecurityContext::CONDITION_USER_NOT_CONNECTED,
- true
- );
-
- $this->security_context_test->testUserCantMakeActionStatus(
- SecurityContext::ACTION_PLAYLIST_REMOVE_ELEMENT,
- SecurityContext::CONDITION_USER_NOT_CONNECTED,
- true
- );
-
- $this->security_context_test->testUserCantMakeActionStatus(
- SecurityContext::ACTION_PLAYLIST_CREATE,
- SecurityContext::CONDITION_USER_NOT_CONNECTED,
- true
- );
-
- $this->security_context_test->testUserCantMakeActionStatus(
- SecurityContext::ACTION_PLAYLIST_COPY,
- SecurityContext::CONDITION_USER_NOT_CONNECTED,
- true
- );
-
- $this->security_context_test->testUserCantMakeActionStatus(
- SecurityContext::ACTION_PLAYLIST_DELETE,
- SecurityContext::CONDITION_USER_NOT_CONNECTED,
- true
- );
-
- $this->security_context_test->testUserCantMakeActionStatus(
- SecurityContext::ACTION_PLAYLIST_UNPICK,
- SecurityContext::CONDITION_USER_NOT_CONNECTED,
- true
- );
-
- $this->security_context_test->testUserCantMakeActionStatus(
- SecurityContext::ACTION_PLAYLIST_PICK,
- SecurityContext::CONDITION_USER_NOT_CONNECTED,
- true
- );
- }
-
- protected function checkAutorizedsActionsForAnonymous()
- {
- $this->security_context_test->testUserCantMakeActionStatus(
- SecurityContext::ACTION_PLAYLIST_SHOW,
- SecurityContext::CONDITION_USER_NOT_CONNECTED,
- false
- );
-
- $this->security_context_test->testUserCantMakeActionStatus(
- SecurityContext::ACTION_PLAYLIST_DATA_AUTOPLAY,
- SecurityContext::CONDITION_USER_NOT_CONNECTED,
- false
- );
-
- $this->security_context_test->testUserCantMakeActionStatus(
- SecurityContext::ACTION_PLAYLIST_ADD_PROMPT,
- SecurityContext::CONDITION_USER_NOT_CONNECTED,
- false
- );
- }
-
- public function testPlaylistsRead()
- {
- $this->init();
- $this->initReadContextData();
-
- $this->checkReadablePlaylistsForAnonymous();
- $this->checkReadablePlaylistsForConnected();
- $this->checkReadablePlaylistsForOwner();
- }
-
- protected function initReadContextData()
- {
- $this->users['bux'] = $this->findUserByUsername('bux');
- $this->playlists['bux_1_pub'] = $this->findOneBy('Playlist', 'Un peu de basses ?');
- $this->playlists['bux_2_priv'] = $this->findOneBy('Playlist', 'Ma playlist perso');
- $this->playlists['bob_pub'] = $this->findOneBy('Playlist', 'A travers l\'espace');
- }
-
- protected function checkReadablePlaylistsForAnonymous()
- {
- $this->checkReadPlaylists($this->users['bux'], array($this->playlists['bux_1_pub']));
- }
-
- protected function checkReadPlaylists($user, $playlists, $elements = null)
- {
- $this->tests_cases->playlistsShow($user->getSlug());
- $this->isResponseSuccess();
- $this->checkReadPlaylistsDom($playlists);
-
- foreach ($playlists as $playlist)
- {
- $this->tests_cases->playlistShow($user->getSlug(), $playlist->getId());
- $this->isResponseSuccess();
- $this->checkReadPlaylist($playlist, $elements);
- }
- }
-
- protected function checkReadPlaylistsDom($playlists)
- {
- $this->assertEquals(count($playlists), $this->crawler->filter('ul.playlists li.playlist')->count());
- foreach ($playlists as $playlist)
- {
- $this->exist('a[href="'.$this->generateUrl('playlist_datas_for_autoplay', array('playlist_id' => $playlist->getId())).'"]');
- }
- }
-
- protected function checkReadPlaylist($playlist, $elements = null)
- {
- $this->exist('h2:contains("'.$playlist->getName().'")');
-
- if ($elements !== null)
- {
- $this->checkPlaylistElements($playlist, $elements[$playlist->getId()]);
- }
- }
-
- protected function checkPlaylistElements($playlist, $elements)
- {
- $this->assertEquals(count($elements), $this->crawler->filter('li.playlist_element')->count());
- foreach ($elements as $element)
- {
- $this->exist('a[data-id="'.$element->getId().'"]');
- }
- }
-
- protected function checkReadablePlaylistsForConnected()
- {
- $this->connectUser('jean', 'toor');
- $this->checkReadPlaylists($this->users['bux'], array($this->playlists['bux_1_pub']));
- $this->disconnectUser();
- }
-
- protected function checkReadablePlaylistsForOwner()
- {
- $this->connectUser('bux', 'toor');
- $this->checkReadPlaylists($this->users['bux'], array(
- $this->playlists['bux_1_pub'],
- $this->playlists['bux_2_priv'],
- $this->playlists['bob_pub'],
- ));
- }
-
- public function testPlaylistCreation()
- {
- $this->init();
- $this->initCreateContextData();
- $this->connectUser('joelle', 'toor');
-
- $this->playlists['joelle_1'] = $this->createPlaylistWithElement($this->elements['babylon']);
- $this->checkReadPlaylists($this->users['joelle'],
- array($this->playlists['joelle_1']),
- array($this->playlists['joelle_1']->getId() => array($this->elements['babylon']))
- );
- }
-
- protected function initCreateContextData()
- {
- $this->initReadContextData();
- $this->users['joelle'] = $this->findUserByUsername('joelle');
- $this->users['bob'] = $this->findUserByUsername('bob');
- $this->elements['babylon'] = $this->findOneBy('Element', 'Babylon Pression - Des Tasers et des Pauvres');
- }
-
- protected function createPlaylistWithElement($element)
- {
- $this->tests_cases->playlistCreate($element->getId(), 'Playlist de test');
- $this->assertTrue(!is_null($playlist = $this->findOneBy('Playlist', 'Playlist de test')));
- return $playlist;
- }
-
- public function testAutoplayDatas()
- {
- $this->init();
- $this->initReadContextData();
-
- $this->checkPublicPlaylist();
- $this->checkPrivatePlaylist();
- $this->connectUser('bob', 'toor');
- $this->checkPublicPlaylist();
- $this->checkPrivatePlaylist();
- $this->disconnectUser();
- $this->connectUser('bux', 'toor');
- $this->checkPublicPlaylist();
- $this->checkPrivatePlaylist(true);
- }
-
- protected function checkPublicPlaylist()
- {
- $response = $this->tests_cases->playlistAutoplay($this->playlists['bux_1_pub']->getId());
- $this->jsonResponseIsSuccess($response);
- }
-
- protected function checkPrivatePlaylist($success = false)
- {
- $response = $this->tests_cases->playlistAutoplay($this->playlists['bux_2_priv']->getId());
-
- if (!$success)
- $this->jsonResponseIsError($response);
- if ($success)
- $this->jsonResponseIsSuccess($response);
- }
-
- public function testPrompt()
- {
- $this->init();
- $this->initCreateContextData();
-
- $this->setCrawlerWithJsonResponseData($this->tests_cases->playlistPrompt($this->elements['babylon']->getId()));
- $this->checkPlaylistsInPrompt(array());
-
- $this->connectUser('bux', 'toor');
-
- $this->setCrawlerWithJsonResponseData($this->tests_cases->playlistPrompt($this->elements['babylon']->getId()));
-
- $this->checkPlaylistsInPrompt(array(
- $this->playlists['bux_1_pub'],
- $this->playlists['bux_2_priv'],
- $this->playlists['bob_pub'],
- ));
- }
-
- protected function checkPlaylistsInPrompt($playlists)
- {
- $this->assertEquals(count($playlists), $this->crawler->filter('ul.playlists_for_element li.playlist')->count());
- foreach ($playlists as $playlist)
- {
- $this->exist('a:contains("'.$playlist->getName().'")');
- }
- }
-
- }
|