From ffa4377e65d8ea7342ea669f47a6d538d0c69194 Mon Sep 17 00:00:00 2001 From: Dan Brown Date: Thu, 14 Oct 2021 17:40:22 +0100 Subject: [PATCH] Added testing to cover debug view --- .../WhoopsBookStackPrettyHandler.php | 7 +-- tests/DebugViewTest.php | 54 +++++++++++++++++++ 2 files changed, 56 insertions(+), 5 deletions(-) create mode 100644 tests/DebugViewTest.php diff --git a/app/Exceptions/WhoopsBookStackPrettyHandler.php b/app/Exceptions/WhoopsBookStackPrettyHandler.php index 4e92b1d84..22a49e04a 100644 --- a/app/Exceptions/WhoopsBookStackPrettyHandler.php +++ b/app/Exceptions/WhoopsBookStackPrettyHandler.php @@ -12,18 +12,15 @@ class WhoopsBookStackPrettyHandler extends Handler */ public function handle() { - // TODO - Assistance View - // Docs links - // Discord Links - // Github Issue Links (With pre-filled search?) - $exception = $this->getException(); + echo view('errors.debug', [ 'error' => $exception->getMessage(), 'errorClass' => get_class($exception), 'trace' => $exception->getTraceAsString(), 'environment' => $this->getEnvironment(), ])->render(); + return Handler::QUIT; } diff --git a/tests/DebugViewTest.php b/tests/DebugViewTest.php new file mode 100644 index 000000000..3485b4598 --- /dev/null +++ b/tests/DebugViewTest.php @@ -0,0 +1,54 @@ +set('app.debug', true); + $resp = $this->getDebugViewForException(new \InvalidArgumentException('An error occurred during testing')); + + // Error message + $resp->assertSeeText('An error occurred during testing'); + // Exception Class + $resp->assertSeeText('InvalidArgumentException'); + // Stack trace + $resp->assertSeeText('#0'); + $resp->assertSeeText('#1'); + // Warning message + $resp->assertSeeText('WARNING: Application is in debug mode. This mode has the potential to leak'); + // PHP version + $resp->assertSeeText('PHP Version: ' . phpversion()); + // BookStack version + $resp->assertSeeText('BookStack Version: ' . trim(file_get_contents(base_path('version')))); + // Dynamic help links + $resp->assertElementExists('a[href*="q=' . urlencode('BookStack An error occurred during testing') . '"]'); + $resp->assertElementExists('a[href*="?q=is%3Aissue+' . urlencode('An error occurred during testing') . '"]'); + } + + public function test_debug_view_only_shows_when_debug_mode_is_enabled() + { + config()->set('app.debug', true); + $resp = $this->getDebugViewForException(new \InvalidArgumentException('An error occurred during testing')); + $resp->assertSeeText('Stack Trace'); + $resp->assertDontSeeText('An unknown error occurred'); + + config()->set('app.debug', false); + $resp = $this->getDebugViewForException(new \InvalidArgumentException('An error occurred during testing')); + $resp->assertDontSeeText('Stack Trace'); + $resp->assertSeeText('An unknown error occurred'); + } + + + protected function getDebugViewForException(\Exception $exception): TestResponse + { + // Fake an error via social auth service used on login page + $mockService = $this->mock(SocialAuthService::class); + $mockService->shouldReceive('getActiveDrivers')->andThrow($exception); + return $this->get('/login'); + } + +} \ No newline at end of file