/tests/Validation/ValidationValidatorTest.php

https://gitlab.com/ezeql/framework · PHP · 1143 lines · 901 code · 236 blank · 6 comment · 0 complexity · 330e4fe65bc12267816fba3b723ee171 MD5 · raw file

  1. <?php
  2. use Mockery as m;
  3. use Illuminate\Validation\Validator;
  4. use Symfony\Component\HttpFoundation\File\File;
  5. class ValidationValidatorTest extends PHPUnit_Framework_TestCase
  6. {
  7. public function tearDown()
  8. {
  9. m::close();
  10. }
  11. public function testSometimesWorksOnNestedArrays()
  12. {
  13. $trans = $this->getRealTranslator();
  14. $v = new Validator($trans, ['foo' => ['bar' => ['baz' => '']]], ['foo.bar.baz' => 'sometimes|required']);
  15. $this->assertFalse($v->passes());
  16. $this->assertEquals(['foo.bar.baz' => ['Required' => []]], $v->failed());
  17. $trans = $this->getRealTranslator();
  18. $v = new Validator($trans, ['foo' => ['bar' => ['baz' => 'nonEmpty']]], ['foo.bar.baz' => 'sometimes|required']);
  19. $this->assertTrue($v->passes());
  20. }
  21. public function testAfterCallbacksAreCalledWithValidatorInstance()
  22. {
  23. $trans = $this->getRealTranslator();
  24. $v = new Validator($trans, ['foo' => 'bar', 'baz' => 'boom'], ['foo' => 'Same:baz']);
  25. $v->setContainer(new Illuminate\Container\Container);
  26. $v->after(function ($validator) {
  27. $_SERVER['__validator.after.test'] = true;
  28. });
  29. $this->assertFalse($v->passes());
  30. $this->assertTrue($_SERVER['__validator.after.test']);
  31. unset($_SERVER['__validator.after.test']);
  32. }
  33. public function testSometimesWorksOnArrays()
  34. {
  35. $trans = $this->getRealTranslator();
  36. $v = new Validator($trans, ['foo' => ['bar', 'baz', 'moo']], ['foo' => 'sometimes|required|between:5,10']);
  37. $this->assertFalse($v->passes());
  38. $this->assertNotEmpty($v->failed());
  39. $trans = $this->getRealTranslator();
  40. $v = new Validator($trans, ['foo' => ['bar', 'baz', 'moo', 'pew', 'boom']], ['foo' => 'sometimes|required|between:5,10']);
  41. $this->assertTrue($v->passes());
  42. }
  43. public function testHasFailedValidationRules()
  44. {
  45. $trans = $this->getRealTranslator();
  46. $v = new Validator($trans, ['foo' => 'bar', 'baz' => 'boom'], ['foo' => 'Same:baz']);
  47. $this->assertFalse($v->passes());
  48. $this->assertEquals(['foo' => ['Same' => ['baz']]], $v->failed());
  49. }
  50. public function testHasNotFailedValidationRules()
  51. {
  52. $trans = $this->getTranslator();
  53. $trans->shouldReceive('trans')->never();
  54. $v = new Validator($trans, ['foo' => 'taylor'], ['name' => 'Confirmed']);
  55. $this->assertTrue($v->passes());
  56. $this->assertEmpty($v->failed());
  57. }
  58. public function testSometimesCanSkipRequiredRules()
  59. {
  60. $trans = $this->getTranslator();
  61. $trans->shouldReceive('trans')->never();
  62. $v = new Validator($trans, [], ['name' => 'sometimes|required']);
  63. $this->assertTrue($v->passes());
  64. $this->assertEmpty($v->failed());
  65. }
  66. public function testInValidatableRulesReturnsValid()
  67. {
  68. $trans = $this->getTranslator();
  69. $trans->shouldReceive('trans')->never();
  70. $v = new Validator($trans, ['foo' => 'taylor'], ['name' => 'Confirmed']);
  71. $this->assertTrue($v->passes());
  72. }
  73. public function testProperLanguageLineIsSet()
  74. {
  75. $trans = $this->getRealTranslator();
  76. $trans->addResource('array', ['validation.required' => 'required!'], 'en', 'messages');
  77. $v = new Validator($trans, ['name' => ''], ['name' => 'Required']);
  78. $this->assertFalse($v->passes());
  79. $v->messages()->setFormat(':message');
  80. $this->assertEquals('required!', $v->messages()->first('name'));
  81. }
  82. public function testCustomReplacersAreCalled()
  83. {
  84. $trans = $this->getRealTranslator();
  85. $trans->addResource('array', ['validation.required' => 'foo bar'], 'en', 'messages');
  86. $v = new Validator($trans, ['name' => ''], ['name' => 'Required']);
  87. $v->addReplacer('required', function ($message, $attribute, $rule, $parameters) { return str_replace('bar', 'taylor', $message); });
  88. $this->assertFalse($v->passes());
  89. $v->messages()->setFormat(':message');
  90. $this->assertEquals('foo taylor', $v->messages()->first('name'));
  91. }
  92. public function testClassBasedCustomReplacers()
  93. {
  94. $trans = $this->getRealTranslator();
  95. $trans->addResource('array', ['validation.foo' => 'foo!'], 'en', 'messages');
  96. $v = new Validator($trans, [], ['name' => 'required']);
  97. $v->setContainer($container = m::mock('Illuminate\Container\Container'));
  98. $v->addReplacer('required', 'Foo@bar');
  99. $container->shouldReceive('make')->once()->with('Foo')->andReturn($foo = m::mock('StdClass'));
  100. $foo->shouldReceive('bar')->once()->andReturn('replaced!');
  101. $v->passes();
  102. $v->messages()->setFormat(':message');
  103. $this->assertEquals('replaced!', $v->messages()->first('name'));
  104. }
  105. public function testAttributeNamesAreReplaced()
  106. {
  107. $trans = $this->getRealTranslator();
  108. $trans->addResource('array', ['validation.required' => ':attribute is required!'], 'en', 'messages');
  109. $v = new Validator($trans, ['name' => ''], ['name' => 'Required']);
  110. $this->assertFalse($v->passes());
  111. $v->messages()->setFormat(':message');
  112. $this->assertEquals('name is required!', $v->messages()->first('name'));
  113. $trans = $this->getRealTranslator();
  114. $trans->addResource('array', ['validation.required' => ':attribute is required!', 'validation.attributes.name' => 'Name'], 'en', 'messages');
  115. $v = new Validator($trans, ['name' => ''], ['name' => 'Required']);
  116. $this->assertFalse($v->passes());
  117. $v->messages()->setFormat(':message');
  118. $this->assertEquals('Name is required!', $v->messages()->first('name'));
  119. //set customAttributes by setter
  120. $trans = $this->getRealTranslator();
  121. $trans->addResource('array', ['validation.required' => ':attribute is required!'], 'en', 'messages');
  122. $customAttributes = ['name' => 'Name'];
  123. $v = new Validator($trans, ['name' => ''], ['name' => 'Required']);
  124. $v->addCustomAttributes($customAttributes);
  125. $this->assertFalse($v->passes());
  126. $v->messages()->setFormat(':message');
  127. $this->assertEquals('Name is required!', $v->messages()->first('name'));
  128. $trans = $this->getRealTranslator();
  129. $trans->addResource('array', ['validation.required' => ':attribute is required!'], 'en', 'messages');
  130. $v = new Validator($trans, ['name' => ''], ['name' => 'Required']);
  131. $v->setAttributeNames(['name' => 'Name']);
  132. $this->assertFalse($v->passes());
  133. $v->messages()->setFormat(':message');
  134. $this->assertEquals('Name is required!', $v->messages()->first('name'));
  135. }
  136. public function testDisplayableValuesAreReplaced()
  137. {
  138. //required_if:foo,bar
  139. $trans = $this->getRealTranslator();
  140. $trans->addResource('array', ['validation.required_if' => 'The :attribute field is required when :other is :value.'], 'en', 'messages');
  141. $trans->addResource('array', ['validation.values.color.1' => 'red'], 'en', 'messages');
  142. $v = new Validator($trans, ['color' => '1', 'bar' => ''], ['bar' => 'RequiredIf:color,1']);
  143. $this->assertFalse($v->passes());
  144. $v->messages()->setFormat(':message');
  145. $this->assertEquals('The bar field is required when color is red.', $v->messages()->first('bar'));
  146. //in:foo,bar,...
  147. $trans = $this->getRealTranslator();
  148. $trans->addResource('array', ['validation.in' => ':attribute must be included in :values.'], 'en', 'messages');
  149. $trans->addResource('array', ['validation.values.type.5' => 'Short'], 'en', 'messages');
  150. $trans->addResource('array', ['validation.values.type.300' => 'Long'], 'en', 'messages');
  151. $v = new Validator($trans, ['type' => '4'], ['type' => 'in:5,300']);
  152. $this->assertFalse($v->passes());
  153. $v->messages()->setFormat(':message');
  154. $this->assertEquals('type must be included in Short, Long.', $v->messages()->first('type'));
  155. // test addCustomValues
  156. $trans = $this->getRealTranslator();
  157. $trans->addResource('array', ['validation.in' => ':attribute must be included in :values.'], 'en', 'messages');
  158. $customValues = [
  159. 'type' => [
  160. '5' => 'Short',
  161. '300' => 'Long',
  162. ],
  163. ];
  164. $v = new Validator($trans, ['type' => '4'], ['type' => 'in:5,300']);
  165. $v->addCustomValues($customValues);
  166. $this->assertFalse($v->passes());
  167. $v->messages()->setFormat(':message');
  168. $this->assertEquals('type must be included in Short, Long.', $v->messages()->first('type'));
  169. // set custom values by setter
  170. $trans = $this->getRealTranslator();
  171. $trans->addResource('array', ['validation.in' => ':attribute must be included in :values.'], 'en', 'messages');
  172. $customValues = [
  173. 'type' => [
  174. '5' => 'Short',
  175. '300' => 'Long',
  176. ],
  177. ];
  178. $v = new Validator($trans, ['type' => '4'], ['type' => 'in:5,300']);
  179. $v->setValueNames($customValues);
  180. $this->assertFalse($v->passes());
  181. $v->messages()->setFormat(':message');
  182. $this->assertEquals('type must be included in Short, Long.', $v->messages()->first('type'));
  183. }
  184. public function testCustomValidationLinesAreRespected()
  185. {
  186. $trans = $this->getRealTranslator();
  187. $trans->addResource('array', ['validation.required' => 'required!', 'validation.custom.name.required' => 'really required!'], 'en', 'messages');
  188. $v = new Validator($trans, ['name' => ''], ['name' => 'Required']);
  189. $this->assertFalse($v->passes());
  190. $v->messages()->setFormat(':message');
  191. $this->assertEquals('really required!', $v->messages()->first('name'));
  192. }
  193. public function testInlineValidationMessagesAreRespected()
  194. {
  195. $trans = $this->getRealTranslator();
  196. $v = new Validator($trans, ['name' => ''], ['name' => 'Required'], ['name.required' => 'require it please!']);
  197. $this->assertFalse($v->passes());
  198. $v->messages()->setFormat(':message');
  199. $this->assertEquals('require it please!', $v->messages()->first('name'));
  200. $trans = $this->getRealTranslator();
  201. $v = new Validator($trans, ['name' => ''], ['name' => 'Required'], ['required' => 'require it please!']);
  202. $this->assertFalse($v->passes());
  203. $v->messages()->setFormat(':message');
  204. $this->assertEquals('require it please!', $v->messages()->first('name'));
  205. }
  206. public function testValidateRequired()
  207. {
  208. $trans = $this->getRealTranslator();
  209. $v = new Validator($trans, [], ['name' => 'Required']);
  210. $this->assertFalse($v->passes());
  211. $v = new Validator($trans, ['name' => ''], ['name' => 'Required']);
  212. $this->assertFalse($v->passes());
  213. $v = new Validator($trans, ['name' => 'foo'], ['name' => 'Required']);
  214. $this->assertTrue($v->passes());
  215. $file = new File('', false);
  216. $v = new Validator($trans, ['name' => $file], ['name' => 'Required']);
  217. $this->assertFalse($v->passes());
  218. $file = new File(__FILE__, false);
  219. $v = new Validator($trans, ['name' => $file], ['name' => 'Required']);
  220. $this->assertTrue($v->passes());
  221. }
  222. public function testValidateRequiredWith()
  223. {
  224. $trans = $this->getRealTranslator();
  225. $v = new Validator($trans, ['first' => 'Taylor'], ['last' => 'required_with:first']);
  226. $this->assertFalse($v->passes());
  227. $v = new Validator($trans, ['first' => 'Taylor', 'last' => ''], ['last' => 'required_with:first']);
  228. $this->assertFalse($v->passes());
  229. $v = new Validator($trans, ['first' => ''], ['last' => 'required_with:first']);
  230. $this->assertTrue($v->passes());
  231. $v = new Validator($trans, [], ['last' => 'required_with:first']);
  232. $this->assertTrue($v->passes());
  233. $v = new Validator($trans, ['first' => 'Taylor', 'last' => 'Otwell'], ['last' => 'required_with:first']);
  234. $this->assertTrue($v->passes());
  235. $file = new File('', false);
  236. $v = new Validator($trans, ['file' => $file, 'foo' => ''], ['foo' => 'required_with:file']);
  237. $this->assertTrue($v->passes());
  238. $file = new File(__FILE__, false);
  239. $foo = new File(__FILE__, false);
  240. $v = new Validator($trans, ['file' => $file, 'foo' => $foo], ['foo' => 'required_with:file']);
  241. $this->assertTrue($v->passes());
  242. $file = new File(__FILE__, false);
  243. $foo = new File('', false);
  244. $v = new Validator($trans, ['file' => $file, 'foo' => $foo], ['foo' => 'required_with:file']);
  245. $this->assertFalse($v->passes());
  246. }
  247. public function testRequiredWithAll()
  248. {
  249. $trans = $this->getRealTranslator();
  250. $v = new Validator($trans, ['first' => 'foo'], ['last' => 'required_with_all:first,foo']);
  251. $this->assertTrue($v->passes());
  252. $v = new Validator($trans, ['first' => 'foo'], ['last' => 'required_with_all:first']);
  253. $this->assertFalse($v->passes());
  254. }
  255. public function testValidateRequiredWithout()
  256. {
  257. $trans = $this->getRealTranslator();
  258. $v = new Validator($trans, ['first' => 'Taylor'], ['last' => 'required_without:first']);
  259. $this->assertTrue($v->passes());
  260. $v = new Validator($trans, ['first' => 'Taylor', 'last' => ''], ['last' => 'required_without:first']);
  261. $this->assertTrue($v->passes());
  262. $v = new Validator($trans, ['first' => ''], ['last' => 'required_without:first']);
  263. $this->assertFalse($v->passes());
  264. $v = new Validator($trans, [], ['last' => 'required_without:first']);
  265. $this->assertFalse($v->passes());
  266. $v = new Validator($trans, ['first' => 'Taylor', 'last' => 'Otwell'], ['last' => 'required_without:first']);
  267. $this->assertTrue($v->passes());
  268. $v = new Validator($trans, ['last' => 'Otwell'], ['last' => 'required_without:first']);
  269. $this->assertTrue($v->passes());
  270. $file = new File('', false);
  271. $v = new Validator($trans, ['file' => $file], ['foo' => 'required_without:file']);
  272. $this->assertFalse($v->passes());
  273. $foo = new File('', false);
  274. $v = new Validator($trans, ['foo' => $foo], ['foo' => 'required_without:file']);
  275. $this->assertFalse($v->passes());
  276. $foo = new File(__FILE__, false);
  277. $v = new Validator($trans, ['foo' => $foo], ['foo' => 'required_without:file']);
  278. $this->assertTrue($v->passes());
  279. $file = new File(__FILE__, false);
  280. $foo = new File(__FILE__, false);
  281. $v = new Validator($trans, ['file' => $file, 'foo' => $foo], ['foo' => 'required_without:file']);
  282. $this->assertTrue($v->passes());
  283. $file = new File(__FILE__, false);
  284. $foo = new File('', false);
  285. $v = new Validator($trans, ['file' => $file, 'foo' => $foo], ['foo' => 'required_without:file']);
  286. $this->assertTrue($v->passes());
  287. $file = new File('', false);
  288. $foo = new File(__FILE__, false);
  289. $v = new Validator($trans, ['file' => $file, 'foo' => $foo], ['foo' => 'required_without:file']);
  290. $this->assertTrue($v->passes());
  291. $file = new File('', false);
  292. $foo = new File('', false);
  293. $v = new Validator($trans, ['file' => $file, 'foo' => $foo], ['foo' => 'required_without:file']);
  294. $this->assertFalse($v->passes());
  295. }
  296. public function testRequiredWithoutMultiple()
  297. {
  298. $trans = $this->getRealTranslator();
  299. $rules = [
  300. 'f1' => 'required_without:f2,f3',
  301. 'f2' => 'required_without:f1,f3',
  302. 'f3' => 'required_without:f1,f2',
  303. ];
  304. $v = new Validator($trans, [], $rules);
  305. $this->assertTrue($v->fails());
  306. $v = new Validator($trans, ['f1' => 'foo'], $rules);
  307. $this->assertTrue($v->fails());
  308. $v = new Validator($trans, ['f2' => 'foo'], $rules);
  309. $this->assertTrue($v->fails());
  310. $v = new Validator($trans, ['f3' => 'foo'], $rules);
  311. $this->assertTrue($v->fails());
  312. $v = new Validator($trans, ['f1' => 'foo', 'f2' => 'bar'], $rules);
  313. $this->assertTrue($v->passes());
  314. $v = new Validator($trans, ['f1' => 'foo', 'f3' => 'bar'], $rules);
  315. $this->assertTrue($v->passes());
  316. $v = new Validator($trans, ['f2' => 'foo', 'f3' => 'bar'], $rules);
  317. $this->assertTrue($v->passes());
  318. $v = new Validator($trans, ['f1' => 'foo', 'f2' => 'bar', 'f3' => 'baz'], $rules);
  319. $this->assertTrue($v->passes());
  320. }
  321. public function testRequiredWithoutAll()
  322. {
  323. $trans = $this->getRealTranslator();
  324. $rules = [
  325. 'f1' => 'required_without_all:f2,f3',
  326. 'f2' => 'required_without_all:f1,f3',
  327. 'f3' => 'required_without_all:f1,f2',
  328. ];
  329. $v = new Validator($trans, [], $rules);
  330. $this->assertTrue($v->fails());
  331. $v = new Validator($trans, ['f1' => 'foo'], $rules);
  332. $this->assertTrue($v->passes());
  333. $v = new Validator($trans, ['f2' => 'foo'], $rules);
  334. $this->assertTrue($v->passes());
  335. $v = new Validator($trans, ['f3' => 'foo'], $rules);
  336. $this->assertTrue($v->passes());
  337. $v = new Validator($trans, ['f1' => 'foo', 'f2' => 'bar'], $rules);
  338. $this->assertTrue($v->passes());
  339. $v = new Validator($trans, ['f1' => 'foo', 'f3' => 'bar'], $rules);
  340. $this->assertTrue($v->passes());
  341. $v = new Validator($trans, ['f2' => 'foo', 'f3' => 'bar'], $rules);
  342. $this->assertTrue($v->passes());
  343. $v = new Validator($trans, ['f1' => 'foo', 'f2' => 'bar', 'f3' => 'baz'], $rules);
  344. $this->assertTrue($v->passes());
  345. }
  346. public function testRequiredIf()
  347. {
  348. $trans = $this->getRealTranslator();
  349. $v = new Validator($trans, ['first' => 'taylor'], ['last' => 'required_if:first,taylor']);
  350. $this->assertTrue($v->fails());
  351. $trans = $this->getRealTranslator();
  352. $v = new Validator($trans, ['first' => 'taylor', 'last' => 'otwell'], ['last' => 'required_if:first,taylor']);
  353. $this->assertTrue($v->passes());
  354. $trans = $this->getRealTranslator();
  355. $v = new Validator($trans, ['first' => 'taylor', 'last' => 'otwell'], ['last' => 'required_if:first,taylor,dayle']);
  356. $this->assertTrue($v->passes());
  357. $trans = $this->getRealTranslator();
  358. $v = new Validator($trans, ['first' => 'dayle', 'last' => 'rees'], ['last' => 'required_if:first,taylor,dayle']);
  359. $this->assertTrue($v->passes());
  360. // error message when passed multiple values (required_if:foo,bar,baz)
  361. $trans = $this->getRealTranslator();
  362. $trans->addResource('array', ['validation.required_if' => 'The :attribute field is required when :other is :value.'], 'en', 'messages');
  363. $v = new Validator($trans, ['first' => 'dayle', 'last' => ''], ['last' => 'RequiredIf:first,taylor,dayle']);
  364. $this->assertFalse($v->passes());
  365. $this->assertEquals('The last field is required when first is dayle.', $v->messages()->first('last'));
  366. }
  367. public function testValidateConfirmed()
  368. {
  369. $trans = $this->getRealTranslator();
  370. $v = new Validator($trans, ['password' => 'foo'], ['password' => 'Confirmed']);
  371. $this->assertFalse($v->passes());
  372. $v = new Validator($trans, ['password' => 'foo', 'password_confirmation' => 'bar'], ['password' => 'Confirmed']);
  373. $this->assertFalse($v->passes());
  374. $v = new Validator($trans, ['password' => 'foo', 'password_confirmation' => 'foo'], ['password' => 'Confirmed']);
  375. $this->assertTrue($v->passes());
  376. $v = new Validator($trans, ['password' => '1e2', 'password_confirmation' => '100'], ['password' => 'Confirmed']);
  377. $this->assertFalse($v->passes());
  378. }
  379. public function testValidateSame()
  380. {
  381. $trans = $this->getRealTranslator();
  382. $v = new Validator($trans, ['foo' => 'bar', 'baz' => 'boom'], ['foo' => 'Same:baz']);
  383. $this->assertFalse($v->passes());
  384. $v = new Validator($trans, ['foo' => 'bar'], ['foo' => 'Same:baz']);
  385. $this->assertFalse($v->passes());
  386. $v = new Validator($trans, ['foo' => 'bar', 'baz' => 'bar'], ['foo' => 'Same:baz']);
  387. $this->assertTrue($v->passes());
  388. $v = new Validator($trans, ['foo' => '1e2', 'baz' => '100'], ['foo' => 'Same:baz']);
  389. $this->assertFalse($v->passes());
  390. }
  391. public function testValidateDifferent()
  392. {
  393. $trans = $this->getRealTranslator();
  394. $v = new Validator($trans, ['foo' => 'bar', 'baz' => 'boom'], ['foo' => 'Different:baz']);
  395. $this->assertTrue($v->passes());
  396. $v = new Validator($trans, ['foo' => 'bar'], ['foo' => 'Different:baz']);
  397. $this->assertFalse($v->passes());
  398. $v = new Validator($trans, ['foo' => 'bar', 'baz' => 'bar'], ['foo' => 'Different:baz']);
  399. $this->assertFalse($v->passes());
  400. $v = new Validator($trans, ['foo' => '1e2', 'baz' => '100'], ['foo' => 'Different:baz']);
  401. $this->assertTrue($v->passes());
  402. }
  403. public function testValidateAccepted()
  404. {
  405. $trans = $this->getRealTranslator();
  406. $v = new Validator($trans, ['foo' => 'no'], ['foo' => 'Accepted']);
  407. $this->assertFalse($v->passes());
  408. $v = new Validator($trans, ['foo' => null], ['foo' => 'Accepted']);
  409. $this->assertFalse($v->passes());
  410. $v = new Validator($trans, [], ['foo' => 'Accepted']);
  411. $this->assertFalse($v->passes());
  412. $v = new Validator($trans, ['foo' => 0], ['foo' => 'Accepted']);
  413. $this->assertFalse($v->passes());
  414. $v = new Validator($trans, ['foo' => false], ['foo' => 'Accepted']);
  415. $this->assertFalse($v->passes());
  416. $v = new Validator($trans, ['foo' => 'false'], ['foo' => 'Accepted']);
  417. $this->assertFalse($v->passes());
  418. $v = new Validator($trans, ['foo' => 'yes'], ['foo' => 'Accepted']);
  419. $this->assertTrue($v->passes());
  420. $v = new Validator($trans, ['foo' => 'on'], ['foo' => 'Accepted']);
  421. $this->assertTrue($v->passes());
  422. $v = new Validator($trans, ['foo' => '1'], ['foo' => 'Accepted']);
  423. $this->assertTrue($v->passes());
  424. $v = new Validator($trans, ['foo' => 1], ['foo' => 'Accepted']);
  425. $this->assertTrue($v->passes());
  426. $v = new Validator($trans, ['foo' => true], ['foo' => 'Accepted']);
  427. $this->assertTrue($v->passes());
  428. $v = new Validator($trans, ['foo' => 'true'], ['foo' => 'Accepted']);
  429. $this->assertTrue($v->passes());
  430. }
  431. public function testValidateString()
  432. {
  433. $trans = $this->getRealTranslator();
  434. $v = new Validator($trans, ['x' => 'aslsdlks'], ['x' => 'string']);
  435. $this->assertTrue($v->passes());
  436. $trans = $this->getRealTranslator();
  437. $v = new Validator($trans, ['x' => ['blah' => 'test']], ['x' => 'string']);
  438. $this->assertFalse($v->passes());
  439. }
  440. public function testValidateBoolean()
  441. {
  442. $trans = $this->getRealTranslator();
  443. $v = new Validator($trans, ['foo' => 'no'], ['foo' => 'Boolean']);
  444. $this->assertFalse($v->passes());
  445. $v = new Validator($trans, ['foo' => 'yes'], ['foo' => 'Boolean']);
  446. $this->assertFalse($v->passes());
  447. $v = new Validator($trans, ['foo' => 'false'], ['foo' => 'Boolean']);
  448. $this->assertFalse($v->passes());
  449. $v = new Validator($trans, ['foo' => 'true'], ['foo' => 'Boolean']);
  450. $this->assertFalse($v->passes());
  451. $v = new Validator($trans, [], ['foo' => 'Boolean']);
  452. $this->assertTrue($v->passes());
  453. $v = new Validator($trans, ['foo' => false], ['foo' => 'Boolean']);
  454. $this->assertTrue($v->passes());
  455. $v = new Validator($trans, ['foo' => true], ['foo' => 'Boolean']);
  456. $this->assertTrue($v->passes());
  457. $v = new Validator($trans, ['foo' => '1'], ['foo' => 'Boolean']);
  458. $this->assertTrue($v->passes());
  459. $v = new Validator($trans, ['foo' => 1], ['foo' => 'Boolean']);
  460. $this->assertTrue($v->passes());
  461. $v = new Validator($trans, ['foo' => '0'], ['foo' => 'Boolean']);
  462. $this->assertTrue($v->passes());
  463. $v = new Validator($trans, ['foo' => 0], ['foo' => 'Boolean']);
  464. $this->assertTrue($v->passes());
  465. }
  466. public function testValidateNumeric()
  467. {
  468. $trans = $this->getRealTranslator();
  469. $v = new Validator($trans, ['foo' => 'asdad'], ['foo' => 'Numeric']);
  470. $this->assertFalse($v->passes());
  471. $v = new Validator($trans, ['foo' => '1.23'], ['foo' => 'Numeric']);
  472. $this->assertTrue($v->passes());
  473. $v = new Validator($trans, ['foo' => '-1'], ['foo' => 'Numeric']);
  474. $this->assertTrue($v->passes());
  475. $v = new Validator($trans, ['foo' => '1'], ['foo' => 'Numeric']);
  476. $this->assertTrue($v->passes());
  477. }
  478. public function testValidateInteger()
  479. {
  480. $trans = $this->getRealTranslator();
  481. $v = new Validator($trans, ['foo' => 'asdad'], ['foo' => 'Integer']);
  482. $this->assertFalse($v->passes());
  483. $v = new Validator($trans, ['foo' => '1.23'], ['foo' => 'Integer']);
  484. $this->assertFalse($v->passes());
  485. $v = new Validator($trans, ['foo' => '-1'], ['foo' => 'Integer']);
  486. $this->assertTrue($v->passes());
  487. $v = new Validator($trans, ['foo' => '1'], ['foo' => 'Integer']);
  488. $this->assertTrue($v->passes());
  489. }
  490. public function testValidateDigits()
  491. {
  492. $trans = $this->getRealTranslator();
  493. $v = new Validator($trans, ['foo' => '12345'], ['foo' => 'Digits:5']);
  494. $this->assertTrue($v->passes());
  495. $v = new Validator($trans, ['foo' => '123'], ['foo' => 'Digits:200']);
  496. $this->assertFalse($v->passes());
  497. $trans = $this->getRealTranslator();
  498. $v = new Validator($trans, ['foo' => '12345'], ['foo' => 'digits_between:1,6']);
  499. $this->assertTrue($v->passes());
  500. $v = new Validator($trans, ['foo' => 'bar'], ['foo' => 'digits_between:1,10']);
  501. $this->assertFalse($v->passes());
  502. $v = new Validator($trans, ['foo' => '123'], ['foo' => 'digits_between:4,5']);
  503. $this->assertFalse($v->passes());
  504. }
  505. public function testValidateSize()
  506. {
  507. $trans = $this->getRealTranslator();
  508. $v = new Validator($trans, ['foo' => 'asdad'], ['foo' => 'Size:3']);
  509. $this->assertFalse($v->passes());
  510. $v = new Validator($trans, ['foo' => 'anc'], ['foo' => 'Size:3']);
  511. $this->assertTrue($v->passes());
  512. $v = new Validator($trans, ['foo' => '123'], ['foo' => 'Numeric|Size:3']);
  513. $this->assertFalse($v->passes());
  514. $v = new Validator($trans, ['foo' => '3'], ['foo' => 'Numeric|Size:3']);
  515. $this->assertTrue($v->passes());
  516. $v = new Validator($trans, ['foo' => [1, 2, 3]], ['foo' => 'Array|Size:3']);
  517. $this->assertTrue($v->passes());
  518. $v = new Validator($trans, ['foo' => [1, 2, 3]], ['foo' => 'Array|Size:4']);
  519. $this->assertFalse($v->passes());
  520. $file = $this->getMock('Symfony\Component\HttpFoundation\File\File', ['getSize'], [__FILE__, false]);
  521. $file->expects($this->any())->method('getSize')->will($this->returnValue(3072));
  522. $v = new Validator($trans, [], ['photo' => 'Size:3']);
  523. $v->setFiles(['photo' => $file]);
  524. $this->assertTrue($v->passes());
  525. $file = $this->getMock('Symfony\Component\HttpFoundation\File\File', ['getSize'], [__FILE__, false]);
  526. $file->expects($this->any())->method('getSize')->will($this->returnValue(4072));
  527. $v = new Validator($trans, [], ['photo' => 'Size:3']);
  528. $v->setFiles(['photo' => $file]);
  529. $this->assertFalse($v->passes());
  530. }
  531. public function testValidateBetween()
  532. {
  533. $trans = $this->getRealTranslator();
  534. $v = new Validator($trans, ['foo' => 'asdad'], ['foo' => 'Between:3,4']);
  535. $this->assertFalse($v->passes());
  536. $v = new Validator($trans, ['foo' => 'anc'], ['foo' => 'Between:3,5']);
  537. $this->assertTrue($v->passes());
  538. $v = new Validator($trans, ['foo' => 'ancf'], ['foo' => 'Between:3,5']);
  539. $this->assertTrue($v->passes());
  540. $v = new Validator($trans, ['foo' => 'ancfs'], ['foo' => 'Between:3,5']);
  541. $this->assertTrue($v->passes());
  542. $v = new Validator($trans, ['foo' => '123'], ['foo' => 'Numeric|Between:50,100']);
  543. $this->assertFalse($v->passes());
  544. $v = new Validator($trans, ['foo' => '3'], ['foo' => 'Numeric|Between:1,5']);
  545. $this->assertTrue($v->passes());
  546. $v = new Validator($trans, ['foo' => [1, 2, 3]], ['foo' => 'Array|Between:1,5']);
  547. $this->assertTrue($v->passes());
  548. $v = new Validator($trans, ['foo' => [1, 2, 3]], ['foo' => 'Array|Between:1,2']);
  549. $this->assertFalse($v->passes());
  550. $file = $this->getMock('Symfony\Component\HttpFoundation\File\File', ['getSize'], [__FILE__, false]);
  551. $file->expects($this->any())->method('getSize')->will($this->returnValue(3072));
  552. $v = new Validator($trans, [], ['photo' => 'Between:1,5']);
  553. $v->setFiles(['photo' => $file]);
  554. $this->assertTrue($v->passes());
  555. $file = $this->getMock('Symfony\Component\HttpFoundation\File\File', ['getSize'], [__FILE__, false]);
  556. $file->expects($this->any())->method('getSize')->will($this->returnValue(4072));
  557. $v = new Validator($trans, [], ['photo' => 'Between:1,2']);
  558. $v->setFiles(['photo' => $file]);
  559. $this->assertFalse($v->passes());
  560. }
  561. public function testValidateMin()
  562. {
  563. $trans = $this->getRealTranslator();
  564. $v = new Validator($trans, ['foo' => '3'], ['foo' => 'Min:3']);
  565. $this->assertFalse($v->passes());
  566. $v = new Validator($trans, ['foo' => 'anc'], ['foo' => 'Min:3']);
  567. $this->assertTrue($v->passes());
  568. $v = new Validator($trans, ['foo' => '2'], ['foo' => 'Numeric|Min:3']);
  569. $this->assertFalse($v->passes());
  570. $v = new Validator($trans, ['foo' => '5'], ['foo' => 'Numeric|Min:3']);
  571. $this->assertTrue($v->passes());
  572. $v = new Validator($trans, ['foo' => [1, 2, 3, 4]], ['foo' => 'Array|Min:3']);
  573. $this->assertTrue($v->passes());
  574. $v = new Validator($trans, ['foo' => [1, 2]], ['foo' => 'Array|Min:3']);
  575. $this->assertFalse($v->passes());
  576. $file = $this->getMock('Symfony\Component\HttpFoundation\File\File', ['getSize'], [__FILE__, false]);
  577. $file->expects($this->any())->method('getSize')->will($this->returnValue(3072));
  578. $v = new Validator($trans, [], ['photo' => 'Min:2']);
  579. $v->setFiles(['photo' => $file]);
  580. $this->assertTrue($v->passes());
  581. $file = $this->getMock('Symfony\Component\HttpFoundation\File\File', ['getSize'], [__FILE__, false]);
  582. $file->expects($this->any())->method('getSize')->will($this->returnValue(4072));
  583. $v = new Validator($trans, [], ['photo' => 'Min:10']);
  584. $v->setFiles(['photo' => $file]);
  585. $this->assertFalse($v->passes());
  586. }
  587. public function testValidateMax()
  588. {
  589. $trans = $this->getRealTranslator();
  590. $v = new Validator($trans, ['foo' => 'aslksd'], ['foo' => 'Max:3']);
  591. $this->assertFalse($v->passes());
  592. $v = new Validator($trans, ['foo' => 'anc'], ['foo' => 'Max:3']);
  593. $this->assertTrue($v->passes());
  594. $v = new Validator($trans, ['foo' => '211'], ['foo' => 'Numeric|Max:100']);
  595. $this->assertFalse($v->passes());
  596. $v = new Validator($trans, ['foo' => '22'], ['foo' => 'Numeric|Max:33']);
  597. $this->assertTrue($v->passes());
  598. $v = new Validator($trans, ['foo' => [1, 2, 3]], ['foo' => 'Array|Max:4']);
  599. $this->assertTrue($v->passes());
  600. $v = new Validator($trans, ['foo' => [1, 2, 3]], ['foo' => 'Array|Max:2']);
  601. $this->assertFalse($v->passes());
  602. $file = $this->getMock('Symfony\Component\HttpFoundation\File\UploadedFile', ['isValid', 'getSize'], [__FILE__, basename(__FILE__)]);
  603. $file->expects($this->at(0))->method('isValid')->will($this->returnValue(true));
  604. $file->expects($this->at(1))->method('getSize')->will($this->returnValue(3072));
  605. $v = new Validator($trans, [], ['photo' => 'Max:10']);
  606. $v->setFiles(['photo' => $file]);
  607. $this->assertTrue($v->passes());
  608. $file = $this->getMock('Symfony\Component\HttpFoundation\File\UploadedFile', ['isValid', 'getSize'], [__FILE__, basename(__FILE__)]);
  609. $file->expects($this->at(0))->method('isValid')->will($this->returnValue(true));
  610. $file->expects($this->at(1))->method('getSize')->will($this->returnValue(4072));
  611. $v = new Validator($trans, [], ['photo' => 'Max:2']);
  612. $v->setFiles(['photo' => $file]);
  613. $this->assertFalse($v->passes());
  614. $file = $this->getMock('Symfony\Component\HttpFoundation\File\UploadedFile', ['isValid'], [__FILE__, basename(__FILE__)]);
  615. $file->expects($this->any())->method('isValid')->will($this->returnValue(false));
  616. $v = new Validator($trans, [], ['photo' => 'Max:10']);
  617. $v->setFiles(['photo' => $file]);
  618. $this->assertFalse($v->passes());
  619. }
  620. public function testProperMessagesAreReturnedForSizes()
  621. {
  622. $trans = $this->getRealTranslator();
  623. $trans->addResource('array', ['validation.min.numeric' => 'numeric', 'validation.size.string' => 'string', 'validation.max.file' => 'file'], 'en', 'messages');
  624. $v = new Validator($trans, ['name' => '3'], ['name' => 'Numeric|Min:5']);
  625. $this->assertFalse($v->passes());
  626. $v->messages()->setFormat(':message');
  627. $this->assertEquals('numeric', $v->messages()->first('name'));
  628. $v = new Validator($trans, ['name' => 'asasdfadsfd'], ['name' => 'Size:2']);
  629. $this->assertFalse($v->passes());
  630. $v->messages()->setFormat(':message');
  631. $this->assertEquals('string', $v->messages()->first('name'));
  632. $file = $this->getMock('Symfony\Component\HttpFoundation\File\File', ['getSize'], [__FILE__, false]);
  633. $file->expects($this->any())->method('getSize')->will($this->returnValue(4072));
  634. $v = new Validator($trans, [], ['photo' => 'Max:3']);
  635. $v->setFiles(['photo' => $file]);
  636. $this->assertFalse($v->passes());
  637. $v->messages()->setFormat(':message');
  638. $this->assertEquals('file', $v->messages()->first('photo'));
  639. }
  640. public function testValidateIn()
  641. {
  642. $trans = $this->getRealTranslator();
  643. $v = new Validator($trans, ['name' => 'foo'], ['name' => 'In:bar,baz']);
  644. $this->assertFalse($v->passes());
  645. $trans = $this->getRealTranslator();
  646. $v = new Validator($trans, ['name' => 0], ['name' => 'In:bar,baz']);
  647. $this->assertFalse($v->passes());
  648. $v = new Validator($trans, ['name' => 'foo'], ['name' => 'In:foo,baz']);
  649. $this->assertTrue($v->passes());
  650. $v = new Validator($trans, ['name' => ['foo', 'bar']], ['name' => 'Array|In:foo,baz']);
  651. $this->assertFalse($v->passes());
  652. $v = new Validator($trans, ['name' => ['foo', 'qux']], ['name' => 'Array|In:foo,baz,qux']);
  653. $this->assertTrue($v->passes());
  654. }
  655. public function testValidateNotIn()
  656. {
  657. $trans = $this->getRealTranslator();
  658. $v = new Validator($trans, ['name' => 'foo'], ['name' => 'NotIn:bar,baz']);
  659. $this->assertTrue($v->passes());
  660. $v = new Validator($trans, ['name' => 'foo'], ['name' => 'NotIn:foo,baz']);
  661. $this->assertFalse($v->passes());
  662. }
  663. public function testValidateUnique()
  664. {
  665. $trans = $this->getRealTranslator();
  666. $v = new Validator($trans, ['email' => 'foo'], ['email' => 'Unique:users']);
  667. $mock = m::mock('Illuminate\Validation\PresenceVerifierInterface');
  668. $mock->shouldReceive('getCount')->once()->with('users', 'email', 'foo', null, null, [])->andReturn(0);
  669. $v->setPresenceVerifier($mock);
  670. $this->assertTrue($v->passes());
  671. $trans = $this->getRealTranslator();
  672. $v = new Validator($trans, ['email' => 'foo'], ['email' => 'Unique:connection.users']);
  673. $mock = m::mock('Illuminate\Validation\PresenceVerifierInterface');
  674. $mock->shouldReceive('setConnection')->once()->with('connection');
  675. $mock->shouldReceive('getCount')->once()->with('users', 'email', 'foo', null, null, [])->andReturn(0);
  676. $v->setPresenceVerifier($mock);
  677. $this->assertTrue($v->passes());
  678. $v = new Validator($trans, ['email' => 'foo'], ['email' => 'Unique:users,email_addr,1']);
  679. $mock2 = m::mock('Illuminate\Validation\PresenceVerifierInterface');
  680. $mock2->shouldReceive('getCount')->once()->with('users', 'email_addr', 'foo', '1', 'id', [])->andReturn(1);
  681. $v->setPresenceVerifier($mock2);
  682. $this->assertFalse($v->passes());
  683. $v = new Validator($trans, ['email' => 'foo'], ['email' => 'Unique:users,email_addr,1,id_col']);
  684. $mock3 = m::mock('Illuminate\Validation\PresenceVerifierInterface');
  685. $mock3->shouldReceive('getCount')->once()->with('users', 'email_addr', 'foo', '1', 'id_col', [])->andReturn(2);
  686. $v->setPresenceVerifier($mock3);
  687. $this->assertFalse($v->passes());
  688. $v = new Validator($trans, ['email' => 'foo'], ['email' => 'Unique:users,email_addr,NULL,id_col,foo,bar']);
  689. $mock3 = m::mock('Illuminate\Validation\PresenceVerifierInterface');
  690. $mock3->shouldReceive('getCount')->once()->with('users', 'email_addr', 'foo', null, 'id_col', ['foo' => 'bar'])->andReturn(2);
  691. $v->setPresenceVerifier($mock3);
  692. $this->assertFalse($v->passes());
  693. }
  694. public function testValidationExists()
  695. {
  696. $trans = $this->getRealTranslator();
  697. $v = new Validator($trans, ['email' => 'foo'], ['email' => 'Exists:users']);
  698. $mock = m::mock('Illuminate\Validation\PresenceVerifierInterface');
  699. $mock->shouldReceive('getCount')->once()->with('users', 'email', 'foo', null, null, [])->andReturn(true);
  700. $v->setPresenceVerifier($mock);
  701. $this->assertTrue($v->passes());
  702. $trans = $this->getRealTranslator();
  703. $v = new Validator($trans, ['email' => 'foo'], ['email' => 'Exists:users,email,account_id,1,name,taylor']);
  704. $mock4 = m::mock('Illuminate\Validation\PresenceVerifierInterface');
  705. $mock4->shouldReceive('getCount')->once()->with('users', 'email', 'foo', null, null, ['account_id' => 1, 'name' => 'taylor'])->andReturn(true);
  706. $v->setPresenceVerifier($mock4);
  707. $this->assertTrue($v->passes());
  708. $v = new Validator($trans, ['email' => 'foo'], ['email' => 'Exists:users,email_addr']);
  709. $mock2 = m::mock('Illuminate\Validation\PresenceVerifierInterface');
  710. $mock2->shouldReceive('getCount')->once()->with('users', 'email_addr', 'foo', null, null, [])->andReturn(false);
  711. $v->setPresenceVerifier($mock2);
  712. $this->assertFalse($v->passes());
  713. $v = new Validator($trans, ['email' => ['foo']], ['email' => 'Exists:users,email_addr']);
  714. $mock3 = m::mock('Illuminate\Validation\PresenceVerifierInterface');
  715. $mock3->shouldReceive('getMultiCount')->once()->with('users', 'email_addr', ['foo'], [])->andReturn(false);
  716. $v->setPresenceVerifier($mock3);
  717. $this->assertFalse($v->passes());
  718. }
  719. public function testValidationExistsIsNotCalledUnnecessarily()
  720. {
  721. $trans = $this->getRealTranslator();
  722. $v = new Validator($trans, ['id' => 'foo'], ['id' => 'Integer|Exists:users,id']);
  723. $mock2 = m::mock('Illuminate\Validation\PresenceVerifierInterface');
  724. $mock2->shouldReceive('getCount')->never();
  725. $v->setPresenceVerifier($mock2);
  726. $this->assertFalse($v->passes());
  727. $trans = $this->getRealTranslator();
  728. $v = new Validator($trans, ['id' => '1'], ['id' => 'Integer|Exists:users,id']);
  729. $mock2 = m::mock('Illuminate\Validation\PresenceVerifierInterface');
  730. $mock2->shouldReceive('getCount')->once()->with('users', 'id', '1', null, null, [])->andReturn(true);
  731. $v->setPresenceVerifier($mock2);
  732. $this->assertTrue($v->passes());
  733. }
  734. public function testValidateIp()
  735. {
  736. $trans = $this->getRealTranslator();
  737. $v = new Validator($trans, ['ip' => 'aslsdlks'], ['ip' => 'Ip']);
  738. $this->assertFalse($v->passes());
  739. $v = new Validator($trans, ['ip' => '127.0.0.1'], ['ip' => 'Ip']);
  740. $this->assertTrue($v->passes());
  741. }
  742. public function testValidateEmail()
  743. {
  744. $trans = $this->getRealTranslator();
  745. $v = new Validator($trans, ['x' => 'aslsdlks'], ['x' => 'Email']);
  746. $this->assertFalse($v->passes());
  747. $v = new Validator($trans, ['x' => 'foo@gmail.com'], ['x' => 'Email']);
  748. $this->assertTrue($v->passes());
  749. }
  750. public function testValidateUrl()
  751. {
  752. $trans = $this->getRealTranslator();
  753. $v = new Validator($trans, ['x' => 'aslsdlks'], ['x' => 'Url']);
  754. $this->assertFalse($v->passes());
  755. $v = new Validator($trans, ['x' => 'http://google.com'], ['x' => 'Url']);
  756. $this->assertTrue($v->passes());
  757. }
  758. public function testValidateActiveUrl()
  759. {
  760. $trans = $this->getRealTranslator();
  761. $v = new Validator($trans, ['x' => 'aslsdlks'], ['x' => 'active_url']);
  762. $this->assertFalse($v->passes());
  763. $v = new Validator($trans, ['x' => 'http://google.com'], ['x' => 'active_url']);
  764. $this->assertTrue($v->passes());
  765. $v = new Validator($trans, ['x' => 'http://www.google.com'], ['x' => 'active_url']);
  766. $this->assertTrue($v->passes());
  767. }
  768. public function testValidateImage()
  769. {
  770. $trans = $this->getRealTranslator();
  771. $uploadedFile = [__FILE__, '', null, null, null, true];
  772. $file = $this->getMock('Symfony\Component\HttpFoundation\File\UploadedFile', ['guessExtension'], $uploadedFile);
  773. $file->expects($this->any())->method('guessExtension')->will($this->returnValue('php'));
  774. $v = new Validator($trans, [], ['x' => 'Image']);
  775. $v->setFiles(['x' => $file]);
  776. $this->assertFalse($v->passes());
  777. $v = new Validator($trans, [], ['x' => 'Image']);
  778. $file2 = $this->getMock('Symfony\Component\HttpFoundation\File\UploadedFile', ['guessExtension'], $uploadedFile);
  779. $file2->expects($this->any())->method('guessExtension')->will($this->returnValue('jpeg'));
  780. $v->setFiles(['x' => $file2]);
  781. $this->assertTrue($v->passes());
  782. $file3 = $this->getMock('Symfony\Component\HttpFoundation\File\UploadedFile', ['guessExtension'], $uploadedFile);
  783. $file3->expects($this->any())->method('guessExtension')->will($this->returnValue('gif'));
  784. $v->setFiles(['x' => $file3]);
  785. $this->assertTrue($v->passes());
  786. $file4 = $this->getMock('Symfony\Component\HttpFoundation\File\UploadedFile', ['guessExtension'], $uploadedFile);
  787. $file4->expects($this->any())->method('guessExtension')->will($this->returnValue('bmp'));
  788. $v->setFiles(['x' => $file4]);
  789. $this->assertTrue($v->passes());
  790. $file5 = $this->getMock('Symfony\Component\HttpFoundation\File\UploadedFile', ['guessExtension'], $uploadedFile);
  791. $file5->expects($this->any())->method('guessExtension')->will($this->returnValue('png'));
  792. $v->setFiles(['x' => $file5]);
  793. $this->assertTrue($v->passes());
  794. $file6 = $this->getMock('Symfony\Component\HttpFoundation\File\UploadedFile', ['guessExtension'], $uploadedFile);
  795. $file6->expects($this->any())->method('guessExtension')->will($this->returnValue('svg'));
  796. $v->setFiles(['x' => $file6]);
  797. $this->assertTrue($v->passes());
  798. }
  799. public function testValidateMimetypes()
  800. {
  801. $trans = $this->getRealTranslator();
  802. $uploadedFile = [__FILE__, '', null, null, null, true];
  803. $file = $this->getMock('Symfony\Component\HttpFoundation\File\UploadedFile', ['guessExtension'], $uploadedFile);
  804. $file->expects($this->any())->method('validateMimetypes')->will($this->returnValue('php'));
  805. $v = new Validator($trans, [], ['x' => 'mimetypes:text/x-php']);
  806. $v->setFiles(['x' => $file]);
  807. $this->assertTrue($v->passes());
  808. }
  809. public function testValidateMime()
  810. {
  811. $trans = $this->getRealTranslator();
  812. $uploadedFile = [__FILE__, '', null, null, null, true];
  813. $file = $this->getMock('Symfony\Component\HttpFoundation\File\UploadedFile', ['guessExtension'], $uploadedFile);
  814. $file->expects($this->any())->method('guessExtension')->will($this->returnValue('php'));
  815. $v = new Validator($trans, [], ['x' => 'mimes:php']);
  816. $v->setFiles(['x' => $file]);
  817. $this->assertTrue($v->passes());
  818. $file2 = $this->getMock('Symfony\Component\HttpFoundation\File\UploadedFile', ['guessExtension', 'isValid'], $uploadedFile);
  819. $file2->expects($this->any())->method('guessExtension')->will($this->returnValue('php'));
  820. $file2->expects($this->any())->method('isValid')->will($this->returnValue(false));
  821. $v = new Validator($trans, [], ['x' => 'mimes:php']);
  822. $v->setFiles(['x' => $file2]);
  823. $this->assertFalse($v->passes());
  824. }
  825. public function testEmptyRulesSkipped()
  826. {
  827. $trans = $this->getRealTranslator();
  828. $v = new Validator($trans, ['x' => 'aslsdlks'], ['x' => ['alpha', [], '']]);
  829. $this->assertTrue($v->passes());
  830. $v = new Validator($trans, ['x' => 'aslsdlks'], ['x' => '|||required|']);
  831. $this->assertTrue($v->passes());
  832. }
  833. public function testAlternativeFormat()
  834. {
  835. $trans = $this->getRealTranslator();
  836. $v = new Validator($trans, ['x' => 'aslsdlks'], ['x' => ['alpha', ['min', 3], ['max', 10]]]);
  837. $this->assertTrue($v->passes());
  838. }
  839. public function testValidateAlpha()
  840. {
  841. $trans = $this->getRealTranslator();
  842. $v = new Validator($trans, ['x' => 'aslsdlks'], ['x' => 'Alpha']);
  843. $this->assertTrue($v->passes());
  844. $trans = $this->getRealTranslator();
  845. $v = new Validator($trans, ['x' => 'aslsdlks
  846. 1
  847. 1'], ['x' => 'Alpha']);
  848. $this->assertFalse($v->passes());
  849. $v = new Validator($trans, ['x' => 'http://google.com'], ['x' => 'Alpha']);
  850. $this->assertFalse($v->passes());
  851. $v = new Validator($trans, ['x' => 'ユニコードを基盤技術と'], ['x' => 'Alpha']);
  852. $this->assertTrue($v->passes());
  853. $v = new Validator($trans, ['x' => 'ユニコード を基盤技術と'], ['x' => 'Alpha']);
  854. $this->assertFalse($v->passes());
  855. $v = new Validator($trans, ['x' => 'नमस्कार'], ['x' => 'Alpha']);
  856. $this->assertTrue($v->passes());
  857. $v = new Validator($trans, ['x' => 'आपका स्वागत है'], ['x' => 'Alpha']);
  858. $this->assertFalse($v->passes());
  859. $v = new Validator($trans, ['x' => 'Continuación'], ['x' => 'Alpha']);
  860. $this->assertTrue($v->passes());
  861. $v = new Validator($trans, ['x' => 'ofreció su dimisión'], ['x' => 'Alpha']);
  862. $this->assertFalse($v->passes());
  863. $v = new Validator($trans, ['x' => '❤'], ['x' => 'Alpha']);
  864. $this->assertFalse($v->passes());
  865. $v = new Validator($trans, ['x' => '123'], ['x' => 'Alpha']);
  866. $this->assertFalse($v->passes());
  867. $v = new Validator($trans, ['x' => 123], ['x' => 'Alpha']);
  868. $this->assertFalse($v->passes());
  869. $v = new Validator($trans, ['x' => 'abc123'], ['x' => 'Alpha']);
  870. $this->assertFalse($v->passes());
  871. }
  872. public function testValidateAlphaNum()
  873. {
  874. $trans = $this->getRealTranslator();
  875. $v = new Validator($trans, ['x' => 'asls13dlks'], ['x' => 'AlphaNum']);
  876. $this->assertTrue($v->passes());
  877. $v = new Validator($trans, ['x' => 'http://g232oogle.com'], ['x' => 'AlphaNum']);
  878. $this->assertFalse($v->passes());
  879. $v = new Validator($trans, ['x' => '१२३'], ['x' => 'AlphaNum']);//numbers in Hindi
  880. $this->assertTrue($v->passes());
  881. $v = new Validator($trans, ['x' => '٧٨٩'], ['x' => 'AlphaNum']);//eastern arabic numerals
  882. $this->assertTrue($v->passes());
  883. $v = new Validator($trans, ['x' => 'नमस्कार'], ['x' => 'AlphaNum']);
  884. $this->assertTrue($v->passes());
  885. }
  886. public function testValidateAlphaDash()
  887. {
  888. $trans = $this->getRealTranslator();
  889. $v = new Validator($trans, ['x' => 'asls1-_3dlks'], ['x' => 'AlphaDash']);
  890. $this->assertTrue($v->passes());
  891. $v = new Validator($trans, ['x' => 'http://-g232oogle.com'], ['x' => 'AlphaDash']);
  892. $this->assertFalse($v->passes());
  893. $v = new Validator($trans, ['x' => 'नमस्कार-_'], ['x' => 'AlphaDash']);
  894. $this->assertTrue($v->passes());
  895. $v = new Validator($trans, ['x' => '٧٨٩'], ['x' => 'AlphaDash']);//eastern arabic numerals
  896. $this->assertTrue($v->passes());
  897. }
  898. public function testValidateTimezone()
  899. {
  900. $trans = $this->getRealTranslator();
  901. $v = new Validator($trans, ['foo' => 'India'], ['foo' => 'Timezone']);
  902. $this->assertFalse($v->passes());
  903. $v = new Validator($trans, ['foo' => 'Cairo'], ['foo' => 'Timezone']);
  904. $this->assertFalse($v->passes());
  905. $v = new Validator($trans, ['foo' => 'UTC'], ['foo' => 'Timezone']);
  906. $this->assertTrue($v->passes());
  907. $v = new Validator($trans, ['foo' => 'Africa/Windhoek'],