PageRenderTime 24ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 0ms

/app/tests/Tricks/Services/Upload/ImageUploadServiceTest.php

https://gitlab.com/dayitv89/laravel-tricks
PHP | 244 lines | 175 code | 41 blank | 28 comment | 0 complexity | 064a53921230400c1147357589575ee8 MD5 | raw file
  1. <?php
  2. namespace Tricks\Services\Upload;
  3. use Intervention\Image\Image as Base;
  4. use Image;
  5. use Mockery;
  6. use ReflectionMethod;
  7. use TestCase;
  8. $headers = [];
  9. function header($value) {
  10. global $headers;
  11. $headers[] = $value;
  12. }
  13. function get_headers() {
  14. global $headers;
  15. return $headers;
  16. }
  17. class MockableImage
  18. extends Base
  19. {
  20. public function __construct($path)
  21. {
  22. // nothing to see here
  23. }
  24. }
  25. class ImageUploadServiceTest
  26. extends TestCase
  27. {
  28. public function tearDown()
  29. {
  30. Mockery::close();
  31. }
  32. /**
  33. * @group tricks/services
  34. */
  35. public function testConstructor()
  36. {
  37. $filesystemMock = Mockery::mock('Illuminate\Filesystem\Filesystem');
  38. $imageUploadService = new ImageUploadService($filesystemMock);
  39. $this->assertEquals(
  40. $filesystemMock,
  41. $this->getProtectedProperty($imageUploadService, 'filesystem')
  42. );
  43. }
  44. /**
  45. * @group tricks/services
  46. */
  47. public function testEnableCORS()
  48. {
  49. $filesystemMock = Mockery::mock('Illuminate\Filesystem\Filesystem');
  50. $imageUploadService = new ImageUploadService($filesystemMock);
  51. $imageUploadService->enableCORS('foo');
  52. $headers = get_headers();
  53. $this->assertContains(
  54. 'Access-Control-Allow-Origin: foo',
  55. $headers
  56. );
  57. $this->assertContains(
  58. 'Access-Control-Allow-Methods: POST, GET, OPTIONS',
  59. $headers
  60. );
  61. $this->assertContains(
  62. 'Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Range, Content-Disposition, Content-Type',
  63. $headers
  64. );
  65. }
  66. /**
  67. * @group tricks/services
  68. */
  69. public function testGetFullPath()
  70. {
  71. $filesystemMock = Mockery::mock('Illuminate\Filesystem\Filesystem');
  72. $imageUploadServiceMock = Mockery::mock('Tricks\Services\Upload\ImageUploadService', [
  73. $filesystemMock
  74. ])
  75. ->shouldAllowMockingProtectedMethods()
  76. ->makePartial();
  77. $this->assertEquals(
  78. realpath(__DIR__ . '/../../../../../public/favicon.ico'),
  79. $imageUploadServiceMock->getFullPath('favicon.ico')
  80. );
  81. }
  82. /**
  83. * @group tricks/services
  84. */
  85. public function testMakeFilename()
  86. {
  87. $filesystemMock = Mockery::mock('Illuminate\Filesystem\Filesystem');
  88. $imageUploadServiceMock = Mockery::mock('Tricks\Services\Upload\ImageUploadService', [
  89. $filesystemMock
  90. ])
  91. ->shouldAllowMockingProtectedMethods()
  92. ->makePartial();
  93. $this->setProtectedProperty($imageUploadServiceMock, 'extension', 'foo');
  94. $this->assertRegExp(
  95. '/[0-9a-f]{40}\.foo/',
  96. $imageUploadServiceMock->makeFilename()
  97. );
  98. }
  99. /**
  100. * @group tricks/services
  101. */
  102. public function testGetFile()
  103. {
  104. $filesystemMock = Mockery::mock('Illuminate\Filesystem\Filesystem')
  105. ->makePartial();
  106. $filesystemMock
  107. ->shouldReceive('get')
  108. ->atLeast()->once()
  109. ->with('foo')
  110. ->andReturn('mocked');
  111. $imageUploadServiceMock = Mockery::mock('Tricks\Services\Upload\ImageUploadService', [
  112. $filesystemMock
  113. ])
  114. ->shouldAllowMockingProtectedMethods()
  115. ->makePartial();
  116. $this->assertEquals(
  117. 'mocked',
  118. $imageUploadServiceMock->getFile('foo')
  119. );
  120. }
  121. /**
  122. * @group tricks/services
  123. */
  124. public function testGetFileSize()
  125. {
  126. $filesystemMock = Mockery::mock('Illuminate\Filesystem\Filesystem')
  127. ->makePartial();
  128. $filesystemMock
  129. ->shouldReceive('size')
  130. ->atLeast()->once()
  131. ->with('foo')
  132. ->andReturn('mocked');
  133. $imageUploadServiceMock = Mockery::mock('Tricks\Services\Upload\ImageUploadService', [
  134. $filesystemMock
  135. ])
  136. ->shouldAllowMockingProtectedMethods()
  137. ->makePartial();
  138. $this->assertEquals(
  139. 'mocked',
  140. $imageUploadServiceMock->getFileSize('foo')
  141. );
  142. }
  143. /**
  144. * @group tricks/services
  145. */
  146. public function testGetDataUrl()
  147. {
  148. $filesystemMock = Mockery::mock('Illuminate\Filesystem\Filesystem');
  149. $imageUploadServiceMock = Mockery::mock('Tricks\Services\Upload\ImageUploadService', [
  150. $filesystemMock
  151. ])
  152. ->shouldAllowMockingProtectedMethods()
  153. ->makePartial();
  154. $imageUploadServiceMock
  155. ->shouldReceive('getFile')
  156. ->atLeast()->once()
  157. ->andReturn('bar');
  158. $this->assertEquals(
  159. 'data:foo;base64,' . base64_encode('bar'),
  160. $imageUploadServiceMock->getDataUrl('foo', 'bar')
  161. );
  162. }
  163. /**
  164. * @group tricks/services
  165. */
  166. public function testsGetJsonBody()
  167. {
  168. $filesystemMock = Mockery::mock('Illuminate\Filesystem\Filesystem');
  169. $imageUploadServiceMock = Mockery::mock('Tricks\Services\Upload\ImageUploadService', [
  170. $filesystemMock
  171. ])
  172. ->shouldAllowMockingProtectedMethods()
  173. ->makePartial();
  174. $imageUploadServiceMock
  175. ->shouldReceive('getFileSize')
  176. ->atLeast()->once()
  177. ->with('foo')
  178. ->andReturn('mocked');
  179. $imageUploadServiceMock
  180. ->shouldReceive('getDataUrl')
  181. ->atLeast()->once()
  182. ->with('bar', 'foo')
  183. ->andReturn('mocked');
  184. $this->assertEquals(
  185. [
  186. 'images' => [
  187. 'filename' => 'baz',
  188. 'mime' => 'bar',
  189. 'size' => 'mocked',
  190. 'dataURL' => 'mocked'
  191. ]
  192. ],
  193. $imageUploadServiceMock->getJsonBody('baz', 'bar', 'foo')
  194. );
  195. }
  196. /**
  197. * @group tricks/services
  198. */
  199. public function testHandle()
  200. {
  201. $this->incomplete('Need to mock Image::make()');
  202. }
  203. }