• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

valkyrjaio / valkyrja / 16185661246

10 Jul 2025 03:48AM UTC coverage: 43.558% (-0.2%) from 43.747%
16185661246

push

github

MelechMizrachi
Http Routing: Updating ListCommand.

0 of 21 new or added lines in 1 file covered. (0.0%)

2913 existing lines in 212 files now uncovered.

3925 of 9011 relevant lines covered (43.56%)

11.07 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/Valkyrja/Http/Routing/Middleware/RequestStructMiddleware.php
1
<?php
2

3
declare(strict_types=1);
4

5
/*
6
 * This file is part of the Valkyrja Framework package.
7
 *
8
 * (c) Melech Mizrachi <melechmizrachi@gmail.com>
9
 *
10
 * For the full copyright and license information, please view the LICENSE
11
 * file that was distributed with this source code.
12
 */
13

14
namespace Valkyrja\Http\Routing\Middleware;
15

16
use Override;
17
use Valkyrja\Http\Message\Enum\StatusCode;
18
use Valkyrja\Http\Message\Request\Contract\ServerRequest;
19
use Valkyrja\Http\Message\Response\Contract\Response;
20
use Valkyrja\Http\Message\Response\Response as HttpResponse;
21
use Valkyrja\Http\Middleware\Contract\RouteMatchedMiddleware;
22
use Valkyrja\Http\Middleware\Handler\Contract\RouteMatchedHandler;
23
use Valkyrja\Http\Routing\Data\Contract\Route;
24
use Valkyrja\Http\Struct\Request\Contract\RequestStruct;
25
use Valkyrja\Validation\Contract\Validate;
26

27
use function assert;
28
use function is_a;
29

30
/**
31
 * Class RequestStructMiddleware.
32
 *
33
 * @author Melech Mizrachi
34
 */
35
class RequestStructMiddleware implements RouteMatchedMiddleware
36
{
37
    /**
38
     * @inheritDoc
39
     */
40
    #[Override]
41
    public function routeMatched(ServerRequest $request, Route $route, RouteMatchedHandler $handler): Route|Response
42
    {
43
        $message = $route->getRequestStruct();
×
44

UNCOV
45
        if ($message !== null) {
×
46
            $this->ensureIsStruct($message);
×
47

UNCOV
48
            $response = $this->ensureRequestConformsToMessage($request, $route, $message);
×
49
        }
50

51
        /**
52
         * @psalm-suppress MixedReturnStatement No clue what Psalm is confused about here. $response is either a Response or null, and routeMatched() returns a
53
         * Route or Response
54
         */
UNCOV
55
        return $response
×
UNCOV
56
            ?? $handler->routeMatched($request, $route);
×
57
    }
58

59
    /**
60
     * Ensure a message is a message.
61
     *
62
     * @param string $message The message
63
     *
64
     * @return void
65
     */
66
    protected function ensureIsStruct(string $message): void
67
    {
UNCOV
68
        assert($this->determineIsStruct($message));
×
69
    }
70

71
    /**
72
     * Determine if a dependency is a message.
73
     *
74
     * @param string $struct The message
75
     *
76
     * @return bool
77
     */
78
    protected function determineIsStruct(string $struct): bool
79
    {
UNCOV
80
        return is_a($struct, RequestStruct::class, true);
×
81
    }
82

83
    /**
84
     * @param ServerRequest               $request      The request
85
     * @param Route                       $matchedRoute The matched route
86
     * @param class-string<RequestStruct> $struct       The message class name
87
     *
88
     * @return Response|null
89
     */
90
    protected function ensureRequestConformsToMessage(ServerRequest $request, Route $matchedRoute, string $struct): Response|null
91
    {
92
        return $this->ensureRequestHasNoExtraData($request, $matchedRoute, $struct)
×
UNCOV
93
            ?? $this->ensureRequestIsValid($request, $matchedRoute, $struct)
×
UNCOV
94
            ?? null;
×
95
    }
96

97
    /**
98
     * @param ServerRequest               $request      The request
99
     * @param Route                       $matchedRoute The matched route
100
     * @param class-string<RequestStruct> $struct       The message class name
101
     *
102
     * @return Response|null
103
     */
104
    protected function ensureRequestHasNoExtraData(ServerRequest $request, Route $matchedRoute, string $struct): Response|null
105
    {
106
        // If there is extra data
107
        if ($struct::determineIfRequestContainsExtraData($request)) {
×
108
            // Then the payload is too large
UNCOV
109
            return $this->getExtraDataErrorResponse($request, $matchedRoute, $struct);
×
110
        }
111

UNCOV
112
        return null;
×
113
    }
114

115
    /**
116
     * @param ServerRequest               $request      The request
117
     * @param Route                       $matchedRoute The matched route
118
     * @param class-string<RequestStruct> $struct       The message class name
119
     *
120
     * @return Response
121
     */
122
    protected function getExtraDataErrorResponse(ServerRequest $request, Route $matchedRoute, string $struct): Response
123
    {
124
        return new HttpResponse(
×
UNCOV
125
            statusCode: StatusCode::PAYLOAD_TOO_LARGE,
×
UNCOV
126
        );
×
127
    }
128

129
    /**
130
     * @param ServerRequest               $request      The request
131
     * @param Route                       $matchedRoute The matched route
132
     * @param class-string<RequestStruct> $struct       The message class name
133
     *
134
     * @return Response|null
135
     */
136
    protected function ensureRequestIsValid(ServerRequest $request, Route $matchedRoute, string $struct): Response|null
137
    {
138
        $validate = $struct::validate($request);
×
139

UNCOV
140
        if (! $validate->rules()) {
×
UNCOV
141
            return $this->getValidationErrorsResponse($request, $matchedRoute, $validate, $struct);
×
142
        }
143

UNCOV
144
        return null;
×
145
    }
146

147
    /**
148
     * @param ServerRequest               $request      The request
149
     * @param Route                       $matchedRoute The matched route
150
     * @param Validate                    $validate     The validation object
151
     * @param class-string<RequestStruct> $struct       The message class name
152
     *
153
     * @return Response
154
     */
155
    protected function getValidationErrorsResponse(ServerRequest $request, Route $matchedRoute, Validate $validate, string $struct): Response
156
    {
157
        return new HttpResponse(
×
UNCOV
158
            statusCode: StatusCode::BAD_REQUEST,
×
UNCOV
159
        );
×
160
    }
161
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc