Skip to content
Snippets Groups Projects
DomainsPerLibrariesTest.php 30.1 KiB
Newer Older
<?php
/**
 * Copyright (c) 2012-2021, Agence Française Informatique (AFI). All rights reserved.
 *
 * BOKEH 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).
 *
 * BOKEH 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 BOKEH; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
 */

abstract class DomainsPerLibrariesTestCase extends Admin_AbstractControllerTestCase {

  public function setUp() {
    parent::setUp();
    Class_AdminVar::set('ENABLE_DOMAINS_PER_LIBRARIES', 1);

    $this->fixture(Class_Catalogue::class,
                   ['id' => 1,
                    'libelle' => 'All places',
                    'library_id' => null,
                    'parent_id' => null]);

    $this->fixture(Class_Catalogue::class,
                   ['id' => 2,
                    'libelle' => 'All characters',
                    'library_id' => null,
                    'parent_id' => null]);

    $this->fixture(Class_Catalogue::class,
                   ['id' => 3,
                    'libelle' => 'Wookiees',
                    'library_id' => null,
                    'parent_id' => 2]);

    $this->fixture(Class_Bib::class,
                   ['id' => 1,
                    'libelle' => 'Alderaan']);

    $this->fixture(Class_Users::class,
                   ['id' => 8,
                    'login' => 'alderaan_admin',
                    'password' => 'secret',
                    'managed_libraries' => '1',
                    'role_level' => ZendAfi_Acl_AdminControllerRoles::ADMIN_BIB]);

    $this->fixture(Class_Catalogue::class,
                   ['id' => 4,
                    'libelle' => 'Alderaan places',
                    'library_id' => 1,
                    'id_user' => 8,
                    'description' => 'Cool places on Alderaan',
                    'parent_id' => null]);

    $this->fixture(Class_Catalogue::class,
                   ['id' => 5,
                    'libelle' => 'Alderaan towns',
                    'library_id' => null,
                    'parent_id' => 4,
                    'indexer' => true,
                    'oai_spec' => 'towns_set']);

    $this->fixture(Class_Catalogue::class,
                   ['id' => 6,
                    'libelle' => 'Alderaan characters',
                    'library_id' => null,
                    'parent_id' => 4]);

    $this->fixture(Class_Bib::class,
                   ['id' => 2,
                    'libelle' => 'Tatooine']);

    $this->fixture(Class_Catalogue::class,
                   ['id' => 7,
                    'libelle' => 'Tatooine characters',
                    'library_id' => 2,
                    'parent_id' => null]);
  }
}




class DomainsPerLibrariesCatalogueControllerIndexTest extends DomainsPerLibrariesTestCase {
  public function setUp() {
    parent::setUp();
    $this->dispatch('/admin/catalogue/index');
  }


  /** @test */
  public function pageShouldContainsTableWithFolderLinkToPortal() {
    $this->assertXPathContentContains('//table//td/a[contains(@href, "/admin/catalogue/index/id_bib/0")]',
                                      'Portail');
  }


  /** @test */
  public function pageShouldContainsTableWithFolderLinkToAlderaan() {
    $this->assertXPathContentContains('//table//td/a[contains(@href, "/admin/catalogue/index/id_bib/1")]',
                                      'Alderaan');
  }


  /** @test */
  public function breadShouldContainsPortalActionToAddNewDomain() {
    $this->assertXPathContentContains('//table//td//a/@href',
                                      '/admin/catalogue/add/id_bib/0');

  }


  /** @test */
  public function pageShouldNotContainsItemsTable() {
    $this->assertNotXPath('//table[contains(@id, "items_")]');
  }
}



class DomainsPerLibrariesCatalogueControllerAsAdminBibWithoutGroupIndexTest extends DomainsPerLibrariesTestCase {
  public function setUp() {
    parent::setUp();
    ZendAfi_Auth::getInstance()
      ->logUser(Class_Users::findFirstBy(['login' => 'alderaan_admin']));

    $this->dispatch('/admin/catalogue/index');

  }


