From 404ee238a3f8986e2278413541de55f3902b0761 Mon Sep 17 00:00:00 2001 From: bryanlopezinc Date: Thu, 30 May 2024 14:37:24 +0100 Subject: [PATCH] Added test for setup page --- tests/Feature/Settings/ShowSetUpPageTest.php | 141 +++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 tests/Feature/Settings/ShowSetUpPageTest.php diff --git a/tests/Feature/Settings/ShowSetUpPageTest.php b/tests/Feature/Settings/ShowSetUpPageTest.php new file mode 100644 index 0000000000..16afae14b4 --- /dev/null +++ b/tests/Feature/Settings/ShowSetUpPageTest.php @@ -0,0 +1,141 @@ +get('/setup'); + } + + public function testView(): void + { + $this->getSetUpPageResponse()->assertOk()->assertViewIs('setup.index'); + } + + public function testWillShowErrorMessageWhenDatabaseConnectionCannotBeEstablished(): void + { + Event::listen(function (QueryExecuted $query) { + if ($query->sql === 'select 2 + 2') { + throw new PDOException("SQLSTATE[HY000] [1045] Access denied for user ''@'localhost' (using password: NO)"); + } + }); + + $this->getSetUpPageResponse()->assertOk(); + + $this->assertSeeDatabaseConnectionErrorMessage(); + } + + protected function assertSeeDatabaseConnectionErrorMessage(bool $shouldSee = true): void + { + $errorMessage = "D'oh! Looks like we can't connect to your database. Please update your database settings in your .env file."; + $successMessage = sprintf('Great work! Connected to %s', DB::connection()->getDatabaseName()); + + if ($shouldSee) { + self::$latestResponse->assertSee($errorMessage, false)->assertDontSee($successMessage, false); + return; + } + + self::$latestResponse->assertSee($successMessage, false)->assertDontSee($errorMessage, false); + } + + public function testWillNotShowErrorMessageWhenDatabaseIsConnected(): void + { + $this->getSetUpPageResponse()->assertOk(); + + $this->assertSeeDatabaseConnectionErrorMessage(false); + } + + public function testWillShowErrorMessageWhenDebugModeIsEnabledAndAppEnvironmentIsSetToProduction(): void + { + config(['app.debug' => true]); + + $this->app->bind('env', fn () => 'production'); + + $this->getSetUpPageResponse()->assertOk(); + + $this->assertSeeDebugModeMisconfigurationErrorMessage(); + } + + protected function assertSeeDebugModeMisconfigurationErrorMessage(bool $shouldSee = true): void + { + $errorMessage = 'Yikes! You should turn off debug mode unless you encounter any issues. Please update your APP_DEBUG settings in your .env file'; + $successMessage = "Awesomesauce. Debug is either turned off, or you're running this in a non-production environment. (Don't forget to turn it off when you're ready to go live.)"; + + if ($shouldSee) { + self::$latestResponse->assertSee($errorMessage, false)->assertDontSee($successMessage, false); + return; + } + + self::$latestResponse->assertSee($successMessage, false)->assertDontSee($errorMessage, false); + } + + public function testWillNotShowErrorWhenDebugModeIsEnabledAndAppEnvironmentIsSetToLocal(): void + { + config(['app.debug' => true]); + + $this->app->bind('env', fn () => 'local'); + + $this->getSetUpPageResponse()->assertOk(); + + $this->assertSeeDebugModeMisconfigurationErrorMessage(false); + } + + public function testWillNotShowErrorWhenDebugModeIsDisabledAndAppEnvironmentIsSetToProduction(): void + { + config(['app.debug' => false]); + + $this->app->bind('env', fn () => 'production'); + + $this->getSetUpPageResponse()->assertOk(); + + $this->assertSeeDebugModeMisconfigurationErrorMessage(false); + } + + public function testWillShowErrorWhenEnvironmentIsLocal(): void + { + $this->app->bind('env', fn () => 'local'); + + $this->getSetUpPageResponse()->assertOk(); + + $this->assertSeeEnvironmentMisconfigurationErrorMessage(); + } + + protected function assertSeeEnvironmentMisconfigurationErrorMessage(bool $shouldSee = true): void + { + $errorMessage = 'Your app is set local instead of production mode.'; + $successMessage = 'Your app is set to production mode. Rock on!'; + + if ($shouldSee) { + self::$latestResponse->assertSee($errorMessage, false)->assertDontSee($successMessage, false); + + return; + } + + self::$latestResponse->assertSee($successMessage, false)->assertDontSee($errorMessage, false); + } + + public function testWillNotShowErrorWhenEnvironmentIsProduction(): void + { + $this->app->bind('env', fn () => 'production'); + + $this->getSetUpPageResponse()->assertOk(); + + $this->assertSeeEnvironmentMisconfigurationErrorMessage(false); + } +}