* */ /** * Created by PhpStorm. * User: Eric * Date: 08/03/2018 * Time: 16:46 */ namespace Combodo\iTop\Test\UnitTest\Application\Search; use Combodo\iTop\Application\Search\CriterionConversion\CriterionToOQL; use Combodo\iTop\Application\Search\CriterionConversion\CriterionToSearchForm; use Combodo\iTop\Test\UnitTest\ItopDataTestCase; class CriterionConversionTest extends ItopDataTestCase { /** * @throws Exception */ protected function setUp() { parent::setUp(); require_once(APPROOT."sources/application/search/criterionconversionabstract.class.inc.php"); } /** * @dataProvider ToOqlProvider */ public function testToOql($sJSONCriterion, $sExpectedOQL) { $sOql = CriterionToOQL::Convert( json_decode($sJSONCriterion, true) ); $this->debug($sOql); $this->assertEquals($sExpectedOQL, $sOql); } public function ToOqlProvider() { return array( '>' => array( '{ "ref": "UserRequest.start_date", "values": [ { "value": "2017-01-01", "label": "2017-01-01 00:00:00" } ], "operator": ">", "oql": "" }', "(`UserRequest`.`start_date` > '2017-01-01')" ), 'contains' => array( '{ "ref": "Contact.name", "values": [ { "value": "toto", "label": "toto" } ], "operator": "contains", "oql": "" }', "(`Contact`.`name` LIKE '%toto%')" ), 'starts_with' => array( '{ "ref": "Contact.name", "values": [ { "value": "toto", "label": "toto" } ], "operator": "starts_with", "oql": "" }', "(`Contact`.`name` LIKE 'toto%')" ), 'ends_with' => array( '{ "ref": "Contact.name", "values": [ { "value": "toto", "label": "toto" } ], "operator": "ends_with", "oql": "" }', "(`Contact`.`name` LIKE '%toto')" ), 'empty' => array( '{ "ref": "Contact.name", "values": [ { "value": "", "label": "" } ], "operator": "empty", "oql": "" }', "(`Contact`.`name` = '')" ), 'not_empty' => array( '{ "ref": "Contact.name", "values": [ { "value": "", "label": "" } ], "operator": "not_empty", "oql": "" }', "(`Contact`.`name` != '')" ), ); } /** * @dataProvider ToSearchFormProvider */ function testToSearchForm($aCriterion, $sExpectedOperator) { $aRes = CriterionToSearchForm::Convert($aCriterion); $this->debug($aRes); $this->assertEquals($sExpectedOperator, $aRes[0]['operator']); } function ToSearchFormProvider() { return array( '=' => array( json_decode('[ { "ref": "Contact.name", "widget": "string", "values": [ { "value": "toto", "label": "toto" } ], "operator": "=", "oql": "(`Contact`.`name` = \'toto\')" } ]', true), '=' ), 'starts_with' => array( json_decode('[ { "ref": "Contact.name", "widget": "string", "values": [ { "value": "toto%", "label": "toto%" } ], "operator": "LIKE", "oql": "(`Contact`.`name` LIKE \'toto%\')" } ]', true), 'starts_with' ), 'ends_with' => array( json_decode('[ { "ref": "Contact.name", "widget": "string", "values": [ { "value": "%toto", "label": "%toto" } ], "operator": "LIKE", "oql": "(`Contact`.`name` LIKE \'%toto\')" } ]', true), 'ends_with' ), 'contains' => array( json_decode('[ { "widget": "string", "ref": "Contact.name", "values": [ { "value": "%toto%", "label": "%toto%" } ], "operator": "LIKE", "oql": "(`Contact`.`name` LIKE \'%toto%\')" } ]', true), 'contains' ), 'empty1' => array( json_decode('[ { "widget": "string", "ref": "Contact.name", "values": [ { "value": "", "label": "" } ], "operator": "LIKE", "oql": "(`Contact`.`name` LIKE \'\')" } ]', true), 'empty' ), 'empty2' => array( json_decode('[ { "widget": "string", "ref": "Contact.name", "values": [ { "value": "", "label": "" } ], "operator": "=", "oql": "(`Contact`.`name` = \'\')" } ]', true), 'empty' ), 'not_empty' => array( json_decode('[ { "widget": "string", "ref": "Contact.name", "values": [ { "value": "", "label": "" } ], "operator": "!=", "oql": "(`Contact`.`name` != \'\')" } ]', true), 'not_empty' ), ); } }