Example #1
0
 /**
  * @covers Alchemy\Phrasea\Controller\Prod\Records::renewUrl
  */
 public function testRenewUrl()
 {
     $file = new File(self::$DI['app'], self::$DI['app']['mediavorus']->guess(__DIR__ . '/../../../../../files/cestlafete.jpg'), self::$DI['collection']);
     $record = \record_adapter::createFromFile($file, self::$DI['app']);
     $this->XMLHTTPRequest('POST', '/prod/records/renew-url/', ['lst' => $record->get_serialize_key()]);
     $response = self::$DI['client']->getResponse();
     $datas = (array) json_decode($response->getContent());
     $this->assertTrue(count($datas) > 0);
     $record->delete();
     unset($response, $datas, $record);
 }
Example #2
0
 public function bootTestCase()
 {
     $file = new File(self::$DI['app'], self::$DI['app']['mediavorus']->guess(__DIR__ . "/../../files/iphone_pic.jpg"), self::$DI['collection']);
     self::$recordonbleu = record_adapter::createFromFile($file, self::$DI['app']);
     self::$DI['app']['subdef.generator']->generateSubdefs(self::$recordonbleu);
     foreach (self::$recordonbleu->get_subdefs() as $subdef) {
         if ($subdef->get_name() == 'document') {
             continue;
         }
         if (!self::$objectPresent) {
             self::$objectPresent = $subdef;
             continue;
         }
         if (!self::$objectNotPresent) {
             self::$objectNotPresent = $subdef;
             continue;
         }
     }
     self::$objectNotPresent->remove_file();
 }
Example #3
0
 public function testMoveRecordToCollection()
 {
     self::$DI['app']['phraseanet.SE'] = $this->createSearchEngineMock();
     $file = new File(self::$DI['app'], self::$DI['app']['mediavorus']->guess(__DIR__ . '/../../../../../files/test001.jpg'), self::$DI['collection']);
     $record = \record_adapter::createFromFile($file, self::$DI['app']);
     $this->setToken($this->userAccessToken);
     $route = '/api/v1/records/' . $record->get_sbas_id() . '/' . $record->get_record_id() . '/setcollection/';
     $base_id = false;
     foreach ($record->get_databox()->get_collections() as $collection) {
         if ($collection->get_base_id() != $record->get_base_id()) {
             $base_id = $collection->get_base_id();
             break;
         }
     }
     if (!$base_id) {
         $this->markTestSkipped('No collection');
     }
     $this->evaluateMethodNotAllowedRoute($route, ['GET', 'PUT', 'DELETE']);
     self::$DI['client']->request('POST', $route, $this->getParameters(['base_id' => $base_id]), [], ['HTTP_Accept' => $this->getAcceptMimeType()]);
     $content = $this->unserialize(self::$DI['client']->getResponse()->getContent());
     $this->evaluateResponse200(self::$DI['client']->getResponse());
     $this->evaluateMeta200($content);
     $record->delete();
 }
 private function generateRecord(\Pimple $DI)
 {
     foreach (range(1, 7) as $i) {
         $file = new File($this->container, $this->container['mediavorus']->guess(__DIR__ . '/../../../../../tests/files/test001.jpg'), $DI['coll']);
         $record = \record_adapter::createFromFile($file, $this->container);
         $this->container['subdef.generator']->generateSubdefs($record);
         $DI['record_' . $i] = $record;
     }
     $media = $this->container['mediavorus']->guess($this->container['root.path'] . '/tests/files/cestlafete.jpg');
     foreach (range(1, 3) as $i) {
         $story = \record_adapter::createStory($this->container, $DI['coll']);
         if ($i < 3) {
             $this->container['subdef.substituer']->substitute($story, 'preview', $media);
             $this->container['subdef.substituer']->substitute($story, 'thumbnail', $media);
         }
         $DI['record_story_' . $i] = $story;
     }
 }
