<?php 
 
namespace Melody\Validation; 
 
use Melody\Validation\ValidationGroups\YamlParserStrategy; 
use Melody\Validation\ValidationGroups\ArrayParserStrategy; 
use Melody\Validation\ValidationGroups\PHPParserStrategy; 
use Melody\Validation\ValidationGroups\ValidationGroupsFactory; 
use Melody\Validation\ValidationGroups\ValidationGroups; 
use Melody\Validation\Common\Collections\ConstraintsCollection; 
use Melody\Validation\Validator as v; 
 
class ValidationGroupsTest extends \PHPUnit_Framework_TestCase 
{ 
 
    public function test_validation_groups_from_array() 
    { 
        $config['registering'] = array(
 
                'name' => v::maxLength(50),
 
                'email' => v::email()->maxLength(50),
 
                'username' => v::length(6, 12)->alnum()->noWhitespace(),
 
                'password' => v::length(6, 12)->containsSpecial(1)->containsLetter(3)->containsDigit(2)->noWhitespace()
 
        ); 
 
        $validationGroups = ValidationGroupsFactory::build(new ArrayParserStrategy($config)); 
        $this->assertInstanceOf('Melody\Validation\ValidationGroups\ValidationGroups', $validationGroups); 
 
        $input['name'] = "Marcelo Santos";
 
        $input['email'] = "[email protected]";
 
        $input['username'] = "marcelsud";
 
        $input['password'] = "pass@2013"; 
 
        $this->assertTrue($validationGroups->validate($input, "registering")); 
    } 
 
    public function test_validation_groups_custom_messages() 
    { 
        $config['registering']['email'] = v::email()->maxLength(50); 
        $config['updating']['email'] = v::email()->maxLength(10); 
 
        $validationGroups = ValidationGroupsFactory::build(new ArrayParserStrategy($config));
 
        $input['email'] = "marcelsud @gmail.com"; 
 
        $validationGroups->validate($input, "registering", array( 
                'email' => "'{{input}}' deve conter um email válido" 
        )); 
 
        $errors = $validationGroups->getViolations();
 
        $this->assertEquals($errors['email'], "'marcelsud @gmail.com' deve conter um email válido"); 
 
        $this->assertFalse($validationGroups->validate($input, "updating")); 
    } 
 
    public function test_validation_groups_from_php()
 
    {
 
        $validationGroups = ValidationGroupsFactory::build(new PHPParserStrategy(__DIR__ . '/../../Resources/config/validation.php'));
 
        $this->assertInstanceOf('Melody\Validation\ValidationGroups\ValidationGroups', $validationGroups);
 
    } 
 
    public function test_validation_groups_from_yml()
 
    {
 
        $validationGroups = ValidationGroupsFactory::build(new YamlParserStrategy(__DIR__ . '/../../Resources/config/validation.yml'));
 
        $this->assertInstanceOf('Melody\Validation\ValidationGroups\ValidationGroups', $validationGroups);
 
    } 
 
    public function test_validation_groups_import_file_not_found()
 
    { 
        $this->setExpectedException('Melody\Validation\Exceptions\InvalidFileException');
 
        $this->assertInstanceOf('Melody\Validation\Exceptions\InvalidFileException', ValidationGroupsFactory::build(new YamlParserStrategy("file/not/found")));
 
    } 
 
    public function test_validation_groups_import_file_not_readable()
 
    {
 
        $this->setExpectedException('Melody\Validation\Exceptions\InvalidFileException');
 
        $this->assertInstanceOf('Melody\Validation\Exceptions\InvalidFileException', ValidationGroupsFactory::build(new YamlParserStrategy(__DIR__ . '/../../Resources/config/empty_not_readable')));
 
    } 
 
    public function test_validation_groups_methods()
 
    { 
        $constraintsCollection = new ConstraintsCollection();
 
        $constraintsCollection->set('name', v::maxLength(50)); 
        $constraintsCollection->set('email', v::email()->maxLength(50)); 
 
        $validationGroups = new ValidationGroups(); 
        $validationGroups->add("registering", $constraintsCollection); 
 
        $this->assertTrue($validationGroups->has("registering")); 
        $this->assertInstanceOf('Melody\Validation\Common\Collections\ConstraintsCollection', $validationGroups->get("registering")); 
 
        $validationGroups->remove("registering"); 
        $this->assertFalse($validationGroups->has("registering")); 
 
        $this->setExpectedException('InvalidArgumentException'); 
        $this->assertInstanceOf('InvalidArgumentException', $validationGroups->get("registering"));
 
    } 
 
    public function test_validation_groups_import_not_accepted_file_format() 
    { 
        $this->setExpectedException('Melody\Validation\Exceptions\InvalidFileTypeException');
 
        $this->assertInstanceOf('Melody\Validation\Exceptions\InvalidFileTypeException', ValidationGroupsFactory::build(new YamlParserStrategy(__DIR__ . '/../../Resources/config/validation.ini'))); 
    } 
 
} 
 
 |