  /** @test */
  public function pageShouldContainsTableWithFolderLinkToPortal() {
    $this->assertXPathContentContains('//table//td/a[contains(@href, "/admin/catalogue/index/id_bib/0")]',
                                      'Portail');
  }
}




class DomainsPerLibrariesCatalogueControllerAsAdminAlderaanWithAccessIndexTest extends DomainsPerLibrariesTestCase {
  public function setUp() {
    parent::setUp();
    $domain_admins = $this->fixture(Class_UserGroup::class,
                                    ['id' => 4,
                                     'libelle' => 'Domains admins',
                                     'rights' => [Class_UserGroup::RIGHT_USER_DOMAINES_TOTAL_ACCESS]]);

    ZendAfi_Auth::getInstance()
      ->logUser(Class_Users::findFirstBy(['login' => 'alderaan_admin'])
                ->addUserGroup($domain_admins));

    $this->dispatch('/admin/catalogue/index');
  }


  /** @test */
  public function leftAdminMenuShouldHaveEntryToAdminCatalogue() {
    $this->assertXPath('//ul[@class="menuAdmin"]//a[contains(@href, "/admin/catalogue")]');
  }


  /** @test */
  public function pageShouldContainsTableWithFolderLinkToPortal() {
    $this->assertXPathContentContains('//table//td/a[contains(@href, "/admin/catalogue/index/id_bib/0")]',
                                      'Portail');
  }


  /** @test */
  public function pageShouldContainsTableWithFolderLinkToAlderaan() {
    $this->assertXPathContentContains('//table//td/a[contains(@href, "/admin/catalogue/index/id_bib/1")]',
                                      'Alderaan');
  }


  /** @test */
  public function pageShouldNotContainsTableWithFolderLinkToTatooine() {
    $this->assertNotXPath('//table//td/a[contains(@href, "/admin/catalogue/index/id_bib/2")]');
  }
}




abstract class DomainsPerLibrariesCatalogueControllerAsAdminTatooineWithAccessSuppressionLimitTestCase extends DomainsPerLibrariesTestCase {
  public function setUp() {
    parent::setUp();
    $this->fixture(Class_UserGroup::class,
                   ['id' => 4,
                    'libelle' => 'Domains admins',
                    'rights' => [Class_UserGroup::RIGHT_USER_DOMAINES_SUPPRESSION_LIMIT]]);

    $admin = $this->fixture(Class_Users::class,
                            ['id' => 9,
                             'login' => 'tatooine',
                             'password' => 'secret',
                             'bib' => Class_Bib::find(2),
                             'user_groups' => [Class_UserGroup::find(4)]])
                  ->beAdminBib();
    ZendAfi_Auth::getInstance()->logUser($admin);
  }
}




class DomainsPerLibrariesCatalogueControllerAsAdminTatooineWithAccessCreatorIndexTest extends DomainsPerLibrariesCatalogueControllerAsAdminTatooineWithAccessSuppressionLimitTestCase {
  public function setUp() {
    parent::setUp();
    $this->dispatch('/admin/catalogue/index');
  }


  /** @test */
  public function pageShouldContainsTableWithFolderLinkToPortal() {
    $this->assertXPathContentContains('//table//td/a[contains(@href, "/admin/catalogue/index/id_bib/0")]',
                                      'Portail');
  }


  /** @test */
  public function pageShouldContainsTableWithFolderLinkToTatooine() {
    $this->assertXPathContentContains('//table//td/a[contains(@href, "/admin/catalogue/index/id_bib/2")]',
                                      'Tatooine');
  }


  /** @test */
  public function pageShouldNotContainsTableWithFolderLinkToAlderaan() {
    $this->assertNotXPath('//table//td/a[contains(@href, "/admin/catalogue/index/id_bib/1")]');
  }
}




