mirror of
https://github.com/lucaspalomodevelop/core.git
synced 2026-03-18 02:25:05 +00:00
(model) add AllOrNoneConstraint + unittests
This commit is contained in:
parent
fe68cec4b4
commit
dee4efb3ad
@ -0,0 +1,67 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright (C) 2016 Deciso B.V.
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
|
||||
* OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
namespace OPNsense\Base\Constraints;
|
||||
|
||||
/**
|
||||
* Class AllOrNoneConstraint all selected fields (at the same level) should contain data or none of them.
|
||||
* @package OPNsense\Base\Constraints
|
||||
*/
|
||||
class AllOrNoneConstraint extends BaseConstraint
|
||||
{
|
||||
/**
|
||||
* Executes validation
|
||||
*
|
||||
* @param \Phalcon\Validation $validator
|
||||
* @param string $attribute
|
||||
* @return boolean
|
||||
*/
|
||||
public function validate(\Phalcon\Validation $validator, $attribute)
|
||||
{
|
||||
$node = $this->getOption('node');
|
||||
if ($node) {
|
||||
$nodeName = $node->getInternalXMLTagName();
|
||||
$parentNode = $node->getParentNode();
|
||||
$Fields = array_unique(array_merge(array($nodeName), $this->getOptionValueList('addFields')));
|
||||
$countEmpty = 0;
|
||||
$countNotEmpty = 0;
|
||||
foreach ($Fields as $fieldname) {
|
||||
if (empty((string)$parentNode->$fieldname)) {
|
||||
$countEmpty++;
|
||||
} else {
|
||||
$countNotEmpty++;
|
||||
}
|
||||
}
|
||||
if ($countEmpty != 0 && $countNotEmpty != 0) {
|
||||
$this->appendMessage($validator, $attribute);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -34,5 +34,40 @@
|
||||
</optfield>
|
||||
</item>
|
||||
</arraytypes>
|
||||
<AllOrNone>
|
||||
<value1 type="TextField">
|
||||
<Constraints>
|
||||
<check001>
|
||||
<ValidationMessage>All fields should contain data or none of them</ValidationMessage>
|
||||
<type>OPNsense\Base\Constraints\AllOrNoneConstraint</type>
|
||||
<addFields>
|
||||
<field2>value2</field2>
|
||||
<field3>value3</field3>
|
||||
</addFields>
|
||||
</check001>
|
||||
</Constraints>
|
||||
</value1>
|
||||
<value2 type="TextField">
|
||||
<Constraints>
|
||||
<check001>
|
||||
<reference>value1.check001</reference>
|
||||
</check001>
|
||||
</Constraints>
|
||||
</value2>
|
||||
<value3 type="TextField">
|
||||
<Constraints>
|
||||
<check001>
|
||||
<reference>value1.check001</reference>
|
||||
</check001>
|
||||
</Constraints>
|
||||
</value3>
|
||||
<value4 type="TextField">
|
||||
<Constraints>
|
||||
<check001>
|
||||
<reference>value1.check001</reference>
|
||||
</check001>
|
||||
</Constraints>
|
||||
</value4>
|
||||
</AllOrNone>
|
||||
</items>
|
||||
</model>
|
||||
|
||||
@ -264,4 +264,39 @@ class BaseModelTest extends \PHPUnit_Framework_TestCase
|
||||
}
|
||||
BaseModelTest::$model->serializeToConfig();
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testRunMigrations
|
||||
*/
|
||||
public function testAllOrNoneInitial()
|
||||
{
|
||||
BaseModelTest::$model->AllOrNone->value1 = "";
|
||||
BaseModelTest::$model->AllOrNone->value2 = "";
|
||||
BaseModelTest::$model->AllOrNone->value3 = "";
|
||||
BaseModelTest::$model->serializeToConfig();
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Exception
|
||||
* @expectedExceptionMessage All fields should contain data or none of them
|
||||
* @depends testAllOrNoneInitial
|
||||
*/
|
||||
public function testAllOrNoneNok()
|
||||
{
|
||||
BaseModelTest::$model->AllOrNone->value1 = "";
|
||||
BaseModelTest::$model->AllOrNone->value2 = "X";
|
||||
BaseModelTest::$model->AllOrNone->value3 = "";
|
||||
BaseModelTest::$model->serializeToConfig();
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testAllOrNoneNok
|
||||
*/
|
||||
public function testAllOrNoneOk()
|
||||
{
|
||||
BaseModelTest::$model->AllOrNone->value1 = "X1";
|
||||
BaseModelTest::$model->AllOrNone->value2 = "X2";
|
||||
BaseModelTest::$model->AllOrNone->value3 = "X3";
|
||||
BaseModelTest::$model->serializeToConfig();
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user