Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
57 / 57
n/a
0 / 0
CRAP
n/a
0 / 0
1<?php
2
3// ╔════════════════════════════════════════════════════════════╗
4// ║ MIT Licence (#Expat) - https://opensource.org/licenses/MIT ║
5// ║ Copyright 2026 Frederic Poeydomenge <dyno@phexium.com>     ║
6// ╚════════════════════════════════════════════════════════════╝
7
8declare(strict_types=1);
9
10use Phexium\Plugin\Session\Adapter\NativeFlash;
11
12beforeEach(function (): void {
13    $this->storage = [];
14    $this->flash = new NativeFlash($this->storage);
15});
16
17test('add() stores message in correct level', function (): void {
18    $this->flash->add('success', 'Operation successful');
19    $this->flash->add('success', 'Another success');
20    $this->flash->add('error', 'An error occurred');
21
22    expect($this->storage['_flash']['success'])->toBe(['Operation successful', 'Another success']);
23    expect($this->storage['_flash']['error'])->toBe(['An error occurred']);
24});
25
26test('get() retrieves and clears messages (read-once)', function (): void {
27    $this->flash->add('success', 'Message 1');
28    $this->flash->add('success', 'Message 2');
29
30    $messages = $this->flash->get('success');
31
32    expect($messages)->toBe(['Message 1', 'Message 2']);
33    expect($this->flash->get('success'))->toBe([]);
34});
35
36test('get() returns empty array for non-existent level', function (): void {
37    expect($this->flash->get('info'))->toBe([]);
38});
39
40test('all() retrieves all messages grouped by level', function (): void {
41    $this->flash->add('success', 'Success message');
42    $this->flash->add('error', 'Error message 1');
43    $this->flash->add('error', 'Error message 2');
44
45    $all = $this->flash->all();
46
47    expect($all)->toBe([
48        'success' => ['Success message'],
49        'error' => ['Error message 1', 'Error message 2'],
50    ]);
51});
52
53test('all() clears all messages after retrieval', function (): void {
54    $this->flash->add('success', 'Success message');
55    $this->flash->add('error', 'Error message');
56
57    $this->flash->all();
58
59    expect($this->flash->all())->toBe([]);
60});
61
62test('has() returns true when level has messages', function (): void {
63    $this->flash->add('warning', 'A warning');
64
65    expect($this->flash->has('warning'))->toBeTrue();
66});
67
68test('has() returns false when level is empty', function (): void {
69    expect($this->flash->has('info'))->toBeFalse();
70});
71
72test('has() does not clear messages', function (): void {
73    $this->flash->add('success', 'A message');
74
75    $this->flash->has('success');
76
77    expect($this->flash->get('success'))->toBe(['A message']);
78});
79
80test('clear() removes all flash messages', function (): void {
81    $this->flash->add('success', 'Success');
82    $this->flash->add('error', 'Error');
83
84    $this->flash->clear();
85
86    expect($this->flash->has('success'))->toBeFalse();
87    expect($this->flash->has('error'))->toBeFalse();
88    expect($this->flash->all())->toBe([]);
89});