class DomainsPerLibrariesCatalogueControllerAsAdminTatooineWithAccessCreatorAddTest extends DomainsPerLibrariesCatalogueControllerAsAdminTatooineWithAccessSuppressionLimitTestCase {
  public function setUp() {
    parent::setUp();

    Class_Catalogue::findFirstBy(['libelle' => 'Tatooine characters'])
      ->setUser(Class_Users::getIdentity())
      ->save();

    Class_Catalogue::findFirstBy(['libelle' => 'All characters'])
      ->setUser(Class_Users::getIdentity())
      ->save();

    $this->dispatch('/admin/catalogue/add/id_bib/2');
  }


  /** @test */
  public function selectParentIdShouldHaveOptGroupTatooine() {
    $this->assertXPath('//select[@id="parent_id"]/optgroup[@label="Tatooine"]');
  }


  /** @test */
  public function selectParentIdShouldHaveOptGroupPortail() {
    $this->assertXPath('//select[@id="parent_id"]/optgroup[@label="Portail"]');
  }


  /** @test */
  public function selectParentIdShouldNotHaveOptGroupAlderaan() {
    $this->assertNotXPath('//select[@id="parent_id"]/optgroup[@label="Alderaan"]');
  }
}




class DomainsPerLibrariesCatalogueControllerViewLibraryPortalTest extends DomainsPerLibrariesTestCase {
  public function setUp() {
    parent::setUp();
    $this->dispatch('/admin/catalogue/index/id_bib/0');
  }


  /** @test */
  public function tableForCategoriesTitleShouldBeListeDesDomainesAvecSousDomaines() {
    $this->assertXPath('//table[@id="categories_Class_Catalogue"]/thead//th[text()="Liste des domaines avec sous-domaines"]');
  }


  /** @test */
  public function tableForItemsTitleShouldBeListeDesDomaines() {
    $this->assertXPath('//table[@id="items_Class_Catalogue"]/thead//th[text()="Liste des domaines"]');
  }


  /** @test */
  public function pageShouldContainsLinkToSubDomainForAllCharacters() {
    $this->assertXPathContentContains('//table[@id="categories_Class_Catalogue"]//tr//td//a[text()="All characters (1)"]/@href',
                                      '/admin/catalogue/index/id_bib/0/id/2');
  }


  /** @test */
  public function pageShouldContainsDomainAllPlaces() {
    $this->assertXPathContentContains('//table[@id="items_Class_Catalogue"]//tr//td', 'All places');
  }


  /** @test */
  public function pageShouldNotContainsDomainAlderaan() {
    $this->assertNotXPathContentContains('//table//tr//td', 'Alderaan');
  }


  /** @test */
  public function allPlacesDomainShouldHaveEditAction() {
    $this->assertXPathContentContains('//table[@id="items_Class_Catalogue"]//div[@class="actions"]/a/@href',
                                      '/admin/catalogue/edit/id_catalogue/1');
  }


  /** @test */
  public function breadCrumbShouldHaveTwoEntries() {
    $this->assertXPathCount('//div[@class="breadcrumb"]/a', 2);
  }


  /** @test */
  public function breadCrumbShouldContainsPortalActionToAddNewDomain() {
    $this->assertXPathContentContains('//div[@class="breadcrumb"]/div[@class="actions"]/a/@href',
                                      '/admin/catalogue/add/id_bib/0');

  }


  /** @test */
  public function pageShouldContainsSearchInput() {
    $this->assertXPath('//input[@id="list_title_search"][@placeholder="libellé du domaine"]');
  }
}




class DomainsPerLibrariesCatalogueControllerViewAllCharactersDomainTest extends DomainsPerLibrariesTestCase {
  public function setUp() {
    parent::setUp();
    $this->dispatch('/admin/catalogue/index/id/2/id_bib/0');
  }


  /** @test */
  public function pageShouldContainsDomainWookies() {
    $this->assertXPathContentContains('//table[@id="items_Class_Catalogue"]//tr//td', 'Wookiees');
  }


  /** @test */
  public function pageShouldIndicatesEmptyCategories() {
    $this->assertXPathContentContains('//table[@id="categories_Class_Catalogue"]//tr//td', 'Aucune donnée');
  }


