| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669 | <?phpclass ValidatorTest extends PHPUnit_Framework_TestCase {	/**	 * Setup the test environment.	 */	public function setUp()	{		Config::set('database.default', 'sqlite');	}	/**	 * Tear down the test environment.	 */	public function tearDown()	{		Config::set('database.default', 'mysql');		$_FILES = array();	}	/**	 * Test the required validation rule.	 *	 * @group laravel	 */	public function testRequiredRule()	{		$input = array('name' => 'Taylor Otwell');		$rules = array('name' => 'required');		$this->assertTrue(Validator::make($input, $rules)->valid());		$input['name'] = '';		$this->assertFalse(Validator::make($input, $rules)->valid());		unset($input['name']);		$this->assertFalse(Validator::make($input, $rules)->valid());		$_FILES['name']['tmp_name'] = 'foo';		$this->assertTrue(Validator::make($_FILES, $rules)->valid());		$_FILES['name']['tmp_name'] = '';		$this->assertFalse(Validator::make($_FILES, $rules)->valid());	}	/**	 * Test the confirmed validation rule.	 *	 * @group laravel	 */	public function testTheConfirmedRule()	{		$input = array('password' => 'foo', 'password_confirmation' => 'foo');		$rules = array('password' => 'confirmed');		$this->assertTrue(Validator::make($input, $rules)->valid());		$input['password_confirmation'] = 'foo_bar';		$this->assertFalse(Validator::make($input, $rules)->valid());		unset($input['password_confirmation']);		$this->assertFalse(Validator::make($input, $rules)->valid());	}	/**	 * Test the different validation rule.	 *	 * @group laravel	 */	public function testTheDifferentRule()	{		$input = array('password' => 'foo', 'password_confirmation' => 'bar');		$rules = array('password' => 'different:password_confirmation');		$this->assertTrue(Validator::make($input, $rules)->valid());		$input['password_confirmation'] = 'foo';		$this->assertFalse(Validator::make($input, $rules)->valid());		unset($input['password_confirmation']);		$this->assertFalse(Validator::make($input, $rules)->valid());	}	/**	 * Test the accepted validation rule.	 *	 * @group laravel	 */	public function testTheAcceptedRule()	{		$input = array('terms' => '1');		$rules = array('terms' => 'accepted');		$this->assertTrue(Validator::make($input, $rules)->valid());		$input['terms'] = 'yes';		$this->assertTrue(Validator::make($input, $rules)->valid());		$input['terms'] = '2';		$this->assertFalse(Validator::make($input, $rules)->valid());		// The accepted rule implies required, so should fail if field not present.		unset($input['terms']);		$this->assertFalse(Validator::make($input, $rules)->valid());	}	/**	 * Test the numeric validation rule.	 *	 * @group laravel	 */	public function testTheNumericRule()	{		$input = array('amount' => '1.21');		$rules = array('amount' => 'numeric');		$this->assertTrue(Validator::make($input, $rules)->valid());		$input['amount'] = '1';		$this->assertTrue(Validator::make($input, $rules)->valid());		$input['amount'] = 1.2;		$this->assertTrue(Validator::make($input, $rules)->valid());		$input['amount'] = '1.2a';		$this->assertFalse(Validator::make($input, $rules)->valid());	}	/**	 * Test the integer validation rule.	 *	 * @group laravel	 */	public function testTheIntegerRule()	{		$input = array('amount' => '1');		$rules = array('amount' => 'integer');		$this->assertTrue(Validator::make($input, $rules)->valid());		$input['amount'] = '0';		$this->assertTrue(Validator::make($input, $rules)->valid());		$input['amount'] = 1.2;		$this->assertFalse(Validator::make($input, $rules)->valid());		$input['amount'] = '1.2a';		$this->assertFalse(Validator::make($input, $rules)->valid());	}	/**	 * Test the size validation rule.	 *	 * @group laravel	 */	public function testTheSizeRule()	{		$input = array('amount' => '1.21');		$rules = array('amount' => 'numeric|size:1.21');		$this->assertTrue(Validator::make($input, $rules)->valid());		$rules = array('amount' => 'numeric|size:1');		$this->assertFalse(Validator::make($input, $rules)->valid());		// If no numeric rule is on the field, it is treated as a string		$input = array('amount' => '111');		$rules = array('amount' => 'size:3');		$this->assertTrue(Validator::make($input, $rules)->valid());		$rules = array('amount' => 'size:4');		$this->assertFalse(Validator::make($input, $rules)->valid());		// The size rules checks kilobytes on files		$_FILES['photo']['tmp_name'] = 'foo';		$_FILES['photo']['size'] = 10240;		$rules = array('photo' => 'size:10');		$this->assertTrue(Validator::make($_FILES, $rules)->valid());		$_FILES['photo']['size'] = 14000;		$this->assertFalse(Validator::make($_FILES, $rules)->valid());	}	/**	 * Test the between validation rule.	 *	 * @group laravel	 */	public function testTheBetweenRule()	{		$input = array('amount' => '1.21');		$rules = array('amount' => 'numeric|between:1,2');		$this->assertTrue(Validator::make($input, $rules)->valid());		$rules = array('amount' => 'numeric|between:2,3');		$this->assertFalse(Validator::make($input, $rules)->valid());		// If no numeric rule is on the field, it is treated as a string		$input = array('amount' => '111');		$rules = array('amount' => 'between:1,3');		$this->assertTrue(Validator::make($input, $rules)->valid());		$rules = array('amount' => 'between:100,111');		$this->assertFalse(Validator::make($input, $rules)->valid());		// The size rules checks kilobytes on files		$_FILES['photo']['tmp_name'] = 'foo';		$_FILES['photo']['size'] = 10240;		$rules = array('photo' => 'between:9,11');		$this->assertTrue(Validator::make($_FILES, $rules)->valid());		$_FILES['photo']['size'] = 14000;		$this->assertFalse(Validator::make($_FILES, $rules)->valid());	}	/**	 * Test the between validation rule.	 *	 * @group laravel	 */	public function testTheMinRule()	{		$input = array('amount' => '1.21');		$rules = array('amount' => 'numeric|min:1');		$this->assertTrue(Validator::make($input, $rules)->valid());		$rules = array('amount' => 'numeric|min:2');		$this->assertFalse(Validator::make($input, $rules)->valid());		// If no numeric rule is on the field, it is treated as a string		$input = array('amount' => '01');		$rules = array('amount' => 'min:2');		$this->assertTrue(Validator::make($input, $rules)->valid());		$rules = array('amount' => 'min:3');		$this->assertFalse(Validator::make($input, $rules)->valid());		// The size rules checks kilobytes on files		$_FILES['photo']['tmp_name'] = 'foo';		$_FILES['photo']['size'] = 10240;		$rules = array('photo' => 'min:9');		$this->assertTrue(Validator::make($_FILES, $rules)->valid());		$_FILES['photo']['size'] = 8000;		$this->assertFalse(Validator::make($_FILES, $rules)->valid());	}	/**	 * Test the between validation rule.	 *	 * @group laravel	 */	public function testTheMaxRule()	{		$input = array('amount' => '1.21');		$rules = array('amount' => 'numeric|max:2');		$this->assertTrue(Validator::make($input, $rules)->valid());		$rules = array('amount' => 'numeric|max:1');		$this->assertFalse(Validator::make($input, $rules)->valid());		// If no numeric rule is on the field, it is treated as a string		$input = array('amount' => '01');		$rules = array('amount' => 'max:3');		$this->assertTrue(Validator::make($input, $rules)->valid());		$rules = array('amount' => 'max:1');		$this->assertFalse(Validator::make($input, $rules)->valid());		// The size rules checks kilobytes on files		$_FILES['photo']['tmp_name'] = 'foo';		$_FILES['photo']['size'] = 10240;		$rules = array('photo' => 'max:11');		$this->assertTrue(Validator::make($_FILES, $rules)->valid());		$_FILES['photo']['size'] = 140000;		$this->assertFalse(Validator::make($_FILES, $rules)->valid());	}	/**	 * Test the in validation rule.	 *	 * @group laravel	 */	public function testTheInRule()	{		$input = array('size' => 'L');		$rules = array('size' => 'in:S,M,L');		$this->assertTrue(Validator::make($input, $rules)->valid());		$input['size'] = 'XL';		$this->assertFalse(Validator::make($input, $rules)->valid());	}	/**	 * Test the not-in validation rule.	 *	 * @group laravel	 */	public function testTheNotInRule()	{		$input = array('size' => 'L');		$rules = array('size' => 'not_in:S,M,L');		$this->assertFalse(Validator::make($input, $rules)->valid());		$input['size'] = 'XL';		$this->assertTrue(Validator::make($input, $rules)->valid());	}	/**	 * Test the IP validation rule.	 *	 * @group laravel	 */	public function testTheIPRule()	{		$input = array('ip' => '192.168.1.1');		$rules = array('ip' => 'ip');		$this->assertTrue(Validator::make($input, $rules)->valid());		$input['ip'] = '192.111';		$this->assertFalse(Validator::make($input, $rules)->valid());	}	/**	 * Test the e-mail validation rule.	 *	 * @group laravel	 */	public function testTheEmailRule()	{		$input = array('email' => 'example@gmail.com');		$rules = array('email' => 'email');		$this->assertTrue(Validator::make($input, $rules)->valid());		$input['email'] = 'blas-asok';		$this->assertFalse(Validator::make($input, $rules)->valid());	}	/**	 * Test the URL validation rule.	 *	 * @group laravel	 */	public function testTheUrlRule()	{		$input = array('url' => 'http://www.google.com');		$rules = array('url' => 'url');		$this->assertTrue(Validator::make($input, $rules)->valid());		$input['url'] = 'blas-asok';		$this->assertFalse(Validator::make($input, $rules)->valid());	}	/**	 * Test the active URL validation rule.	 *	 * @group laravel	 */	public function testTheActiveUrlRule()	{		$input = array('url' => 'http://google.com');		$rules = array('url' => 'active_url');		$this->assertTrue(Validator::make($input, $rules)->valid());		$input['url'] = 'http://asdlk-aselkaiwels.com';		$this->assertFalse(Validator::make($input, $rules)->valid());	}	/**	 * Test the image validation rule.	 *	 * @group laravel	 */	public function testTheImageRule()	{		$_FILES['photo']['tmp_name'] = path('storage').'files/desert.jpg';		$rules = array('photo' => 'image');		$this->assertTrue(Validator::make($_FILES, $rules)->valid());		$_FILES['photo']['tmp_name'] = path('app').'routes.php';		$this->assertFalse(Validator::make($_FILES, $rules)->valid());	}	/**	 * Test the alpha validation rule.	 *	 * @group laravel	 */	public function testTheAlphaRule()	{		$input = array('name' => 'TaylorOtwell');		$rules = array('name' => 'alpha');		$this->assertTrue(Validator::make($input, $rules)->valid());		$input['name'] = 'Taylor Otwell';		$this->assertFalse(Validator::make($input, $rules)->valid());	}	/**	 * Test the alpha_num validation rule.	 *	 * @group laravel	 */	public function testTheAlphaNumRule()	{		$input = array('name' => 'TaylorOtwell1');		$rules = array('name' => 'alpha_num');		$this->assertTrue(Validator::make($input, $rules)->valid());		$input['name'] = 'Taylor Otwell';		$this->assertFalse(Validator::make($input, $rules)->valid());	}	/**	 * Test the alpha_num validation rule.	 *	 * @group laravel	 */	public function testTheAlphaDashRule()	{		$input = array('name' => 'Taylor-Otwell_1');		$rules = array('name' => 'alpha_dash');		$this->assertTrue(Validator::make($input, $rules)->valid());		$input['name'] = 'Taylor Otwell';		$this->assertFalse(Validator::make($input, $rules)->valid());	}	/**	 * Test the mimes validation rule.	 *	 * @group laravel	 */	public function testTheMimesRule()	{		$_FILES['file']['tmp_name'] = path('app').'routes.php';		$rules = array('file' => 'mimes:php,txt');		$this->assertTrue(Validator::make($_FILES, $rules)->valid());		$rules = array('file' => 'mimes:jpg,bmp');		$this->assertFalse(Validator::make($_FILES, $rules)->valid());		$_FILES['file']['tmp_name'] = path('storage').'files/desert.jpg';		$rules['file'] = 'mimes:jpg,bmp';		$this->assertTrue(Validator::make($_FILES, $rules)->valid());		$rules['file'] = 'mimes:txt,bmp';		$this->assertFalse(Validator::make($_FILES, $rules)->valid());	}	/**	 * Test the unique validation rule.	 *	 * @group laravel	 */	public function testUniqueRule()	{		$input = array('code' => 'ZZ');		$rules = array('code' => 'unique:validation_unique');		$this->assertTrue(Validator::make($input, $rules)->valid());		$input = array('code' => 'AR');		$this->assertFalse(Validator::make($input, $rules)->valid());		$rules = array('code' => 'unique:validation_unique,code,AR,code');		$this->assertTrue(Validator::make($input, $rules)->valid());	}	/**	 * Tests the exists validation rule.	 *	 * @group laravel	 */	public function testExistsRule()	{		$input = array('code' => 'TX');		$rules = array('code' => 'exists:validation_unique');		$this->assertTrue(Validator::make($input, $rules)->valid());		$input['code'] = array('TX', 'NY');		$rules = array('code' => 'exists:validation_unique,code');		$this->assertTrue(Validator::make($input, $rules)->valid());		$input['code'] = array('TX', 'XX');		$this->assertFalse(Validator::make($input, $rules)->valid());		$input['code'] = 'XX';		$this->assertFalse(Validator::make($input, $rules)->valid());	}	/**	 * Test that the validator sets the correct messages.	 *	 * @group laravel	 */	public function testCorrectMessagesAreSet()	{		$lang = require path('app').'language/en/validation.php';			$input = array('email' => 'example-foo');		$rules = array('name' => 'required', 'email' => 'required|email');		$v = Validator::make($input, $rules);		$v->valid();		$messages = $v->errors;		$this->assertInstanceOf('Laravel\\Messages', $messages);		$this->assertEquals(str_replace(':attribute', 'name', $lang['required']), $messages->first('name'));		$this->assertEquals(str_replace(':attribute', 'email', $lang['email']), $messages->first('email'));	}	/**	 * Test that custom messages are recognized.	 *	 * @group laravel	 */	public function testCustomMessagesAreRecognize()	{		$messages = array('required' => 'Required!');		$rules = array('name' => 'required');		$v = Validator::make(array(), $rules, $messages);		$v->valid();		$this->assertEquals('Required!', $v->errors->first('name'));		$messages['email_required'] = 'Email Required!';		$rules = array('name' => 'required', 'email' => 'required');		$v = Validator::make(array(), $rules, $messages);		$v->valid();		$this->assertEquals('Required!', $v->errors->first('name'));		$this->assertEquals('Email Required!', $v->errors->first('email'));		$rules = array('custom' => 'required');		$v = Validator::make(array(), $rules);		$v->valid();		$this->assertEquals('This field is required!', $v->errors->first('custom'));	}	/**	 * Test that size replacements are made on messages.	 *	 * @group laravel	 */	public function testNumericSizeReplacementsAreMade()	{		$lang = require path('app').'language/en/validation.php';				$input = array('amount' => 100);		$rules = array('amount' => 'numeric|size:80');		$v = Validator::make($input, $rules);		$v->valid();		$this->assertEquals(str_replace(array(':attribute', ':size'), array('amount', '80'), $lang['size']['numeric']), $v->errors->first('amount'));		$rules = array('amount' => 'numeric|between:70,80');		$v = Validator::make($input, $rules);		$v->valid();		$expect = str_replace(array(':attribute', ':min', ':max'), array('amount', '70', '80'), $lang['between']['numeric']);		$this->assertEquals($expect, $v->errors->first('amount'));		$rules = array('amount' => 'numeric|min:120');		$v = Validator::make($input, $rules);		$v->valid();		$expect = str_replace(array(':attribute', ':min'), array('amount', '120'), $lang['min']['numeric']);		$this->assertEquals($expect, $v->errors->first('amount'));		$rules = array('amount' => 'numeric|max:20');		$v = Validator::make($input, $rules);		$v->valid();		$expect = str_replace(array(':attribute', ':max'), array('amount', '20'), $lang['max']['numeric']);		$this->assertEquals($expect, $v->errors->first('amount'));	}	/**	 * Test that string size replacements are made on messages.	 *	 * @group laravel	 */	public function testStringSizeReplacementsAreMade()	{		$lang = require path('app').'language/en/validation.php';				$input = array('amount' => '100');		$rules = array('amount' => 'size:80');		$v = Validator::make($input, $rules);		$v->valid();		$this->assertEquals(str_replace(array(':attribute', ':size'), array('amount', '80'), $lang['size']['string']), $v->errors->first('amount'));		$rules = array('amount' => 'between:70,80');		$v = Validator::make($input, $rules);		$v->valid();		$expect = str_replace(array(':attribute', ':min', ':max'), array('amount', '70', '80'), $lang['between']['string']);		$this->assertEquals($expect, $v->errors->first('amount'));		$rules = array('amount' => 'min:120');		$v = Validator::make($input, $rules);		$v->valid();		$expect = str_replace(array(':attribute', ':min'), array('amount', '120'), $lang['min']['string']);		$this->assertEquals($expect, $v->errors->first('amount'));		$rules = array('amount' => 'max:2');		$v = Validator::make($input, $rules);		$v->valid();		$expect = str_replace(array(':attribute', ':max'), array('amount', '2'), $lang['max']['string']);		$this->assertEquals($expect, $v->errors->first('amount'));	}	/**	 * Test that string size replacements are made on messages.	 *	 * @group laravel	 */	public function testFileSizeReplacementsAreMade()	{		$lang = require path('app').'language/en/validation.php';				$_FILES['amount']['tmp_name'] = 'foo';		$_FILES['amount']['size'] = 10000;		$rules = array('amount' => 'size:80');		$v = Validator::make($_FILES, $rules);		$v->valid();		$this->assertEquals(str_replace(array(':attribute', ':size'), array('amount', '80'), $lang['size']['file']), $v->errors->first('amount'));		$rules = array('amount' => 'between:70,80');		$v = Validator::make($_FILES, $rules);		$v->valid();		$expect = str_replace(array(':attribute', ':min', ':max'), array('amount', '70', '80'), $lang['between']['file']);		$this->assertEquals($expect, $v->errors->first('amount'));		$rules = array('amount' => 'min:120');		$v = Validator::make($_FILES, $rules);		$v->valid();		$expect = str_replace(array(':attribute', ':min'), array('amount', '120'), $lang['min']['file']);		$this->assertEquals($expect, $v->errors->first('amount'));		$rules = array('amount' => 'max:2');		$v = Validator::make($_FILES, $rules);		$v->valid();		$expect = str_replace(array(':attribute', ':max'), array('amount', '2'), $lang['max']['file']);		$this->assertEquals($expect, $v->errors->first('amount'));	}	/**	 * Test that values get replaced in messages.	 *	 * @group laravel	 */	public function testValuesGetReplaced()	{		$lang = require path('app').'language/en/validation.php';		$_FILES['file']['tmp_name'] = path('storage').'files/desert.jpg';		$rules = array('file' => 'mimes:php,txt');		$v = Validator::make($_FILES, $rules);		$v->valid();		$expect = str_replace(array(':attribute', ':values'), array('file', 'php, txt'), $lang['mimes']);		$this->assertEquals($expect, $v->errors->first('file'));	}	/**	 * Test custom attribute names are replaced.	 *	 * @group laravel	 */	public function testCustomAttributesAreReplaced()	{		$lang = require path('app').'language/en/validation.php';		$rules = array('test_attribute' => 'required');		$v = Validator::make(array(), $rules);		$v->valid();		$expect = str_replace(':attribute', 'attribute', $lang['required']);		$this->assertEquals($expect, $v->errors->first('test_attribute'));	}}
 |