Example #5
0
 /**
  * @covers \Alchemy\Phrasea\Controller\Admin\Database::emptyDatabase
  */
 public function testEmptyDatabase()
 {
     $this->setAdmin(true);
     $base = $this->createDatabox();
     $collection = \collection::create(self::$DI['app'], $base, self::$DI['app']['phraseanet.appbox'], 'TESTTODELETE');
     self::$createdCollections[] = $collection;
     $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/databox/' . $base->get_sbas_id() . '/empty/');
     $json = $this->getJson(self::$DI['client']->getResponse());
     $this->assertTrue($json->success);
     $this->assertEquals(0, $collection->get_record_amount());
     $base->unmount_databox();
     $base->delete();
 }
 /**
  * @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();
 }
Example #7
0
 /**
  * @covers Alchemy\Phrasea\Controller\Prod\Property::changeType
  */
 public function testChangeType()
 {
     $file = new File(self::$DI['app'], self::$DI['app']['mediavorus']->guess(__DIR__ . '/../../../../../files/cestlafete.jpg'), self::$DI['collection']);
     $record = \record_adapter::createFromFile($file, self::$DI['app']);
     $record2 = \record_adapter::createFromFile($file, self::$DI['app']);
     self::$DI['client']->request('POST', '/prod/records/property/type/', ['lst' => implode(';', [$record->get_serialize_key(), $record2->get_serialize_key()]), 'types' => [$record->get_serialize_key() => 'document', $record2->get_serialize_key() => 'flash']]);
     $response = self::$DI['client']->getResponse();
     $datas = (array) json_decode($response->getContent());
     $this->assertArrayHasKey('success', $datas);
     $this->assertTrue($datas['success']);
     $this->assertArrayHasKey('updated', $datas);
     $record = new \record_adapter(self::$DI['app'], $record->get_sbas_id(), $record->get_record_id());
     $record2 = new \record_adapter(self::$DI['app'], $record2->get_sbas_id(), $record2->get_record_id());
     $this->assertEquals('document', $record->get_type());
     $this->assertEquals('flash', $record2->get_type());
     $record->delete();
     $record2->delete();
     unset($response, $datas, $record2, $record, $file);
 }