  /** @test */
  public function breadCrumbShouldContainsLinkToRoot() {
    $this->assertXPathContentContains('//div[@class="breadcrumb"]/a[text()="Racine"]/@href',
                                      '/admin/catalogue');

  }


  /** @test */
  public function breadCrumbShouldContainsLinkToLibraryPortal() {
    $this->assertXPathContentContains('//div[@class="breadcrumb"]/a[text()="Portail"]/@href',
                                      '/admin/catalogue/index/id_bib/0');

  }


  /** @test */
  public function breadCrumbShouldContainsLinkToDomainAllCharacters() {
    $this->assertXPathContentContains('//div[@class="breadcrumb"]/a[text()="All characters"]/@href',
                                      '/admin/catalogue/index/id_bib/0/id/2');

  }


  /** @test */
  public function breadCrumbShouldContainsAllCharactersDomainActions() {
    $this->assertXPathContentContains('//div[@class="breadcrumb"]/div[@class="actions"]/a/@href',
                                      '/admin/catalogue/tester/id_catalogue/2');

  }
}




class DomainsPerLibrariesCatalogueControllerViewAllPlacesDomainTest extends DomainsPerLibrariesTestCase {
  /** @test */
  public function tableShouldContainsAldereaanTownsWithFavoriteCharacter() {
    $this->dispatch('/admin/catalogue/index/id/4/id_bib/0');
    $this->assertXPathContentContains('//table[@id="items_Class_Catalogue"]//tr//td[following-sibling::td[text()="Alderaan towns"]]/i[@class="fa fa-star"]/@title',
                                      'Ce domaine est indexé');
  }


  /** @test */
  public function tableShouldContainsColumnOAISpec() {
    Class_AdminVar::set('OAI_SERVER', 0);
    $this->dispatch('/admin/catalogue/index/id/4/id_bib/0');
    $this->assertNotXPathContentContains('//td', 'towns_set');
  }


  /** @test */
  public function withOAIServerEnabledTableShouldDisplayTownsSetInLinkToListRecords() {
    Class_AdminVar::set('OAI_SERVER', 1);
    $this->dispatch('/admin/catalogue/index/id/4/id_bib/0');
    $this->assertXPathContentContains('//td/a[@href="/oai/request?verb=ListRecords&metadataPrefix=oai_dc&set=towns_set"][contains(@title, "du set towns_set")]',
                                      'towns_set');
  }
}




class DomainsPerLibrariesCatalogueControllerViewAlderaanTownsDomainTest extends DomainsPerLibrariesTestCase {
  public function setUp() {
    parent::setUp();

    $this->fixture(Class_Catalogue::class,
                   ['id' => 10,
                    'libelle' => 'Crevasse City',
                    'library_id' => null,
                    'parent_id' => 5]);

    $this->dispatch('/admin/catalogue/index/id/5/id_bib/1');
  }


  /** @test */
  public function breadCrumbShouldContainsLinkToLibraryAlderaan() {
    $this->assertXPathContentContains('//div[@class="breadcrumb"]/a[text()="Alderaan"]/@href',
                                      '/admin/catalogue/index/id_bib/1');

  }


  /** @test */
  public function paseShouldDisplayDomainCrevasseCity() {
    $this->assertXPath('//table[@id="items_Class_Catalogue"]//td[text()="Crevasse City"]',
                       $this->_response->getBody());
  }
}




class DomainsPerLibrariesCatalogueControllerPostDispatchInLibraryTatooineTest extends DomainsPerLibrariesTestCase {
  public function setUp() {
    parent::setUp();
    $this->postDispatch('/admin/catalogue/add/id_bib/2',
                        ['libelle' => 'Tatooine Places',
                         'parent_id' => '']);
  }


  /** @test */
  public function domainWithLabelTatooinePlacesSevenShouldHaveBeenSaved() {
    Class_Catalogue::clearCache();
    $domain = Class_Catalogue::findFirstBy(['libelle' => 'Tatooine Places']);
    $this->assertNotNull($domain);
    return $domain;
  }


