Skip to content

Commit 5f47687

Browse files
authored
Merge pull request #430 from opcodesio/feature/ability-to-exclude-full-text-in-api
Make it possible to exclude "full_text" from logs API response
2 parents a4d0536 + bbf4614 commit 5f47687

File tree

5 files changed

+49
-16
lines changed

5 files changed

+49
-16
lines changed

src/Http/Resources/LogResource.php

+8-2
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,9 @@ class LogResource extends JsonResource
1414
public function toArray($request): array
1515
{
1616
$level = $this->getLevel();
17+
$excludeFullText = $request->boolean('exclude_full_text', false);
1718

18-
return [
19+
$data = [
1920
'index' => $this->index,
2021
'file_identifier' => $this->fileIdentifier,
2122
'file_position' => $this->filePosition,
@@ -30,8 +31,13 @@ public function toArray($request): array
3031
'context' => $this->context,
3132
'extra' => $this->extra,
3233

33-
'full_text' => $this->getOriginalText(),
3434
'url' => $this->url(),
3535
];
36+
37+
if (! $excludeFullText) {
38+
$data['full_text'] = $this->getOriginalText();
39+
}
40+
41+
return $data;
3642
}
3743
}

tests/Feature/Authorization/CanDownloadFoldersTest.php

+5-5
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ function assertCanDownloadFolder(string $folderName, string $expectedFileName):
2121

2222
function assertCannotDownloadFolder(string $folderName): void
2323
{
24-
get(route('log-viewer.folders.request-download', $folderName))
25-
->assertForbidden();
24+
get(route('log-viewer.folders.request-download', $folderName))
25+
->assertForbidden();
2626
}
2727

2828
test('can download every folder by default', function () {
@@ -33,9 +33,9 @@ function assertCannotDownloadFolder(string $folderName): void
3333
});
3434

3535
test('cannot download a folder that\'s not found', function () {
36-
get(route('log-viewer.folders.request-download', 'notfound'))
37-
->assertNotFound();
38-
});
36+
get(route('log-viewer.folders.request-download', 'notfound'))
37+
->assertNotFound();
38+
});
3939

4040
test('"downloadLogFolder" gate can prevent folder download', function () {
4141
generateLogFiles([$fileName = 'laravel.log']);

tests/Feature/Authorization/CanDownloadLogFileTest.php

+5-5
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ function assertCanDownloadFile(string $fileName): void
2020

2121
function assertCannotDownloadFile(string $fileName): void
2222
{
23-
get(route('log-viewer.files.request-download', $fileName))
24-
->assertForbidden();
23+
get(route('log-viewer.files.request-download', $fileName))
24+
->assertForbidden();
2525
}
2626

2727
test('can download every file by default', function () {
@@ -31,9 +31,9 @@ function assertCannotDownloadFile(string $fileName): void
3131
});
3232

3333
test('cannot download a file that\'s not found', function () {
34-
get(route('log-viewer.files.request-download', 'notfound.log'))
35-
->assertNotFound();
36-
});
34+
get(route('log-viewer.files.request-download', 'notfound.log'))
35+
->assertNotFound();
36+
});
3737

3838
test('"downloadLogFile" gate can prevent file download', function () {
3939
generateLogFiles([$fileName = 'laravel.log']);

tests/Feature/Authorization/CanViewLogViewerTest.php

+4-4
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
use function Pest\Laravel\get;
77

88
test('can define an "auth" callback for authorization', function () {
9-
get(route('log-viewer.index'))->assertOk();
9+
get(route('log-viewer.index'))->assertOk();
1010

1111
// with the gate defined and a false value, it should not be possible to access the log viewer
1212
LogViewer::auth(fn ($request) => false);
@@ -15,7 +15,7 @@
1515
// now let's give them access
1616
LogViewer::auth(fn ($request) => true);
1717
get(route('log-viewer.index'))->assertOk();
18-
});
18+
});
1919

2020
test('the "auth" callback is given with a Request object to check against', function () {
2121
LogViewer::auth(function ($request) {
@@ -28,14 +28,14 @@
2828
});
2929

3030
test('can define a "viewLogViewer" gate as an alternative', function () {
31-
get(route('log-viewer.index'))->assertOk();
31+
get(route('log-viewer.index'))->assertOk();
3232

3333
Gate::define('viewLogViewer', fn ($user = null) => false);
3434
get(route('log-viewer.index'))->assertForbidden();
3535

3636
Gate::define('viewLogViewer', fn ($user = null) => true);
3737
get(route('log-viewer.index'))->assertOk();
38-
});
38+
});
3939

4040
test('local environment can use Log Viewer by default', function () {
4141
app()->detectEnvironment(fn () => 'local');

tests/Feature/LogsControllerTest.php

+27
Original file line numberDiff line numberDiff line change
@@ -61,3 +61,30 @@
6161
]));
6262
expect($response->json('logs'))->toHaveCount(4);
6363
});
64+
65+
test('logs include full_text property by default', function () {
66+
$logEntries = [
67+
makeLaravelLogEntry(message: 'Test message'),
68+
];
69+
$file = generateLogFile('log_with_full_text.log', implode(PHP_EOL, $logEntries));
70+
71+
$response = getJson(route('log-viewer.logs', ['file' => $file->identifier]));
72+
73+
expect($response->json('logs'))->toHaveCount(1);
74+
expect($response->json('logs.0'))->toHaveKey('full_text');
75+
});
76+
77+
test('logs can exclude full_text property when requested', function () {
78+
$logEntries = [
79+
makeLaravelLogEntry(message: 'Test message'),
80+
];
81+
$file = generateLogFile('log_without_full_text.log', implode(PHP_EOL, $logEntries));
82+
83+
$response = getJson(route('log-viewer.logs', [
84+
'file' => $file->identifier,
85+
'exclude_full_text' => true,
86+
]));
87+
88+
expect($response->json('logs'))->toHaveCount(1);
89+
expect($response->json('logs.0'))->not->toHaveKey('full_text');
90+
});

0 commit comments

Comments
 (0)