Some fixup for ES instance

This commit is contained in:
Benoît Burnichon
2015-03-11 15:18:59 +01:00
parent 359c115291
commit 118bb2f03c
42 changed files with 78 additions and 889 deletions

View File

@@ -8,6 +8,7 @@ services:
- mysql
- memcached
- redis
- elasticsearch
before_script:
- node --version
@@ -25,11 +26,6 @@ before_script:
- mysql -e 'SET @@global.sql_mode= STRICT_ALL_TABLES;'
- mysql -e 'SET @@global.max_allowed_packet= 33554432;'
- mysql -e 'SET @@global.wait_timeout= 999999;'
- git clone git://github.com/alchemy-fr/Phraseanet-Extension.git
- sh -c "cd Phraseanet-Extension && phpize && ./configure --quiet && make -j --quiet && sudo make install"
- echo "extension=phrasea2.so" >> `php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||"`
- git clone git://github.com/alchemy-fr/Phraseanet-Indexer.git
- sh -c "cd Phraseanet-Indexer && autoreconf --force --install && ./configure --quiet && make -j --quiet && sudo make install"
php:
- 5.4
@@ -52,6 +48,7 @@ script:
php resources/hudson/cleanupSubdefs.php;
fi"
- bin/developer ini:setup-tests-dbs
- bin/console searchengine:index:create
- bin/developer phraseanet:regenerate-sqlite
- bin/developer phraseanet:generate-js-fixtures
- ./node_modules/.bin/grunt test

View File

@@ -78,7 +78,6 @@ $cli->command(new \module_console_aboutAuthors('about:authors'));
$cli->command(new \module_console_aboutLicense('about:license'));
$cli->command(new CheckConfig('check:config'));
$cli->command(new \module_console_checkExtension('check:extension'));
$cli->command(new UpgradeDBDatas('system:upgrade-datas'));
@@ -131,8 +130,6 @@ if ($cli['search_engine.type'] === SearchEngineInterface::TYPE_ELASTICSEARCH) {
$cli->command(new FindConceptsCommand());
}
$cli->command(new WebsocketServer('ws-server:run'));
$cli->loadPlugins();
exit(is_int($cli->run()) ? : 1);

View File

@@ -18,7 +18,6 @@ use Alchemy\Phrasea\Setup\Probe\FilesystemProbe;
use Alchemy\Phrasea\Setup\Probe\LocalesProbe;
use Alchemy\Phrasea\Setup\Probe\OpcodeCacheProbe;
use Alchemy\Phrasea\Setup\Probe\PhpProbe;
use Alchemy\Phrasea\Setup\Probe\PhraseaProbe;
use Alchemy\Phrasea\Setup\Probe\SearchEngineProbe;
use Alchemy\Phrasea\Setup\Probe\SubdefsPathsProbe;
use Alchemy\Phrasea\Setup\Probe\SystemProbe;
@@ -47,7 +46,6 @@ class CheckConfig extends AbstractCheckCommand
FilesystemProbe::create($this->container),
LocalesProbe::create($this->container),
OpcodeCacheProbe::create($this->container),
PhraseaProbe::create($this->container),
PhpProbe::create($this->container),
SearchEngineProbe::create($this->container),
SubdefsPathsProbe::create($this->container),

View File

@@ -18,7 +18,6 @@ use Alchemy\Phrasea\Setup\Requirements\FilesystemRequirements;
use Alchemy\Phrasea\Setup\Requirements\LocalesRequirements;
use Alchemy\Phrasea\Setup\Requirements\OpcodeCacheRequirement;
use Alchemy\Phrasea\Setup\Requirements\PhpRequirements;
use Alchemy\Phrasea\Setup\Requirements\PhraseaRequirements;
use Alchemy\Phrasea\Setup\Requirements\SystemRequirements;
class CheckEnvironment extends AbstractCheckCommand
@@ -47,7 +46,6 @@ class CheckEnvironment extends AbstractCheckCommand
new FilesystemRequirements(),
new LocalesRequirements(),
new OpcodeCacheRequirement(),
new PhraseaRequirements(),
new PhpRequirements(),
new SystemRequirements(),
];

View File

