| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- <?php
- namespace Illuminate\Tests\Integration\Foundation;
- use Illuminate\Foundation\Console\DownCommand;
- use Illuminate\Foundation\Console\UpCommand;
- use Illuminate\Foundation\Events\MaintenanceModeDisabled;
- use Illuminate\Foundation\Events\MaintenanceModeEnabled;
- use Illuminate\Foundation\Http\MaintenanceModeBypassCookie;
- use Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance;
- use Illuminate\Support\Carbon;
- use Illuminate\Support\Facades\Event;
- use Illuminate\Support\Facades\Route;
- use Orchestra\Testbench\TestCase;
- use Symfony\Component\HttpFoundation\Cookie;
- class MaintenanceModeTest extends TestCase
- {
- protected function tearDown(): void
- {
- @unlink(storage_path('framework/down'));
- }
- public function testBasicMaintenanceModeResponse()
- {
- file_put_contents(storage_path('framework/down'), json_encode([
- 'retry' => 60,
- 'refresh' => 60,
- ]));
- Route::get('/foo', function () {
- return 'Hello World';
- })->middleware(PreventRequestsDuringMaintenance::class);
- $response = $this->get('/foo');
- $response->assertStatus(503);
- $response->assertHeader('Retry-After', '60');
- $response->assertHeader('Refresh', '60');
- }
- public function testMaintenanceModeCanHaveCustomStatus()
- {
- file_put_contents(storage_path('framework/down'), json_encode([
- 'retry' => 60,
- 'status' => 200,
- ]));
- Route::get('/foo', function () {
- return 'Hello World';
- })->middleware(PreventRequestsDuringMaintenance::class);
- $response = $this->get('/foo');
- $response->assertStatus(200);
- $response->assertHeader('Retry-After', '60');
- }
- public function testMaintenanceModeCanHaveCustomTemplate()
- {
- file_put_contents(storage_path('framework/down'), json_encode([
- 'retry' => 60,
- 'template' => 'Rendered Content',
- ]));
- Route::get('/foo', function () {
- return 'Hello World';
- })->middleware(PreventRequestsDuringMaintenance::class);
- $response = $this->get('/foo');
- $response->assertStatus(503);
- $response->assertHeader('Retry-After', '60');
- $this->assertSame('Rendered Content', $response->original);
- }
- public function testMaintenanceModeCanRedirectWithBypassCookie()
- {
- file_put_contents(storage_path('framework/down'), json_encode([
- 'retry' => 60,
- 'secret' => 'foo',
- 'template' => 'Rendered Content',
- ]));
- Route::get('/foo', function () {
- return 'Hello World';
- })->middleware(PreventRequestsDuringMaintenance::class);
- $response = $this->get('/foo');
- $response->assertStatus(302);
- $response->assertCookie('laravel_maintenance');
- }
- public function testMaintenanceModeCanBeBypassedWithValidCookie()
- {
- file_put_contents(storage_path('framework/down'), json_encode([
- 'retry' => 60,
- 'secret' => 'foo',
- ]));
- $cookie = MaintenanceModeBypassCookie::create('foo');
- Route::get('/test', function () {
- return 'Hello World';
- })->middleware(PreventRequestsDuringMaintenance::class);
- $response = $this->withUnencryptedCookies([
- 'laravel_maintenance' => $cookie->getValue(),
- ])->get('/test');
- $response->assertStatus(200);
- $this->assertSame('Hello World', $response->original);
- }
- public function testMaintenanceModeCantBeBypassedWithInvalidCookie()
- {
- file_put_contents(storage_path('framework/down'), json_encode([
- 'retry' => 60,
- 'secret' => 'foo',
- ]));
- $cookie = MaintenanceModeBypassCookie::create('test-key');
- Route::get('/test', function () {
- return 'Hello World';
- })->middleware(PreventRequestsDuringMaintenance::class);
- $response = $this->withUnencryptedCookies([
- 'laravel_maintenance' => $cookie->getValue(),
- ])->get('/test');
- $response->assertStatus(503);
- }
- public function testCanCreateBypassCookies()
- {
- $cookie = MaintenanceModeBypassCookie::create('test-key');
- $this->assertInstanceOf(Cookie::class, $cookie);
- $this->assertSame('laravel_maintenance', $cookie->getName());
- $this->assertTrue(MaintenanceModeBypassCookie::isValid($cookie->getValue(), 'test-key'));
- $this->assertFalse(MaintenanceModeBypassCookie::isValid($cookie->getValue(), 'wrong-key'));
- Carbon::setTestNow(now()->addMonths(6));
- $this->assertFalse(MaintenanceModeBypassCookie::isValid($cookie->getValue(), 'test-key'));
- Carbon::setTestNow(null);
- }
- public function testDispatchEventWhenMaintenanceModeIsEnabled()
- {
- Event::fake();
- Event::assertNotDispatched(MaintenanceModeEnabled::class);
- $this->artisan(DownCommand::class);
- Event::assertDispatched(MaintenanceModeEnabled::class);
- }
- public function testDispatchEventWhenMaintenanceModeIsDisabled()
- {
- file_put_contents(storage_path('framework/down'), json_encode([
- 'retry' => 60,
- 'refresh' => 60,
- ]));
- Event::fake();
- Event::assertNotDispatched(MaintenanceModeDisabled::class);
- $this->artisan(UpCommand::class);
- Event::assertDispatched(MaintenanceModeDisabled::class);
- }
- }
|