FileValidatorTest.php 5.2 KB

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