N°931: TagSet search (manage undefined values) unit tests

This commit is contained in:
Eric
2018-09-12 18:17:17 +02:00
parent 979095337b
commit d1ee7f4353
5 changed files with 73 additions and 15 deletions

View File

@@ -157,8 +157,7 @@ class CriterionToOQL extends CriterionConversionAbstract
{
$aValues = self::GetValues($aCriteria);
$sValue = self::GetValue($aValues, 0);
if (empty($sValue))
if (empty($sValue) && (!(isset($aCriteria['has_undefined'])) || !($aCriteria['has_undefined'])))
{
return "1";
}
@@ -183,17 +182,34 @@ class CriterionToOQL extends CriterionConversionAbstract
{
$aValues = self::GetValues($aCriteria);
$aRawValues = array();
$bHasUnDefined = isset($aCriteria['has_undefined']) ? $aCriteria['has_undefined'] : false;
for($i = 0; $i < count($aValues); $i++)
{
$aRawValues[] = self::GetValue($aValues, $i);
$sRawValue = self::GetValue($aValues, $i);
if (strlen($sRawValue) == 0)
{
$bHasUnDefined = true;
}
else
{
$aRawValues[] = $sRawValue;
}
}
$sValue = implode(' ', $aRawValues);
if (empty($sValue))
{
if ($bHasUnDefined)
{
return "({$sRef} = '')";
}
return "1";
}
if ($bHasUnDefined)
{
return "((({$sRef} MATCHES '{$sValue}') OR ({$sRef} = '')) AND 1)";
}
return "({$sRef} MATCHES '{$sValue}')";
}

View File

@@ -674,8 +674,18 @@ class CriterionToSearchForm extends CriterionConversionAbstract
{
case 'MATCHES':
// Nothing special to do
if (isset($aCriteria['has_undefined']) && $aCriteria['has_undefined'])
{
if (!isset($aCriteria['values']))
{
$aCriteria['values'] = array();
}
// Convention for 'undefined' tag set
$aCriteria['values'][] = array('value' => '', 'label' => Dict::S('Enum:Undefined'));
}
break;
case 'OR':
case 'ISNULL':
$aCriteria['operator'] = CriterionConversionAbstract::OP_EQUALS;
if (isset($aCriteria['has_undefined']) && $aCriteria['has_undefined'])
@@ -684,8 +694,21 @@ class CriterionToSearchForm extends CriterionConversionAbstract
{
$aCriteria['values'] = array();
}
// Convention for 'undefined' enums
$aCriteria['values'][] = array('value' => 'null', 'label' => Dict::S('Enum:Undefined'));
// Convention for 'undefined' tag set
$aCriteria['values'][] = array('value' => '', 'label' => Dict::S('Enum:Undefined'));
}
break;
case '=':
$aCriteria['operator'] = CriterionConversionAbstract::OP_EQUALS;
if (isset($aCriteria['has_undefined']) && $aCriteria['has_undefined'])
{
if (!isset($aCriteria['values']))
{
$aCriteria['values'] = array();
}
// Convention for 'undefined' tag set
$aCriteria['values'][] = array('value' => '', 'label' => Dict::S('Enum:Undefined'));
}
break;