mirror of
https://github.com/BookStackApp/BookStack.git
synced 2025-04-28 05:42:28 +00:00
Fixed tests from streaming changes
- Added testing check to buffer stop/clear on streaming output due to interference during tests. - Made content-disposition header a little safer in download responses. - Also aligned how we check for testing environment.
This commit is contained in:
parent
08a8c0070e
commit
59d1fb2d10
4 changed files with 18 additions and 9 deletions
app/Http/Controllers
resources/views/common
tests
|
@ -116,7 +116,7 @@ abstract class Controller extends BaseController
|
|||
{
|
||||
return response()->make($content, 200, [
|
||||
'Content-Type' => 'application/octet-stream',
|
||||
'Content-Disposition' => 'attachment; filename="' . $fileName . '"',
|
||||
'Content-Disposition' => 'attachment; filename="' . str_replace('"', '', $fileName) . '"',
|
||||
'X-Content-Type-Options' => 'nosniff',
|
||||
]);
|
||||
}
|
||||
|
@ -127,12 +127,17 @@ abstract class Controller extends BaseController
|
|||
protected function streamedDownloadResponse($stream, string $fileName): StreamedResponse
|
||||
{
|
||||
return response()->stream(function() use ($stream) {
|
||||
ob_end_clean();
|
||||
// End & flush the output buffer otherwise we still seem to use memory.
|
||||
// Ignore in testing since output buffers are used to gather a response.
|
||||
if (!app()->runningUnitTests()) {
|
||||
ob_end_clean();
|
||||
}
|
||||
|
||||
fpassthru($stream);
|
||||
fclose($stream);
|
||||
}, 200, [
|
||||
'Content-Type' => 'application/octet-stream',
|
||||
'Content-Disposition' => 'attachment; filename="' . $fileName . '"',
|
||||
'Content-Disposition' => 'attachment; filename="' . str_replace('"', '', $fileName) . '"',
|
||||
'X-Content-Type-Options' => 'nosniff',
|
||||
]);
|
||||
}
|
||||
|
@ -147,7 +152,7 @@ abstract class Controller extends BaseController
|
|||
|
||||
return response()->make($content, 200, [
|
||||
'Content-Type' => $mime,
|
||||
'Content-Disposition' => 'inline; filename="' . $fileName . '"',
|
||||
'Content-Disposition' => 'inline; filename="' . str_replace('"', '', $fileName) . '"',
|
||||
'X-Content-Type-Options' => 'nosniff',
|
||||
]);
|
||||
}
|
||||
|
@ -168,7 +173,7 @@ abstract class Controller extends BaseController
|
|||
fclose($stream);
|
||||
}, 200, [
|
||||
'Content-Type' => $mime,
|
||||
'Content-Disposition' => 'inline; filename="' . $fileName . '"',
|
||||
'Content-Disposition' => 'inline; filename="' . str_replace('"', '', $fileName) . '"',
|
||||
'X-Content-Type-Options' => 'nosniff',
|
||||
]);
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<style>
|
||||
@if (!app()->environment('testing'))
|
||||
@if (!app()->runningUnitTests())
|
||||
{!! file_get_contents(public_path('/dist/export-styles.css')) !!}
|
||||
@endif
|
||||
</style>
|
||||
|
|
|
@ -5,6 +5,7 @@ namespace Tests\Api;
|
|||
use BookStack\Entities\Models\Page;
|
||||
use BookStack\Uploads\Attachment;
|
||||
use Illuminate\Http\UploadedFile;
|
||||
use Illuminate\Testing\AssertableJsonString;
|
||||
use Tests\TestCase;
|
||||
|
||||
class AttachmentsApiTest extends TestCase
|
||||
|
@ -228,9 +229,11 @@ class AttachmentsApiTest extends TestCase
|
|||
$attachment = Attachment::query()->orderByDesc('id')->where('name', '=', $details['name'])->firstOrFail();
|
||||
|
||||
$resp = $this->getJson("{$this->baseEndpoint}/{$attachment->id}");
|
||||
|
||||
$resp->assertStatus(200);
|
||||
$resp->assertJson([
|
||||
$resp->assertHeader('Content-Type', 'application/json');
|
||||
|
||||
$json = new AssertableJsonString($resp->streamedContent());
|
||||
$json->assertSubset([
|
||||
'id' => $attachment->id,
|
||||
'content' => base64_encode(file_get_contents(storage_path($attachment->path))),
|
||||
'external' => false,
|
||||
|
|
|
@ -128,7 +128,8 @@ class AttachmentTest extends TestCase
|
|||
$pageGet->assertSee($attachment->getUrl());
|
||||
|
||||
$attachmentGet = $this->get($attachment->getUrl());
|
||||
$attachmentGet->assertSee('Hi, This is a test file for testing the upload process.');
|
||||
$content = $attachmentGet->streamedContent();
|
||||
$this->assertStringContainsString('Hi, This is a test file for testing the upload process.', $content);
|
||||
|
||||
$this->deleteUploads();
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue