AssignRenderer: test and fix contains rendering

fixes #803
This commit is contained in:
Thomas Gelf 2017-03-06 11:10:24 +01:00
parent bff76dad8e
commit a48e0c6dda
2 changed files with 41 additions and 8 deletions

View File

@ -60,14 +60,7 @@ class AssignRenderer
protected function renderEquals($column, $expression)
{
if ($column[0] === '"') {
// "me"=vars.users -> "me" in vars.users
return sprintf(
'%s in %s',
$column,
$expression
);
} elseif (substr($column, -7) === '.groups') {
if (substr($column, -7) === '.groups') {
return sprintf(
'%s in %s',
$expression,
@ -82,8 +75,21 @@ class AssignRenderer
}
}
protected function renderContains(FilterExpression $filter)
{
return sprintf(
'%s in %s',
$this->renderExpressionValue(json_decode($filter->getColumn())),
$filter->getExpression()
);
}
protected function renderFilterExpression(FilterExpression $filter)
{
if ($this->columnIsJson($filter)) {
return $this->renderContains($filter);
}
$column = $filter->getColumn();
$expression = $this->renderExpressionValue(json_decode($filter->getExpression()));
@ -160,6 +166,12 @@ class AssignRenderer
return IcingaConfigHelper::renderPhpValue($value);
}
protected function columnIsJson(FilterExpression $filter)
{
$col = $filter->getColumn();
return strlen($col) && $col[0] === '"';
}
protected function renderFilterChain(FilterChain $filter)
{
// TODO: brackets if deeper level?

View File

@ -54,6 +54,27 @@ class AssignRendererTest extends BaseTestCase
);
}
public function testWhetherFakeContainsOperatorRendersCorrectly()
{
$string = json_encode('member') . '=host.groups';
$expected = 'assign where "member" in host.groups';
$this->assertEquals(
$expected,
$this->renderer($string)->renderAssign()
);
$string = json_encode('member') . '=host.vars.some_array';
$expected = 'assign where "member" in host.vars.some_array';
$this->assertEquals(
$expected,
$this->renderer($string)->renderAssign()
);
}
protected function renderer($string)
{
return AssignRenderer::forFilter(Filter::fromQueryString($string));