  /**
   * @depends domainWithLabelTatooinePlacesSevenShouldHaveBeenSaved
   * @test
   */
  public function tatooinePlacesShouldHaveLibraryIdTwo($domain) {
    $this->assertEquals(2, $domain->getLibraryId());
  }
}




class DomainsPerLibrariesCatalogueControllerPostDispatchInLibraryPortalTest extends DomainsPerLibrariesTestCase {
  public function setUp() {
    parent::setUp();
    $this->postDispatch('/admin/catalogue/add/id_bib/0',
                        ['libelle' => 'Galaxies',
                         'parent_id' => '']);
  }


  /** @test */
  public function domainWithIdSixShouldHaveBeenSaved() {
    Class_Catalogue::clearCache();
    $this->assertNotNull(Class_Catalogue::find(6));
  }


  /** @test */
  public function galaxiesShouldHaveLibraryIdNull() {
    $this->assertNull(Class_Catalogue::find(6)->getLibraryId());
  }
}




class DomainsPerLibrariesCatalogueControllerViewLibraryAlderaanTest extends DomainsPerLibrariesTestCase {
  public function setUp() {
    parent::setUp();
    $this->dispatch('/admin/catalogue/index/id_bib/1');
  }


  /** @test */
  public function breadCrumbShouldContainsAlderaanActionToAddNewDomain() {
    $this->assertXPathContentContains('//div[@class="breadcrumb"]/div[@class="actions"]/a/@href',
                                      '/admin/catalogue/add/id_bib/1');

  }


  /** @test */
  public function pageShouldContainsDomainAlderaanPlaces() {
    $this->assertXPathContentContains('//table[@id="categories_Class_Catalogue"]//tr[1]//td', 'Alderaan places');
  }


  /** @test */
  public function alderanPlacesShouldDisplayDescriptionCoolPlaces() {
    $this->assertXPathContentContains('//table[@id="categories_Class_Catalogue"]//tr[1]//td', 'Cool places on Alderaan');
  }


  /** @test */
  public function alderanPlacesShouldDisplayCreatorAlderaanAdmin() {
    $this->assertXPathContentContains('//table[@id="categories_Class_Catalogue"]//tr[1]//td', 'alderaan_admin');
  }
}




class DomainsPerLibrariesCatalogueControllerEditDomainTest extends DomainsPerLibrariesTestCase {
  /** @test */
  public function formDataBackurlForWookiesShouldBeIndexIdTwo() {
    $this->dispatch('/admin/catalogue/edit/id_catalogue/3');
    $this->assertXPathContentContains('//form[contains(@action, "/admin/catalogue/edit/id_catalogue/3")]/@data-backurl',
                                      '/admin/catalogue/index/id/2');
  }
}




class DomainsPerLibrariesCatalogueControllerEditDomainAllPlacesTest extends DomainsPerLibrariesTestCase {
  public function setUp() {
    parent::setUp();
    $this->dispatch('/admin/catalogue/edit/id_catalogue/1');
  }


  /** @test */
  public function formDataBackurlShouldBeIndexIdBibZero() {
    $this->assertXPathContentContains('//form[contains(@action, "/admin/catalogue/edit/id_catalogue/1")]/@data-backurl',
                                      '/admin/catalogue/index/id_bib/0');
  }


  /** @test */
  public function selectParentIdShouldHaveOptGroupAlderaanWithAlderaanPlaces() {
    $this->assertXPath('//select[@id="parent_id"]/optgroup[@label="Alderaan"]/option[@value="4"][text()="Alderaan places"]');
  }


  /** @test */
  public function selectParentIdShouldHaveOptGroupPortailWithAllCharacters() {
    $this->assertXPath('//select[@id="parent_id"]/optgroup[@label="Portail"]/option[@value="2"][text()="All characters"]');
  }
}




class DomainsPerLibrariesCatalogueControllerPostEditDomainAlderaanPlacesTest extends DomainsPerLibrariesTestCase {
  public function setUp() {
    parent::setUp();
    $this->postDispatch('/admin/catalogue/edit/id_catalogue/4',
                        ['libelle' => 'Alderaan Places',
                         'parent_id' => '']);
  }


