mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-18 07:23:13 +00:00

Conflicts: CHANGELOG.md bin/console bin/developer bin/setup bower.json composer.json composer.lock features/bootstrap/FeatureContext.php features/bootstrap/GuiContext.php lib/Alchemy/Phrasea/Authentication/Token/TokenValidator.php lib/Alchemy/Phrasea/Command/BuildMissingSubdefs.php lib/Alchemy/Phrasea/Command/CreateCollection.php lib/Alchemy/Phrasea/Command/Developer/JavascriptBuilder.php lib/Alchemy/Phrasea/Controller/Admin/Collection.php lib/Alchemy/Phrasea/Controller/Admin/Databoxes.php lib/Alchemy/Phrasea/Controller/Admin/TaskManager.php lib/Alchemy/Phrasea/Controller/Api/V1.php lib/Alchemy/Phrasea/Controller/Client/Baskets.php lib/Alchemy/Phrasea/Controller/Client/Root.php lib/Alchemy/Phrasea/Controller/Prod/Basket.php lib/Alchemy/Phrasea/Controller/Prod/Export.php lib/Alchemy/Phrasea/Controller/Prod/Property.php lib/Alchemy/Phrasea/Controller/Prod/Records.php lib/Alchemy/Phrasea/Controller/Prod/Tools.php lib/Alchemy/Phrasea/Controller/Prod/Upload.php lib/Alchemy/Phrasea/Controller/Root/Login.php lib/Alchemy/Phrasea/Controller/Thesaurus/Thesaurus.php lib/Alchemy/Phrasea/Core/Event/ApiLoadEndEvent.php lib/Alchemy/Phrasea/Core/Event/ApiLoadStartEvent.php lib/Alchemy/Phrasea/Core/Provider/TaskManagerServiceProvider.php lib/Alchemy/Phrasea/Core/Version.php lib/Alchemy/Phrasea/Exception/XMLParseErrorException.php lib/Alchemy/Phrasea/Helper/DatabaseHelper.php lib/Alchemy/Phrasea/Helper/User/Edit.php lib/Alchemy/Phrasea/SearchEngine/Phrasea/PhraseaEngine.php lib/Alchemy/Phrasea/SearchEngine/SearchEngineOptions.php lib/Doctrine/Entities/AuthFailure.php lib/Doctrine/Entities/Basket.php lib/Doctrine/Entities/BasketElement.php lib/Doctrine/Entities/LazaretAttribute.php lib/Doctrine/Entities/LazaretCheck.php lib/Doctrine/Entities/LazaretFile.php lib/Doctrine/Entities/LazaretSession.php lib/Doctrine/Entities/Session.php lib/Doctrine/Entities/SessionModule.php lib/Doctrine/Entities/StoryWZ.php lib/Doctrine/Entities/UsrList.php lib/Doctrine/Entities/UsrListEntry.php lib/Doctrine/Entities/UsrListOwner.php lib/Doctrine/Entities/ValidationData.php lib/Doctrine/Entities/ValidationParticipant.php lib/Doctrine/Entities/ValidationSession.php lib/Doctrine/Logger/MonologSQLLogger.php lib/Doctrine/Repositories/BasketRepository.php lib/Doctrine/Repositories/ValidationParticipantRepository.php lib/Doctrine/Types/Binary.php lib/Doctrine/Types/Blob.php lib/Doctrine/Types/Enum.php lib/Doctrine/Types/LongBlob.php lib/Doctrine/Types/VarBinary.php lib/classes/API/OAuth2/Account.php lib/classes/API/OAuth2/Application.php lib/classes/API/OAuth2/Application/OfficePlugin.php lib/classes/API/OAuth2/AuthCode.php lib/classes/API/OAuth2/RefreshToken.php lib/classes/API/OAuth2/Token.php lib/classes/API/V1/Abstract.php lib/classes/API/V1/Interface.php lib/classes/API/V1/adapter.php lib/classes/API/V1/exception/abstract.php lib/classes/API/V1/exception/badrequest.php lib/classes/API/V1/exception/forbidden.php lib/classes/API/V1/exception/internalservererror.php lib/classes/API/V1/exception/maintenance.php lib/classes/API/V1/exception/methodnotallowed.php lib/classes/API/V1/exception/notfound.php lib/classes/API/V1/exception/unauthorized.php lib/classes/API/V1/result.php lib/classes/Exception/Feed/EntryNotFound.php lib/classes/Exception/Feed/ItemNotFound.php lib/classes/Exception/Feed/PublisherNotFound.php lib/classes/Feed/Abstract.php lib/classes/Feed/Adapter.php lib/classes/Feed/Aggregate.php lib/classes/Feed/Collection.php lib/classes/Feed/CollectionInterface.php lib/classes/Feed/Entry/Adapter.php lib/classes/Feed/Entry/Collection.php lib/classes/Feed/Entry/CollectionInterface.php lib/classes/Feed/Entry/Interface.php lib/classes/Feed/Entry/Item.php lib/classes/Feed/Entry/ItemInterface.php lib/classes/Feed/Interface.php lib/classes/Feed/Link.php lib/classes/Feed/LinkInterface.php lib/classes/Feed/Publisher/Adapter.php lib/classes/Feed/Publisher/Interface.php lib/classes/Feed/Token.php lib/classes/Feed/TokenAggregate.php lib/classes/Feed/XML/Abstract.php lib/classes/Feed/XML/Atom.php lib/classes/Feed/XML/Cooliris.php lib/classes/Feed/XML/Interface.php lib/classes/Feed/XML/RSS.php lib/classes/Feed/XML/RSS/Image.php lib/classes/Feed/XML/RSS/ImageInterface.php lib/classes/User/Adapter.php lib/classes/User/Interface.php lib/classes/appbox/register.php lib/classes/connection.php lib/classes/connection/abstract.php lib/classes/connection/interface.php lib/classes/connection/pdo.php lib/classes/connection/pdoStatementDebugger.php lib/classes/deprecated/countries.php lib/classes/deprecated/inscript.api.php lib/classes/eventsmanager/event/test.php lib/classes/ftpclient.php lib/classes/http/request.php lib/classes/media/subdef.php lib/classes/module/console/schedulerStart.php lib/classes/module/console/schedulerState.php lib/classes/module/console/schedulerStop.php lib/classes/module/console/taskState.php lib/classes/module/console/tasklist.php lib/classes/module/console/taskrun.php lib/classes/patch/320alpha4b.php lib/classes/patch/3715alpha1a.php lib/classes/patch/379alpha1a.php lib/classes/patch/380alpha10a.php lib/classes/patch/380alpha11a.php lib/classes/patch/380alpha13a.php lib/classes/patch/380alpha14a.php lib/classes/patch/380alpha15a.php lib/classes/patch/380alpha16a.php lib/classes/patch/380alpha17a.php lib/classes/patch/380alpha18a.php lib/classes/patch/380alpha3a.php lib/classes/patch/380alpha4a.php lib/classes/patch/380alpha6a.php lib/classes/patch/380alpha8a.php lib/classes/patch/380alpha9a.php lib/classes/patch/381alpha1b.php lib/classes/patch/381alpha2a.php lib/classes/patch/381alpha3a.php lib/classes/patch/381alpha4a.php lib/classes/patch/383alpha1a.php lib/classes/patch/383alpha2a.php lib/classes/patch/383alpha3a.php lib/classes/patch/383alpha4a.php lib/classes/record/adapter.php lib/classes/record/preview.php lib/classes/recordutils.php lib/classes/recordutils/audio.php lib/classes/recordutils/document.php lib/classes/recordutils/map.php lib/classes/recordutils/video.php lib/classes/registry.php lib/classes/registryInterface.php lib/classes/set/order.php lib/classes/system/url.php lib/classes/task/Scheduler.php lib/classes/task/appboxAbstract.php lib/classes/task/databoxAbstract.php lib/classes/task/manager.php lib/classes/task/period/RecordMover.php lib/classes/task/period/apibridge.php lib/classes/task/period/apiwebhooks.php lib/classes/task/period/archive.php lib/classes/task/period/cindexer.php lib/classes/task/period/emptyColl.php lib/classes/task/period/ftp.php lib/classes/task/period/ftpPull.php lib/classes/task/period/subdef.php lib/classes/task/period/test.php lib/classes/task/period/writemeta.php lib/conf.d/PhraseaFixture/AbstractWZ.php lib/conf.d/PhraseaFixture/Basket/LoadFiveBaskets.php lib/conf.d/PhraseaFixture/Basket/LoadOneBasket.php lib/conf.d/PhraseaFixture/Basket/LoadOneBasketEnv.php lib/conf.d/PhraseaFixture/Lazaret/LoadOneFile.php lib/conf.d/PhraseaFixture/Story/LoadOneStory.php lib/conf.d/PhraseaFixture/UsrLists/ListAbstract.php lib/conf.d/PhraseaFixture/UsrLists/UsrList.php lib/conf.d/PhraseaFixture/UsrLists/UsrListEntry.php lib/conf.d/PhraseaFixture/UsrLists/UsrListOwner.php lib/conf.d/PhraseaFixture/ValidationParticipant/LoadOneParticipant.php lib/conf.d/PhraseaFixture/ValidationParticipant/LoadParticipantWithSession.php lib/conf.d/PhraseaFixture/ValidationSession/LoadOneValidationSession.php templates/web/admin/collection/collection.html.twig templates/web/common/dialog_export.html.twig templates/web/common/menubar.html.twig templates/web/prod/actions/Tools/index.html.twig templates/web/prod/index.html.twig templates/web/prod/upload/upload-flash.html.twig templates/web/prod/upload/upload.html.twig templates/web/report/report_layout_child.html.twig templates/web/setup/step2.html.twig templates/web/thesaurus/new-synonym-dialog.html.twig templates/web/thesaurus/properties.html.twig templates/web/thesaurus/search.html.twig tests/Alchemy/Tests/Phrasea/Application/ApiAbstract.php tests/Alchemy/Tests/Phrasea/Cache/FactoryTest.php tests/Alchemy/Tests/Phrasea/Controller/Admin/AdminCollectionTest.php tests/Alchemy/Tests/Phrasea/Controller/Client/RootTest.php
903 lines
31 KiB
PHP
903 lines
31 KiB
PHP
<?php
|
|
|
|
namespace Alchemy\Tests\Phrasea\Controller\Admin;
|
|
|
|
use Alchemy\Phrasea\Application;
|
|
use Alchemy\Phrasea\Authentication\ACLProvider;
|
|
use Alchemy\Phrasea\Border\File;
|
|
use Rhumsaa\Uuid\Uuid;
|
|
|
|
class AdminCollectionTest extends \PhraseanetAuthenticatedWebTestCase
|
|
{
|
|
protected $client;
|
|
public static $createdCollections = [];
|
|
|
|
public function tearDown()
|
|
{
|
|
self::$DI['app']['acl'] = new ACLProvider(self::$DI['app']);
|
|
foreach (self::$createdCollections as $collection) {
|
|
try {
|
|
$collection->unmount_collection(self::$DI['app']);
|
|
} catch (\Exception $e) {
|
|
|
|
}
|
|
|
|
try {
|
|
$collection->delete();
|
|
} catch (\Exception $e) {
|
|
|
|
}
|
|
}
|
|
|
|
self::$createdCollections = [];
|
|
// /!\ re enable collection
|
|
self::$DI['collection']->enable(self::$DI['app']['phraseanet.appbox']);
|
|
|
|
parent::tearDown();
|
|
}
|
|
|
|
public static function tearDownAfterClass()
|
|
{
|
|
self::resetUsersRights(self::$DI['app'], self::$DI['user']);
|
|
parent::tearDownAfterClass();
|
|
}
|
|
|
|
public function getJson($response)
|
|
{
|
|
$this->assertTrue($response->isOk());
|
|
$this->assertEquals('application/json', $response->headers->get('Content-Type'));
|
|
$content = json_decode($response->getContent());
|
|
$this->assertTrue(is_object($content));
|
|
$this->assertObjectHasAttribute('success', $content, $response->getContent());
|
|
$this->assertObjectHasAttribute('msg', $content, $response->getContent());
|
|
|
|
return $content;
|
|
}
|
|
|
|
public function checkRedirection($response, $location)
|
|
{
|
|
$this->assertTrue($response->isRedirect());
|
|
$this->assertEquals($location, $response->headers->get('location'));
|
|
}
|
|
|
|
public function createOneCollection()
|
|
{
|
|
$databoxes = self::$DI['app']['phraseanet.appbox']->get_databoxes();
|
|
$collection = \collection::create(self::$DI['app'], array_shift($databoxes), self::$DI['app']['phraseanet.appbox'], 'TESTTODELETE');
|
|
|
|
self::$createdCollections[] = $collection;
|
|
|
|
return $collection;
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::connect
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::getCollection
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::call
|
|
*/
|
|
public function testGetCollection()
|
|
{
|
|
$this->setAdmin(true);
|
|
|
|
self::$DI['client']->request('GET', '/admin/collection/' . self::$DI['collection']->get_base_id() . '/');
|
|
$this->assertTrue(self::$DI['client']->getResponse()->isOk());
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::getSuggestedValues
|
|
*/
|
|
public function testGetSuggestedValues()
|
|
{
|
|
$this->setAdmin(true);
|
|
|
|
self::$DI['client']->request('GET', '/admin/collection/' . self::$DI['collection']->get_base_id() . '/suggested-values/');
|
|
$this->assertTrue(self::$DI['client']->getResponse()->isOk());
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::getDetails
|
|
*/
|
|
public function testInformationsDetails()
|
|
{
|
|
$this->setAdmin(true);
|
|
|
|
$file = new File(self::$DI['app'], self::$DI['app']['mediavorus']->guess(__DIR__ . '/../../../../../files/test001.jpg'), self::$DI['collection']);
|
|
\record_adapter::createFromFile($file, self::$DI['app']);
|
|
|
|
self::$DI['client']->request('GET', '/admin/collection/' . self::$DI['collection']->get_base_id() . '/informations/details/');
|
|
$this->assertTrue(self::$DI['client']->getResponse()->isOk());
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::submitSuggestedValues
|
|
*/
|
|
public function testPostSuggestedValuesNotJson()
|
|
{
|
|
$this->setAdmin(true);
|
|
|
|
self::$DI['client']->request('POST', '/admin/collection/' . self::$DI['collection']->get_base_id() . '/suggested-values/');
|
|
|
|
$this->assertTrue(self::$DI['client']->getResponse()->isRedirect());
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::submitSuggestedValues
|
|
*/
|
|
public function testPostSuggestedValueUnauthorized()
|
|
{
|
|
$this->setAdmin(false);
|
|
|
|
$this->XMLHTTPRequest('POST', '/admin/collection/' . self::$DI['collection']->get_base_id() . '/suggested-values/');
|
|
$this->assertXMLHTTPBadJsonResponse(self::$DI['client']->getResponse());
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::submitSuggestedValues
|
|
*/
|
|
public function testPostSuggestedValue()
|
|
{
|
|
$this->setAdmin(true);
|
|
|
|
$prefs = '<?xml version="1.0" encoding="UTF-8"?> <baseprefs> <status>0</status> <sugestedValues> <Object> <value>my_new_value</value> </Object> </sugestedValues> </baseprefs>';
|
|
|
|
$this->XMLHTTPRequest('POST', '/admin/collection/' . self::$DI['collection']->get_base_id() . '/suggested-values/', [
|
|
'str' => $prefs
|
|
]);
|
|
|
|
$json = $this->getJson(self::$DI['client']->getResponse());
|
|
$this->assertTrue($json->success);
|
|
|
|
$collection = $collection = \collection::get_from_base_id(self::$DI['app'], self::$DI['collection']->get_base_id());
|
|
$this->assertTrue( ! ! strrpos($collection->get_prefs(), 'my_new_value'));
|
|
unset($collection);
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::submitSuggestedValues
|
|
*/
|
|
public function testPostSuggestedValuebadXml()
|
|
{
|
|
$this->setAdmin(true);
|
|
|
|
$prefs = '<?xml version="1.0" encoding="UTF-alues> </baseprefs>';
|
|
|
|
$this->XMLHTTPRequest('POST', '/admin/collection/' . self::$DI['collection']->get_base_id() . '/suggested-values/', [
|
|
'str' => $prefs
|
|
]);
|
|
|
|
$json = $this->getJson(self::$DI['client']->getResponse());
|
|
$this->assertFalse($json->success);
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::enable
|
|
*/
|
|
public function testPostEnableNotJson()
|
|
{
|
|
$this->setAdmin(true);
|
|
|
|
self::$DI['client']->request('POST', '/admin/collection/' . self::$DI['collection']->get_base_id() . '/enable/');
|
|
|
|
$this->assertTrue(self::$DI['client']->getResponse()->isRedirect());
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::enable
|
|
*/
|
|
public function testPostEnableUnauthorizedException()
|
|
{
|
|
$this->setAdmin(false);
|
|
|
|
self::$DI['client']->request('POST', '/admin/collection/' . self::$DI['collection']->get_base_id() . '/enable/');
|
|
|
|
$this->assertForbiddenResponse(self::$DI['client']->getResponse());
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::enable
|
|
*/
|
|
public function testPostEnable()
|
|
{
|
|
$this->setAdmin(true);
|
|
|
|
$this->XMLHTTPRequest('POST', '/admin/collection/' . self::$DI['collection']->get_base_id() . '/enable/');
|
|
|
|
$json = $this->getJson(self::$DI['client']->getResponse());
|
|
$this->assertTrue($json->success);
|
|
|
|
$collection = \collection::get_from_base_id(self::$DI['app'], self::$DI['collection']->get_base_id());
|
|
$this->assertTrue($collection->is_active());
|
|
unset($collection);
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::disabled
|
|
*/
|
|
public function testPostDisabledNotJson()
|
|
{
|
|
$this->setAdmin(true);
|
|
|
|
self::$DI['client']->request('POST', '/admin/collection/' . self::$DI['collection']->get_base_id() . '/disabled/');
|
|
|
|
$this->assertTrue(self::$DI['client']->getResponse()->isRedirect());
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::disabled
|
|
*/
|
|
public function testPostDisabledUnauthorizedException()
|
|
{
|
|
$this->setAdmin(false);
|
|
|
|
self::$DI['client']->request('POST', '/admin/collection/' . self::$DI['collection']->get_base_id() . '/disabled/');
|
|
|
|
$this->assertForbiddenResponse(self::$DI['client']->getResponse());
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::disabled
|
|
*/
|
|
public function testPostDisabled()
|
|
{
|
|
$this->setAdmin(true);
|
|
|
|
$this->XMLHTTPRequest('POST', '/admin/collection/' . self::$DI['collection']->get_base_id() . '/disabled/');
|
|
|
|
$json = $this->getJson(self::$DI['client']->getResponse());
|
|
$this->assertTrue($json->success);
|
|
$collection = \collection::get_from_base_id(self::$DI['app'], self::$DI['collection']->get_base_id());
|
|
$this->assertFalse($collection->is_active());
|
|
unset($collection);
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::setOrderAdmins
|
|
*/
|
|
public function testPostOrderAdminsUnauthorizedException()
|
|
{
|
|
$this->setAdmin(false);
|
|
|
|
self::$DI['client']->request('POST', '/admin/collection/' . self::$DI['collection']->get_base_id() . '/order/admins/');
|
|
|
|
$this->assertForbiddenResponse(self::$DI['client']->getResponse());
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::setOrderAdmins
|
|
*/
|
|
public function testPostOrderAdmins()
|
|
{
|
|
$this->setAdmin(true);
|
|
|
|
self::$DI['client']->request('POST', '/admin/collection/' . self::$DI['collection']->get_base_id() . '/order/admins/', [
|
|
'admins' => [self::$DI['user_alt1']->getId()]
|
|
]);
|
|
|
|
$this->checkRedirection(self::$DI['client']->getResponse(), '/admin/collection/' . self::$DI['collection']->get_base_id() . '/?success=1');
|
|
|
|
$this->assertTrue(self::$DI['app']['acl']->get(self::$DI['user_alt1'])->has_right_on_base(self::$DI['collection']->get_base_id(), 'order_master'));
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::setPublicationDisplay
|
|
*/
|
|
public function testPostPublicationDisplayNotJson()
|
|
{
|
|
$this->setAdmin(true);
|
|
|
|
self::$DI['client']->request('POST', '/admin/collection/' . self::$DI['collection']->get_base_id() . '/publication/display/', [
|
|
'pub_wm' => 'wm',
|
|
]);
|
|
|
|
$this->assertTrue(self::$DI['client']->getResponse()->isRedirect());
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::setPublicationDisplay
|
|
*/
|
|
public function testPostPublicationDisplayUnauthorizedException()
|
|
{
|
|
$this->setAdmin(false);
|
|
|
|
self::$DI['client']->request('POST', '/admin/collection/' . self::$DI['collection']->get_base_id() . '/publication/display/');
|
|
|
|
$this->assertForbiddenResponse(self::$DI['client']->getResponse());
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::setPublicationDisplay
|
|
*/
|
|
public function testPublicationDisplayBadRequestMissingArguments()
|
|
{
|
|
$this->setAdmin(true);
|
|
|
|
$this->XMLHTTPRequest('POST', '/admin/collection/' . self::$DI['collection']->get_base_id() . '/publication/display/');
|
|
$this->assertXMLHTTPBadJsonResponse(self::$DI['client']->getResponse());
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::setPublicationDisplay
|
|
*/
|
|
public function testPublicationDisplay()
|
|
{
|
|
$this->setAdmin(true);
|
|
|
|
$this->XMLHTTPRequest('POST', '/admin/collection/' . self::$DI['collection']->get_base_id() . '/publication/display/', [
|
|
'pub_wm' => 'wm',
|
|
]);
|
|
|
|
$json = $this->getJson(self::$DI['client']->getResponse());
|
|
$this->assertTrue($json->success);
|
|
$collection = \collection::get_from_base_id(self::$DI['app'], self::$DI['collection']->get_base_id());
|
|
$this->assertNotNull($collection->get_pub_wm());
|
|
unset($collection);
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::rename
|
|
*/
|
|
public function testPostNameNotJson()
|
|
{
|
|
$this->setAdmin(true);
|
|
|
|
$collection = $this->createOneCollection();
|
|
|
|
self::$DI['client']->request('POST', '/admin/collection/' . $collection->get_base_id() . '/rename/', [
|
|
'name' => 'test_rename_coll'
|
|
]);
|
|
|
|
$this->assertTrue(self::$DI['client']->getResponse()->isRedirect());
|
|
$this->assertEquals('/admin/collection/' . $collection->get_base_id() . '/?success=1&reload-tree=1', self::$DI['client']->getResponse()->headers->get('location'));
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::labels
|
|
*/
|
|
public function testPostLabelsNotJson()
|
|
{
|
|
$this->setAdmin(true);
|
|
|
|
$collection = $this->createOneCollection();
|
|
|
|
self::$DI['client']->request('POST', '/admin/collection/' . $collection->get_base_id() . '/labels/', [
|
|
'labels' => [
|
|
'en' => 'english label',
|
|
'fr' => 'french label',
|
|
'ru' => 'russian label',
|
|
]
|
|
]);
|
|
|
|
$this->assertTrue(self::$DI['client']->getResponse()->isRedirect());
|
|
$this->assertContains('/admin/collection/'.$collection->get_base_id().'/', self::$DI['client']->getResponse()->headers->get('location'));
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::rename
|
|
*/
|
|
public function testPostNameUnauthorizedException()
|
|
{
|
|
$this->setAdmin(false);
|
|
|
|
self::$DI['client']->request('POST', '/admin/collection/' . self::$DI['collection']->get_base_id() . '/rename/');
|
|
|
|
$this->assertForbiddenResponse(self::$DI['client']->getResponse());
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::labels
|
|
*/
|
|
public function testPostLabelsUnauthorizedException()
|
|
{
|
|
$this->setAdmin(false);
|
|
|
|
self::$DI['client']->request('POST', '/admin/collection/' . self::$DI['collection']->get_base_id() . '/labels/');
|
|
|
|
$this->assertForbiddenResponse(self::$DI['client']->getResponse());
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::rename
|
|
*/
|
|
public function testPostNameBadRequestMissingArguments()
|
|
{
|
|
$this->setAdmin(true);
|
|
|
|
$this->XMLHTTPRequest('POST', '/admin/collection/' . self::$DI['collection']->get_base_id() . '/rename/');
|
|
$this->assertXMLHTTPBadJsonResponse(self::$DI['client']->getResponse());
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::labels
|
|
*/
|
|
public function testPostLabelsBadRequestMissingArguments()
|
|
{
|
|
$this->setAdmin(true);
|
|
|
|
$this->XMLHTTPRequest('POST', '/admin/collection/' . self::$DI['collection']->get_base_id() . '/labels/');
|
|
$this->assertXMLHTTPBadJsonResponse(self::$DI['client']->getResponse());
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::rename
|
|
*/
|
|
public function testPostName()
|
|
{
|
|
$this->setAdmin(true);
|
|
|
|
$collection = $this->createOneCollection();
|
|
|
|
$this->XMLHTTPRequest('POST', '/admin/collection/' . $collection->get_base_id() . '/rename/', [
|
|
'name' => 'test_rename_coll'
|
|
]);
|
|
|
|
$json = $this->getJson(self::$DI['client']->getResponse());
|
|
$this->assertTrue($json->success);
|
|
$this->assertEquals($collection->get_name(), 'test_rename_coll');
|
|
$collection->unmount_collection(self::$DI['app']);
|
|
$collection->delete();
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::labels
|
|
*/
|
|
public function testPostLabels()
|
|
{
|
|
$this->setAdmin(true);
|
|
|
|
$collection = $this->createOneCollection();
|
|
|
|
$this->XMLHTTPRequest('POST', '/admin/collection/' . $collection->get_base_id() . '/labels/', [
|
|
'labels' => [
|
|
'nl' => 'netherlands label',
|
|
'de' => 'german label',
|
|
'fr' => 'label français',
|
|
'en' => 'label à l\'anglaise',
|
|
'ru' => 'label à la russe',
|
|
]
|
|
]);
|
|
|
|
$json = $this->getJson(self::$DI['client']->getResponse());
|
|
$this->assertTrue($json->success);
|
|
$this->assertEquals($collection->get_label('de'), 'german label');
|
|
$this->assertEquals($collection->get_label('nl'), 'netherlands label');
|
|
$this->assertEquals($collection->get_label('fr'), 'label français');
|
|
$this->assertEquals($collection->get_label('en'), 'label à l\'anglaise');
|
|
$collection->unmount_collection(self::$DI['app']);
|
|
$collection->delete();
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::emptyCollection
|
|
*/
|
|
public function testPostEmptyCollectionNotJson()
|
|
{
|
|
$this->setAdmin(true);
|
|
|
|
$collection = $this->createOneCollection();
|
|
|
|
self::$DI['client']->request('POST', '/admin/collection/' . $collection->get_base_id() . '/empty/');
|
|
|
|
$this->assertTrue(self::$DI['client']->getResponse()->isRedirect());
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::emptyCollection
|
|
*/
|
|
public function testPostEmptyCollectionUnauthorizedException()
|
|
{
|
|
$this->setAdmin(false);
|
|
|
|
$this->XMLHTTPRequest('POST', '/admin/collection/' . self::$DI['collection']->get_base_id() . '/empty/');
|
|
$this->assertXMLHTTPBadJsonResponse(self::$DI['client']->getResponse());
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::emptyCollection
|
|
*/
|
|
public function testPostEmptyCollection()
|
|
{
|
|
$this->setAdmin(true);
|
|
|
|
$collection = $this->createOneCollection();
|
|
|
|
$file = new File(self::$DI['app'], self::$DI['app']['mediavorus']->guess(__DIR__ . '/../../../../../files/test001.jpg'), $collection);
|
|
\record_adapter::createFromFile($file, self::$DI['app']);
|
|
|
|
if ($collection->get_record_amount() === 0) {
|
|
$this->markTestSkipped('No record were added');
|
|
}
|
|
|
|
$this->XMLHTTPRequest('POST', '/admin/collection/' . $collection->get_base_id() . '/empty/');
|
|
|
|
$json = $this->getJson(self::$DI['client']->getResponse());
|
|
$this->assertTrue($json->success);
|
|
$this->assertEquals(0, $collection->get_record_amount());
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::emptyCollection
|
|
*/
|
|
public function testPostEmptyCollectionWithHighRecordAmount()
|
|
{
|
|
$this->markTestSkipped('This tests lasts for 40 sec.');
|
|
|
|
$this->setAdmin(true);
|
|
|
|
$collection = $this->createOneCollection();
|
|
|
|
$databox = self::$DI['app']['phraseanet.appbox']->get_databox($collection->get_sbas_id());
|
|
$sql = '
|
|
INSERT INTO record
|
|
(coll_id, record_id, parent_record_id, moddate, credate
|
|
, type, sha256, uuid, originalname, mime)
|
|
VALUES
|
|
(:coll_id, null, :parent_record_id, NOW(), NOW()
|
|
, :type, :sha256, :uuid
|
|
, :originalname, :mime)';
|
|
|
|
$stmt = $databox->get_connection()->prepare($sql);
|
|
$i = 0;
|
|
while ($i < 502) {
|
|
$stmt->execute([
|
|
':coll_id' => $collection->get_coll_id(),
|
|
':parent_record_id' => 0,
|
|
':type' => 'unknown',
|
|
':sha256' => null,
|
|
':uuid' => Uuid::uuid4(),
|
|
':originalname' => null,
|
|
':mime' => null,
|
|
]);
|
|
$i ++;
|
|
}
|
|
|
|
$stmt->closeCursor();
|
|
|
|
if ($collection->get_record_amount() < 500) {
|
|
$this->markTestSkipped('No enough records added');
|
|
}
|
|
|
|
$this->XMLHTTPRequest('POST', '/admin/collection/' . $collection->get_base_id() . '/empty/');
|
|
|
|
$json = $this->getJson(self::$DI['client']->getResponse());
|
|
$this->assertTrue($json->success);
|
|
|
|
if (count(self::$DI['app']['EM']->getRepository('Phraseanet:Task')->findAll()) === 0) {
|
|
$this->fail('Task for empty collection has not been created');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::setMiniLogo
|
|
*/
|
|
public function testSetMiniLogoBadRequest()
|
|
{
|
|
$this->setAdmin(true);
|
|
|
|
self::$DI['client']->request('POST', '/admin/collection/' . self::$DI['collection']->get_base_id() . '/picture/mini-logo/');
|
|
|
|
$this->assertBadResponse(self::$DI['client']->getResponse());
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::setStamp
|
|
*/
|
|
public function testSetStampBadRequest()
|
|
{
|
|
$this->setAdmin(true);
|
|
|
|
self::$DI['client']->request('POST', '/admin/collection/' . self::$DI['collection']->get_base_id() . '/picture/stamp-logo/');
|
|
|
|
$this->assertBadResponse(self::$DI['client']->getResponse());
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::setWatermark
|
|
*/
|
|
public function testSetWatermarkBadRequest()
|
|
{
|
|
$this->setAdmin(true);
|
|
|
|
self::$DI['client']->request('POST', '/admin/collection/' . self::$DI['collection']->get_base_id() . '/picture/watermark/');
|
|
|
|
$this->assertBadResponse(self::$DI['client']->getResponse());
|
|
}
|
|
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::setMiniLogo
|
|
*/
|
|
public function testSetMiniLogo()
|
|
{
|
|
$this->setAdmin(true);
|
|
|
|
$target = tempnam(sys_get_temp_dir(), 'p4logo') . '.jpg';
|
|
self::$DI['app']['filesystem']->copy(__DIR__ . '/../../../../../files/p4logo.jpg', $target);
|
|
$files = [
|
|
'newLogo' => new \Symfony\Component\HttpFoundation\File\UploadedFile($target, 'logo.jpg')
|
|
];
|
|
self::$DI['client']->request('POST', '/admin/collection/' . self::$DI['collection']->get_base_id() . '/picture/mini-logo/', [], $files);
|
|
$this->checkRedirection(self::$DI['client']->getResponse(), '/admin/collection/' . self::$DI['collection']->get_base_id() . '/?success=1');
|
|
$this->assertEquals(1, count(\collection::getLogo(self::$DI['collection']->get_base_id(), self::$DI['app'])));
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::deleteLogo
|
|
*/
|
|
public function testDeleteMiniLogoNotJson()
|
|
{
|
|
$this->setAdmin(true);
|
|
|
|
$collection = $this->createOneCollection();
|
|
|
|
self::$DI['client']->request('POST', '/admin/collection/' . $collection->get_base_id() . '/picture/mini-logo/delete/');
|
|
|
|
$this->assertTrue(self::$DI['client']->getResponse()->isRedirect());
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::deleteLogo
|
|
*/
|
|
public function testDeleteMiniLogo()
|
|
{
|
|
if (count(\collection::getLogo(self::$DI['collection']->get_base_id(), self::$DI['app'])) === 0) {
|
|
$this->markTestSkipped('No logo setted');
|
|
}
|
|
|
|
$this->setAdmin(true);
|
|
|
|
$this->XMLHTTPRequest('POST', '/admin/collection/' . self::$DI['collection']->get_base_id() . '/picture/mini-logo/delete/');
|
|
$json = $this->getJson(self::$DI['client']->getResponse());
|
|
$this->assertTrue($json->success);
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::setWatermark
|
|
*/
|
|
public function testSetWm()
|
|
{
|
|
$this->setAdmin(true);
|
|
|
|
$target = tempnam(sys_get_temp_dir(), 'p4logo') . '.jpg';
|
|
self::$DI['app']['filesystem']->copy(__DIR__ . '/../../../../../files/p4logo.jpg', $target);
|
|
$files = [
|
|
'newWm' => new \Symfony\Component\HttpFoundation\File\UploadedFile($target, 'logo.jpg')
|
|
];
|
|
self::$DI['client']->request('POST', '/admin/collection/' . self::$DI['collection']->get_base_id() . '/picture/watermark/', [], $files);
|
|
$this->checkRedirection(self::$DI['client']->getResponse(), '/admin/collection/' . self::$DI['collection']->get_base_id() . '/?success=1');
|
|
$this->assertEquals(1, count(\collection::getWatermark(self::$DI['collection']->get_base_id())));
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::deleteWatermark
|
|
*/
|
|
public function testDeleteWmBadNotJson()
|
|
{
|
|
$this->setAdmin(true);
|
|
|
|
$collection = $this->createOneCollection();
|
|
|
|
self::$DI['client']->request('POST', '/admin/collection/' . $collection->get_base_id() . '/picture/watermark/delete/');
|
|
|
|
$this->assertTrue(self::$DI['client']->getResponse()->isRedirect());
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::deleteWatermark
|
|
*/
|
|
public function testDeleteWm()
|
|
{
|
|
if (count(\collection::getWatermark(self::$DI['collection']->get_base_id())) === 0) {
|
|
$this->markTestSkipped('No watermark setted');
|
|
}
|
|
$this->setAdmin(true);
|
|
|
|
$this->XMLHTTPRequest('POST', '/admin/collection/' . self::$DI['collection']->get_base_id() . '/picture/watermark/delete/');
|
|
|
|
$json = $this->getJson(self::$DI['client']->getResponse());
|
|
$this->assertTrue($json->success);
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::setStamp
|
|
*/
|
|
public function testSetStamp()
|
|
{
|
|
$this->setAdmin(true);
|
|
|
|
$target = tempnam(sys_get_temp_dir(), 'p4logo') . '.jpg';
|
|
self::$DI['app']['filesystem']->copy(__DIR__ . '/../../../../../files/p4logo.jpg', $target);
|
|
$files = [
|
|
'newStamp' => new \Symfony\Component\HttpFoundation\File\UploadedFile($target, 'logo.jpg')
|
|
];
|
|
self::$DI['client']->request('POST', '/admin/collection/' . self::$DI['collection']->get_base_id() . '/picture/stamp-logo/', [], $files);
|
|
$this->checkRedirection(self::$DI['client']->getResponse(), '/admin/collection/' . self::$DI['collection']->get_base_id() . '/?success=1');
|
|
$this->assertEquals(1, count(\collection::getStamp(self::$DI['collection']->get_base_id())));
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::deleteStamp
|
|
*/
|
|
public function testDeleteStampBadNotJson()
|
|
{
|
|
$this->setAdmin(true);
|
|
|
|
$collection = $this->createOneCollection();
|
|
|
|
self::$DI['client']->request('POST', '/admin/collection/' .$collection->get_base_id() . '/picture/stamp-logo/delete/');
|
|
|
|
$this->assertTrue(self::$DI['client']->getResponse()->isRedirect());
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::deleteStamp
|
|
*/
|
|
public function testDeleteStamp()
|
|
{
|
|
if (count(\collection::getStamp(self::$DI['collection']->get_base_id())) === 0) {
|
|
$this->markTestSkipped('No stamp setted');
|
|
}
|
|
|
|
$this->setAdmin(true);
|
|
|
|
$this->XMLHTTPRequest('POST', '/admin/collection/' . self::$DI['collection']->get_base_id() . '/picture/stamp-logo/delete/');
|
|
|
|
$json = $this->getJson(self::$DI['client']->getResponse());
|
|
$this->assertTrue($json->success);
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::getCollection
|
|
*/
|
|
public function testGetCollectionUnauthorizedException()
|
|
{
|
|
$this->setAdmin(false);
|
|
|
|
self::$DI['client']->request('GET', '/admin/collection/' . self::$DI['collection']->get_base_id() . '/');
|
|
|
|
$this->assertForbiddenResponse(self::$DI['client']->getResponse());
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::getSuggestedValues
|
|
*/
|
|
public function testGetSuggestedValuesUnauthorizedException()
|
|
{
|
|
$this->setAdmin(false);
|
|
|
|
self::$DI['client']->request('GET', '/admin/collection/' . self::$DI['collection']->get_base_id() . '/suggested-values/');
|
|
|
|
$this->assertForbiddenResponse(self::$DI['client']->getResponse());
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::getDetails
|
|
*/
|
|
public function testInformationsDetailsUnauthorizedException()
|
|
{
|
|
$this->setAdmin(false);
|
|
|
|
self::$DI['client']->request('GET', '/admin/collection/' . self::$DI['collection']->get_base_id() . '/informations/details/');
|
|
|
|
$this->assertForbiddenResponse(self::$DI['client']->getResponse());
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::delete
|
|
*/
|
|
public function testDeleteCollectionNotJson()
|
|
{
|
|
$this->setAdmin(true);
|
|
|
|
$collection = $this->createOneCollection();
|
|
|
|
self::$DI['client']->request('POST', '/admin/collection/' . $collection->get_base_id() . '/delete/');
|
|
|
|
$this->assertTrue(self::$DI['client']->getResponse()->isRedirect());
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::delete
|
|
*/
|
|
public function testDeleteCollectionUnauthorized()
|
|
{
|
|
$this->setAdmin(false);
|
|
|
|
self::$DI['client']->request('POST', '/admin/collection/' . self::$DI['collection']->get_base_id() . '/delete/');
|
|
|
|
$this->assertForbiddenResponse(self::$DI['client']->getResponse());
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::delete
|
|
*/
|
|
public function testDeleteCollection()
|
|
{
|
|
$this->setAdmin(true);
|
|
|
|
$collection = $this->createOneCollection();
|
|
|
|
$this->XMLHTTPRequest('POST', '/admin/collection/' . $collection->get_base_id() . '/delete/');
|
|
|
|
$json = $this->getJson(self::$DI['client']->getResponse());
|
|
$this->assertTrue($json->success);
|
|
try {
|
|
\collection::get_from_base_id(self::$DI['app'], $collection->get_base_id());
|
|
$this->fail('Collection not deleted');
|
|
} catch (\Exception $e) {
|
|
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::delete
|
|
*/
|
|
public function testDeleteCollectionNoEmpty()
|
|
{
|
|
$this->setAdmin(true);
|
|
|
|
$collection = $this->createOneCollection();
|
|
|
|
$file = new File(self::$DI['app'], self::$DI['app']['mediavorus']->guess(__DIR__ . '/../../../../../files/test001.jpg'), $collection);
|
|
\record_adapter::createFromFile($file, self::$DI['app']);
|
|
|
|
if ($collection->get_record_amount() === 0) {
|
|
$this->markTestSkipped('No record were added');
|
|
}
|
|
|
|
$this->XMLHTTPRequest('POST', '/admin/collection/' . $collection->get_base_id() . '/delete/');
|
|
|
|
$json = $this->getJson(self::$DI['client']->getResponse());
|
|
$this->assertFalse($json->success);
|
|
$collection->empty_collection();
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::unmount
|
|
*/
|
|
public function testPostUnmountCollectionNotJson()
|
|
{
|
|
$this->setAdmin(true);
|
|
|
|
$collection = $this->createOneCollection();
|
|
|
|
self::$DI['client']->request('POST', '/admin/collection/' . $collection->get_base_id() . '/unmount/');
|
|
|
|
$this->assertTrue(self::$DI['client']->getResponse()->isRedirect());
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::unmount
|
|
*/
|
|
public function testPostUnmountCollectionUnauthorizedException()
|
|
{
|
|
$this->setAdmin(false);
|
|
|
|
$this->XMLHTTPRequest('POST', '/admin/collection/' . self::$DI['collection']->get_base_id() . '/unmount/');
|
|
$this->assertXMLHTTPBadJsonResponse(self::$DI['client']->getResponse());
|
|
}
|
|
|
|
/**
|
|
* @covers Alchemy\Phrasea\Controller\Admin\Bas::unmount
|
|
*/
|
|
public function testPostUnmountCollection()
|
|
{
|
|
$this->setAdmin(true);
|
|
|
|
$collection = $this->createOneCollection();
|
|
|
|
$this->XMLHTTPRequest('POST', '/admin/collection/' . $collection->get_base_id() . '/unmount/');
|
|
|
|
$json = $this->getJson(self::$DI['client']->getResponse());
|
|
$this->assertTrue($json->success);
|
|
|
|
try {
|
|
\collection::get_from_base_id(self::$DI['app'], $collection->get_base_id());
|
|
$this->fail('Collection not unmounted');
|
|
} catch (\Exception_Databox_CollectionNotFound $e) {
|
|
|
|
}
|
|
|
|
unset($collection);
|
|
}
|
|
}
|