Files
Phraseanet/tests/Alchemy/Tests/Phrasea/Controller/Admin/AdminCollectionTest.php
Nicolas Le Goff 949bf06cac Merge branch '3.8'
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
2015-02-05 18:38:49 +01:00

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);
}
}