FileValidatorTest.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. <?php
  2. namespace Symfony\Tests\Components\Validator;
  3. require_once __DIR__.'/../../../../../bootstrap.php';
  4. use Symfony\Components\Validator\Constraints\File;
  5. use Symfony\Components\Validator\Constraints\FileValidator;
  6. class FileValidatorTest extends \PHPUnit_Framework_TestCase
  7. {
  8. protected $validator;
  9. protected $path;
  10. protected $file;
  11. public function setUp()
  12. {
  13. $this->validator = new FileValidator();
  14. $this->path = sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'FileValidatorTest';
  15. $this->file = fopen($this->path, 'w');
  16. }
  17. public function tearDown()
  18. {
  19. fclose($this->file);
  20. }
  21. public function testNullIsValid()
  22. {
  23. $this->assertTrue($this->validator->isValid(null, new File()));
  24. }
  25. public function testExpectsStringCompatibleTypeOrFile()
  26. {
  27. $this->setExpectedException('Symfony\Components\Validator\Exception\UnexpectedTypeException');
  28. $this->validator->isValid(new \stdClass(), new File());
  29. }
  30. public function testValidFile()
  31. {
  32. $this->assertTrue($this->validator->isValid($this->path, new File()));
  33. }
  34. public function testTooLargeBytes()
  35. {
  36. fwrite($this->file, str_repeat('0', 11));
  37. $constraint = new File(array(
  38. 'maxSize' => 10,
  39. 'maxSizeMessage' => 'myMessage',
  40. ));
  41. $this->assertFalse($this->validator->isValid($this->path, $constraint));
  42. $this->assertEquals($this->validator->getMessageTemplate(), 'myMessage');
  43. $this->assertEquals($this->validator->getMessageParameters(), array(
  44. 'limit' => '10 bytes',
  45. 'size' => '11 bytes',
  46. 'file' => $this->path,
  47. ));
  48. }
  49. public function testTooLargeKiloBytes()
  50. {
  51. fwrite($this->file, str_repeat('0', 1400));
  52. $constraint = new File(array(
  53. 'maxSize' => '1k',
  54. 'maxSizeMessage' => 'myMessage',
  55. ));
  56. $this->assertFalse($this->validator->isValid($this->path, $constraint));
  57. $this->assertEquals($this->validator->getMessageTemplate(), 'myMessage');
  58. $this->assertEquals($this->validator->getMessageParameters(), array(
  59. 'limit' => '1 kB',
  60. 'size' => '1.4 kB',
  61. 'file' => $this->path,
  62. ));
  63. }
  64. public function testTooLargeMegaBytes()
  65. {
  66. fwrite($this->file, str_repeat('0', 1400000));
  67. $constraint = new File(array(
  68. 'maxSize' => '1M',
  69. 'maxSizeMessage' => 'myMessage',
  70. ));
  71. $this->assertFalse($this->validator->isValid($this->path, $constraint));
  72. $this->assertEquals($this->validator->getMessageTemplate(), 'myMessage');
  73. $this->assertEquals($this->validator->getMessageParameters(), array(
  74. 'limit' => '1 MB',
  75. 'size' => '1.4 MB',
  76. 'file' => $this->path,
  77. ));
  78. }
  79. public function testInvalidMaxSize()
  80. {
  81. $constraint = new File(array(
  82. 'maxSize' => '1abc',
  83. ));
  84. $this->setExpectedException('Symfony\Components\Validator\Exception\ConstraintDefinitionException');
  85. $this->validator->isValid($this->path, $constraint);
  86. }
  87. public function testFileNotFound()
  88. {
  89. $constraint = new File(array(
  90. 'notFoundMessage' => 'myMessage',
  91. ));
  92. $this->assertFalse($this->validator->isValid('foobar', $constraint));
  93. $this->assertEquals($this->validator->getMessageTemplate(), 'myMessage');
  94. $this->assertEquals($this->validator->getMessageParameters(), array(
  95. 'file' => 'foobar',
  96. ));
  97. }
  98. public function testValidMimeType()
  99. {
  100. $file = $this->getMock('Symfony\Components\File\File', array(), array(), '', false);
  101. $file->expects($this->any())
  102. ->method('getPath')
  103. ->will($this->returnValue($this->path));
  104. $file->expects($this->any())
  105. ->method('getMimeType')
  106. ->will($this->returnValue('image/jpg'));
  107. $constraint = new File(array(
  108. 'mimeTypes' => array('image/png', 'image/jpg'),
  109. ));
  110. $this->assertTrue($this->validator->isValid($file, $constraint));
  111. }
  112. public function testInvalidMimeType()
  113. {
  114. $file = $this->getMock('Symfony\Components\File\File', array(), array(), '', false);
  115. $file->expects($this->any())
  116. ->method('getPath')
  117. ->will($this->returnValue($this->path));
  118. $file->expects($this->any())
  119. ->method('getMimeType')
  120. ->will($this->returnValue('application/pdf'));
  121. $constraint = new File(array(
  122. 'mimeTypes' => array('image/png', 'image/jpg'),
  123. 'mimeTypesMessage' => 'myMessage',
  124. ));
  125. $this->assertFalse($this->validator->isValid($file, $constraint));
  126. $this->assertEquals($this->validator->getMessageTemplate(), 'myMessage');
  127. $this->assertEquals($this->validator->getMessageParameters(), array(
  128. 'type' => '"application/pdf"',
  129. 'types' => '"image/png", "image/jpg"',
  130. 'file' => $this->path,
  131. ));
  132. }
  133. }