[SearchEngine] Add configuration panel unit tests

This commit is contained in:
Romain Neutron
2012-10-30 14:58:24 +01:00
parent 95dff0e3c7
commit c265c3ef9d
9 changed files with 115 additions and 36 deletions

View File

@@ -4,14 +4,12 @@ namespace Alchemy\Phrasea\SearchEngine;
abstract class AbstractConfigurationPanel implements ConfigurationPanelInterface abstract class AbstractConfigurationPanel implements ConfigurationPanelInterface
{ {
abstract public function getName();
public function getConfigPathFile() public function getConfigPathFile()
{ {
return __DIR__ . '/../../../../config/'.$this->getName().'.json'; return __DIR__ . '/../../../../config/'.$this->getName().'.json';
} }
public function getAvailableDateFields($databoxes) public function getAvailableDateFields(array $databoxes)
{ {
$date_fields = array(); $date_fields = array();

View File

@@ -10,4 +10,12 @@ interface ConfigurationPanelInterface
public function get(Application $app, Request $request); public function get(Application $app, Request $request);
public function post(Application $app, Request $request); public function post(Application $app, Request $request);
public function getName();
public function getConfiguration();
public function saveConfiguration(array $configuration);
public function getAvailableDateFields(array $databoxes);
} }

View File

@@ -52,7 +52,7 @@ class ConfigurationPanel extends AbstractConfigurationPanel
public function getConfiguration() public function getConfiguration()
{ {
$configuration = @json_decode(file_get_contents(__DIR__ . '/../../../../../config/phrasea-engine.json'), true); $configuration = @json_decode(file_get_contents($this->getConfigPathFile()), true);
if (!is_array($configuration)) { if (!is_array($configuration)) {
$configuration = array(); $configuration = array();
@@ -69,4 +69,10 @@ class ConfigurationPanel extends AbstractConfigurationPanel
return $configuration; return $configuration;
} }
public function saveConfiguration(array $configuration)
{
file_put_contents($this->getConfigPathFile(), json_encode($configuration));
return $this;
}
} }

View File

@@ -5,6 +5,7 @@ namespace Alchemy\Phrasea\SearchEngine\SphinxSearch;
use Alchemy\Phrasea\SearchEngine\AbstractConfigurationPanel; use Alchemy\Phrasea\SearchEngine\AbstractConfigurationPanel;
use Alchemy\Phrasea\Application; use Alchemy\Phrasea\Application;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Finder\Finder;
class ConfigurationPanel extends AbstractConfigurationPanel class ConfigurationPanel extends AbstractConfigurationPanel
{ {
@@ -30,7 +31,7 @@ class ConfigurationPanel extends AbstractConfigurationPanel
$params = array( $params = array(
'configuration' => $configuration, 'configuration' => $configuration,
'configfile' => $this->generateSphinxConf($app['phraseanet.appbox']->get_databoxes(), $configuration), 'configfile' => $this->generateSphinxConf($app['phraseanet.appbox']->get_databoxes(), $configuration),
'charsets' => $this->get_available_charsets(), 'charsets' => $this->getAvailableCharsets(),
'date_fields' => $this->getAvailableDateFields($app['phraseanet.appbox']->get_databoxes()), 'date_fields' => $this->getAvailableDateFields($app['phraseanet.appbox']->get_databoxes()),
); );
@@ -95,14 +96,14 @@ class ConfigurationPanel extends AbstractConfigurationPanel
return $configuration; return $configuration;
} }
public function saveConfiguration($configuration) public function saveConfiguration(array $configuration)
{ {
file_put_contents($this->getConfigPathFile(), json_encode($configuration)); file_put_contents($this->getConfigPathFile(), json_encode($configuration));
return $this; return $this;
} }
public function get_available_charsets() public function getAvailableCharsets()
{ {
if (null !== $this->charsets) { if (null !== $this->charsets) {
return $this->charsets; return $this->charsets;
@@ -110,7 +111,7 @@ class ConfigurationPanel extends AbstractConfigurationPanel
$this->charsets = array(); $this->charsets = array();
$finder = new \Symfony\Component\Finder\Finder(); $finder = new Finder();
$finder->in(__DIR__ . '/Charset/')->files()->name('*.php'); $finder->in(__DIR__ . '/Charset/')->files()->name('*.php');
foreach ($finder as $file) { foreach ($finder as $file) {

View File

@@ -1,26 +0,0 @@
{% if app['request'].query.get('success') == '1' %}
<div class="alert alert-success">
<a class="close" data-dismiss="alert" href="#">×</a>
{% trans 'Successful update' %}
</div>
{% endif %}
<form class="well form-inline" method='post' action='/admin/sphinx/configuration/'>
<select name="charset_tables[]" multiple="multiple">
{% for charset, charset_obj in configuration.get_available_charsets() %}
<option value='{{ charset }}' {{ charset in options['charset_tables'] ? "selected='selected'" : "" }}>{{ charset_obj.get_name() }}</option>
{% endfor %}
</select>
<select name="libstemmer[]" multiple="multiple">
{% for stemme in configuration.get_available_libstemmer() %}
<option value='{{ stemme }}' {{ stemme in options['libstemmer'] ? "selected='selected'" : "" }}>{{ stemme }}</option>
{% endfor %}
</select>
<button class='btn btn-primary'>{% trans 'boutton::valider' %}</button>
</form>
<textarea style="width:100%;height:70%">
{{ configuration.get_configuration(options) }}
</textarea>

View File

@@ -0,0 +1,43 @@
<?php
namespace Alchemy\Phrasea\SearchEngine;
require_once __DIR__ . '/../../../PhraseanetPHPUnitAuthenticatedAbstract.class.inc';
abstract class ConfigurationPanelAbstractTest extends \PhraseanetPHPUnitAuthenticatedAbstract
{
abstract public function getPanel();
public function testGetName()
{
$this->assertInternalType('string', $this->getPanel()->getName());
}
public function testGetConfiguration()
{
$this->assertInternalType('array', $this->getPanel()->getConfiguration());
}
public function testSaveConfiguration()
{
$config = $this->getPanel()->getConfiguration();
$data = 'Yodelali' . mt_rand();
$config['test'] = $data;
$this->getPanel()->saveConfiguration($config);
$config = $this->getPanel()->getConfiguration();
$this->assertEquals($data, $config['test']);
}
public function testGetAvailableDateFields()
{
$dateFields = $this->getPanel()->getAvailableDateFields(self::$DI['app']['phraseanet.appbox']->get_databoxes());
$this->assertInternalType('array', $dateFields);
foreach ($dateFields as $dateField) {
$this->assertInternalType('string', $dateField);
}
}
}

View File

@@ -0,0 +1,16 @@
<?php
namespace Alchemy\Phrasea\SearchEngine;
use Alchemy\Phrasea\SearchEngine\Phrasea\PhraseaEngine;
use Alchemy\Phrasea\SearchEngine\Phrasea\ConfigurationPanel;
require_once __DIR__ . '/ConfigurationPanelAbstractTest.php';
class PhraseaConfigurationPanelTest extends ConfigurationPanelAbstractTest
{
public function getPanel()
{
return new ConfigurationPanel(new PhraseaEngine(self::$DI['app']));
}
}

View File

@@ -0,0 +1,35 @@
<?php
namespace Alchemy\Phrasea\SearchEngine;
use Alchemy\Phrasea\SearchEngine\SphinxSearch\SphinxSearchEngine;
use Alchemy\Phrasea\SearchEngine\SphinxSearch\ConfigurationPanel;
require_once __DIR__ . '/ConfigurationPanelAbstractTest.php';
class SphinxSearchConfigurationPanelTest extends ConfigurationPanelAbstractTest
{
public function getPanel()
{
return new ConfigurationPanel(new SphinxSearchEngine(self::$DI['app'], 'localhost', 9306, 'localhost', 9308));
}
public function testGetAVailableCharsets()
{
$charsets = $this->getPanel()->getAvailableCharsets();
$this->assertInternalType('array', $charsets);
foreach ($charsets as $name => $charset) {
$this->assertInternalType('string', $name);
$this->assertInstanceOf('Alchemy\Phrasea\SearchEngine\SphinxSearch\AbstractCharset', $charset);
}
}
public function testGenerateSphinxConf()
{
$conf = $this->getPanel()->generateSphinxConf();
$this->assertInternalType('string', $conf);
}
}

View File

@@ -32,8 +32,6 @@ class record_adapterTest extends PhraseanetPHPUnitAuthenticatedAbstract
} }
self::$updated = true; self::$updated = true;
} }
self::$initialized = true;
} }
/** /**