|
12 | 12 | use Laminas\Diactoros\Response\RedirectResponse; |
13 | 13 | use Light\App\Enum\ContactTopicEnum; |
14 | 14 | use Light\App\Handler\PostCreateContactHandler; |
15 | | -use Light\App\Middleware\IpAddressMiddleware; |
16 | 15 | use Light\App\Service\ContactService; |
17 | 16 | use Mezzio\Helper\UrlHelper; |
18 | 17 | use Mezzio\Template\TemplateRendererInterface; |
@@ -198,7 +197,7 @@ public function testFailedTurnstileRerendersWithCaptchaErrorAndSendsNothing(): v |
198 | 197 |
|
199 | 198 | $request = $this->createStub(ServerRequestInterface::class); |
200 | 199 | $request->method('getParsedBody')->willReturn($data); |
201 | | - $request->method('getAttribute')->willReturnMap([[IpAddressMiddleware::ATTRIBUTE, null, '203.0.113.5']]); |
| 200 | + $request->method('getAttribute')->willReturnMap([['ip_address', null, '203.0.113.5']]); |
202 | 201 |
|
203 | 202 | $contactService = $this->createMock(ContactService::class); |
204 | 203 | $contactService->method('normalize')->willReturn([ |
@@ -239,4 +238,43 @@ public function testFailedTurnstileRerendersWithCaptchaErrorAndSendsNothing(): v |
239 | 238 | $this->assertInstanceOf(HtmlResponse::class, $response); |
240 | 239 | $this->assertSame(200, $response->getStatusCode()); |
241 | 240 | } |
| 241 | + |
| 242 | + /** |
| 243 | + * @throws Exception |
| 244 | + */ |
| 245 | + public function testValidSubmissionSendsTheIpAddressFromTheRequestAttribute(): void |
| 246 | + { |
| 247 | + $request = $this->createStub(ServerRequestInterface::class); |
| 248 | + $request->method('getParsedBody')->willReturn($this->validData()); |
| 249 | + $request->method('getAttribute')->willReturnMap([['ip_address', null, '203.0.113.5']]); |
| 250 | + |
| 251 | + $contactService = $this->createMock(ContactService::class); |
| 252 | + $contactService->method('normalize')->willReturn([ |
| 253 | + 'topic' => 'migration', |
| 254 | + 'name' => 'Jane Doe', |
| 255 | + 'email' => 'jane@example.com', |
| 256 | + 'company' => 'Acme Inc', |
| 257 | + 'stack' => 'ZF3, PHP 7.4', |
| 258 | + 'message' => 'We would like to talk about migrating our platform.', |
| 259 | + 'query' => '', |
| 260 | + ]); |
| 261 | + $contactService->method('validate')->willReturn([]); |
| 262 | + $contactService->method('verifyTurnstile')->willReturn(true); |
| 263 | + $contactService |
| 264 | + ->expects($this->once()) |
| 265 | + ->method('send') |
| 266 | + ->with($this->anything(), '203.0.113.5') |
| 267 | + ->willReturn(true); |
| 268 | + |
| 269 | + $urlHelper = $this->createStub(UrlHelper::class); |
| 270 | + $urlHelper->method('generate')->willReturn('/contact/?contact=sent#contact-form'); |
| 271 | + |
| 272 | + $response = (new PostCreateContactHandler( |
| 273 | + $this->createStub(TemplateRendererInterface::class), |
| 274 | + $urlHelper, |
| 275 | + $contactService |
| 276 | + ))->handle($request); |
| 277 | + |
| 278 | + $this->assertInstanceOf(RedirectResponse::class, $response); |
| 279 | + } |
242 | 280 | } |
0 commit comments