Example #8
0
 public function testGet_record_details()
 {
     $file = new File(self::$DI['app'], self::$DI['app']['mediavorus']->guess(__DIR__ . '/../files/cestlafete.jpg'), self::$object);
     $record = record_adapter::createFromFile($file, self::$DI['app']);
     $details = self::$object->get_record_details();
     $this->assertTrue(is_array($details));
     foreach ($details as $detail) {
         $this->assertTrue(is_array($detail));
         $this->assertArrayHasKey('coll_id', $detail);
         $this->asserttrue(is_int($detail['coll_id']));
         $this->assertArrayHasKey('name', $detail);
         $this->asserttrue(is_string($detail['name']));
         $this->assertArrayHasKey('amount', $detail);
         $this->asserttrue(is_int($detail['amount']));
         $this->assertArrayHasKey('size', $detail);
         $this->asserttrue(is_int($detail['size']));
     }
 }
 public function setUp()
 {
     parent::setUp();
     if (null !== self::$DI) {
         unset(self::$DI['app']['dbal.provider']);
     }
     self::$DI = new \Pimple();
     ini_set('memory_limit', '4096M');
     \PHPUnit_Framework_Error_Warning::$enabled = true;
     \PHPUnit_Framework_Error_Notice::$enabled = true;
     self::$DI['app'] = self::$DI->share(function ($DI) {
         return $this->loadApp('/lib/Alchemy/Phrasea/Application/Root.php');
     });
     self::$DI['cli'] = self::$DI->share(function ($DI) {
         return $this->loadCLI();
     });
     self::$DI['local-guzzle'] = self::$DI->share(function ($DI) {
         return new Guzzle(self::$DI['app']['conf']->get('servername'));
     });
     self::$DI['client'] = self::$DI->share(function ($DI) {
         return new Client($DI['app'], []);
     });
     self::$DI['user'] = self::$DI->share(function ($DI) {
         return $DI['app']['manipulator.user']->getRepository()->find(self::$fixtureIds['user']['test_phpunit']);
     });
     self::$DI['user_1'] = self::$DI->share(function ($DI) {
         return $DI['app']['manipulator.user']->getRepository()->find(self::$fixtureIds['user']['user_1']);
     });
     self::$DI['user_2'] = self::$DI->share(function ($DI) {
         return $DI['app']['manipulator.user']->getRepository()->find(self::$fixtureIds['user']['user_2']);
     });
     self::$DI['user_3'] = self::$DI->share(function ($DI) {
         return $DI['app']['manipulator.user']->getRepository()->find(self::$fixtureIds['user']['user_3']);
     });
     self::$DI['user_guest'] = self::$DI->share(function ($DI) {
         return $DI['app']['manipulator.user']->getRepository()->find(self::$fixtureIds['user']['user_guest']);
     });
     self::$DI['user_notAdmin'] = self::$DI->share(function ($DI) {
         return $DI['app']['manipulator.user']->getRepository()->find(self::$fixtureIds['user']['test_phpunit_not_admin']);
     });
     self::$DI['user_alt1'] = self::$DI->share(function ($DI) {
         return $DI['app']['manipulator.user']->getRepository()->find(self::$fixtureIds['user']['test_phpunit_alt1']);
     });
     self::$DI['user_alt2'] = self::$DI->share(function ($DI) {
         return $DI['app']['manipulator.user']->getRepository()->find(self::$fixtureIds['user']['test_phpunit_alt2']);
     });
     self::$DI['user_template'] = self::$DI->share(function ($DI) {
         return $DI['app']['manipulator.user']->getRepository()->find(self::$fixtureIds['user']['user_template']);
     });
     self::$DI['registration_1'] = self::$DI->share(function ($DI) {
         return $DI['app']['manipulator.registration']->getRepository()->find(self::$fixtureIds['registrations']['registration_1']);
     });
     self::$DI['registration_2'] = self::$DI->share(function ($DI) {
         return $DI['app']['manipulator.registration']->getRepository()->find(self::$fixtureIds['registrations']['registration_2']);
     });
     self::$DI['registration_3'] = self::$DI->share(function ($DI) {
         return $DI['app']['manipulator.registration']->getRepository()->find(self::$fixtureIds['registrations']['registration_3']);
     });
     self::$DI['oauth2-app-user'] = self::$DI->share(function ($DI) {
         return new \API_OAuth2_Application($DI['app'], self::$fixtureIds['oauth']['user']);
     });
     self::$DI['oauth2-app-user_notAdmin'] = self::$DI->share(function ($DI) {
         return new \API_OAuth2_Application($DI['app'], self::$fixtureIds['oauth']['user_notAdmin']);
     });
     self::$DI['logger'] = self::$DI->share(function () {
         $logger = new Logger('tests');
         $logger->pushHandler(new NullHandler());
         return $logger;
     });
     self::$DI['collection'] = self::$DI->share(function ($DI) {
         return collection::get_from_base_id($DI['app'], self::$fixtureIds['collection']['coll']);
     });
     self::$DI['collection_no_access'] = self::$DI->share(function ($DI) {
         return collection::get_from_base_id($DI['app'], self::$fixtureIds['collection']['coll_no_access']);
     });
     self::$DI['collection_no_access_by_status'] = self::$DI->share(function ($DI) {
         return collection::get_from_base_id($DI['app'], self::$fixtureIds['collection']['coll_no_status']);
     });
     if (!self::$booted) {
         if (!self::$DI['app']['phraseanet.configuration-tester']->isInstalled()) {
             echo "Phraseanet is not set up\n";
             exit(1);
         }
         self::$fixtureIds = array_merge(self::$fixtureIds, json_decode(file_get_contents(__DIR__ . '/../fixtures.json'), true));
         self::resetUsersRights(self::$DI['app'], self::$DI['user']);
         self::resetUsersRights(self::$DI['app'], self::$DI['user_notAdmin']);
         self::$booted = true;
     }
     self::$DI['lazaret_1'] = self::$DI->share(function ($DI) {
         return $DI['app']['EM']->find('Phraseanet:LazaretFile', self::$fixtureIds['lazaret']['lazaret_1']);
     });
     foreach (range(1, 7) as $i) {
         self::$DI['record_' . $i] = self::$DI->share(function ($DI) use($i) {
             return new \record_adapter($DI['app'], self::$fixtureIds['databox']['records'], self::$fixtureIds['record']['record_' . $i]);
         });
     }
     foreach (range(1, 3) as $i) {
         self::$DI['record_story_' . $i] = self::$DI->share(function ($DI) use($i) {
             return new \record_adapter($DI['app'], self::$fixtureIds['databox']['records'], self::$fixtureIds['record']['record_story_' . $i]);
         });
     }
     self::$DI['record_no_access_resolver'] = self::$DI->protect(function () {
         $id = 'no_access';
         if (isset(self::$fixtureIds['records'][$id])) {
             return self::$fixtureIds['records'][$id];
         }
         self::$recordsInitialized[] = $id;
         $file = new File(self::$DI['app'], self::$DI['app']['mediavorus']->guess(__DIR__ . '/../files/cestlafete.jpg'), self::$DI['collection_no_access']);
         $record = record_adapter::createFromFile($file, self::$DI['app']);
         self::$DI['app']['subdef.generator']->generateSubdefs($record);
         self::$fixtureIds['records'][$id] = $record->get_record_id();
         return self::$fixtureIds['records'][$id];
     });
     self::$DI['record_no_access_by_status_resolver'] = self::$DI->protect(function () {
         $id = 'no_access_by_status';
         if (isset(self::$fixtureIds['records'][$id])) {
             return self::$fixtureIds['records'][$id];
         }
         self::$recordsInitialized[] = $id;
         $file = new File(self::$DI['app'], self::$DI['app']['mediavorus']->guess(__DIR__ . '/../files/cestlafete.jpg'), self::$DI['collection_no_access_by_status']);
         $record = record_adapter::createFromFile($file, self::$DI['app']);
         self::$DI['app']['subdef.generator']->generateSubdefs($record);
         self::$fixtureIds['records'][$id] = $record->get_record_id();
         return self::$fixtureIds['records'][$id];
     });
     self::$DI['record_no_access'] = self::$DI->share(function ($DI) {
         return new \record_adapter($DI['app'], self::$fixtureIds['databox']['records'], $DI['record_no_access_resolver']());
     });
     self::$DI['record_no_access_by_status'] = self::$DI->share(function ($DI) {
         return new \record_adapter($DI['app'], self::$fixtureIds['databox']['records'], $DI['record_no_access_by_status_resolver']());
     });
     if (!self::$testCaseBooted) {
         $this->bootTestCase();
     }
     self::$testCaseBooted = true;
 }