  /** @test */
  public function domainLibraryIdShouldStillBeOneForAlderaan() {
    $this->assertEquals(1, Class_Catalogue::find(4)->getLibraryId());
  }


  /** @test */
  public function responsShouldBeARedirect() {
    $this->assertRedirectTo('/admin/catalogue/edit/id_catalogue/4');
  }
}




class DomainsPerLibrariesCatalogueControllerPostSearchTest extends DomainsPerLibrariesTestCase {
  public function setUp() {
    parent::setUp();
    $_SERVER['HTTP_REFERER'] = 'http://monbokeh.org/admin/catalogue/index';
    $this->postDispatch('/admin/catalogue/index/order/libelle/title_search/old_search',
                        ['title_search' => 'places']);
  }


  /** @test */
  public function responseShouldRedirectToTitleSearchPlaces() {
    $this->assertRedirectTo('/admin/catalogue/index/title_search/places/order/libelle');
  }


  public function tearDown() {
    unset($_SERVER['HTTP_REFERER']);
    parent::tearDown();
  }
}




class DomainsPerLibrariesCatalogueControllerSearchAllTest extends DomainsPerLibrariesTestCase {
  public function setUp() {
    parent::setUp();
    $this->dispatch('/admin/catalogue/index/title_search/all');
  }


  /** @test */
  public function pageShouldContainsAllPlaces() {
    $this->assertXPathContentContains('//table//tr//td', 'All places');
  }


  /** @test */
  public function pageShouldContainsAllCharactersAsCategory() {
    $this->assertXPathContentContains('//table[@id="categories_Class_Catalogue"]//tr//td',
                                      'All characters');
  }


  /** @test */
  public function pageShouldNotContainsWookies() {
    $this->assertNotXPathContentContains('//table//tr//td', 'Wookies');
  }
}




class DomainsPerLibrariesCatalogueControllerSearchCharactersInLibraryAlderaanTest extends DomainsPerLibrariesTestCase {
  public function setUp() {
    parent::setUp();
    $this->dispatch('/admin/catalogue/index/title_search/charac/id_bib/1');
  }


  /** @test */
  public function pageShouldContainsAlderaanCharactersAsItem() {
    $this->assertXPathContentContains('//table[@id="items_Class_Catalogue"]//tr//td', 'Alderaan characters');
  }


  /** @test */
  public function pageShouldContainsAlderaanCharactersShouldHaveLinkToAlderaanPlaces() {
    $this->assertXPathContentContains('//table//tr//td/span[text()="Alderaan characters"]/following-sibling::p/a[text()="Alderaan places"]/@href', '/admin/catalogue/index/id_bib/1/id/4');
  }


  /** @test */
  public function pageShouldNotContainsAllCharacters() {
    $this->assertNotXPathContentContains('//table//tr//td', 'All characters');
  }


  /** @test */
  public function breadCrumbShouldContainsLinkToLibraryAlderaan() {
    $this->assertXPathContentContains('//div[@class="breadcrumb"]/a[text()="Alderaan"]/@href',
                                      '/admin/catalogue/index/id_bib/1');

  }
}




