]> BookStack Code Mirror - bookstack/commitdiff
Added testing to cover debug view 2977/head
authorDan Brown <redacted>
Thu, 14 Oct 2021 16:40:22 +0000 (17:40 +0100)
committerDan Brown <redacted>
Thu, 14 Oct 2021 16:40:22 +0000 (17:40 +0100)
app/Exceptions/WhoopsBookStackPrettyHandler.php
tests/DebugViewTest.php [new file with mode: 0644]

index 4e92b1d84057d69fe12ef40c3dc0618de615a86e..22a49e04af846075bae3510e4e3701b4193f4b04 100644 (file)
@@ -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 (file)
index 0000000..3485b45
--- /dev/null
@@ -0,0 +1,54 @@
+<?php
+
+namespace Tests;
+
+use BookStack\Auth\Access\SocialAuthService;
+
+class DebugViewTest extends TestCase
+{
+    public function test_debug_view_shows_expected_details()
+    {
+        config()->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
Morty Proxy This is a proxified and sanitized view of the page, visit original site.