| 
									
										
										
										
											2018-12-23 23:34:38 +08:00
										 |  |  | <?php namespace Tests\Uploads; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-05 01:11:00 +08:00
										 |  |  | use BookStack\Entities\Page; | 
					
						
							| 
									
										
										
										
											2019-03-21 07:59:55 +08:00
										 |  |  | use Illuminate\Http\UploadedFile; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-23 23:34:38 +08:00
										 |  |  | trait UsesImages | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Get the path to our basic test image. | 
					
						
							|  |  |  |      * @return string | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2019-12-22 20:44:49 +08:00
										 |  |  |     protected function getTestImageFilePath(?string $fileName = null) | 
					
						
							| 
									
										
										
										
											2018-12-23 23:34:38 +08:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2019-12-22 20:44:49 +08:00
										 |  |  |         if (is_null($fileName)) { | 
					
						
							|  |  |  |             $fileName = 'test-image.png'; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2019-12-22 21:17:14 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-22 20:44:49 +08:00
										 |  |  |         return base_path('tests/test-data/' . $fileName); | 
					
						
							| 
									
										
										
										
											2018-12-23 23:34:38 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Get a test image that can be uploaded | 
					
						
							|  |  |  |      * @param $fileName | 
					
						
							| 
									
										
										
										
											2019-03-21 07:59:55 +08:00
										 |  |  |      * @return UploadedFile | 
					
						
							| 
									
										
										
										
											2018-12-23 23:34:38 +08:00
										 |  |  |      */ | 
					
						
							| 
									
										
										
										
											2019-12-22 20:44:49 +08:00
										 |  |  |     protected function getTestImage($fileName, ?string $testDataFileName = null) | 
					
						
							| 
									
										
										
										
											2018-12-23 23:34:38 +08:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2019-12-22 20:44:49 +08:00
										 |  |  |         return new UploadedFile($this->getTestImageFilePath($testDataFileName), $fileName, 'image/png', 5238, null, true); | 
					
						
							| 
									
										
										
										
											2018-12-23 23:34:38 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Get the raw file data for the test image. | 
					
						
							|  |  |  |      * @return false|string | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     protected function getTestImageContent() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         return file_get_contents($this->getTestImageFilePath()); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Get the path for a test image. | 
					
						
							|  |  |  |      * @param $type | 
					
						
							|  |  |  |      * @param $fileName | 
					
						
							|  |  |  |      * @return string | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     protected function getTestImagePath($type, $fileName) | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2019-05-05 01:11:00 +08:00
										 |  |  |         return '/uploads/images/' . $type . '/' . Date('Y-m') . '/' . $fileName; | 
					
						
							| 
									
										
										
										
											2018-12-23 23:34:38 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Uploads an image with the given name. | 
					
						
							|  |  |  |      * @param $name | 
					
						
							|  |  |  |      * @param int $uploadedTo | 
					
						
							| 
									
										
										
										
											2019-03-21 07:59:55 +08:00
										 |  |  |      * @param string $contentType | 
					
						
							| 
									
										
										
										
											2018-12-23 23:34:38 +08:00
										 |  |  |      * @return \Illuminate\Foundation\Testing\TestResponse | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2019-12-22 20:44:49 +08:00
										 |  |  |     protected function uploadImage($name, $uploadedTo = 0, $contentType = 'image/png', ?string $testDataFileName = null) | 
					
						
							| 
									
										
										
										
											2018-12-23 23:34:38 +08:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2019-12-22 20:44:49 +08:00
										 |  |  |         $file = $this->getTestImage($name, $testDataFileName); | 
					
						
							| 
									
										
										
										
											2019-03-21 07:59:55 +08:00
										 |  |  |         return $this->withHeader('Content-Type', $contentType) | 
					
						
							| 
									
										
										
										
											2019-05-05 01:11:00 +08:00
										 |  |  |             ->call('POST', '/images/gallery', ['uploaded_to' => $uploadedTo], [], ['file' => $file], []); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Upload a new gallery image. | 
					
						
							|  |  |  |      * Returns the image name. | 
					
						
							|  |  |  |      * Can provide a page to relate the image to. | 
					
						
							|  |  |  |      * @param Page|null $page | 
					
						
							|  |  |  |      * @return array | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2019-12-22 20:44:49 +08:00
										 |  |  |     protected function uploadGalleryImage(Page $page = null, ?string $testDataFileName = null) | 
					
						
							| 
									
										
										
										
											2019-05-05 01:11:00 +08:00
										 |  |  |     { | 
					
						
							|  |  |  |         if ($page === null) { | 
					
						
							|  |  |  |             $page = Page::query()->first(); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-22 20:44:49 +08:00
										 |  |  |         $imageName = $testDataFileName ?? 'first-image.png'; | 
					
						
							| 
									
										
										
										
											2019-05-05 01:11:00 +08:00
										 |  |  |         $relPath = $this->getTestImagePath('gallery', $imageName); | 
					
						
							|  |  |  |         $this->deleteImage($relPath); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-22 20:44:49 +08:00
										 |  |  |         $upload = $this->uploadImage($imageName, $page->id, 'image/png', $testDataFileName); | 
					
						
							| 
									
										
										
										
											2019-05-05 01:11:00 +08:00
										 |  |  |         $upload->assertStatus(200); | 
					
						
							|  |  |  |         return [ | 
					
						
							|  |  |  |             'name' => $imageName, | 
					
						
							|  |  |  |             'path' => $relPath, | 
					
						
							| 
									
										
										
										
											2019-12-22 20:44:49 +08:00
										 |  |  |             'page' => $page, | 
					
						
							|  |  |  |             'response' => json_decode($upload->getContent()), | 
					
						
							| 
									
										
										
										
											2019-05-05 01:11:00 +08:00
										 |  |  |         ]; | 
					
						
							| 
									
										
										
										
											2018-12-23 23:34:38 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Delete an uploaded image. | 
					
						
							|  |  |  |      * @param $relPath | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     protected function deleteImage($relPath) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $path = public_path($relPath); | 
					
						
							|  |  |  |         if (file_exists($path)) { | 
					
						
							|  |  |  |             unlink($path); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |