N°659 PHPUnit to test uniqueness rule validity check... and debug tested method (woops ! unit test will save the world ;) )

This commit is contained in:
Pierre Goiffon
2018-10-30 17:15:08 +01:00
parent af92f58265
commit f3fd47a792
2 changed files with 85 additions and 17 deletions

View File

@@ -3074,8 +3074,8 @@ abstract class MetaModel
$MANDATORY_ATTRIBUTES = array('attributes');
$UNIQUENESS_MANDATORY_KEYS_NB = count($MANDATORY_ATTRIBUTES);
$bHasDisabledKey = false;
$bHasMissingMandatoryKey = false;
$iMissingMandatoryKeysNb = 0;
$bHasMissingMandatoryKey = true;
$iMissingMandatoryKeysNb = $UNIQUENESS_MANDATORY_KEYS_NB;
$bHasAllMandatoryKeysMissing = false;
$bHasNonDisabledKeys = false;
@@ -3086,6 +3086,12 @@ abstract class MetaModel
$bHasDisabledKey = true;
continue;
}
$bHasNonDisabledKeys = true;
if (in_array($sUniquenessRuleKey, $MANDATORY_ATTRIBUTES, true)) {
$bHasMissingMandatoryKey = false;
$iMissingMandatoryKeysNb--;
}
if (($sUniquenessRuleKey === 'attributes') && (!empty($aExistingClassFields)))
{
@@ -3097,21 +3103,6 @@ abstract class MetaModel
}
}
}
if (!$aUniquenessRuleProperty)
{
if (!in_array($sUniquenessRuleKey, $MANDATORY_ATTRIBUTES, true))
{
continue;
}
$bHasMissingMandatoryKey = true;
$iMissingMandatoryKeysNb++;
continue;
}
$bHasNonDisabledKeys = true;
}
if ($iMissingMandatoryKeysNb == $UNIQUENESS_MANDATORY_KEYS_NB)

View File

@@ -0,0 +1,77 @@
<?php
namespace Combodo\iTop\Test\UnitTest\Core;
use Combodo\iTop\Test\UnitTest\ItopTestCase;
/**
* Class UniquenessConstraintTest
*
* @since 2.6 N°659 uniqueness constraint
*
* @package Combodo\iTop\Test\UnitTest\Core
*/
class UniquenessConstraintTest extends ItopTestCase
{
protected function setUp()
{
parent::setUp();
require_once(APPROOT.'/core/metamodel.class.php');
require_once(APPROOT.'/core/coreexception.class.inc.php');
}
/**
* @covers MetaModel::CheckUniquenessRuleValidity
* @dataProvider testUniquenessRuleValidityCheckProvider
*
* @param bool $bIsRuleShouldBeValid
* @param bool $bIsRuleOverride
* @param array $aRuleProperties
*/
public function testUniquenessRuleValidityCheck($bIsRuleShouldBeValid, $bIsRuleOverride, $aRuleProperties)
{
$bRuleValidResult = true;
try
{
\MetaModel::CheckUniquenessRuleValidity($aRuleProperties, $bIsRuleOverride);
}
catch (\CoreUnexpectedValue $e)
{
$bRuleValidResult = false;
}
$this->assertEquals($bIsRuleShouldBeValid, $bRuleValidResult, "Validity test returned $bRuleValidResult");
}
public function testUniquenessRuleValidityCheckProvider()
{
return array(
'simplest rule' => array(true, false, array('attributes' => array('name'))),
'with all properties' => array(
true,
false,
array(
'attributes' => array('name'),
'filter' => 'name != \'\'',
'disabled' => false,
'is_blocking' => true,
),
),
'only disabled key without ancestor' => array(
false,
false,
array(
'disabled' => true,
),
),
'only disabled key with ancestor' => array(
true,
true,
array(
'disabled' => true,
),
),
);
}
}