. // }}} namespace Component\Attachment\tests\Controller; use App\Core\DB; use App\Util\GNUsocialTestCase; use Component\Attachment\Entity\Attachment; use Component\Attachment\Entity\AttachmentToNote; class AttachmentTest extends GNUsocialTestCase { public function testNoAttachmentID() { // This calls static::bootKernel(), and creates a "client" that is acting as the browser $client = static::createClient(); //$client->request('GET', '/attachment'); //$this->assertResponseStatusCodeSame(404); $client->request('GET', '/object/note/1/attachment/-1'); $this->assertResponseStatusCodeSame(404); $client->request('GET', '/object/note/1/attachment/asd'); $this->assertResponseStatusCodeSame(404); $client->request('GET', '/object/note/1/attachment/0'); // In the meantime, throwing ClientException doesn't actually result in the reaching the UI, as it's intercepted // by the helpful framework that displays the stack traces and such. This should be easily fixable when we have // our own error pages $this->assertResponseStatusCodeSame(500); // TODO (exception page) 404 $this->assertSelectorTextContains('.stacktrace', 'No such attachment.'); } private function testAttachment(string $suffix = '') { $client = static::createClient(); $attachment_id = DB::findOneBy(Attachment::class, ['filehash' => '5d8ee7ead51a28803b4ee5cb2306a0b90b6ba570f1e5bcc2209926f6ab08e7ea'])->getId(); $note_id = DB::findOneBy(AttachmentToNote::class, ['attachment_id' => $attachment_id])->getNoteId(); $crawler = $client->request('GET', "/object/note/{$note_id}/attachment/{$attachment_id}{$suffix}"); } public function testAttachmentShow() { $this->testAttachment(); $this->assertResponseIsSuccessful(); $this->assertSelectorTextContains('figure figcaption', 'image.jpg'); } public function testAttachmentView() { $this->testAttachment('/view'); $this->assertResponseIsSuccessful(); } public function testAttachmentDownload() { $this->testAttachment('/download'); $this->assertResponseIsSuccessful(); } public function testAttachmentThumbnailSmall() { $this->testAttachment('/thumbnail/small'); $this->assertResponseIsSuccessful(); } public function testAttachmentThumbnailMedium() { $this->testAttachment('/thumbnail/medium'); $this->assertResponseIsSuccessful(); } public function testAttachmentThumbnailBig() { $this->testAttachment('/thumbnail/big'); $this->assertResponseIsSuccessful(); } }