/**
* SCENARIO: re-index one journal (CLI)
* GIVEN I am on the command line
* WHEN I execute the tools/rebuildSearchIndex.php script
* AND I enter the path of a journal as command line argument
* THEN all articles of that journal will be deleted from
* the index and then re-indexed.
*
* SCENARIO: re-index all journals (CLI)
* GIVEN I am on the command line
* WHEN I execute the tools/rebuildSearchIndex.php script
* without parameters
* THEN all articles of all journals of the installation will
* be deleted from the index and then re-indexed.
*/
public function testReindexJournalsByCli()
{
// Delete all documents from the index. As we use the embedded server
// for testint we can use the well-known service parameters.
import('plugins/generic/lucene/classes/SolrWebService');
$solrWebService = new SolrWebService('http://localhost:8983/solr/ojs/search', 'admin', 'please change', 'test-inst');
$solrWebService->deleteArticlesFromIndex(1);
$solrWebService->deleteArticlesFromIndex(2);
$searchRequest = new SolrSearchRequest();
$searchRequest->addQueryFieldPhrase('query', '*:*');
$totalResults = null;
$solrWebService->retrieveResults($searchRequest, $totalResults);
self::assertEquals(0, $totalResults);
// Assemble the command line script name.
$scriptName = Core::getBaseDir() . '/tools/rebuildSearchIndex.php -d';
// Execute the script for one journal only.
$output = null;
exec("php {$scriptName} test", $output);
// Check the script output.
$expectedOutput = array('LucenePlugin: Clearing index \\.\\.\\. done', 'LucenePlugin: Indexing "test" \\. [0-9]+ articles indexed', 'LucenePlugin: Rebuilding dictionaries \\.\\.\\. done');
foreach ($output as $outputLine) {
$expectedRegex = array_shift($expectedOutput);
self::assertRegExp("/{$expectedRegex}/", $outputLine);
}
// Check the index.
$solrWebService->retrieveResults($searchRequest, $totalResults);
self::assertGreaterThan(0, $totalResults);
self::assertLessThan(37, $totalResults);
// Execute the script for all journals.
$output = null;
exec("php {$scriptName}", $output);
// Check the script output.
$expectedOutput = array('LucenePlugin: Clearing index \\.\\.\\. done', 'LucenePlugin: Indexing "lucene-test" \\. [0-9]+ articles indexed', 'LucenePlugin: Indexing "test" \\. [0-9]+ articles indexed');
foreach ($output as $outputLine) {
$expectedRegex = array_shift($expectedOutput);
self::assertRegExp("/{$expectedRegex}/", $outputLine);
}
// Rebuild the dictionaries only
$output = null;
exec("php {$scriptName} -d -n", $output);
// Check the script output.
$expectedRegex = 'LucenePlugin: Rebuilding dictionaries \\.\\.\\. done';
self::assertEquals(1, count($output));
self::assertRegExp("/{$expectedRegex}/", array_shift($output));
// Check the index.
$solrWebService->retrieveResults($searchRequest, $totalResults);
self::assertGreaterThanOrEqual(37, $totalResults);
}