Example #10
0
 public function testSearchWithRecords()
 {
     $this->authenticate(self::$DI['app']);
     $record = \record_adapter::createFromFile(BorderFile::buildFromPathfile(__DIR__ . '/../../../files/cestlafete.jpg', self::$DI['collection'], self::$DI['app']), self::$DI['app']);
     $request = new Request(['search_type' => 0], [], [], [], [], ['HTTP_Accept' => 'application/json']);
     $result = $this->object->search($request);
     $this->assertEquals(200, $result->get_http_code());
     $this->assertEquals('application/json', $result->get_content_type());
     $this->assertTrue(is_array(json_decode($result->format(), true)));
     $data = json_decode($result->format(), true);
     $this->assertArrayHasKey('records', $data['response']['results']);
     $this->assertArrayHasKey('stories', $data['response']['results']);
     $found = false;
     foreach ($data['response']['results']['records'] as $retRecord) {
         if ($retRecord['record_id'] == $record->get_record_id() && $retRecord['databox_id'] == $record->get_sbas_id()) {
             $found = true;
             break;
         }
     }
     if (!$found) {
         $this->fail('unable to find the record back');
     }
 }
Example #11
0
 /**
  * Adds a record to Phraseanet
  *
  * @param  File           $file The package file
  * @return \record_adater
  */
 protected function createRecord(File $file, $nosubdef = false)
 {
     $element = \record_adapter::createFromFile($file, $this->app);
     $date = new \DateTime();
     $file->addAttribute(new MetadataAttr(new Metadata(new TfArchivedate(), new MonoValue($date->format('Y/m/d H:i:s')))));
     $file->addAttribute(new MetadataAttr(new Metadata(new TfRecordid(), new MonoValue($element->get_record_id()))));
     $file->addAttribute(new MetadataAttr(new Metadata(new TfBasename(), new MonoValue(pathinfo($file->getOriginalName(), PATHINFO_BASENAME)))));
     $file->addAttribute(new MetadataAttr(new Metadata(new TfFilename(), new MonoValue(pathinfo($file->getOriginalName(), PATHINFO_FILENAME)))));
     $newMetadata = $file->getMedia()->getMetadatas()->toArray();
     foreach ($file->getAttributes() as $attribute) {
         switch ($attribute->getName()) {
             case AttributeInterface::NAME_METAFIELD:
                 $values = $attribute->getValue();
                 $value = $attribute->getField()->is_multi() ? new Multi($values) : new MonoValue(array_pop($values));
                 $tag = $attribute->getField()->get_tag();
                 if ($tag instanceof \Alchemy\Phrasea\Metadata\Tag\Nosource) {
                     $tag->setTagname($attribute->getField()->get_name());
                     $_meta = new Metadata($tag, $value);
                 } else {
                     $_meta = new Metadata($attribute->getField()->get_tag(), $value);
                 }
                 $newMetadata[] = $_meta;
                 break;
             case AttributeInterface::NAME_METADATA:
                 $newMetadata[] = $attribute->getValue();
                 break;
             case AttributeInterface::NAME_STATUS:
                 $element->set_binary_status(decbin(bindec($element->get_status()) | bindec($attribute->getValue())));
                 break;
             case AttributeInterface::NAME_STORY:
                 $story = $attribute->getValue();
                 if (!$story->hasChild($element)) {
                     $story->appendChild($element);
                 }
                 break;
         }
     }
     $this->app['phraseanet.metadata-setter']->replaceMetadata($newMetadata, $element);
     if (!$nosubdef) {
         $element->rebuild_subdefs();
     }
     return $element;
 }
