Skip to content
This repository was archived by the owner on May 3, 2021. It is now read-only.

Commit 0e25c47

Browse files
Flash messages don't persist between redirects (#9)
* Flash messages don't persist between redirects * Add missing APP_KEY to phpunit.xml.dist NOTE: This is a DUMMY key, and it is meant to be publicly visible.
1 parent e91d9f7 commit 0e25c47

File tree

5 files changed

+42
-4
lines changed

5 files changed

+42
-4
lines changed

phpunit.xml.dist

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,7 @@
1919
<directory suffix=".php">src/</directory>
2020
</whitelist>
2121
</filter>
22+
<php>
23+
<env name="APP_KEY" value="base64:Mwpn3kifqM6BgB/Te+Qing0MIgBMR2PbWVHyEl2cnUg="/>
24+
</php>
2225
</phpunit>

src/FlashMessage.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public static function levels(): array
2828
*/
2929
public static function set(string $level, string $message): void
3030
{
31-
session()->flash('flash_message', [
31+
session()->put('flash_message', [
3232
'message' => $message,
3333
'level' => $level,
3434
]);

src/views/alert.blade.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,5 @@
77
])->get(session('flash_message.level', 'success')) }} rounded shadow-inner text-white p-4">
88
<p class="text-sm">{{ session('flash_message.message', session('status')) }}</p>
99
</div>
10+
@php(session()->forget('flash_message'));
1011
@endif

tests/Feature/ViewFlashMessageTest.php

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace Ubient\FlashMessage\Tests\Feature;
44

55
use Ubient\FlashMessage\Tests\TestCase;
6+
use PHPUnit\Framework\ExpectationFailedException;
67

78
/**
89
* @SuppressWarnings(PHPMD.CamelCaseMethodName)
@@ -19,8 +20,10 @@ public function setUp()
1920
{
2021
parent::setUp();
2122

22-
app('router')->get('display', function () {
23-
return view('flash-message::alert');
23+
app('router')->group(['middleware' => 'web'], function ($router) {
24+
$router->get('display', function () {
25+
return view('flash-message::alert');
26+
});
2427
});
2528
}
2629

@@ -114,4 +117,36 @@ public function it_should_display_nothing_when_no_message_was_flashed(): void
114117
$response->assertViewIs('flash-message::alert');
115118
$this->assertEmpty($response->content());
116119
}
120+
121+
/** @test */
122+
public function it_should_persist_across_multiple_redirects(): void
123+
{
124+
$message = 'Those who do not remember the past are condemned to repeat it.';
125+
app('router')->group(['middleware' => 'web'], function ($router) use ($message) {
126+
$router->get('redirect-to-display', function () {
127+
return redirect('display');
128+
});
129+
$router->get('initial', function () use ($message) {
130+
return redirect('redirect-to-display')->withInfoMessage($message);
131+
});
132+
});
133+
134+
$this->get('initial');
135+
$response = $this->get('redirect-to-display');
136+
137+
$response->assertHasInfoMessage($message);
138+
}
139+
140+
/** @test */
141+
public function it_should_only_be_displayed_once(): void
142+
{
143+
$message = 'If you want to kill any idea in the world, get a committee working on it.';
144+
145+
redirect('display')->withInfoMessage($message);
146+
$this->get('display');
147+
$response = $this->get('display');
148+
149+
$this->expectException(ExpectationFailedException::class);
150+
$response->assertHasInfoMessage($message);
151+
}
117152
}

tests/Unit/FlashMessageTest.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,5 @@ public function has_a_set_method(): void
3838

3939
$this->assertEquals($flashData, session()->get('flash_message'));
4040
$this->assertEquals($flashData, session()->get('flash_message'));
41-
$this->assertEquals('flash_message', session()->get('_flash.new.0'));
4241
}
4342
}

0 commit comments

Comments
 (0)