<?php

/**
 * OrangeHRM is a comprehensive Human Resource Management (HRM) System that captures
 * all the essential functionalities required for any enterprise.
 * Copyright (C) 2006 OrangeHRM Inc., http://www.orangehrm.com
 *
 * OrangeHRM is free software; you can redistribute it and/or modify it under the terms of
 * the GNU General Public License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * OrangeHRM is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along with this program;
 * if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 * Boston, MA  02110-1301, USA
 */

/**
 * Test class ohrmValidatorSchemaCompare
 * @group core
 */
class ohrmValidatorSchemaCompareTest extends PHPUnit_Framework_TestCase {
    
    public function testDoClean() {
        
        // Check default functionality (same as base class)
        $validator = new ohrmValidatorSchemaCompare('from', 
                        sfValidatorSchemaCompare::LESS_THAN_EQUAL, 'to',
                        array('throw_global_error' => true));
        
        $values = array('from' => 100, 'to' => 200, 'a' => 100, 'toto' => 239);
        $cleaned = $validator->clean($values);
        $this->assertEquals($cleaned, $values);
        
        $values = array('from' => 201, 'to' => 200, 'a' => 100, 'toto' => 239);
        try {
            $cleaned = $validator->clean($values);
            $this->fail("Validation error expected");
        } catch (sfValidatorError $error) {
            // expected.
        }        
    }
    
    public function testDoCleanSkipIfOneEmpty() {
        // Check default functionality (same as base class)
        $validator = new ohrmValidatorSchemaCompare('from', 
                        sfValidatorSchemaCompare::LESS_THAN_EQUAL, 'to',
                        array('throw_global_error' => true));
        
        $values = array('from' => 100, 'to' => '', 'a' => 100, 'toto' => 239);
        try {
            $cleaned = $validator->clean($values);
            $this->fail("Validation error expected");
        } catch (sfValidatorError $error) {
            // expected.
        }        
        
        $validator = new ohrmValidatorSchemaCompare('from', 
                        sfValidatorSchemaCompare::LESS_THAN_EQUAL, 'to',
                        array('throw_global_error' => true,
                              'skip_if_one_empty' => true));
        $cleaned = $validator->clean($values);
        $this->assertEquals($cleaned, $values);                     
    }
    
    public function testDoCleanSkipIfBothEmpty() {
        
        // Check default functionality (same as base class)
        $validator = new ohrmValidatorSchemaCompare('from', 
                        sfValidatorSchemaCompare::IDENTICAL, 'to',
                        array('throw_global_error' => true));
        
        $values = array('to' => '', 'a' => 100, 'toto' => 239);
        try {
            $cleaned = $validator->clean($values);
            $this->fail("Validation error expected");
        } catch (sfValidatorError $error) {
            // expected.
        }        
        
        $validator = new ohrmValidatorSchemaCompare('from', 
                        sfValidatorSchemaCompare::IDENTICAL, 'to',
                        array('throw_global_error' => true,
                              'skip_if_both_empty' => true));
        $cleaned = $validator->clean($values);
        $this->assertEquals($cleaned, $values);         
    }
}