Example #12
0
 /**
  * Adds a record to Phraseanet
  *
  * @param  File           $file The package file
  * @return \record_adater
  */
 protected function createRecord(File $file)
 {
     $element = \record_adapter::createFromFile($file, $this->app);
     $date = new \DateTime();
     $file->addAttribute(new MetadataAttr(new Metadata(new TfArchivedate(), new MonoValue($date->format('Y/m/d H:i:s')))));
     $file->addAttribute(new MetadataAttr(new Metadata(new TfRecordid(), new MonoValue($element->get_record_id()))));
     $metadatas = [];
     /**
      * @todo $key is not tagname but fieldname
      */
     $fieldToKeyMap = [];
     if (!$fieldToKeyMap) {
         foreach ($file->getCollection()->get_databox()->get_meta_structure() as $databox_field) {
             $tagname = $databox_field->get_tag()->getTagname();
             if (!isset($fieldToKeyMap[$tagname])) {
                 $fieldToKeyMap[$tagname] = [];
             }
             $fieldToKeyMap[$tagname][] = $databox_field->get_name();
         }
     }
     foreach ($file->getMedia()->getMetadatas() as $metadata) {
         $key = $metadata->getTag()->getTagname();
         if (!isset($fieldToKeyMap[$key])) {
             continue;
         }
         foreach ($fieldToKeyMap[$key] as $k) {
             if (!isset($metadatas[$k])) {
                 $metadatas[$k] = [];
             }
             $metadatas[$k] = array_merge($metadatas[$k], $metadata->getValue()->asArray());
         }
     }
     foreach ($file->getAttributes() as $attribute) {
         switch ($attribute->getName()) {
             /**
              * @todo implement METATAG aka metadata by fieldname (where as
              * current metadata is metadata by source.
              */
             case AttributeInterface::NAME_METAFIELD:
                 $key = $attribute->getField()->get_name();
                 if (!isset($metadatas[$key])) {
                     $metadatas[$key] = [];
                 }
                 $metadatas[$key] = array_merge($metadatas[$key], $attribute->getValue());
                 break;
             case AttributeInterface::NAME_METADATA:
                 $key = $attribute->getValue()->getTag()->getTagname();
                 if (!isset($fieldToKeyMap[$key])) {
                     continue;
                 }
                 foreach ($fieldToKeyMap[$key] as $k) {
                     if (!isset($metadatas[$k])) {
                         $metadatas[$k] = [];
                     }
                     $metadatas[$k] = array_merge($metadatas[$k], $attribute->getValue()->getValue()->asArray());
                 }
                 break;
             case AttributeInterface::NAME_STATUS:
                 $element->set_binary_status(decbin(bindec($element->get_status()) | bindec($attribute->getValue())));
                 break;
             case AttributeInterface::NAME_STORY:
                 $story = $attribute->getValue();
                 if (!$story->hasChild($element)) {
                     $story->appendChild($element);
                 }
                 break;
         }
     }
     $databox = $element->get_databox();
     $metas = [];
     foreach ($metadatas as $fieldname => $values) {
         foreach ($databox->get_meta_structure()->get_elements() as $databox_field) {
             if ($databox_field->get_name() == $fieldname) {
                 if ($databox_field->is_multi()) {
                     $tmpValues = [];
                     foreach ($values as $value) {
                         $tmpValues = array_merge($tmpValues, \caption_field::get_multi_values($value, $databox_field->get_separator()));
                     }
                     $values = array_unique($tmpValues);
                     foreach ($values as $value) {
                         if (!trim($value)) {
                             continue;
                         }
                         $metas[] = ['meta_struct_id' => $databox_field->get_id(), 'meta_id' => null, 'value' => $value];
                     }
                 } else {
                     $value = array_pop($values);
                     if (!trim($value)) {
                         continue;
                     }
                     $metas[] = ['meta_struct_id' => $databox_field->get_id(), 'meta_id' => null, 'value' => $value];
                 }
             }
         }
     }
     if ($metas) {
         $element->set_metadatas($metas, true);
     }
     $element->rebuild_subdefs();
     $element->reindex();
     return $element;
 }
 public function setUp()
 {
     parent::setUp();
     self::$DI = new \Pimple();
     ini_set('memory_limit', '4096M');
     error_reporting(-1);
     \PHPUnit_Framework_Error_Warning::$enabled = true;
     \PHPUnit_Framework_Error_Notice::$enabled = true;
     self::$DI['app'] = self::$DI->share(function ($DI) {
         return $this->loadApp($this->getApplicationPath());
     });
     self::$DI['cli'] = self::$DI->share(function ($DI) {
         return $this->loadCLI();
     });
     self::$DI['local-guzzle'] = self::$DI->share(function ($DI) {
         return new Guzzle(self::$DI['app']['conf']->get('servername'));
     });
     self::$DI['client'] = self::$DI->share(function ($DI) {
         return new Client($DI['app'], []);
     });
     self::$DI['feed_public'] = self::$DI->share(function ($DI) {
         return $DI['app']['repo.feeds']->find(self::$fixtureIds['feed']['public']['feed']);
     });
     self::$DI['feed_public_entry'] = self::$DI->share(function ($DI) {
         return $DI['app']['repo.feed-entries']->find(self::$fixtureIds['feed']['public']['entry']);
     });
     self::$DI['feed_public_token'] = self::$DI->share(function ($DI) {
         return $DI['app']['repo.feed-tokens']->find(self::$fixtureIds['feed']['public']['token']);
     });
     self::$DI['feed_private'] = self::$DI->share(function ($DI) {
         return $DI['app']['repo.feeds']->find(self::$fixtureIds['feed']['private']['feed']);
     });
     self::$DI['feed_private_entry'] = self::$DI->share(function ($DI) {
         return $DI['app']['repo.feed-entries']->find(self::$fixtureIds['feed']['private']['entry']);
     });
     self::$DI['feed_private_token'] = self::$DI->share(function ($DI) {
         return $DI['app']['repo.feed-tokens']->find(self::$fixtureIds['feed']['private']['token']);
     });
     self::$DI['basket_1'] = self::$DI->share(function ($DI) {
         return $DI['app']['repo.baskets']->find(self::$fixtureIds['basket']['basket_1']);
     });
     self::$DI['basket_2'] = self::$DI->share(function ($DI) {
         return $DI['app']['repo.baskets']->find(self::$fixtureIds['basket']['basket_2']);
     });
     self::$DI['basket_3'] = self::$DI->share(function ($DI) {
         return $DI['app']['repo.baskets']->find(self::$fixtureIds['basket']['basket_3']);
     });
     self::$DI['basket_4'] = self::$DI->share(function ($DI) {
         return $DI['app']['repo.baskets']->find(self::$fixtureIds['basket']['basket_4']);
     });
     self::$DI['token_1'] = self::$DI->share(function ($DI) {
         return $DI['app']['repo.tokens']->find(self::$fixtureIds['token']['token_1']);
     });
     self::$DI['token_2'] = self::$DI->share(function ($DI) {
         return $DI['app']['repo.tokens']->find(self::$fixtureIds['token']['token_2']);
     });
     self::$DI['token_invalid'] = self::$DI->share(function ($DI) {
         return $DI['app']['repo.tokens']->find(self::$fixtureIds['token']['token_invalid']);
     });
     self::$DI['token_validation'] = self::$DI->share(function ($DI) {
         return $DI['app']['repo.tokens']->find(self::$fixtureIds['token']['token_validation']);
     });
     $users = ['user' => 'test_phpunit', 'user_1' => 'user_1', 'user_2' => 'user_2', 'user_3' => 'user_3', 'user_guest' => 'user_guest', 'user_notAdmin' => 'test_phpunit_not_admin', 'user_alt1' => 'test_phpunit_alt1', 'user_alt2' => 'test_phpunit_alt2', 'user_template' => 'user_template'];
     $userFactory = function ($fixtureName) {
         if ('user_guest' === $fixtureName) {
             return function ($DI) use($fixtureName) {
                 return $DI['app']['repo.users']->find(self::$fixtureIds['user'][$fixtureName]);
             };
         }
         return function ($DI) use($fixtureName) {
             $user = $DI['app']['repo.users']->find(self::$fixtureIds['user'][$fixtureName]);
             self::resetUsersRights($DI['app'], $user);
             return $user;
         };
     };
     foreach ($users as $name => $fixtureName) {
         self::$DI[$name] = self::$DI->share($userFactory($fixtureName));
     }
     self::$DI['registration_1'] = self::$DI->share(function ($DI) {
         return $DI['app']['repo.registrations']->find(self::$fixtureIds['registrations']['registration_1']);
     });
     self::$DI['registration_2'] = self::$DI->share(function ($DI) {
         return $DI['app']['repo.registrations']->find(self::$fixtureIds['registrations']['registration_2']);
     });
     self::$DI['registration_3'] = self::$DI->share(function ($DI) {
         return $DI['app']['repo.registrations']->find(self::$fixtureIds['registrations']['registration_3']);
     });
     self::$DI['oauth2-app-user'] = self::$DI->share(function ($DI) {
         return $DI['app']['repo.api-applications']->find(self::$fixtureIds['oauth']['user']);
     });
     self::$DI['webhook-event'] = self::$DI->share(function ($DI) {
         return $DI['app']['repo.webhook-event']->find(self::$fixtureIds['webhook']['event']);
     });
     self::$DI['oauth2-app-user-not-admin'] = self::$DI->share(function ($DI) {
         return $DI['app']['repo.api-applications']->find(self::$fixtureIds['oauth']['user-not-admin']);
     });
     self::$DI['oauth2-app-acc-user'] = self::$DI->share(function ($DI) {
         return $DI['app']['repo.api-accounts']->find(self::$fixtureIds['oauth']['acc-user']);
     });
     self::$DI['oauth2-app-acc-user-not-admin'] = self::$DI->share(function ($DI) {
         return $DI['app']['repo.api-accounts']->find(self::$fixtureIds['oauth']['acc-user-not-admin']);
     });
     self::$DI['logger'] = self::$DI->share(function () {
         $logger = new Logger('tests');
         $logger->pushHandler(new NullHandler());
         return $logger;
     });
     self::$DI['collection'] = self::$DI->share(function ($DI) {
         return collection::get_from_base_id($DI['app'], self::$fixtureIds['collection']['coll']);
     });
     self::$DI['collection_no_access'] = self::$DI->share(function ($DI) {
         return collection::get_from_base_id($DI['app'], self::$fixtureIds['collection']['coll_no_access']);
     });
     self::$DI['collection_no_access_by_status'] = self::$DI->share(function ($DI) {
         return collection::get_from_base_id($DI['app'], self::$fixtureIds['collection']['coll_no_status']);
     });
     self::$DI['lazaret_1'] = self::$DI->share(function ($DI) {
         return $DI['app']['orm.em']->find('Phraseanet:LazaretFile', self::$fixtureIds['lazaret']['lazaret_1']);
     });
     foreach (range(1, 7) as $i) {
         self::$DI['record_' . $i] = self::$DI->share(function ($DI) use($i) {
             return new \record_adapter($DI['app'], self::$fixtureIds['databox']['records'], self::$fixtureIds['record']['record_' . $i]);
         });
     }
     foreach (range(1, 3) as $i) {
         self::$DI['record_story_' . $i] = self::$DI->share(function ($DI) use($i) {
             return new \record_adapter($DI['app'], self::$fixtureIds['databox']['records'], self::$fixtureIds['record']['record_story_' . $i]);
         });
     }
     self::$DI['record_no_access_resolver'] = self::$DI->protect(function () {
         $id = 'no_access';
         if (isset(self::$fixtureIds['records'][$id])) {
             return self::$fixtureIds['records'][$id];
         }
         self::$recordsInitialized[] = $id;
         $file = new File(self::$DI['app'], self::$DI['app']['mediavorus']->guess(__DIR__ . '/../files/cestlafete.jpg'), self::$DI['collection_no_access']);
         $record = record_adapter::createFromFile($file, self::$DI['app']);
         self::$DI['app']['subdef.generator']->generateSubdefs($record);
         self::$fixtureIds['records'][$id] = $record->get_record_id();
         return self::$fixtureIds['records'][$id];
     });
     self::$DI['record_no_access_by_status_resolver'] = self::$DI->protect(function () {
         $id = 'no_access_by_status';
         if (isset(self::$fixtureIds['records'][$id])) {
             return self::$fixtureIds['records'][$id];
         }
         self::$recordsInitialized[] = $id;
         $file = new File(self::$DI['app'], self::$DI['app']['mediavorus']->guess(__DIR__ . '/../files/cestlafete.jpg'), self::$DI['collection_no_access_by_status']);
         $record = record_adapter::createFromFile($file, self::$DI['app']);
         self::$DI['app']['subdef.generator']->generateSubdefs($record);
         self::$fixtureIds['records'][$id] = $record->get_record_id();
         return self::$fixtureIds['records'][$id];
     });
     self::$DI['record_no_access'] = self::$DI->share(function ($DI) {
         return new \record_adapter($DI['app'], self::$fixtureIds['databox']['records'], $DI['record_no_access_resolver']());
     });
     self::$DI['record_no_access_by_status'] = self::$DI->share(function ($DI) {
         return new \record_adapter($DI['app'], self::$fixtureIds['databox']['records'], $DI['record_no_access_by_status_resolver']());
     });
     static $decodedFixtureIds;
     if (is_null($decodedFixtureIds)) {
         $decodedFixtureIds = json_decode(file_get_contents(sys_get_temp_dir() . '/fixtures.json'), true);
     }
     self::$fixtureIds = $decodedFixtureIds;
 }