class DomainsPerLibrariesCatalogueControllerJsonRendersTest extends DomainsPerLibrariesTestCase {
  /** @test */
  public function domainesPaniersShouldContainsDomainsPerLibraries() {
    $this->onLoaderOfModel(Class_PanierNotice::class)
         ->whenCalled('findAllBelongsToAdmin')
         ->answers([]);

    $this->dispatch('admin/catalogue/domaines-paniers-json', true);
    $datas = json_decode($this->_response->getBody(), true);

    $item_options = ['ico' => Class_Url::baseUrl() . '/public/admin/images/picto/domaines_16.png'];

    $library_options = ['ico' => Class_Url::baseUrl() . '/public/admin/images/picto/bibliotheques_16.png',
                        'removeCheckbox' => true];
    $this->assertEquals([['id' => 'panier_for_user',
                          'label' => 'Mes paniers',
                          'categories' => [],
                          'items' => [],
                          'options' => ['multipleSelection' => false]],

                         ['id' => 'domaines_paniers',
                          'label' => 'Domaines',
                          'categories' => [['id' => 'Alderaan',
                                            'label' => 'Alderaan',
                                                              'label' => 'Alderaan places',
                                                              'categories' => [[
                                                                                'id' => 6,
                                                                                'label' => 'Alderaan characters',
                                                                                'categories' => [],
                                                                                'items' => [],
                                                                                'options' => $item_options],

                                                                               ['id' => 5,
                                                                                'label' => 'Alderaan towns',
                                                                                'categories' => [],
                                                                                'items' => [],
                                                                                'options' => $item_options]],
                                                              'items' => [],
                                                              'options' => $item_options]],
                                            'items' => [],
                                            'options' => $library_options],

                                           ['id' => 'Portail',
                                            'label' => 'Portail',
                                            'categories' => [['id' => 2,
                                                              'label' => 'All characters',
                                                              'categories' => [[
                                                                                'id' => 3,
                                                                                'label' => 'Wookiees',
                                                                                'categories' => [],
                                                                                'items' => [],
                                                                                'options' => $item_options]],
                                                              'items' => [],
                                                              'options' => $item_options],

                                                             ['id' => 1,
                                                              'label' => 'All places',
                                                              'categories' => [],
                                                              'items' => [],
                                                              'options' => $item_options]],
                                            'items' => [],
                                            'options' => $library_options],

                                           ['id' => 'Tatooine',
                                            'label' => 'Tatooine',
                                            'categories' => [[
                                                              'id' => 7,
                                                              'label' => 'Tatooine characters',
                                                              'categories' => [],
                                                              'items' => [],
                                                              'options' => $item_options]],
                                            'items' => [],
                                            'options' => $library_options]],
                          'items' => [],
                          'options' => ['ico' => Class_Url::baseUrl() . '/public/admin/images/picto/domaines_16.png',
                                        'multipleSelection' => false]],

                         ['id' => 'paniers_by_users',
                          'label' => 'Autres paniers',
                          'categories' => [],
                          'items' => [],
                          'options' => ['multipleSelection' => false]]
                         ],
                        $datas);
  }


  /** @test */
  public function browsableDomainsShouldContainsDomainsPerLibraries() {
    $this->dispatch('admin/catalogue/browsable-domains', true);

    $datas = json_decode($this->_response->getBody(), true);
    $item_options = ['ico' => (Class_Url::baseUrl() . '/public/admin/images/picto/domaines_16.png'),
                     'multipleSelection' => false];

    $this->assertEquals([['id' => 'Alderaan',
                          'label' => 'Alderaan',
                                            'label' => 'Alderaan places',
                                            'categories' => [],
                                            'items' => [['id' => 6,
                                                         'label' => 'Alderaan characters',
                                                         'options' => $item_options],

                                                        ['id' => 5,
                                                         'label' => 'Alderaan towns',
                                                         'options' => $item_options]],
                                            'options' => $item_options]],
                          'items' => [],
                          'options' => []],


                         ['id' => 'Portail',
                          'label' => 'Portail',
                          'categories' => [['id' => 2,
                                            'label' => 'All characters',
                                            'categories' => [],
                                            'items' => [['id' => 3,
                                                         'label' => 'Wookiees',
                                                         'options' => $item_options]],
                                            'options' => $item_options],

                                           ['id' => 1,
                                            'label' => 'All places',
                                            'categories' => [],
                                            'items' => [],
                                            'options' => $item_options]],
                          'items' => [],
                          'options' => []],



                         ['id' => 'Tatooine',
                          'label' => 'Tatooine',
                          'categories' => [[
                                            'id' => 7,
                                            'label' => 'Tatooine characters',
                                            'categories' => [],
                                            'items' => [],
                                            'options' => $item_options]],
                          'items' => [],
                          'options' => []]
                         ],
                        $datas);
  }
}