medialibrary-helper/tests/Feature/UpdateTest.php

304 lines
12 KiB
PHP

<?php
namespace Zoomyboy\MedialibraryHelper\Tests\Feature;
use Carbon\Carbon;
use Illuminate\Support\Facades\Event;
use Zoomyboy\MedialibraryHelper\Tests\Events\MediaStored;
test('it updates a single files properties', function () {
$this->auth()->registerModel();
$post = $this->newPost();
$post->addMedia($this->pdfFile()->getPathname())->withCustomProperties(['test' => 'old'])->preservingOriginal()->toMediaCollection('multipleProperties');
$media = $post->getFirstMedia('multipleProperties');
$response = $this->patchJson("/mediaupload/{$media->id}", [
'properties' => [
'test' => 'new',
],
]);
$response->assertStatus(200);
$this->assertEquals('new', $media->fresh()->getCustomProperty('test'));
$response->assertJsonPath('properties.test', 'new');
});
test('it validates a single files properties', function () {
$this->auth()->registerModel();
$post = $this->newPost();
$post->addMedia($this->pdfFile()->getPathname())->withCustomProperties(['test' => 'old'])->preservingOriginal()->toMediaCollection('multipleProperties');
$media = $post->getFirstMedia('multipleProperties');
$response = $this->patchJson("/mediaupload/{$media->id}", [
'properties' => [
'test' => 'new feswfewfwewefew wewe ew ewewf wefwfwefwefwefwewefewwedw sad fd',
],
]);
$response->assertStatus(422);
$response->assertJsonValidationErrors('properties.test');
});
// test('it forces a filename for a single collection', function () {
// Carbon::setTestNow(Carbon::parse('2023-04-04 00:00:00'));
// $this->auth()->registerModel();
// $post = $this->newPost();
// $content = base64_encode($this->pdfFile()->getContent());
//
// $response = $this->postJson('/mediaupload', [
// 'model' => 'post',
// 'id' => $post->id,
// 'collection' => 'singleForced',
// 'payload' => [
// 'content' => $content,
// 'name' => 'beispiel bild.jpg',
// ],
// ]);
//
// $response->assertStatus(201);
// $this->assertEquals('beispiel-bild-2023-04-04.jpg', $post->getFirstMedia('singleForced')->file_name);
// $response->assertJsonPath('name', 'beispiel bild 2023-04-04');
// $response->assertJsonPath('file_name', 'beispiel-bild-2023-04-04.jpg');
// });
//
// test('it sets custom title when storing', function () {
// $this->auth()->registerModel();
// $post = $this->newPost();
// $content = base64_encode($this->pdfFile()->getContent());
//
// $response = $this->postJson('/mediaupload', [
// 'model' => 'post',
// 'id' => $post->id,
// 'collection' => 'singleStoringHook',
// 'payload' => [
// 'content' => $content,
// 'name' => 'beispiel bild.jpg',
// ],
// ]);
//
// $response->assertStatus(201);
// $media = $post->getFirstMedia('singleStoringHook');
//
// $this->assertEquals('AAA', $media->getCustomProperty('use'));
// $this->assertEquals('beispiel bild', $media->getCustomProperty('ttt'));
// });
//
// test('it sets custom properties from properties method', function () {
// $this->auth()->registerModel();
// $post = $this->newPost();
// $content = base64_encode($this->pdfFile()->getContent());
//
// $response = $this->postJson('/mediaupload', [
// 'model' => 'post',
// 'id' => $post->id,
// 'collection' => 'multipleProperties',
// 'payload' => [
// 'content' => $content,
// 'name' => 'beispiel bild.jpg',
// ],
// ]);
//
// $response->assertStatus(201);
// $media = $post->getFirstMedia('multipleProperties');
//
// $this->assertEquals('beispielBild.jpg', $media->getCustomProperty('test'));
// });
//
// test('it forces a filename for multiple collections', function () {
// Carbon::setTestNow(Carbon::parse('2023-04-04 00:00:00'));
// $this->auth()->registerModel();
// $post = $this->newPost();
// $content = base64_encode($this->pdfFile()->getContent());
//
// $response = $this->postJson('/mediaupload', [
// 'model' => 'post',
// 'id' => $post->id,
// 'collection' => 'multipleForced',
// 'payload' => [
// [
// 'content' => $content,
// 'name' => 'beispiel bild.jpg',
// ],
// ],
// ]);
//
// $response->assertStatus(201);
// $this->assertEquals('beispiel-bild-2023-04-04.jpg', $post->getFirstMedia('multipleForced')->file_name);
// });
//
// test('it throws event when file has been uploaded', function () {
// Event::fake();
// Carbon::setTestNow(Carbon::parse('2023-04-04 00:00:00'));
// $this->auth()->registerModel()->withoutExceptionHandling();
// $post = $this->newPost();
// $content = base64_encode($this->pdfFile()->getContent());
//
// $response = $this->postJson('/mediaupload', [
// 'model' => 'post',
// 'id' => $post->id,
// 'collection' => 'singleWithEvent',
// 'payload' => [
// 'content' => $content,
// 'name' => 'beispiel bild.jpg',
// ],
// ]);
//
// $response->assertStatus(201);
// Event::assertDispatched(MediaStored::class, fn ($event) => $event->media->id === $response->json('id'));
// });
//
// test('it throws event when multiple files uploaded', function () {
// Event::fake();
// Carbon::setTestNow(Carbon::parse('2023-04-04 00:00:00'));
// $this->auth()->registerModel()->withoutExceptionHandling();
// $post = $this->newPost();
// $content = base64_encode($this->pdfFile()->getContent());
//
// $response = $this->postJson('/mediaupload', [
// 'model' => 'post',
// 'id' => $post->id,
// 'collection' => 'multipleFilesWithEvent',
// 'payload' => [
// [
// 'content' => $content,
// 'name' => 'beispiel bild.jpg',
// ],
// [
// 'content' => $content,
// 'name' => 'beispiel bild 1.jpg',
// ],
// ],
// ]);
//
// $response->assertStatus(201);
// Event::assertDispatched(MediaStored::class, fn ($event) => $event->media->id === $response->json('0.id'));
// Event::assertDispatched(MediaStored::class, fn ($event) => $event->media->id === $response->json('1.id'));
// });
//
// test('it uploads multiple files', function () {
// $this->auth()->registerModel();
// $post = $this->newPost();
// $file = $this->pdfFile();
// $post->addMedia($file->getPathname())->preservingOriginal()->toMediaCollection('images');
//
// $response = $this->postJson('/mediaupload', [
// 'model' => 'post',
// 'id' => $post->id,
// 'collection' => 'images',
// 'payload' => [
// [
// 'content' => base64_encode($file->getContent()),
// 'name' => 'aaaa.jpg',
// ],
// [
// 'content' => base64_encode($file->getContent()),
// 'name' => 'beispiel bild.jpg',
// ],
// ],
// ]);
//
// $response->assertStatus(201);
// $this->assertCount(3, $post->getMedia('images'));
// $media = $post->getMedia('images')->skip(1)->values();
// $this->assertCount(2, $response->json());
// $response->assertJsonPath('0.id', $media->get(0)->id);
// $response->assertJsonPath('1.id', $media->get(1)->id);
// $response->assertJsonPath('0.original_url', $media->first()->getFullUrl());
// $response->assertJsonPath('0.size', 3028);
// $response->assertJsonPath('0.name', 'aaaa');
// $response->assertJsonPath('0.collection_name', 'images');
// $response->assertJsonPath('0.file_name', 'aaaa.jpg');
// $response->assertJsonMissingPath('0.model_type');
// $response->assertJsonMissingPath('0.model_id');
// });
//
// test('it returns 403 when not authorized', function () {
// $this->auth(['storeMedia' => false])->registerModel();
// $post = $this->newPost();
//
// $response = $this->postJson('/mediaupload', [
// 'model' => 'post',
// 'id' => $post->id,
// 'collection' => 'defaultSingleFile',
// 'payload' => [
// 'content' => base64_encode($this->pdfFile()->getContent()),
// 'name' => 'beispiel bild.jpg',
// ],
// ]);
//
// $response->assertStatus(403);
// });
//
// test('it needs validation for single files', function (array $payload, string $invalidFieldName) {
// $this->auth()->registerModel();
// $post = $this->newPost();
//
// $response = $this->postJson('/mediaupload', [
// 'model' => 'post',
// 'id' => $post->id,
// 'collection' => 'defaultSingleFile',
// 'payload' => [
// 'content' => base64_encode($this->pdfFile()->getContent()),
// 'name' => 'beispiel bild.jpg',
// ],
// ...$payload,
// ]);
//
// $response->assertStatus(422);
// $response->assertJsonValidationErrors($invalidFieldName);
// })->with(function () {
// yield [['model' => 'missingmodel'], 'model'];
// yield [['id' => -1], 'model'];
// yield [['collection' => 'missingcollection'], 'collection'];
// yield [['payload' => ['name' => 'AAA', 'content' => []]], 'payload.content'];
// yield [['payload' => ['name' => 'AAA', 'content' => ['UU']]], 'payload.content'];
// yield [['payload' => ['name' => 'AAA', 'content' => null]], 'payload.content'];
// yield [['payload' => ['name' => 'AAA', 'content' => '']], 'payload.content'];
// yield [['payload' => ['name' => 'AAA', 'content' => 1]], 'payload.content'];
// yield [['payload' => ['name' => '', 'content' => 'aaadfdf']], 'payload.name'];
// yield [['payload' => ['name' => ['U'], 'content' => 'aaadfdf']], 'payload.name'];
// yield [['payload' => ['name' => 1, 'content' => 'aaadfdf']], 'payload.name'];
// yield [['payload' => ['name' => null, 'content' => 'aaadfdf']], 'payload.name'];
// yield [['payload' => 'lalal'], 'payload'];
// yield [['payload' => 55], 'payload'];
// });
//
// test('it needs validation for multiple files', function (array $payload, string $invalidFieldName) {
// $this->auth()->registerModel();
// $post = $this->newPost();
//
// $response = $this->postJson('/mediaupload', [
// 'model' => 'post',
// 'id' => $post->id,
// 'collection' => 'images',
// 'payload' => [
// [
// 'content' => base64_encode($this->pdfFile()->getContent()),
// 'name' => 'beispiel bild.jpg',
// ],
// ],
// ...$payload,
// ]);
//
// $response->assertStatus(422);
// $response->assertJsonValidationErrors($invalidFieldName);
// })->with(function () {
// yield [['model' => 'missingmodel'], 'model'];
// yield [['id' => -1], 'model'];
// yield [['collection' => 'missingcollection'], 'collection'];
// yield [['payload' => 'lalal'], 'payload'];
// yield [['payload' => []], 'payload'];
// yield [['payload' => 1], 'payload'];
//
// yield [['payload' => [['name' => 'AAA', 'content' => []]]], 'payload.0.content'];
// yield [['payload' => [['name' => 'AAA', 'content' => ['UU']]]], 'payload.0.content'];
// yield [['payload' => [['name' => 'AAA', 'content' => null]]], 'payload.0.content'];
// yield [['payload' => [['name' => 'AAA', 'content' => '']]], 'payload.0.content'];
// yield [['payload' => [['name' => 'AAA', 'content' => 1]]], 'payload.0.content'];
// yield [['payload' => [['name' => '', 'content' => 'aaadfdf']]], 'payload.0.name'];
// yield [['payload' => [['name' => ['U'], 'content' => 'aaadfdf']]], 'payload.0.name'];
// yield [['payload' => [['name' => 1, 'content' => 'aaadfdf']]], 'payload.0.name'];
// yield [['payload' => [['name' => null, 'content' => 'aaadfdf']]], 'payload.0.name'];
// yield [['payload' => ['RRR']], 'payload.0'];
// });