Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
24 / 24
100.00% covered (success)
100.00%
1 / 1
CRAP
n/a
0 / 0
getConcreteController
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
1
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
10pest()->group('unit');
11
12use Nyholm\Psr7\ServerRequest;
13use Phexium\Presentation\AbstractController;
14use Psr\Http\Message\ServerRequestInterface;
15
16function getConcreteController(): AbstractController
17{
18    return new readonly class extends AbstractController {
19        public function exposeExtractFormData(ServerRequestInterface $request, array $defaults): array
20        {
21            return $this->extractFormData($request, $defaults);
22        }
23    };
24}
25
26describe('Response building', function (): void {
27    it('extracts form data with defaults', function (): void {
28        $controller = getConcreteController();
29
30        $request = new ServerRequest('POST', '/')->withParsedBody((object) [
31            'title' => 'Test Book',
32            'author' => 'John Doe',
33        ]);
34
35        $defaults = [
36            'title' => '',
37            'author' => '',
38            'isbn' => '123456789',
39        ];
40
41        $result = $controller->exposeExtractFormData($request, $defaults);
42
43        expect($result)->toBe([
44            'title' => 'Test Book',
45            'author' => 'John Doe',
46            'isbn' => '123456789',
47        ]);
48    });
49});