/tests/Image/ImageTest.php

https://bitbucket.org/resourcemode/smodels · PHP · 344 lines · 178 code · 84 blank · 82 comment · 6 complexity · c84d4be64b0ecb607f29ef6393dca8f1 MD5 · raw file

  1. <?php
  2. use Supa\Category\Service as CategoryService;
  3. use Supa\Image\Mapper as ImageMapper;
  4. use Supa\Image\Service as ImageService;
  5. use Supa\Product\Service as ProductService;
  6. use Supa\User\Service as UserService;
  7. use Supa\Image\Image;
  8. use Supa\Image\Collection as ImageCollection;
  9. /**
  10. * @backupGlobals disabled
  11. */
  12. class ImageTest extends PHPUnit_Framework_TestCase {
  13. public function tearDown() {
  14. AllTests::truncateTables();
  15. }
  16. public function setUp() {
  17. AllTests::truncateTables();
  18. AllTests::executeSQLFile('C:/wamp/www/smodels/smodels/sql/test_data_inserts.sql');
  19. }
  20. public function testCanLoadImage() {
  21. /* @var $imageService ImageService */
  22. $imageService = AllTests::getService('ImageService');
  23. $image = $imageService->getByUid(1);
  24. if(!$image) {
  25. $this->fail($imageService->getLastException()->getMessage());
  26. }
  27. $this->assertTrue(($image instanceof Image));
  28. $this->assertEquals(1, $image->getUID());
  29. $this->assertEquals('test_filename', $image->getFilename());
  30. $this->assertEquals('original_test_filename.jpg', $image->getOriginalFilename());
  31. $this->assertEquals(1, $image->getCreatedBy()->getUID());
  32. $this->assertEquals('127.0.0.1', $image->getUploadedFrom());
  33. }
  34. public function testCanCreateImageRecord() {
  35. /* @var $userService UserService */
  36. $userService = AllTests::getService('UserService');
  37. $user = $userService->getByUid(1);
  38. /* @var $imageService ImageService */
  39. $imageService = AllTests::getService('ImageService');
  40. $data['filename'] = 'filename';
  41. $data['originalFilename'] = 'filename_original.jpg';
  42. $data['uploadedFrom'] = 'localhost';
  43. $image = $imageService->createImage($data, $user);
  44. if(!$image) {
  45. $this->fail($imageService->getLastException()->getMessage());
  46. }
  47. $this->assertTrue(($image instanceof Image));
  48. $this->assertEquals('filename', $image->getFilename());
  49. $this->assertEquals('filename_original.jpg', $image->getOriginalFilename());
  50. $this->assertEquals('localhost', $image->getUploadedFrom());
  51. $this->assertEquals(1, $image->getCreatedBy()->getUID());
  52. $this->assertNotNull($image->getCreated());
  53. }
  54. public function testCanDeleteImage() {
  55. /* @var $userService UserService */
  56. $userService = AllTests::getService('UserService');
  57. $user = $userService->getByUid(1);
  58. /* @var $imageService ImageService */
  59. $imageService = AllTests::getService('ImageService');
  60. $image = $imageService->getByUid(1);
  61. // get filename so we can check if image file is actually deleted
  62. $filename = $image->getOriginalFilename();
  63. $imageService->deleteImage(1);
  64. if($imageService->getByUid(1)) {
  65. $this->fail('deleteImage didnt delete the image');
  66. }
  67. $this->assertFalse(file_exists('c:/wamp/www/smodels/smodels/images/products/' . $filename));
  68. }
  69. public function testCanGetProductImages() {
  70. /* @var $productService ProductService */
  71. $productService = AllTests::getService('ProductService');
  72. /* @var $imageService ImageService */
  73. $imageService = AllTests::getService('ImageService');
  74. $product = $productService->getByUid(1); // has 2 linked images, inserted in test_data_inserts.sql
  75. $images = $product->getImages(); //$imageService->getProductImages($product);
  76. $this->assertTrue($images instanceof ImageCollection);
  77. $this->assertEquals(2, $images->count());
  78. }
  79. // public function testCanGetCategoryImages() {
  80. //
  81. // /* @var $categoryService CategoryService */
  82. // $categoryService = AllTests::getService('CategoryService');
  83. //
  84. // /* @var $imageService ImageService */
  85. // $imageService = AllTests::getService('ImageService');
  86. //
  87. // $category = $categoryService->getByUid(2); // has 2 linked images, inserted in test_data_inserts.sql
  88. //
  89. // $images = $category->getImages();//$imageService->getCategoryImages($category);
  90. // if(!$images) {
  91. // $this->fail(var_dump($imageService->getMessages()));
  92. // }
  93. //
  94. // $this->assertTrue($images instanceof ImageCollection);
  95. // $this->assertEquals(2, $images->count());
  96. // }
  97. // public function testCanAddImagesToCategory() {
  98. //
  99. // /* @var $categoryService CategoryService */
  100. // $categoryService = AllTests::getService('CategoryService');
  101. //
  102. // /* @var $imageService ImageService */
  103. // $imageService = AllTests::getService('ImageService');
  104. //
  105. // $category = $categoryService->getByUid(3); // has 0 linked images
  106. //
  107. // // check data
  108. // $images = $category->getImages();//$imageService->getCategoryImages($category);
  109. // $this->assertTrue($images instanceof ImageCollection);
  110. // $this->assertEquals(0, $images->count());
  111. //
  112. // $imageService->addImagesToCategory(array(1, 2), $category);
  113. //
  114. // // change to use Category object
  115. // $images = $category->getImages();//$imageService->getCategoryImages($category);
  116. // $this->assertTrue($images instanceof ImageCollection);
  117. // $this->assertEquals(2, $images->count());
  118. //
  119. // }
  120. public function testCanRemoveImagesFromCategory() {
  121. /* @var $categoryService CategoryService */
  122. $categoryService = AllTests::getService('CategoryService');
  123. /* @var $imageService ImageService */
  124. $imageService = AllTests::getService('ImageService');
  125. $category = $categoryService->getByUid(2); // has 2 linked images
  126. // check data
  127. $images = $category->getImages(); // $imageService->getCategoryImages($category);
  128. $this->assertTrue($images instanceof ImageCollection);
  129. $this->assertEquals(2, $images->count());
  130. $imageService->removeCategoryImages(array(1, 2), $category);
  131. // change to use Category object
  132. $images = $category->getImages(); //$imageService->getCategoryImages($category);
  133. $this->assertTrue($images instanceof ImageCollection);
  134. $this->assertEquals(0, $images->count());
  135. }
  136. public function testCanAddImagesToProduct() {
  137. /* @var $productService ProductService */
  138. $productService = AllTests::getService('ProductService');
  139. /* @var $imageService ImageService */
  140. $imageService = AllTests::getService('ImageService');
  141. $product = $productService->getByUid(2); // has 0 linked images
  142. // check data
  143. $images = $product->getImages(); // $imageService->getProductImages($product);
  144. $this->assertTrue($images instanceof ImageCollection);
  145. $this->assertEquals(0, $images->count());
  146. $imageService->addImagesToProduct(array(1, 2), $product);
  147. // change to use Product object
  148. $images = $product->getImages(); // $imageService->getProductImages($product);
  149. $this->assertTrue($images instanceof ImageCollection);
  150. $this->assertEquals(2, $images->count());
  151. }
  152. public function testCanRemoveImagesFromProduct() {
  153. /* @var $productService ProductService */
  154. $productService = AllTests::getService('ProductService');
  155. /* @var $imageService ImageService */
  156. $imageService = AllTests::getService('ImageService');
  157. $product = $productService->getByUid(1); // has 2 linked images
  158. // check data
  159. $images = $product->getImages(); // $imageService->getProductImages($product);
  160. $this->assertTrue($images instanceof ImageCollection);
  161. $this->assertEquals(2, $images->count());
  162. $imageService->removeProductImages(array(1, 2), $product);
  163. // change to use Product object
  164. $images = $product->getImages(); // $imageService->getProductImages($product);
  165. $this->assertTrue($images instanceof ImageCollection);
  166. $this->assertEquals(0, $images->count());
  167. }
  168. public function testCanUploadImageFile() {
  169. // copy test file
  170. // ensure the file bbc-olympic.png exists!
  171. copy('c:/wamp/www/smodels/smodels/images/test/bbc-olympic.png', '/tmp/bbc-olympic.png');
  172. /* @var $imageService ImageService */
  173. $imageService = AllTests::getService('ImageService');
  174. /* @var $userService UserService */
  175. $userService = AllTests::getService('UserService');
  176. //$user = $userService->getByUid(1);
  177. // ensure files do not exist in storage dir
  178. @unlink('c:/wamp/www/smodels/smodels/images/product/bbc-olympic.png');
  179. $_FILES = array(
  180. 'logo' => array(
  181. 'name' => 'bbc-olympic.png',
  182. 'type' => 'image/x-png',
  183. 'tmp_name' => 'C:/tmp/bbc-olympic.png',
  184. 'error' => 0,
  185. 'size' => 397106
  186. )
  187. );
  188. $image = new MockImage();
  189. $image->setFilename('bbc-olympic');
  190. $image->setOriginalFilename('bbc-olympic.png');
  191. // upload test photograph
  192. $this->assertTrue($image->uploadFile($_FILES['logo']));
  193. // assert file was uploaded
  194. $this->assertTrue($image->isUploaded());
  195. // check properties set
  196. $this->assertEquals('bbc-olympic', $image->getFilename());
  197. $this->assertEquals('bbc-olympic.png', $image->getOriginalFilename());
  198. }
  199. public function testCanUploadImageFileAndCreateRecord() {
  200. // copy test file
  201. // ensure the file bbc-olympic.png exists!
  202. copy('c:/wamp/www/smodels/smodels/images/test/bbc-olympic.png', '/tmp/bbc-olympic.png');
  203. /* @var $imageService MockImageService */
  204. $imageService = new MockImageService(AllTests::getService('ImageMapper'));
  205. /* @var $userService UserService */
  206. $userService = AllTests::getService('UserService');
  207. $user = $userService->getByUid(1);
  208. // ensure files do not exist in storage dir
  209. @unlink('c:/wamp/www/smodels/smodels/images/product/bbc-olympic.png');
  210. $_FILES = array(
  211. 'logo' => array(
  212. 'name' => 'bbc-olympic.png',
  213. 'type' => 'image/x-png',
  214. 'tmp_name' => 'C:/tmp/bbc-olympic.png',
  215. 'error' => 0,
  216. 'size' => 397106
  217. )
  218. );
  219. $data = array();
  220. $data['filename'] = 'bbc-olympic';
  221. $data['originalFilename'] = 'bbc-olympic.png';
  222. $data['uploadedFrom'] = 'localhost';
  223. $data['filesArray'] = $_FILES['logo'];
  224. $image = $imageService->createImage($data, $user);
  225. if(!$image) {
  226. $this->fail($imageService->getLastException()->getMessage());
  227. }
  228. // assert file was uploaded
  229. $this->assertTrue($image->isUploaded());
  230. // check properties set
  231. $this->assertEquals('bbc-olympic', $image->getFilename());
  232. $this->assertEquals('bbc-olympic.png', $image->getOriginalFilename());
  233. $this->assertEquals(1, $image->getCreatedBy()->getUID());
  234. $this->assertNotNull($image->getCreated());
  235. $this->assertNotNull($image->getUID());
  236. $this->assertEquals('localhost', $image->getUploadedFrom());
  237. }
  238. public function testCanGetFileExtensionOfLoadedImage() {
  239. /* @var $imageService ImageService */
  240. $imageService = AllTests::getService('ImageService');
  241. $image = $imageService->getByUid(1);
  242. if(!$image) {
  243. $this->fail($imageService->getLastException()->getMessage());
  244. }
  245. $this->assertTrue(($image instanceof Image));
  246. $this->assertEquals(1, $image->getUID());
  247. $this->assertEquals('.jpg', $image->getExtension());
  248. }
  249. public function testCanGenerateCorrectFileNameForSizeSpecificImages() {
  250. /* @var $imageService ImageService */
  251. $imageService = AllTests::getService('ImageService');
  252. $image = $imageService->getByUid(1);
  253. if(!$image) {
  254. $this->fail($imageService->getLastException()->getMessage());
  255. }
  256. $this->assertTrue(($image instanceof Image));
  257. $this->assertEquals(1, $image->getUID());
  258. $this->assertEquals('1t100x100.jpg', $image->getFilename('t', '100', '100'));
  259. }
  260. }