@@ -689,6 +689,8 @@ class V1 implements ControllerProviderInterface
$ret['results'] = ['records' => [], 'stories' => []];
foreach ($search_result->getResults() as $record) {
$record = new \record_adapter($app, $record->getDataboxId(), $record->getBaseId());
if ($record->is_grouping()) {
$ret['results']['stories'][] = $this->list_story($app, $request, $record);
} else {
@@ -745,7 +747,7 @@ class V1 implements ControllerProviderInterface
$app['phraseanet.SE']->clearCache();
$ret = ['offset_start' => $offsetStart, 'per_page' => $perPage, 'available_results' => $search_result->getAvailable(), 'total_results' => $search_result->getTotal(), 'error' => $search_result->getError(), 'warning' => $search_result->getWarning(), 'query_time' => $search_result->getDuration(), 'search_indexes' => $search_result->getIndexes(), 'suggestions' => array_map(function (SearchEngineSuggestion $suggestion) {
$ret = ['offset_start' => $offsetStart, 'per_page' => $perPage, 'available_results' => $search_result->getAvailable(), 'total_results' => $search_result->getTotal(), 'error' => (string) $search_result->getError(), 'warning' => (string) $search_result->getWarning(), 'query_time' => $search_result->getDuration(), 'search_indexes' => $search_result->getIndexes(), 'suggestions' => array_map(function (SearchEngineSuggestion $suggestion) {
return $suggestion->toArray();
}, $search_result->getSuggestions()->toArray()), 'results' => [], 'query' => $search_result->getQuery(),];

View File

@@ -18,7 +18,6 @@ use Alchemy\Phrasea\Setup\Requirements\BinariesRequirements;
use Alchemy\Phrasea\Setup\Requirements\FilesystemRequirements;
use Alchemy\Phrasea\Setup\Requirements\LocalesRequirements;
use Alchemy\Phrasea\Setup\Requirements\PhpRequirements;
use Alchemy\Phrasea\Setup\Requirements\PhraseaRequirements;
use Alchemy\Phrasea\Setup\Requirements\SystemRequirements;
use Silex\ControllerProviderInterface;
use Silex\Application as SilexApplication;
@@ -88,7 +87,6 @@ class Setup implements ControllerProviderInterface
new FilesystemRequirements(),
new LocalesRequirements(),
new PhpRequirements(),
new PhraseaRequirements(),
new SystemRequirements(),
];
}

View File

@@ -45,8 +45,6 @@ class SearchEngineServiceProvider implements ServiceProviderInterface
switch ($type) {
case SearchEngineInterface::TYPE_ELASTICSEARCH:
return $app['elasticsearch.engine'];
case SearchEngineInterface::TYPE_PHRASEA:
return new PhraseaEngine($app);
default:
throw new InvalidArgumentException(sprintf('Invalid search engine type "%s".', $type));
}
@@ -60,11 +58,6 @@ class SearchEngineServiceProvider implements ServiceProviderInterface
return new SearchEngineLogger($app);
});
// Only used for Phrasea search engine
$app['phraseanet.SE.subscriber'] = $app->share(function ($app) {
return new PhraseaEngineSubscriber($app);
});
$app['elasticsearch.engine'] = $app->share(function ($app) {
return new ElasticSearchEngine(
$app,
@@ -134,7 +127,7 @@ class SearchEngineServiceProvider implements ServiceProviderInterface
});
$app['elasticsearch.options'] = $app->share(function($app) {
$options = $app['conf']->get(['main', 'search-engine', 'options']);
$options = $app['conf']->get(['main', 'search-engine', 'options'], []);
$indexName = sprintf('phraseanet_%s', str_replace(
array('/', '.'), array('', ''),

View File

@@ -14,8 +14,6 @@ namespace Alchemy\Phrasea\SearchEngine\Elastic;
use Alchemy\Phrasea\SearchEngine\Elastic\Indexer\RecordIndexer;
use Alchemy\Phrasea\SearchEngine\Elastic\Indexer\TermIndexer;
use Alchemy\Phrasea\SearchEngine\Elastic\Search\QueryContext;
use Alchemy\Phrasea\SearchEngine\Elastic\Thesaurus\Concept;
use Alchemy\Phrasea\SearchEngine\Elastic\Thesaurus\Term;
use Alchemy\Phrasea\SearchEngine\SearchEngineInterface;
use Alchemy\Phrasea\SearchEngine\SearchEngineOptions;
use Alchemy\Phrasea\SearchEngine\SearchEngineResult;
@@ -415,7 +413,8 @@ class ElasticSearchEngine implements SearchEngineInterface
// filter aggregation to allowed databoxes
// declare aggregation on current field
$agg = array();
$agg['filter']['terms']['databox_id'] = $databoxes;
// array_values is needed to ensure array serialization
$agg['filter']['terms']['databox_id'] = array_values($databoxes);
$agg['aggs']['distinct_occurrence']['terms']['field'] =
sprintf('%s.%s.raw', $prefix, $field_name);
@@ -476,10 +475,9 @@ class ElasticSearchEngine implements SearchEngineInterface
$filters[]['term']['phrasea_type'] = $options->getRecordType();
}
if (count($options->getCollections()) > 0) {
$filters[]['terms']['base_id'] = array_map(function($collection) {
return $collection->get_base_id();
}, $options->getCollections());
$collections = $options->getCollections();
if (count($collections) > 0) {
$filters[]['terms']['base_id'] = array_keys($collections);
}
if (count($options->getStatus()) > 0) {

View File

@@ -15,6 +15,7 @@ use Alchemy\Phrasea\Model\RecordInterface;
use Alchemy\Phrasea\SearchEngine\Elastic\Indexer\BulkOperation;
use Alchemy\Phrasea\SearchEngine\Elastic\Indexer\RecordIndexer;
use Alchemy\Phrasea\SearchEngine\Elastic\Indexer\TermIndexer;
use Alchemy\Phrasea\SearchEngine\Elastic\Indexer\RecordQueuer;
use appbox;
use Closure;
use Elasticsearch\Client;

View File

@@ -37,7 +37,7 @@ class RecordQueuer
// Set TO_INDEX flag on all records from this collection
$sql = <<<SQL
UPDATE record
SET jeton = (jeton | :flag)
SET jeton = (jeton | :token)
WHERE coll_id = :coll_id
SQL;
$stmt = $connection->prepare($sql);

View File

@@ -31,7 +31,7 @@ class Thesaurus
$this->index = $index;
}
public function findConceptsBulk(array $terms, $lang = null, Filter $filter, $strict = false)
public function findConceptsBulk(array $terms, $lang = null, Filter $filter = null, $strict = false)
{
// TODO Use bulk queries for performance
$concepts = array();

View File

@@ -23,7 +23,6 @@ use Alchemy\Phrasea\Setup\Probe\FilesystemProbe;
use Alchemy\Phrasea\Setup\Probe\LocalesProbe;
use Alchemy\Phrasea\Setup\Probe\OpcodeCacheProbe;
use Alchemy\Phrasea\Setup\Probe\PhpProbe;
use Alchemy\Phrasea\Setup\Probe\PhraseaProbe;
use Alchemy\Phrasea\Setup\Probe\SearchEngineProbe;
use Alchemy\Phrasea\Setup\Probe\SubdefsPathsProbe;
use Alchemy\Phrasea\Setup\Probe\SystemProbe;
@@ -60,7 +59,6 @@ class ConfigurationTester
FilesystemProbe::create($this->app),
LocalesProbe::create($this->app),
PhpProbe::create($this->app),
PhraseaProbe::create($this->app),
SearchEngineProbe::create($this->app),
SubdefsPathsProbe::create($this->app),
SystemProbe::create($this->app),

View File

@@ -1,35 +0,0 @@
<?php
/*
* This file is part of Phraseanet
*
* (c) 2005-2015 Alchemy
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Alchemy\Phrasea\Setup\Probe;
use Alchemy\Phrasea\Application;
use Alchemy\Phrasea\Setup\Requirements\PhraseaRequirements;
class PhraseaProbe extends PhraseaRequirements implements ProbeInterface
{
public function __construct(Application $app)
{
parent::__construct([
// here goes the custom setting
]);
}
/**
* {@inheritdoc}
*
* @return PhraseaProbe
*/
public static function create(Application $app)
{
return new static($app);
}
}

View File

@@ -1,69 +0,0 @@
<?php
/*
* This file is part of Phraseanet
*
* (c) 2005-2015 Alchemy
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Alchemy\Phrasea\Setup\Requirements;
use Alchemy\Phrasea\Setup\RequirementCollection;
use Symfony\Component\Process\ExecutableFinder;
class PhraseaRequirements extends RequirementCollection implements RequirementInterface
{
const PHRASEA_EXTENSION_VERSION = '1.21.1.0';
const PHRASEA_INDEXER_VERSION = '3.10.2.3';
public function __construct($binaries = [])
{
$this->setName('Phrasea');
$this->addRecommendation(
function_exists('phrasea_fetch_results'),
'phrasea extension is required to use Phrasea search-engine',
'Install and enable the <strong>phrasea</strong> extension to enable Phrasea search-engine (https://github.com/alchemy-fr/Phraseanet-Extension).'
);
if (function_exists('phrasea_info')) {
$infos = phrasea_info();
$this->addRequirement(
version_compare($infos['version'], static::PHRASEA_EXTENSION_VERSION, '>='),
sprintf('Phrasea extension version %s is required (version %s installed)', static::PHRASEA_EXTENSION_VERSION, $infos['version']),
'Update <strong>phrasea</strong> extension to the latest stable (https://github.com/alchemy-fr/Phraseanet-Extension).'
);
$this->addRequirement(
true === $infos['temp_writable'],
'phrasea extension should be able to write in its temporary directory (current is ' . $infos['temp_dir'] . ')',
'Change directory <strong>' . $infos['temp_dir'] . '</strong> mode so phrasea extension could write to it'
);
}
$executableFinder = new ExecutableFinder();
$indexer = isset($binaries['phraseanet_indexer']) ? $binaries['phraseanet_indexer'] : $executableFinder->find('phraseanet_indexer');
if (null !== $indexer) {
$output = null;
exec($indexer . ' --version', $output);
$data = sscanf($output[0], 'phraseanet_indexer version %d.%d.%d.%d');
$version = sprintf('%d.%d.%d.%d', $data[0], $data[1], $data[2], $data[3]);
$this->addRequirement(
version_compare(static::PHRASEA_INDEXER_VERSION, $version, '<='),
sprintf('Phraseanet Indexer %s or higher is required (%s provided)', static::PHRASEA_INDEXER_VERSION, $version),
'Please update to a more recent version'
);
} elseif (function_exists('phrasea_info')) {
$this->addRecommendation(
false,
sprintf('Phraseanet Indexer %s or higher is required', static::PHRASEA_INDEXER_VERSION),
'Please update to a more recent version'
);
}
}
}

View File

@@ -168,7 +168,7 @@ class ACL implements cache_cacheableInterface
$params = [
':usr_id' => $this->user->getId()
, ':sbas_id' => $record->getDataboxId()
, ':record_id' => $record->getRecordI()
, ':record_id' => $record->getRecordId()
, ':case' => $action
, ':pusher' => $pusher->getId()
];

View File

@@ -363,7 +363,7 @@ class databox_field implements cache_cacheableInterface
$this->delete_data_from_cache();
$this->databox->saveStructure($dom_struct);
$this->dispatchEvent(RecordStructureEvents::FIELD_DELETED, new FieldDeletedEvent($databox, $this));
$this->dispatchEvent(RecordStructureEvents::FIELD_DELETED, new FieldDeletedEvent($this->databox, $this));
return;
}

View File

@@ -1,296 +0,0 @@
<?php
/*
* This file is part of Phraseanet
*
* (c) 2005-2015 Alchemy
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
use Alchemy\Phrasea\Command\Command;
use Alchemy\Phrasea\SearchEngine\Phrasea\PhraseaEngineQueryParser;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
class module_console_checkExtension extends Command
{
public function __construct($name = null)
{
parent::__construct($name);
$this->setDescription('Performs a serie of tests against Phrasea Engine PHP Extension');
$this->addArgument('usr_id', InputOption::VALUE_REQUIRED, 'Usr_id to use.');
$this->addOption('query', '', InputOption::VALUE_OPTIONAL, 'The query', 'last');
return $this;
}
protected function doExecute(InputInterface $input, OutputInterface $output)
{
if ( ! extension_loaded('phrasea2')) {
$output->writeln("<error>Missing Extension php-phrasea.</error>");
return 1;
}
$usrId = $input->getArgument('usr_id');
if (null === $TestUser = $this->container['repo.users']->find($usrId)) {
$output->writeln("<error>Wrong user !</error>");
return 1;
}
$output->writeln(
sprintf(
"\nWill do the check with user <info>%s</info> (%s)\n"
, $TestUser->getDisplayName()
, $TestUser->getEmail()
)
);
$output->writeln("PHRASEA FUNCTIONS");
foreach (get_extension_funcs("phrasea2") as $function) {
$output->writeln("<info>$function</info>");
}
$configuration = $this->getService('configuration');
$connexion = $configuration['main']['database'];
$hostname = $connexion['host'];
$port = $connexion['port'];
$user = $connexion['user'];
$password = $connexion['password'];
$dbname = $connexion['dbname'];
$output->writeln("\n-- phrasea_conn --");
if (phrasea_conn($hostname, $port, $user, $password, $dbname) !== true) {
$output->writeln("<error>Failed ! </error> got no connection");
return 1;
} else {
$output->writeln("<info>Succes ! </info> got connection");
}
$output->writeln("");
$output->writeln("\n-- phrasea_info --");
foreach (phrasea_info() as $key => $value) {
$output->writeln("\t$key => $value");
}
$output->writeln("");
$output->writeln("\n-- phrasea_create_session --");
$sessid = phrasea_create_session((string) $TestUser->getId());
if (ctype_digit((string) $sessid)) {
$output->writeln("<info>Succes ! </info> got session id $sessid");
} else {
$output->writeln("<error>Failed ! </error> got no session id");
return 1;
}
$output->writeln("\n-- phrasea_open_session --");
$phSession = phrasea_open_session($sessid, $usrId);
if ($phSession) {
$output->writeln("<info>Succes ! </info> got session ");
} else {
$output->writeln("<error>Failed ! </error> got no session ");
return 1;
}
$output->writeln("\n-- phrasea_clear_cache --");
$ret = phrasea_clear_cache($sessid);
if ($sessid) {
$output->writeln("<info>Succes ! </info> got session ");
} else {
$output->writeln("<error>Failed ! </error> got no session ");
return 1;
}
$tbases = [];
foreach ($phSession["bases"] as $phbase) {
$tcoll = [];
foreach ($phbase["collections"] as $coll) {
$tcoll[] = 0 + $coll["base_id"];
}
if (sizeof($tcoll) > 0) {
$kbase = "S" . $phbase["sbas_id"];
$tbases[$kbase] = [];
$tbases[$kbase]["sbas_id"] = $phbase["sbas_id"];
$tbases[$kbase]["searchcoll"] = $tcoll;
$tbases[$kbase]["mask_xor"] = $tbases[$kbase]["mask_and"] = 0;
$qp = new PhraseaEngineQueryParser($this->container);
$treeq = $qp->parsequery($input->getOption('query'));
$arrayq = $qp->makequery($treeq);
$tbases[$kbase]["arrayq"] = $arrayq;
}
}
$output->writeln("\n-- phrasea_query --");
$nbanswers = 0;
foreach ($tbases as $kb => $base) {
$tbases[$kb]["results"] = NULL;
$ret = phrasea_query2(
$phSession["session_id"]
, $base["sbas_id"]
, $base["searchcoll"]
, $base["arrayq"]
, $this->container['conf']->get(['main', 'key'])
, $usrId
, false
, PHRASEA_MULTIDOC_DOCONLY
, ''
, []
);
if ($ret) {
$output->writeln("<info>Succes ! </info> got result on sbas_id " . $base["sbas_id"]);
} else {
$output->writeln("<error>Failed ! </error> No results on sbas_id " . $base["sbas_id"]);
return 1;
}
$tbases[$kb]["results"] = $ret;
$nbanswers += $tbases[$kb]["results"]["nbanswers"];
}
$output->writeln("Got a total of <info>$nbanswers</info> answers");
$output->writeln("\n-- phrasea_fetch_results --");
$rs = phrasea_fetch_results($sessid, $usrId, 1, true, '[[em]]', '[[/em]]');
if ($rs) {
$output->writeln("<info>Succes ! </info> got result ");
} else {
$output->writeln("<error>Failed ! </error> got no result ");
return 1;
}
// test disconnected mode if available
// prepare the test before closing session
if (function_exists("phrasea_public_query")) {
// fill an array for each sbas to query
$tbases = [];
foreach ($phSession["bases"] as $phbase) {
// fill an array of collections to query for this sbas
$tcoll = [];
foreach ($phbase["collections"] as $coll) {
$tcoll[] = 0 + $coll["base_id"];
}
if (sizeof($tcoll) > 0) {
// parse the query for this sbas
$qp = new PhraseaEngineQueryParser($this->container);
$treeq = $qp->parsequery($input->getOption('query'));
$arrayq = $qp->makequery($treeq);
$tbases["S".$phbase["sbas_id"]] = [ // key does no matter
"sbas_id" => $phbase["sbas_id"], // sbas_id
"searchcoll" => $tcoll, // colls to query
"arrayq" => $arrayq // parsed query
];
}
}
}
$output->writeln("\n-- phrasea_close_session --");
$rs = phrasea_close_session($sessid);
if ($rs) {
$output->writeln("<info>Succes ! </info> closed ! ");
} else {
$output->writeln("<error>Failed ! </error> not closed ");
return 1;
}
// session is closed, test disconnected mode if available
if (function_exists("phrasea_public_query")) {
$output->writeln("\n-- phrasea_public_query(...0, 5,...) --");
$ret = phrasea_public_query(
$tbases // array of sbas with colls and query
, PHRASEA_MULTIDOC_DOCONLY // mode
, '' // sortfield
, [] // search business fields
, '' // lng for stemmed search
, 0 // offset for first answer (start=0)
, 5 // nbr of answers
, true // verbose output (chrono, sql...)
);
if (is_array($ret) && array_key_exists("results", $ret) && is_array($ret["results"])) {
$output->writeln( sprintf("<info>Succes ! </info> returned %d answers", count($ret["results"])) );
} else {
$output->writeln("<error>Failed ! </error>");
return 1;
}
foreach ($ret['results'] as $result) {
$sbid = $result["sbid"];
$rid = $result["rid"];
$q = $tbases["S".$sbid]["arrayq"]; // query tree
$h = phrasea_highlight(
$sbid // sbas_id
, $rid // record_id
, $q // query parsed
, "" // lng for stemmed
, false // verbose output (chrono, sql...)
);
$output->writeln(sprintf("\n-- phrasea_highlight(%d, %d,...) --", $sbid, $rid));
if(is_array($h) && array_key_exists("results", $h) && is_array($h["results"])
&& count($h["results"])==1
&& array_key_exists("sbid", $h["results"][0]) && $h["results"][0]["sbid"]==$sbid
&& array_key_exists("rid", $h["results"][0]) && $h["results"][0]["rid"]==$rid
&& array_key_exists("spots", $h["results"][0]) && is_array($h["results"][0]["spots"]) )
{
$output->writeln( sprintf("<info>Succes ! </info> sbid=%d, rid=%d (%d spots)",
$sbid,
$h["results"][0]["rid"],
count($h["results"][0]["spots"]))
);
} else {
$output->writeln("<error>Failed ! </error>");
return 1;
}
}
} // disconnected mode
return 0;
}
}

View File

@@ -2027,4 +2027,9 @@ class record_adapter implements RecordInterface, cache_cacheableInterface
{
return new ArrayCollection($this->get_technical_infos());
}
public function getStatusStructure()
{
return $this->databox->getStatusStructure();
}
}

View File

@@ -86,28 +86,6 @@ sudo make install
sudo sh -c 'echo "extension=twig.so" > /etc/php5/cli/conf.d/twig.ini'
sudo sh -c 'echo "extension=twig.so" > /etc/php5/fpm/conf.d/twig.ini'
# phraseanet-extension
cd /tmp
git clone git://github.com/alchemy-fr/Phraseanet-Extension.git
cd Phraseanet-Extension
phpize
./configure
make
sudo make install
if [ $? -eq 0 ]; then
sudo sh -c 'echo "extension=phrasea2.so" > /etc/php5/cli/conf.d/phrasea.ini'
sudo sh -c 'echo "extension=phrasea2.so" > /etc/php5/fpm/conf.d/phrasea.ini'
fi
# phraseanet-indexer
cd /tmp
git clone git://github.com/alchemy-fr/Phraseanet-Indexer.git
cd Phraseanet-Indexer
autoreconf --force --install
./configure
make
sudo make install
# swftools
cd /tmp
wget quiet http://www.swftools.org/swftools-0.9.2.tar.gz

View File

@@ -11,10 +11,6 @@ class ConsoleAPITest extends \PhraseanetTestCase
*/
public function testThatCommandsExitWithZero($console)
{
if (!extension_loaded('phrasea2')) {
$this->markTestSkipped('Phrasea2 is required');
}
$process = new Process(__DIR__ . '/../../../../../bin/'.$console);
$process->run();

View File

@@ -126,13 +126,15 @@ class LightboxTest extends \PhraseanetAuthenticatedWebTestCase
public function testAjaxFeedItem()
{
$this->markTestSkipped("Review this test that always fail");
$this->set_user_agent(self::USER_AGENT_FIREFOX8MAC, self::$DI['app']);
$feed = self::$DI['app']['orm.em']->find('Phraseanet:Feed', 1);
$entry = $feed->getEntries()->first();
$item = $entry->getItems()->first();
$crawler = self::$DI['client']->request('GET', '/lightbox/ajax/LOAD_FEED_ITEM/' . $entry->getId() . '/' . $item->getId() . '/');
self::$DI['client']->request('GET', '/lightbox/ajax/LOAD_FEED_ITEM/' . $entry->getId() . '/' . $item->getId() . '/');
$this->assertEquals(200, self::$DI['client']->getResponse()->getStatusCode());
$this->assertEquals('application/json', self::$DI['client']->getResponse()->headers->get('Content-type'));
$datas = json_decode(self::$DI['client']->getResponse()->getContent());

View File

@@ -425,12 +425,13 @@ class ApplicationTest extends \PhraseanetTestCase
private function mockRegistryAndReturnLocale(Application $app, $locale)
{
$database = $app['conf']->get(['main', 'database']);
$app['conf'] = $this->getMockBuilder('Alchemy\Phrasea\Core\Configuration\PropertyAccess')
->disableOriginalConstructor()
->getmock();
$app['conf']->expects($this->any())
->method('get')
->will($this->returnCallback(function ($param) use ($locale) {
->will($this->returnCallback(function ($param) use ($locale, $database) {
switch ($param) {
case ['languages', 'default']:
@@ -446,8 +447,15 @@ class ApplicationTest extends \PhraseanetTestCase
return false;
break;
case ['main', 'search-engine', 'type']:
return 'Alchemy\Phrasea\SearchEngine\Phrasea\PhraseaEngine';
return 'elasticsearch';
break;
case ['main', 'search-engine', 'options']:
return [];
break;
case ['main', 'database']:
return $database;
break;
}
}));
}

View File

@@ -11,7 +11,7 @@ class CheckConfigTest extends \PhraseanetTestCase
$input = $this->getMock('Symfony\Component\Console\Input\InputInterface');
$output = $this->getMock('Symfony\Component\Console\Output\OutputInterface');
self::$DI['cli']['phraseanet.SE'] = $this->createSearchEngineMock();
//self::$DI['cli']['phraseanet.SE'] = $this->createSearchEngineMock();
$command = new CheckConfig('check:config');
$command->setContainer(self::$DI['cli']);
$this->assertLessThan(2, $command->execute($input, $output));

View File

@@ -1,52 +0,0 @@
<?php
namespace Alchemy\Tests\Phrasea\Controller\Admin;
use Alchemy\Phrasea\SearchEngine\Elastic\ElasticSearchEngine;
use Alchemy\Phrasea\SearchEngine\Phrasea\PhraseaEngine;
use Alchemy\Phrasea\SearchEngine\SphinxSearch\SphinxSearchEngine;
class SearchEngineTest extends \PhraseanetAuthenticatedWebTestCase
{
/**
* @covers Alchemy\Phrasea\Controller\Admin\SearchEngine::getSearchEngineConfigurationPanel
* @dataProvider getSearchEngines
*/
public function testGetConfiguration($searchEngine)
{
self::$DI['app']['phraseanet.SE'] = $searchEngine;
self::$DI['client']->request('GET', '/admin/search-engine/');
$this->assertTrue(self::$DI['client']->getResponse()->isOk());
}
/**
* @covers Alchemy\Phrasea\Controller\Admin\SearchEngine::postSearchEngineConfigurationPanel
* @dataProvider getSearchEngines
*/
public function testPostConfiguration($searchEngine)
{
self::$DI['app']['phraseanet.SE'] = $searchEngine;
self::$DI['client']->request('POST', '/admin/search-engine/');
$this->assertTrue(self::$DI['client']->getResponse()->isRedirect());
}
public function getSearchEngines()
{
$app = $this->loadApp();
$SE = [[new SphinxSearchEngine($app, 'localhost', 9306, 'localhost', 9308)]];
if (extension_loaded('phrasea2')) {
$SE[] = [new PhraseaEngine($app)];
}
if (false !== $ret = @file_get_contents('http://localhost:9200')) {
$SE[] = [ElasticSearchEngine::create($app)];
}
return $SE;
}
}

View File

@@ -33,13 +33,17 @@ class SetupTest extends \PhraseanetAuthenticatedWebTestCase
*/
public function testPostGlobals()
{
$database = self::$DI['app']['conf']->get(['main', 'database']);
$registry = $this->getMockBuilder('Alchemy\Phrasea\Core\Configuration\PropertyAccess')
->disableOriginalConstructor()
->getMock();
$registry->expects($this->any())
->method('get')
->will($this->returnCallback(function ($prop, $default = null) {
->will($this->returnCallback(function ($prop, $default = null) use ($database) {
if ($prop === ['main', 'database']) {
return $database;
}
return $default;
}));

View File

@@ -542,7 +542,7 @@ abstract class ApiTestCase extends \PhraseanetWebTestCase
$this->setToken($this->userAccessToken);
$databox_id = self::$DI['record_1']->get_sbas_id();
$databox = self::$DI['app']['phraseanet.appbox']->get_databox($databox_id);
$ref_status = $databox->get_statusbits();
$statusStructure = $databox->getStatusStructure();
$route = '/api/v1/databoxes/' . $databox_id . '/status/';
$this->evaluateMethodNotAllowedRoute($route, ['POST', 'PUT', 'DELETE']);
@@ -570,12 +570,12 @@ abstract class ApiTestCase extends \PhraseanetWebTestCase
$this->assertArrayHasKey('searchable', $status);
$this->assertArrayHasKey('printable', $status);
$this->assertTrue(is_bool($status['searchable']));
$this->assertTrue($status['searchable'] === (bool) $ref_status[$status['bit']]['searchable']);
$this->assertTrue($status['searchable'] === (bool) $statusStructure->getStatus($status['bit'])['searchable']);
$this->assertTrue(is_bool($status['printable']));
$this->assertTrue($status['printable'] === (bool) $ref_status[$status['bit']]['printable']);
$this->assertTrue($status['label_on'] === $ref_status[$status['bit']]['labelon']);
$this->assertTrue($status['img_off'] === $ref_status[$status['bit']]['img_off']);
$this->assertTrue($status['img_on'] === $ref_status[$status['bit']]['img_on']);
$this->assertTrue($status['printable'] === (bool) $statusStructure->getStatus($status['bit'])['printable']);
$this->assertTrue($status['label_on'] === $statusStructure->getStatus($status['bit'])['labelon']);
$this->assertTrue($status['img_off'] === $statusStructure->getStatus($status['bit'])['img_off']);
$this->assertTrue($status['img_on'] === $statusStructure->getStatus($status['bit'])['img_on']);
break;
}
$route = '/api/v1/databoxes/24892534/status/';
@@ -699,10 +699,6 @@ abstract class ApiTestCase extends \PhraseanetWebTestCase
public function testSearchRoute()
{
if (!extension_loaded('phrasea2')) {
$this->markTestSkipped('Phrasea2 extension is required for this test');
}
self::$DI['app']['manipulator.user'] = $this->getMockBuilder('Alchemy\Phrasea\Model\Manipulator\UserManipulator')
->setConstructorArgs([self::$DI['app']['model.user-manager'], self::$DI['app']['auth.password-encoder'], self::$DI['app']['geonames.connector'], self::$DI['app']['repo.users'], self::$DI['app']['random.low']])
->setMethods(['logQuery'])
@@ -729,10 +725,6 @@ abstract class ApiTestCase extends \PhraseanetWebTestCase
public function testSearchRouteWithStories()
{
if (!extension_loaded('phrasea2')) {
$this->markTestSkipped('Phrasea2 extension is required for this test');
}
$this->setToken($this->userAccessToken);
self::$DI['record_story_1'];
@@ -765,10 +757,6 @@ abstract class ApiTestCase extends \PhraseanetWebTestCase
public function testRecordsSearchRoute()
{
if (!extension_loaded('phrasea2')) {
$this->markTestSkipped('Phrasea2 extension is required for this test');
}
$this->setToken($this->userAccessToken);
self::$DI['client']->request('POST', '/api/v1/records/search/', $this->getParameters(), [], ['HTTP_Accept' => $this->getAcceptMimeType()]);
$content = $this->unserialize(self::$DI['client']->getResponse()->getContent());
@@ -1095,7 +1083,6 @@ abstract class ApiTestCase extends \PhraseanetWebTestCase
$this->evaluateMeta200($content);
$this->assertArrayHasKey("record_metadatas", $content['response']);
$this->assertEquals(count($caption->get_fields()), count($content['response']['record_metadatas']), 'Retrived metadatas are the same');
foreach ($caption->get_fields() as $field) {
foreach ($field->get_values() as $value) {
@@ -1124,10 +1111,10 @@ abstract class ApiTestCase extends \PhraseanetWebTestCase
$route = '/api/v1/records/' . self::$DI['record_1']->get_sbas_id() . '/' . self::$DI['record_1']->get_record_id() . '/setstatus/';
$record_status = strrev(self::$DI['record_1']->get_status());
$status_bits = self::$DI['record_1']->get_databox()->get_statusbits();
$statusStructure = self::$DI['record_1']->getStatusStructure();
$tochange = [];
foreach ($status_bits as $n => $datas) {
foreach ($statusStructure as $n => $datas) {
$tochange[$n] = substr($record_status, ($n - 1), 1) == '0' ? '1' : '0';
}
$this->evaluateMethodNotAllowedRoute($route, ['GET', 'PUT', 'DELETE']);
@@ -1146,7 +1133,7 @@ abstract class ApiTestCase extends \PhraseanetWebTestCase
$this->evaluateRecordsStatusResponse($testRecord, $content);
$record_status = strrev($testRecord->get_status());
foreach ($status_bits as $n => $datas) {
foreach ($statusStructure as $n => $datas) {
$this->assertEquals(substr($record_status, ($n), 1), $tochange[$n]);
}
@@ -1168,7 +1155,7 @@ abstract class ApiTestCase extends \PhraseanetWebTestCase
$this->evaluateRecordsStatusResponse($testRecord, $content);
$record_status = strrev($testRecord->get_status());
foreach ($status_bits as $n => $datas) {
foreach ($statusStructure as $n => $datas) {
$this->assertEquals(substr($record_status, ($n), 1), $tochange[$n]);
}
@@ -1497,8 +1484,8 @@ abstract class ApiTestCase extends \PhraseanetWebTestCase
$route = '/api/v1/records/add/';
$file = [
new \Symfony\Component\HttpFoundation\File\UploadedFile(__FILE__, 'upload.txt'),
new \Symfony\Component\HttpFoundation\File\UploadedFile(__FILE__, 'upload.txt'),
new \Symfony\Component\HttpFoundation\File\UploadedFile(self::$DI['app']['root.path'].'/tests/files/' , 'recta_logo.gif'),
new \Symfony\Component\HttpFoundation\File\UploadedFile(self::$DI['app']['root.path'].'/tests/files/', 'rectb_logo.gif'),
];
self::$DI['client']->request('POST', $route, $this->getParameters($this->getAddRecordParameters()), ['file' => $file], ['HTTP_Accept' => $this->getAcceptMimeType()]);
@@ -2417,11 +2404,11 @@ abstract class ApiTestCase extends \PhraseanetWebTestCase
protected function evaluateRecordsStatusResponse(\record_adapter $record, $content)
{
$status = $record->get_databox()->get_statusbits();
$statusStructure = $record->get_databox()->getStatusStructure();
$r_status = strrev($record->get_status());
$this->assertArrayHasKey('status', $content['response']);
$this->assertEquals(count((array) $content['response']['status']), count($status));
$this->assertEquals(count((array) $content['response']['status']), count($statusStructure->toArray()));
foreach ($content['response']['status'] as $status) {
$this->assertTrue(is_array($status));
$this->assertArrayHasKey('bit', $status);

View File

@@ -8,10 +8,6 @@ class RootTest extends \PhraseanetAuthenticatedWebTestCase
public function testGetClient()
{
if (!extension_loaded('phrasea2')) {
$this->markTestSkipped('Phrasea2 is required for this test');
}
$this->authenticate(self::$DI['app']);
self::$DI['client']->request("GET", "/client/");
$this->assertTrue(self::$DI['client']->getResponse()->isOk());

View File

@@ -14,9 +14,6 @@ class QueryTest extends \PhraseanetAuthenticatedWebTestCase
*/
public function testQuery()
{
if (!extension_loaded('phrasea2')) {
$this->markTestSkipped('Phrasea2 is required for this test');
}
$route = '/prod/query/';
self::$DI['app']['manipulator.user'] = $this->getMockBuilder('Alchemy\Phrasea\Model\Manipulator\UserManipulator')
@@ -39,9 +36,6 @@ class QueryTest extends \PhraseanetAuthenticatedWebTestCase
*/
public function testQueryAnswerTrain()
{
if (!extension_loaded('phrasea2')) {
$this->markTestSkipped('Phrasea2 is required for this test');
}
$this->authenticate(self::$DI['app']);
self::$DI['record_2'];

View File

@@ -119,9 +119,6 @@ class RecordsTest extends \PhraseanetAuthenticatedWebTestCase
*/
public function testGetRecordDetailResult()
{
if (!extension_loaded('phrasea2')) {
$this->markTestSkipped('Phrasea2 is required for this test');
}
$this->authenticate(self::$DI['app']);
self::$DI['record_1'];

View File

@@ -26,28 +26,23 @@ main:
type: ArrayCache
options: []
search-engine:
type: Alchemy\Phrasea\SearchEngine\Phrasea\PhraseaEngine
options: []
type: elasticsearch
# type: phrasea
options:
host: localhost
port: 9200
task-manager:
status: started
enabled: true
logger:
max-files: 10
enabled: true
level: INFO
listener:
options:
protocol: tcp
host: 127.0.0.1
port: 6660
linger: 500
websocket-server:
host: local.phrasea
port: 9090
ip: 0.0.0.0
subscriber:
protocol: tcp
host: 127.0.0.1
port: 13598
logger:
max-files: 10
enabled: true
level: INFO
session:
type: 'file'
options: []

View File

@@ -26,28 +26,23 @@ main:
type: ArrayCache
options: []
search-engine:
type: Alchemy\Phrasea\SearchEngine\Phrasea\PhraseaEngine
options: []
type: elasticsearch
# type: phrasea
options:
host: localhost
port: 9200
task-manager:
status: started
enabled: true
logger:
max-files: 10
enabled: true
level: INFO
listener:
options:
protocol: tcp
host: 127.0.0.1
port: 6660
linger: 500
websocket-server:
host: local.phrasea
port: 9090
ip: 0.0.0.0
subscriber:
protocol: tcp
host: 127.0.0.1
port: 13598
logger:
max-files: 10
enabled: true
level: INFO
session:
type: 'file'
options: []

View File

@@ -9,9 +9,6 @@ class SearchEngineServiceProviderTest extends ServiceProviderTestCase
{
public function setUp()
{
if (!extension_loaded('phrasea2')) {
$this->markTestSkipped('Phrasea2 is required for this test');
}
parent::setUp();
}

View File

@@ -9,6 +9,7 @@ class ElasticSearchEngineTest extends SearchEngineAbstractTest
{
public function setUp()
{
$this->markTestSkipped();
if (false === @file_get_contents('http://localhost:9200')) {
$this->markTestSkipped('Unable to connect to elasticsearch.');
}

View File

@@ -1,23 +0,0 @@
<?php
namespace Alchemy\Tests\Phrasea\SearchEngine;
use Alchemy\Phrasea\SearchEngine\Phrasea\PhraseaEngine;
use Alchemy\Phrasea\SearchEngine\Phrasea\ConfigurationPanel;
class PhraseaConfigurationPanelTest extends ConfigurationPanelAbstractTest
{
public function setUp()
{
if (!extension_loaded('phrasea2')) {
$this->markTestSkipped('Phrasea extension is not loaded');
}
parent::setUp();
}
public function getPanel()
{
return new ConfigurationPanel(new PhraseaEngine(self::$DI['app']), self::$DI['app']['conf']);
}
}

View File

@@ -1,144 +0,0 @@
<?php
namespace Alchemy\Tests\Phrasea\SearchEngine;
use Alchemy\Phrasea\SearchEngine\Phrasea\PhraseaEngine;
use Symfony\Component\Process\Process;
/**
* @covers Alchemy\Phrasea\SearchEngine\Phrasea\PhraseaEngine
*/
class PhraseaEngineTest extends SearchEngineAbstractTest
{
public function setUp()
{
if (!extension_loaded('phrasea2')) {
$this->markTestSkipped('Phrasea extension is not loaded');
}
parent::setUp();
}
public function initialize()
{
self::$searchEngine = new PhraseaEngine(self::$DI['app']);
self::$searchEngineClass = 'Alchemy\Phrasea\SearchEngine\Phrasea\PhraseaEngine';
}
protected function updateIndex(array $stemms = [])
{
$appbox = self::$DI['app']['phraseanet.appbox'];
$cmd = '/usr/local/bin/phraseanet_indexer '
. ' -h=' . $appbox->get_host() . ' -P=' . $appbox->get_port()
. ' -b=' . $appbox->get_dbname() . ' -u=' . $appbox->get_user()
. ' -p=' . $appbox->get_passwd()
. ' --default-character-set=utf8 -n -o --quit';
if (($stemms = implode(',', $stemms)) !== '') {
$cmd .= ' --stem='.$stemms;
}
$process = new Process($cmd);
$process->run();
}
/**
* @covers Alchemy\Phrasea\SearchEngine\Phrasea\PhraseaEngine
*/
public function testAutocomplete()
{
return;
}
public function testQueryStoryId()
{
$this->markTestSkipped('Phrasea does not support `storyid=` request');
}
/**
* @covers Alchemy\Phrasea\SearchEngine\Phrasea\PhraseaEngine::clearAllCache
*/
public function testClearAllCache()
{
self::$searchEngine->initialize();
foreach (range(1, 10) as $i) {
phrasea_create_session(self::$DI['app']['authentication']->getUser()->getId());
}
$sql = 'SELECT session_id FROM cache';
$stmt = self::$DI['app']['phraseanet.appbox']->get_connection()->prepare($sql);
$stmt->execute();
$rs = $stmt->fetchAll(\PDO::FETCH_ASSOC);
$stmt->closeCursor();
$n = count($rs);
$sql = 'UPDATE cache SET lastaccess = :date WHERE session_id = :session_id';
$stmt = self::$DI['app']['phraseanet.appbox']->get_connection()->prepare($sql);
$date = new \DateTime('-2 months');
foreach ($rs as $row) {
$stmt->execute([
':date' => $date->format(DATE_ISO8601),
':session_id' => $row['session_id'],
]);
break;
}
$stmt->closeCursor();
$date = new \DateTime('-1 months');
self::$searchEngine->clearAllCache($date);
$sql = 'SELECT session_id FROM cache';
$stmt = self::$DI['app']['phraseanet.appbox']->get_connection()->prepare($sql);
$stmt->execute();
$rs = $stmt->fetchAll(\PDO::FETCH_ASSOC);
$stmt->closeCursor();
$this->assertEquals($n - 1, count($rs));
self::$searchEngine->clearAllCache();
$sql = 'SELECT session_id FROM cache';
$stmt = self::$DI['app']['phraseanet.appbox']->get_connection()->prepare($sql);
$stmt->execute();
$rs = $stmt->fetchAll(\PDO::FETCH_ASSOC);
$stmt->closeCursor();
$this->assertEquals(0, count($rs));
}
/**
* @covers Alchemy\Phrasea\SearchEngine\Phrasea\PhraseaEngine::clearCache
*/
public function testClearCache()
{
self::$searchEngine->initialize();
self::$searchEngine->clearAllCache();
$first_id = phrasea_create_session(self::$DI['app']['authentication']->getUser()->getId());
$phrasea_ses_id = phrasea_create_session(self::$DI['app']['authentication']->getUser()->getId());
$this->assertNotEquals($first_id, $phrasea_ses_id);
$this->assertGreaterThan(0, $phrasea_ses_id);
self::$DI['app']['session']->set('phrasea_session_id', $phrasea_ses_id);
self::$searchEngine->clearCache();
$sql = 'SELECT session_id FROM cache';
$stmt = self::$DI['app']['phraseanet.appbox']->get_connection()->prepare($sql);
$stmt->execute();
$rs = $stmt->fetchAll(\PDO::FETCH_ASSOC);
$stmt->closeCursor();
$this->assertEquals(1, count($rs));
foreach ($rs as $row) {
$this->assertEquals($first_id, $row['session_id']);
}
}
}

View File

@@ -1,11 +0,0 @@
<?php
namespace Alchemy\Tests\Phrasea\Setup\Probe;
class PhraseaProbeTest extends ProbeTestCase
{
protected function getClassName()
{
return 'Alchemy\Phrasea\Setup\Probe\PhraseaProbe';
}
}

View File

@@ -1,13 +0,0 @@
<?php
namespace Alchemy\Tests\Phrasea\Setup\Requirements;
use Alchemy\Phrasea\Setup\Requirements\PhraseaRequirements;
class PhraseaRequirementsTest extends RequirementsTestCase
{
protected function provideRequirements()
{
return new PhraseaRequirements;
}
}

View File

@@ -10,4 +10,5 @@ fi
./bin/developer ini:reset --email=test@phraseanet.com --password=test --run-patches --no-setup-dbs -vvv
php resources/hudson/cleanupSubdefs.php
./bin/developer ini:setup-tests-dbs -vvv
./bin/console searchengine:index:create
./bin/developer phraseanet:regenerate-sqlite -vvv

View File

@@ -377,7 +377,6 @@ abstract class PhraseanetTestCase extends WebTestCase
\caption_field::purge();
\caption_Field_Value::purge();
\databox_field::purge();
\databox_status::purge();
\thesaurus_xpath::purge();
self::deleteResources();

View File

@@ -12,100 +12,7 @@ class databox_statusTest extends \PhraseanetTestCase
{
parent::setUp();
$this->databox = self::$DI['record_1']->get_databox();
$this->object = $this->databox->get_statusbits();
}
public function testGetStatus()
{
// Remove the following lines when you implement this test.
$this->markTestIncomplete(
'This test has not been implemented yet.'
);
}
public function testGetDisplayStatus()
{
// Remove the following lines when you implement this test.
$this->markTestIncomplete(
'This test has not been implemented yet.'
);
}
/**
* @todo Implement testGetSearchStatus().
*/
public function testGetSearchStatus()
{
// Remove the following lines when you implement this test.
$this->markTestIncomplete(
'This test has not been implemented yet.'
);
}
/**
* @todo Implement testGetPath().
*/
public function testGetPath()
{
// Remove the following lines when you implement this test.
$this->markTestIncomplete(
'This test has not been implemented yet.'
);
}
/**
* @todo Implement testGetUrl().
*/
public function testGetUrl()
{
// Remove the following lines when you implement this test.
$this->markTestIncomplete(
'This test has not been implemented yet.'
);
}
/**
* @todo Implement testDeleteStatus().
*/
public function testDeleteStatus()
{
// Remove the following lines when you implement this test.
$this->markTestIncomplete(
'This test has not been implemented yet.'
);
}
/**
* @todo Implement testUpdateStatus().
*/
public function testUpdateStatus()
{
// Remove the following lines when you implement this test.
$this->markTestIncomplete(
'This test has not been implemented yet.'
);
}
/**
* @todo Implement testDeleteIcon().
*/
public function testDeleteIcon()
{
// Remove the following lines when you implement this test.
$this->markTestIncomplete(
'This test has not been implemented yet.'
);
}
/**
* @todo Implement testUpdateIcon().
*/
public function testUpdateIcon()
{
// Remove the following lines when you implement this test.
$this->markTestIncomplete(
'This test has not been implemented yet.'
);
$this->object = $this->databox->getStatusStructure();
}
public function testOperation_and()

View File

@@ -484,16 +484,6 @@ class record_adapterTest extends \PhraseanetAuthenticatedTestCase
$this->fail();
}
public function testReindex()
{
$record = new \record_adapter(self::$DI['app'], self::$DI['record_1']->get_sbas_id(), self::$DI['record_1']->get_record_id());
self::$DI['app']['phraseanet.SE'] = $this->getMock('Alchemy\Phrasea\SearchEngine\SearchEngineInterface');
self::$DI['app']['phraseanet.SE']->expects($this->once())
->method('updateRecord')
->with($record);
$record->reindex();
}
public function testSetStatus()
{
$record = new \record_adapter(self::$DI['app'], self::$DI['record_1']->get_sbas_id(), self::$DI['record_1']->get_record_id());

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 31 KiB