[TESTS] Fix broken tests and expand tests around Attachments
This commit is contained in:
		| @@ -24,8 +24,10 @@ namespace App\Tests\Core; | |||||||
| use App\Core\DB\DB; | use App\Core\DB\DB; | ||||||
| use App\Core\Form; | use App\Core\Form; | ||||||
| use App\Entity\GSActor; | use App\Entity\GSActor; | ||||||
|  | use App\Util\Exception\ServerException; | ||||||
| use App\Util\Form\ArrayTransformer; | use App\Util\Form\ArrayTransformer; | ||||||
| use App\Util\GNUsocialTestCase; | use App\Util\GNUsocialTestCase; | ||||||
|  | use Jchook\AssertThrows\AssertThrows; | ||||||
| use Symfony\Component\Form\Extension\Core\Type\SubmitType; | use Symfony\Component\Form\Extension\Core\Type\SubmitType; | ||||||
| use Symfony\Component\Form\Extension\Core\Type\TextareaType; | use Symfony\Component\Form\Extension\Core\Type\TextareaType; | ||||||
| use Symfony\Component\Form\Form as SymfForm; | use Symfony\Component\Form\Form as SymfForm; | ||||||
| @@ -33,13 +35,15 @@ use Symfony\Component\HttpFoundation\Request; | |||||||
|  |  | ||||||
| class FormTest extends GNUsocialTestCase | class FormTest extends GNUsocialTestCase | ||||||
| { | { | ||||||
|  |     use AssertThrows; | ||||||
|  |  | ||||||
|     public function testCreate() |     public function testCreate() | ||||||
|     { |     { | ||||||
|         parent::bootKernel(); |         parent::bootKernel(); | ||||||
|         $form = Form::create($form_array = [ |         $form = Form::create($form_array = [ | ||||||
|             ['content',     TextareaType::class, ['label' => ' ', 'data' => '', 'attr' => ['placeholder' => 'placeholder']]], |             ['content',     TextareaType::class, ['label' => ' ', 'data' => '', 'attr' => ['placeholder' => 'placeholder']]], | ||||||
|             ['array_trans', TextareaType::class, ['data' => ['foo', 'bar'], 'transformer' => ArrayTransformer::class]], |             ['array_trans', TextareaType::class, ['data' => ['foo', 'bar'], 'transformer' => ArrayTransformer::class]], | ||||||
|             ['testpost',        SubmitType::class,   ['label' => 'Post']], |             ['testpost',    SubmitType::class,   ['label' => 'Post']], | ||||||
|         ]); |         ]); | ||||||
|         static::assertSame(get_class($form), 'Symfony\\Component\\Form\\Form'); |         static::assertSame(get_class($form), 'Symfony\\Component\\Form\\Form'); | ||||||
|         foreach ($form as $name => $f) { |         foreach ($form as $name => $f) { | ||||||
| @@ -74,6 +78,15 @@ class FormTest extends GNUsocialTestCase | |||||||
|         static::assertTrue(Form::isRequired($form_array, 'content')); |         static::assertTrue(Form::isRequired($form_array, 'content')); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Using 'save' or 'submit' as a form name is not allowed, becuase then they're likely to | ||||||
|  |      * collide with other forms in the same page | ||||||
|  |      */ | ||||||
|  |     public function testDisallowedGenericFormName() | ||||||
|  |     { | ||||||
|  |         static::assertThrows(ServerException::class, fn () => Form::create([['save', SubmitType::class, []]])); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Test creating a form with default values pulled from an existing object. Can be used in conjunction with `Form::hanlde` to update said object |      * Test creating a form with default values pulled from an existing object. Can be used in conjunction with `Form::hanlde` to update said object | ||||||
|      */ |      */ | ||||||
|   | |||||||
| @@ -20,12 +20,14 @@ | |||||||
| namespace App\Tests\Entity; | namespace App\Tests\Entity; | ||||||
|  |  | ||||||
| use App\Core\DB\DB; | use App\Core\DB\DB; | ||||||
|  | use App\Core\Event; | ||||||
| use App\Core\GSFile; | use App\Core\GSFile; | ||||||
| use App\Entity\AttachmentToNote; | use App\Entity\AttachmentToNote; | ||||||
| use App\Entity\Note; | use App\Entity\Note; | ||||||
| use App\Util\GNUsocialTestCase; | use App\Util\GNUsocialTestCase; | ||||||
| use App\Util\TemporaryFile; | use App\Util\TemporaryFile; | ||||||
| use Jchook\AssertThrows\AssertThrows; | use Jchook\AssertThrows\AssertThrows; | ||||||
|  | use Symfony\Component\HttpFoundation\File\File; | ||||||
|  |  | ||||||
| class AttachmentTest extends GNUsocialTestCase | class AttachmentTest extends GNUsocialTestCase | ||||||
| { | { | ||||||
| @@ -69,6 +71,26 @@ class AttachmentTest extends GNUsocialTestCase | |||||||
|         static::assertSame([], DB::findBy('attachment', ['filehash' => $hash])); |         static::assertSame([], DB::findBy('attachment', ['filehash' => $hash])); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     public function testSanitizeAndStoreFileAsAttachment() | ||||||
|  |     { | ||||||
|  |         $test = function (string $method) { | ||||||
|  |             $temp_file = new TemporaryFile(); | ||||||
|  |             $temp_file->write(file_get_contents(INSTALLDIR . '/tests/sample-uploads/gnu-logo.png')); | ||||||
|  |             Event::handle('HashFile', [$temp_file->getPathname(), &$hash]); | ||||||
|  |             $attachment = DB::findOneBy('attachment', ['filehash' => $hash]); | ||||||
|  |             $attachment->{$method}(); | ||||||
|  |             DB::flush(); | ||||||
|  |  | ||||||
|  |             $file = new File($temp_file->getRealPath()); | ||||||
|  |             GSFile::sanitizeAndStoreFileAsAttachment($file); | ||||||
|  |             static::assertNotNull($attachment->getFilename()); | ||||||
|  |             static::assertTrue(file_exists($attachment->getPath())); | ||||||
|  |         }; | ||||||
|  |  | ||||||
|  |         $test('deleteStorage'); | ||||||
|  |         $test('kill'); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     public function testGetBestTitle() |     public function testGetBestTitle() | ||||||
|     { |     { | ||||||
|         $attachment = DB::findBy('attachment', ['mimetype' => 'image/png'], limit: 1)[0]; |         $attachment = DB::findBy('attachment', ['mimetype' => 'image/png'], limit: 1)[0]; | ||||||
| @@ -92,4 +114,20 @@ class AttachmentTest extends GNUsocialTestCase | |||||||
|         $id         = $attachment->getId(); |         $id         = $attachment->getId(); | ||||||
|         static::assertSame("/attachment/{$id}/view", $attachment->getUrl()); |         static::assertSame("/attachment/{$id}/view", $attachment->getUrl()); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     public function testMimetype() | ||||||
|  |     { | ||||||
|  |         $file = new \SplFileInfo(INSTALLDIR . '/tests/sample-uploads/image.jpg'); | ||||||
|  |         Event::handle('HashFile', [$file->getPathname(), &$hash]); | ||||||
|  |         $attachment = DB::findOneBy('attachment', ['filehash' => $hash]); | ||||||
|  |  | ||||||
|  |         static::assertSame('image', $attachment->getMimetypeMajor()); | ||||||
|  |         static::assertSame('jpeg', $attachment->getMimetypeMinor()); | ||||||
|  |  | ||||||
|  |         $mimetype = $attachment->getMimetype(); | ||||||
|  |         $attachment->setMimetype(null); | ||||||
|  |         static::assertNull($attachment->getMimetypeMajor()); | ||||||
|  |         static::assertNull($attachment->getMimetypeMinor()); | ||||||
|  |         $attachment->setMimetype($mimetype); | ||||||
|  |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -22,6 +22,7 @@ namespace App\Tests\Entity; | |||||||
| use App\Core\DB\DB; | use App\Core\DB\DB; | ||||||
| use App\Core\Event; | use App\Core\Event; | ||||||
| use App\Entity\AttachmentThumbnail; | use App\Entity\AttachmentThumbnail; | ||||||
|  | use App\Util\Exception\ClientException; | ||||||
| use App\Util\Exception\NotStoredLocallyException; | use App\Util\Exception\NotStoredLocallyException; | ||||||
| use App\Util\GNUsocialTestCase; | use App\Util\GNUsocialTestCase; | ||||||
| use Functional as F; | use Functional as F; | ||||||
| @@ -67,6 +68,17 @@ class AttachmentThumbnailTest extends GNUsocialTestCase | |||||||
|         $attachment->kill(); |         $attachment->kill(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     public function testInvalidThumbnail() | ||||||
|  |     { | ||||||
|  |         parent::bootKernel(); | ||||||
|  |  | ||||||
|  |         $file = new \SplFileInfo(INSTALLDIR . '/tests/sample-uploads/spreadsheet.ods'); | ||||||
|  |         Event::handle('HashFile', [$file->getPathname(), &$hash]); | ||||||
|  |         $attachment = DB::findOneBy('attachment', ['filehash' => $hash]); | ||||||
|  |  | ||||||
|  |         static::assertThrows(ClientException::class, fn () => AttachmentThumbnail::getOrCreate($attachment, width: 1, height: 1, crop: false)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     public function testPredictScalingValues() |     public function testPredictScalingValues() | ||||||
|     { |     { | ||||||
|         // Test without cropping |         // Test without cropping | ||||||
|   | |||||||
							
								
								
									
										
											BIN
										
									
								
								tests/sample-uploads/gnu-logo.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								tests/sample-uploads/gnu-logo.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 388 KiB | 
		Reference in New Issue
	
	Block a user