FormFieldSuggestionTest: Add tests for nullable command argument

This commit is contained in:
raviks789 2023-12-13 17:46:46 +01:00
parent c0e870d543
commit 0ff6c8ee62
1 changed files with 150 additions and 0 deletions

View File

@ -0,0 +1,150 @@
<?php
namespace Tests\Icinga\Module\Director\Field;
use Icinga\Module\Director\Forms\IcingaObjectFieldForm;
use Icinga\Module\Director\Objects\DirectorDatafield;
use Icinga\Module\Director\Objects\IcingaHost;
use Icinga\Module\Director\Test\BaseTestCase;
use Icinga\Module\Director\Objects\IcingaCommand;
class IcingaObjectFieldFormTest extends BaseTestCase
{
/** @var string */
protected const COMMAND_NAME = 'icingaTestCommand';
/** @var string */
protected const DATAFIELD_NAME = 'dataFieldTest';
/** @var string */
protected const HOST_NAME = 'testHost';
/** @var ?DirectorDatafield */
protected $testDatafield = null;
/** @var ?IcingaCommand */
protected $testIcingaCommand = null;
/** @var IcingaHost */
private $testHost;
public function setUp(): void
{
if ($this->hasDb()) {
$db = $this->getDb();
$this->testDatafield = DirectorDatafield::create([
'varname' => self::DATAFIELD_NAME,
'caption' => 'Blah',
'description' => '',
'datatype' => 'Icinga\Module\Director\DataType\DataTypeArray',
'format' => 'json'
]);
$this->testDatafield->store($db);
$this->testIcingaCommand = IcingaCommand::create(
[
'object_name' => self::COMMAND_NAME,
'object_type' => 'object'
],
$db
);
$this->testIcingaCommand->store($db);
$this->testHost = IcingaHost::create([
'object_name' => self::HOST_NAME,
'object_type' => 'object',
'display_name' => 'Whatever'
], $this->getDb());
}
}
public function testFieldSuggestionsWithoutCheckCommand()
{
if ($this->skipForMissingDb()) {
return;
}
$db = $this->getDb();
$icingaHostFieldForm = (new IcingaObjectFieldForm())
->setDb($db)
->setIcingaObject($this->testHost);
$icingaHostFieldForm->setup();
/** @var array<string> $suggestions */
$suggestions = $icingaHostFieldForm->getElement('datafield_id')
->getAttrib('options');
array_shift($suggestions);
$this->assertEquals(
[
'Other available fields' => [
$this->testDatafield->get('id') => "Blah (dataFieldTest)"
]
],
$suggestions
);
}
public function testFieldSuggestionsWithCheckCommand()
{
if ($this->skipForMissingDb()) {
return;
}
$db = $this->getDb();
$this->testHost->check_command = self::COMMAND_NAME;
$icingaHostFieldForm = (new IcingaObjectFieldForm())
->setDb($db)
->setIcingaObject($this->testHost);
$icingaHostFieldForm->setup();
/** @var array<string> $suggestions */
$suggestions = $icingaHostFieldForm->getElement('datafield_id')
->getAttrib('options');
array_shift($suggestions);
$this->assertEquals(
[
'Other available fields' => [
$this->testDatafield->get('id') => "Blah (dataFieldTest)"
]
],
$suggestions
);
}
public function tearDown(): void
{
if ($this->hasDb()) {
$db = $this->getDb();
$this->deleteDatafields();
if (IcingaHost::exists(self::HOST_NAME, $db)) {
IcingaHost::load(self::HOST_NAME, $db)->delete();
}
if (IcingaCommand::exists(self::COMMAND_NAME, $db)) {
IcingaCommand::load(self::COMMAND_NAME, $db)->delete();
}
}
parent::tearDown();
}
protected function deleteDatafields()
{
$db = $this->getDb();
$dbAdapter = $db->getDbAdapter();
$query = $dbAdapter->select()
->from('director_datafield')
->where('varname = ?', self::DATAFIELD_NAME);
foreach (DirectorDatafield::loadAll($db, $query, 'id') as $datafield) {
$datafield->delete();
}
}
}