Compare commits
No commits in common. "f5e9aff0bec60e3250807e34458a683e2e59b2d1" and "58867e87e4b92e942451b67350d858e9f54c37d2" have entirely different histories.
f5e9aff0be
...
58867e87e4
|
@ -19,21 +19,11 @@ class CollectionExtension
|
||||||
return fn ($callback) => $this->registerCustomCallback('storing', $callback);
|
return fn ($callback) => $this->registerCustomCallback('storing', $callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function withDefaultProperties()
|
|
||||||
{
|
|
||||||
return fn ($callback) => $this->registerCustomCallback('withDefaultProperties', $callback);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function stored()
|
public function stored()
|
||||||
{
|
{
|
||||||
return fn ($callback) => $this->registerCustomCallback('stored', $callback);
|
return fn ($callback) => $this->registerCustomCallback('stored', $callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function withPropertyValidation()
|
|
||||||
{
|
|
||||||
return fn ($callback) => $this->registerCustomCallback('withPropertyValidation', $callback);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function runCallback()
|
public function runCallback()
|
||||||
{
|
{
|
||||||
return function (string $callback, ...$parameters) {
|
return function (string $callback, ...$parameters) {
|
||||||
|
@ -63,8 +53,6 @@ class CollectionExtension
|
||||||
'forceFileName' => fn ($name) => $name,
|
'forceFileName' => fn ($name) => $name,
|
||||||
'stored' => fn ($event) => true,
|
'stored' => fn ($event) => true,
|
||||||
'storing' => fn ($adder, $name) => $adder,
|
'storing' => fn ($adder, $name) => $adder,
|
||||||
'withDefaultProperties' => fn ($path) => [],
|
|
||||||
'withPropertyValidation' => fn ($path) => [],
|
|
||||||
]);
|
]);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,6 @@ use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\Storage;
|
use Illuminate\Support\Facades\Storage;
|
||||||
use Illuminate\Validation\Rule;
|
use Illuminate\Validation\Rule;
|
||||||
use Illuminate\Validation\ValidationException;
|
use Illuminate\Validation\ValidationException;
|
||||||
use Spatie\LaravelData\DataCollection;
|
|
||||||
use Spatie\MediaLibrary\HasMedia;
|
use Spatie\MediaLibrary\HasMedia;
|
||||||
use Spatie\MediaLibrary\MediaCollections\MediaCollection;
|
use Spatie\MediaLibrary\MediaCollections\MediaCollection;
|
||||||
use Spatie\MediaLibrary\MediaCollections\Models\Media;
|
use Spatie\MediaLibrary\MediaCollections\Models\Media;
|
||||||
|
@ -17,6 +16,26 @@ class MediaController
|
||||||
{
|
{
|
||||||
use AuthorizesRequests;
|
use AuthorizesRequests;
|
||||||
|
|
||||||
|
private function validateModel(Request $request): HasMedia
|
||||||
|
{
|
||||||
|
$model = app('media-library-helpers')->get($request->input('model'));
|
||||||
|
|
||||||
|
$request->validate([
|
||||||
|
'collection' => [
|
||||||
|
'required',
|
||||||
|
'string',
|
||||||
|
Rule::in((new $model())->getRegisteredMediaCollections()->pluck('name'))
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
|
||||||
|
$model = $model::find($request->input('id'));
|
||||||
|
if (!$model) {
|
||||||
|
throw ValidationException::withMessages(['model' => 'nicht gefunden']);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $model;
|
||||||
|
}
|
||||||
|
|
||||||
public function store(Request $request)
|
public function store(Request $request)
|
||||||
{
|
{
|
||||||
$request->validate([
|
$request->validate([
|
||||||
|
@ -47,9 +66,7 @@ class MediaController
|
||||||
$pathinfo = pathinfo($c['name']);
|
$pathinfo = pathinfo($c['name']);
|
||||||
$path = $collection->runCallback('forceFileName', $pathinfo['filename']).'.'.$pathinfo['extension'];
|
$path = $collection->runCallback('forceFileName', $pathinfo['filename']).'.'.$pathinfo['extension'];
|
||||||
Storage::disk('public')->put($path, base64_decode($c['content']));
|
Storage::disk('public')->put($path, base64_decode($c['content']));
|
||||||
$adder = $model
|
$adder = $model->addMedia(Storage::disk('public')->path($path));
|
||||||
->addMedia(Storage::disk('public')->path($path))
|
|
||||||
->withCustomProperties($collection->runCallback('withDefaultProperties', $path));
|
|
||||||
|
|
||||||
return tap(
|
return tap(
|
||||||
$collection->runCallback('storing', $adder, $path)->toMediaCollection($collection->name),
|
$collection->runCallback('storing', $adder, $path)->toMediaCollection($collection->name),
|
||||||
|
@ -60,29 +77,15 @@ class MediaController
|
||||||
return $isSingle ? MediaData::from($medias->first()) : MediaData::collection($medias);
|
return $isSingle ? MediaData::from($medias->first()) : MediaData::collection($medias);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function update(Request $request, Media $media): MediaData
|
public function index(Request $request, $parentModel, int $parentId, string $collection): JsonResponse
|
||||||
{
|
|
||||||
$rules = collect($media->model->getMediaCollection($media->collection_name)->runCallback('withPropertyValidation', $media->file_name))
|
|
||||||
->mapWithKeys(fn ($rule, $key) => ["properties.{$key}" => $rule])->toArray();
|
|
||||||
|
|
||||||
$validated = $request->validate($rules);
|
|
||||||
|
|
||||||
$media->update(['custom_properties' => data_get($validated, 'properties', [])]);
|
|
||||||
|
|
||||||
return MediaData::from($media);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function index(Request $request, $parentModel, int $parentId, string $collection): MediaData|DataCollection
|
|
||||||
{
|
{
|
||||||
$model = app('media-library-helpers')->get($parentModel);
|
$model = app('media-library-helpers')->get($parentModel);
|
||||||
$model = $model::find($parentId);
|
$model = $model::find($parentId);
|
||||||
$isSingle = 1 === $model->getMediaCollection($collection)->collectionSizeLimit;
|
$isSingle = $model->getMediaCollection($collection)->collectionSizeLimit;
|
||||||
|
|
||||||
abort_if($isSingle && !$model->getFirstMedia($collection), 404);
|
return response()->json([
|
||||||
|
'data' => $isSingle ? $model->getFirstMedia($collection) : $model->getMedia($collection)->map(fn ($c) => $c->toArray()),
|
||||||
return $isSingle
|
]);
|
||||||
? MediaData::from($model->getFirstMedia($collection))
|
|
||||||
: MediaData::collection($model->getMedia($collection));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function destroy(Media $media, Request $request): JsonResponse
|
public function destroy(Media $media, Request $request): JsonResponse
|
||||||
|
@ -98,23 +101,4 @@ class MediaController
|
||||||
return property_exists($collection, $callback);
|
return property_exists($collection, $callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function validateModel(Request $request): HasMedia
|
|
||||||
{
|
|
||||||
$model = app('media-library-helpers')->get($request->input('model'));
|
|
||||||
|
|
||||||
$request->validate([
|
|
||||||
'collection' => [
|
|
||||||
'required',
|
|
||||||
'string',
|
|
||||||
Rule::in((new $model())->getRegisteredMediaCollections()->pluck('name')),
|
|
||||||
],
|
|
||||||
]);
|
|
||||||
|
|
||||||
$model = $model::find($request->input('id'));
|
|
||||||
if (!$model) {
|
|
||||||
throw ValidationException::withMessages(['model' => 'nicht gefunden']);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $model;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,8 +10,8 @@ use Spatie\MediaLibrary\MediaCollections\Models\Media;
|
||||||
|
|
||||||
#[MapInputName(SnakeCaseMapper::class)]
|
#[MapInputName(SnakeCaseMapper::class)]
|
||||||
#[MapOutputName(SnakeCaseMapper::class)]
|
#[MapOutputName(SnakeCaseMapper::class)]
|
||||||
class MediaData extends Data
|
class MediaData extends Data {
|
||||||
{
|
|
||||||
public int $id;
|
public int $id;
|
||||||
|
|
||||||
public string $originalUrl;
|
public string $originalUrl;
|
||||||
|
@ -24,11 +24,9 @@ class MediaData extends Data
|
||||||
|
|
||||||
public string $fileName;
|
public string $fileName;
|
||||||
|
|
||||||
#[MapInputName('custom_properties')]
|
|
||||||
public array $properties;
|
|
||||||
|
|
||||||
public static function fromMedia(Media $media): self
|
public static function fromMedia(Media $media): self
|
||||||
{
|
{
|
||||||
return self::withoutMagicalCreationFrom($media);
|
return self::withoutMagicalCreationFrom($media);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@ namespace Zoomyboy\MedialibraryHelper;
|
||||||
|
|
||||||
use Illuminate\Routing\Router;
|
use Illuminate\Routing\Router;
|
||||||
use Illuminate\Support\ServiceProvider as BaseServiceProvider;
|
use Illuminate\Support\ServiceProvider as BaseServiceProvider;
|
||||||
|
use Spatie\MediaLibrary\MediaCollections\MediaCollection;
|
||||||
|
|
||||||
class ServiceProvider extends BaseServiceProvider
|
class ServiceProvider extends BaseServiceProvider
|
||||||
{
|
{
|
||||||
|
@ -19,10 +20,10 @@ class ServiceProvider extends BaseServiceProvider
|
||||||
$router->post('mediaupload', [MediaController::class, 'store'])->name('media.store');
|
$router->post('mediaupload', [MediaController::class, 'store'])->name('media.store');
|
||||||
$router->delete('mediaupload/{media}', [MediaController::class, 'destroy'])->name('media.destroy');
|
$router->delete('mediaupload/{media}', [MediaController::class, 'destroy'])->name('media.destroy');
|
||||||
$router->get('mediaupload/{parent_model}/{parent_id}/{collection}', [MediaController::class, 'index'])->name('media.index');
|
$router->get('mediaupload/{parent_model}/{parent_id}/{collection}', [MediaController::class, 'index'])->name('media.index');
|
||||||
$router->patch('mediaupload/{media}', [MediaController::class, 'update'])->name('media.update');
|
|
||||||
});
|
});
|
||||||
|
|
||||||
app(CollectionExtension::class)->boot();
|
app(CollectionExtension::class)->boot();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1,38 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace Zoomyboy\MedialibraryHelper\Tests\Feature;
|
|
||||||
|
|
||||||
test('it gets all medias', function () {
|
|
||||||
$this->auth()->registerModel();
|
|
||||||
$post = $this->newPost();
|
|
||||||
$firstMedia = $post->addMedia($this->pdfFile()->getPathname())->withCustomProperties(['test' => 'old'])->preservingOriginal()->toMediaCollection('images');
|
|
||||||
$secondMedia = $post->addMedia($this->pdfFile()->getPathname())->withCustomProperties(['test' => 'old'])->preservingOriginal()->toMediaCollection('images');
|
|
||||||
|
|
||||||
$response = $this->getJson("/mediaupload/post/{$post->id}/images");
|
|
||||||
|
|
||||||
$response->assertStatus(200);
|
|
||||||
$response->assertJsonPath('0.id', $firstMedia->id);
|
|
||||||
$response->assertJsonPath('1.id', $secondMedia->id);
|
|
||||||
$response->assertJsonPath('1.properties.test', 'old');
|
|
||||||
});
|
|
||||||
|
|
||||||
test('it gets media for single', function () {
|
|
||||||
$this->auth()->registerModel();
|
|
||||||
$post = $this->newPost();
|
|
||||||
$media = $post->addMedia($this->pdfFile()->getPathname())->withCustomProperties(['test' => 'old'])->preservingOriginal()->toMediaCollection('defaultSingleFile');
|
|
||||||
|
|
||||||
$response = $this->getJson("/mediaupload/post/{$post->id}/defaultSingleFile");
|
|
||||||
|
|
||||||
$response->assertStatus(200);
|
|
||||||
$response->assertJsonPath('id', $media->id);
|
|
||||||
$response->assertJsonPath('properties.test', 'old');
|
|
||||||
});
|
|
||||||
|
|
||||||
test('it returns 404 when media not found', function () {
|
|
||||||
$this->auth()->registerModel();
|
|
||||||
$post = $this->newPost();
|
|
||||||
|
|
||||||
$response = $this->getJson("/mediaupload/post/{$post->id}/defaultSingleFile");
|
|
||||||
|
|
||||||
$response->assertStatus(404);
|
|
||||||
});
|
|
|
@ -1,39 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace Zoomyboy\MedialibraryHelper\Tests\Feature;
|
|
||||||
|
|
||||||
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',
|
|
||||||
'missing' => 'value',
|
|
||||||
],
|
|
||||||
]);
|
|
||||||
|
|
||||||
$response->assertStatus(200);
|
|
||||||
$this->assertEquals('new', $media->fresh()->getCustomProperty('test'));
|
|
||||||
$this->assertEquals(null, $media->fresh()->getCustomProperty('missing'));
|
|
||||||
$response->assertJsonPath('properties.test', 'new');
|
|
||||||
$response->assertJsonMissingPath('properties.missing');
|
|
||||||
});
|
|
||||||
|
|
||||||
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');
|
|
||||||
});
|
|
|
@ -18,7 +18,7 @@ test('it uploads a single file to a single file collection', function () {
|
||||||
'payload' => [
|
'payload' => [
|
||||||
'content' => $content,
|
'content' => $content,
|
||||||
'name' => 'beispiel bild.jpg',
|
'name' => 'beispiel bild.jpg',
|
||||||
],
|
]
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$response->assertStatus(201);
|
$response->assertStatus(201);
|
||||||
|
@ -47,13 +47,13 @@ test('it forces a filename for a single collection', function () {
|
||||||
'payload' => [
|
'payload' => [
|
||||||
'content' => $content,
|
'content' => $content,
|
||||||
'name' => 'beispiel bild.jpg',
|
'name' => 'beispiel bild.jpg',
|
||||||
],
|
]
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$response->assertStatus(201);
|
$response->assertStatus(201);
|
||||||
$this->assertEquals('beispiel-bild-2023-04-04.jpg', $post->getFirstMedia('singleForced')->file_name);
|
$this->assertEquals('beispiel-bild-2023-04-04.jpg', $post->getFirstMedia('singleForced')->file_name);
|
||||||
$response->assertJsonPath('name', 'beispiel bild 2023-04-04');
|
$response->assertJsonPath('name', "beispiel bild 2023-04-04");
|
||||||
$response->assertJsonPath('file_name', 'beispiel-bild-2023-04-04.jpg');
|
$response->assertJsonPath('file_name', "beispiel-bild-2023-04-04.jpg");
|
||||||
});
|
});
|
||||||
|
|
||||||
test('it sets custom title when storing', function() {
|
test('it sets custom title when storing', function() {
|
||||||
|
@ -68,7 +68,7 @@ test('it sets custom title when storing', function () {
|
||||||
'payload' => [
|
'payload' => [
|
||||||
'content' => $content,
|
'content' => $content,
|
||||||
'name' => 'beispiel bild.jpg',
|
'name' => 'beispiel bild.jpg',
|
||||||
],
|
]
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$response->assertStatus(201);
|
$response->assertStatus(201);
|
||||||
|
@ -78,27 +78,6 @@ test('it sets custom title when storing', function () {
|
||||||
$this->assertEquals('beispiel bild', $media->getCustomProperty('ttt'));
|
$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() {
|
test('it forces a filename for multiple collections', function() {
|
||||||
Carbon::setTestNow(Carbon::parse('2023-04-04 00:00:00'));
|
Carbon::setTestNow(Carbon::parse('2023-04-04 00:00:00'));
|
||||||
$this->auth()->registerModel();
|
$this->auth()->registerModel();
|
||||||
|
@ -113,8 +92,8 @@ test('it forces a filename for multiple collections', function () {
|
||||||
[
|
[
|
||||||
'content' => $content,
|
'content' => $content,
|
||||||
'name' => 'beispiel bild.jpg',
|
'name' => 'beispiel bild.jpg',
|
||||||
],
|
]
|
||||||
],
|
]
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$response->assertStatus(201);
|
$response->assertStatus(201);
|
||||||
|
@ -135,7 +114,7 @@ test('it throws event when file has been uploaded', function () {
|
||||||
'payload' => [
|
'payload' => [
|
||||||
'content' => $content,
|
'content' => $content,
|
||||||
'name' => 'beispiel bild.jpg',
|
'name' => 'beispiel bild.jpg',
|
||||||
],
|
]
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$response->assertStatus(201);
|
$response->assertStatus(201);
|
||||||
|
@ -162,7 +141,7 @@ test('it throws event when multiple files uploaded', function () {
|
||||||
'content' => $content,
|
'content' => $content,
|
||||||
'name' => 'beispiel bild 1.jpg',
|
'name' => 'beispiel bild 1.jpg',
|
||||||
],
|
],
|
||||||
],
|
]
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$response->assertStatus(201);
|
$response->assertStatus(201);
|
||||||
|
@ -188,8 +167,8 @@ test('it uploads multiple files', function () {
|
||||||
[
|
[
|
||||||
'content' => base64_encode($file->getContent()),
|
'content' => base64_encode($file->getContent()),
|
||||||
'name' => 'beispiel bild.jpg',
|
'name' => 'beispiel bild.jpg',
|
||||||
],
|
]
|
||||||
],
|
]
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$response->assertStatus(201);
|
$response->assertStatus(201);
|
||||||
|
@ -218,7 +197,7 @@ test('it returns 403 when not authorized', function () {
|
||||||
'payload' => [
|
'payload' => [
|
||||||
'content' => base64_encode($this->pdfFile()->getContent()),
|
'content' => base64_encode($this->pdfFile()->getContent()),
|
||||||
'name' => 'beispiel bild.jpg',
|
'name' => 'beispiel bild.jpg',
|
||||||
],
|
]
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$response->assertStatus(403);
|
$response->assertStatus(403);
|
||||||
|
@ -236,7 +215,7 @@ test('it needs validation for single files', function (array $payload, string $i
|
||||||
'content' => base64_encode($this->pdfFile()->getContent()),
|
'content' => base64_encode($this->pdfFile()->getContent()),
|
||||||
'name' => 'beispiel bild.jpg',
|
'name' => 'beispiel bild.jpg',
|
||||||
],
|
],
|
||||||
...$payload,
|
...$payload
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$response->assertStatus(422);
|
$response->assertStatus(422);
|
||||||
|
@ -258,6 +237,7 @@ test('it needs validation for single files', function (array $payload, string $i
|
||||||
yield [ ['payload' => 55], 'payload' ];
|
yield [ ['payload' => 55], 'payload' ];
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
test('it needs validation for multiple files', function(array $payload, string $invalidFieldName) {
|
test('it needs validation for multiple files', function(array $payload, string $invalidFieldName) {
|
||||||
$this->auth()->registerModel();
|
$this->auth()->registerModel();
|
||||||
$post = $this->newPost();
|
$post = $this->newPost();
|
||||||
|
@ -270,9 +250,9 @@ test('it needs validation for multiple files', function (array $payload, string
|
||||||
[
|
[
|
||||||
'content' => base64_encode($this->pdfFile()->getContent()),
|
'content' => base64_encode($this->pdfFile()->getContent()),
|
||||||
'name' => 'beispiel bild.jpg',
|
'name' => 'beispiel bild.jpg',
|
||||||
|
]
|
||||||
],
|
],
|
||||||
],
|
...$payload
|
||||||
...$payload,
|
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$response->assertStatus(422);
|
$response->assertStatus(422);
|
||||||
|
@ -296,3 +276,5 @@ test('it needs validation for multiple files', function (array $payload, string
|
||||||
yield [ ['payload' => [['name' => null, 'content' => 'aaadfdf']]], 'payload.0.name' ];
|
yield [ ['payload' => [['name' => null, 'content' => 'aaadfdf']]], 'payload.0.name' ];
|
||||||
yield [ ['payload' => ['RRR']], 'payload.0' ];
|
yield [ ['payload' => ['RRR']], 'payload.0' ];
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,6 @@ namespace Zoomyboy\MedialibraryHelper\Tests\Models;
|
||||||
|
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Illuminate\Support\Facades\Event;
|
use Illuminate\Support\Facades\Event;
|
||||||
use Illuminate\Support\Str;
|
|
||||||
use Spatie\MediaLibrary\HasMedia;
|
use Spatie\MediaLibrary\HasMedia;
|
||||||
use Spatie\MediaLibrary\InteractsWithMedia;
|
use Spatie\MediaLibrary\InteractsWithMedia;
|
||||||
use Spatie\MediaLibrary\MediaCollections\Models\Media;
|
use Spatie\MediaLibrary\MediaCollections\Models\Media;
|
||||||
|
@ -12,6 +11,7 @@ use Zoomyboy\MedialibraryHelper\Tests\Events\MediaStored;
|
||||||
|
|
||||||
class Post extends Model implements HasMedia
|
class Post extends Model implements HasMedia
|
||||||
{
|
{
|
||||||
|
|
||||||
use InteractsWithMedia;
|
use InteractsWithMedia;
|
||||||
|
|
||||||
public $guarded = [];
|
public $guarded = [];
|
||||||
|
@ -44,11 +44,7 @@ class Post extends Model implements HasMedia
|
||||||
$this->addMediaCollection('multipleFilesWithEvent')->stored(function(Media $media) {
|
$this->addMediaCollection('multipleFilesWithEvent')->stored(function(Media $media) {
|
||||||
Event::dispatch(new MediaStored($media));
|
Event::dispatch(new MediaStored($media));
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
$this->addMediaCollection('multipleProperties')->singleFile()->withDefaultProperties(fn ($path) => [
|
|
||||||
'test' => Str::camel($path),
|
|
||||||
])->withPropertyValidation(fn ($path) => [
|
|
||||||
'test' => 'string|max:10',
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,3 +5,4 @@ use Illuminate\Support\Facades\Storage;
|
||||||
uses(Zoomyboy\MedialibraryHelper\Tests\TestCase::class)->in('Feature');
|
uses(Zoomyboy\MedialibraryHelper\Tests\TestCase::class)->in('Feature');
|
||||||
uses(Illuminate\Foundation\Testing\RefreshDatabase::class)->in('Feature');
|
uses(Illuminate\Foundation\Testing\RefreshDatabase::class)->in('Feature');
|
||||||
uses()->beforeEach(fn () => Storage::fake('media'))->in('Feature');
|
uses()->beforeEach(fn () => Storage::fake('media'))->in('Feature');
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
namespace Zoomyboy\MedialibraryHelper\Tests;
|
namespace Zoomyboy\MedialibraryHelper\Tests;
|
||||||
|
|
||||||
use Illuminate\Http\File;
|
use Illuminate\Http\File;
|
||||||
|
use Illuminate\Support\Facades\Config;
|
||||||
use Illuminate\Support\Facades\Gate;
|
use Illuminate\Support\Facades\Gate;
|
||||||
use Orchestra\Testbench\TestCase as BaseTestCase;
|
use Orchestra\Testbench\TestCase as BaseTestCase;
|
||||||
use Spatie\LaravelData\LaravelDataServiceProvider;
|
use Spatie\LaravelData\LaravelDataServiceProvider;
|
||||||
|
@ -12,8 +13,11 @@ use Zoomyboy\MedialibraryHelper\Tests\Models\Post;
|
||||||
|
|
||||||
class TestCase extends BaseTestCase
|
class TestCase extends BaseTestCase
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Define database migrations.
|
* Define database migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
*/
|
*/
|
||||||
protected function defineDatabaseMigrations(): void
|
protected function defineDatabaseMigrations(): void
|
||||||
{
|
{
|
||||||
|
@ -30,7 +34,7 @@ class TestCase extends BaseTestCase
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generate a pdf file with a filename and get path.
|
* Generate a pdf file with a filename and get path
|
||||||
*/
|
*/
|
||||||
protected function pdfFile(?string $filename = null): File
|
protected function pdfFile(?string $filename = null): File
|
||||||
{
|
{
|
||||||
|
@ -73,9 +77,4 @@ class TestCase extends BaseTestCase
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function defineEnvironment($app)
|
|
||||||
{
|
|
||||||
$app['config']->set('medialibrary-helper.middleware', ['web']);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue