Skip to content

Commit

Permalink
Merge pull request #279 from opcodesio/json-resource-wrapping-behaviour
Browse files Browse the repository at this point in the history
fix JsonResource::withoutWrapping usage spilling outside the package
  • Loading branch information
arukompas authored Sep 22, 2023
2 parents 1bcc3cc + 1c8dfe8 commit f565a70
Show file tree
Hide file tree
Showing 9 changed files with 85 additions and 10 deletions.
6 changes: 5 additions & 1 deletion routes/api.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,14 @@

use Illuminate\Support\Facades\Route;
use Opcodes\LogViewer\Http\Middleware\ForwardRequestToHostMiddleware;
use Opcodes\LogViewer\Http\Middleware\JsonResourceWithoutWrappingMiddleware;

Route::get('hosts', 'HostsController@index')->name('log-viewer.hosts');

Route::middleware(ForwardRequestToHostMiddleware::class)->group(function () {
Route::middleware([
ForwardRequestToHostMiddleware::class,
JsonResourceWithoutWrappingMiddleware::class,
])->group(function () {
Route::get('folders', 'FoldersController@index')->name('log-viewer.folders');
Route::get('folders/{folderIdentifier}/download', 'FoldersController@download')->name('log-viewer.folders.download');
Route::post('folders/{folderIdentifier}/clear-cache', 'FoldersController@clearCache')->name('log-viewer.folders.clear-cache');
Expand Down
3 changes: 0 additions & 3 deletions src/Http/Controllers/FilesController.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
namespace Opcodes\LogViewer\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;
use Illuminate\Support\Facades\Gate;
use Opcodes\LogViewer\Facades\LogViewer;
use Opcodes\LogViewer\Http\Resources\LogFileResource;
Expand All @@ -12,8 +11,6 @@ class FilesController
{
public function index(Request $request)
{
JsonResource::withoutWrapping();

$files = LogViewer::getFiles();

if ($request->query('direction', 'desc') === 'asc') {
Expand Down
3 changes: 0 additions & 3 deletions src/Http/Controllers/FoldersController.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
namespace Opcodes\LogViewer\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;
use Illuminate\Support\Facades\Gate;
use Opcodes\LogViewer\Facades\LogViewer;
use Opcodes\LogViewer\Http\Resources\LogFolderResource;
Expand All @@ -13,8 +12,6 @@ class FoldersController
{
public function index(Request $request)
{
JsonResource::withoutWrapping();

$folders = LogViewer::getFilesGroupedByFolder();

if ($request->query('direction', 'desc') === 'asc') {
Expand Down
23 changes: 23 additions & 0 deletions src/Http/Middleware/JsonResourceWithoutWrappingMiddleware.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?php

namespace Opcodes\LogViewer\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;

class JsonResourceWithoutWrappingMiddleware
{
public function handle(Request $request, Closure $next)
{
$originalWrappingBehaviour = JsonResource::$wrap;

JsonResource::withoutWrapping();

$response = $next($request);

JsonResource::wrap($originalWrappingBehaviour);

return $response;
}
}
2 changes: 1 addition & 1 deletion src/LogFile.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@

class LogFile
{
use Concerns\LogFile\HasMetadata;
use Concerns\LogFile\CanCacheData;
use Concerns\LogFile\HasMetadata;

public string $path;
public string $name;
Expand Down
2 changes: 1 addition & 1 deletion src/LogIndex.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@

class LogIndex
{
use Concerns\LogIndex\HasMetadata;
use Concerns\LogIndex\CanCacheIndex;
use Concerns\LogIndex\CanFilterIndex;
use Concerns\LogIndex\CanIterateIndex;
use Concerns\LogIndex\CanSplitIndexIntoChunks;
use Concerns\LogIndex\HasMetadata;
use Concerns\LogIndex\PreservesIndexingProgress;

const DEFAULT_CHUNK_SIZE = 50_000;
Expand Down
2 changes: 1 addition & 1 deletion src/Readers/BaseLogReader.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@

abstract class BaseLogReader
{
use Concerns\LogReader\KeepsInstances;
use Concerns\LogReader\KeepsFileHandle;
use Concerns\LogReader\KeepsInstances;

protected LogFile $file;

Expand Down
32 changes: 32 additions & 0 deletions tests/Feature/LogFilesControllerTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?php

use function Pest\Laravel\getJson;

beforeEach(function () {
config(['log-viewer.include_files' => ['*.log']]);
});

it('can get the log files', function () {
$files = generateLogFiles([
'1.one.log',
'2.two.log',
'3.three.log',
], randomContent: true);

$response = getJson(route('log-viewer.files'));

expect($response->json())->not->toHaveKey('data');
$response->assertJsonCount(count($files))
->assertJsonFragment([
'name' => $files[0]->name,
'size' => $files[0]->size(),
])
->assertJsonFragment([
'name' => $files[1]->name,
'size' => $files[1]->size(),
])
->assertJsonFragment([
'name' => $files[2]->name,
'size' => $files[2]->size(),
]);
});
22 changes: 22 additions & 0 deletions tests/Feature/LogFoldersControllerTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<?php

use function Pest\Laravel\getJson;

beforeEach(function () {
config(['log-viewer.include_files' => ['*/**.log']]);
});

it('can get the log files', function () {
generateLogFiles([
'one/1.one.log',
'one/2.two.log',
'two/3.three.log',
], randomContent: true);

$response = getJson(route('log-viewer.folders'));

expect($response->json())->not->toHaveKey('data');
$response->assertJsonCount(2)
->assertJsonFragment(['clean_path' => 'root'.DIRECTORY_SEPARATOR.'one'])
->assertJsonFragment(['clean_path' => 'root'.DIRECTORY_SEPARATOR.'two']);
});

0 comments on commit f565a70

Please sign in to comment.