Skip to content

Commit 527d066

Browse files
roman-vohnik-freeloiof3l1x
authored andcommitted
Implement Request::getBasicCredentials for http basic auth testing
`getBasicCredentials` method is implemented in Nette\Http\Request, but it's not part of IRequest interface, so it was missing in this Codeception\Http\Request implementation. With this change we can use `$this->tester->amHttpAuthenticated()`.
1 parent 20cc8b1 commit 527d066

File tree

2 files changed

+48
-0
lines changed

2 files changed

+48
-0
lines changed

src/Http/Request.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Contributte\Codeception\Http;
44

5+
use Exception;
56
use Nette\Http\FileUpload;
67
use Nette\Http\IRequest;
78
use Nette\Http\RequestFactory;
@@ -122,4 +123,21 @@ public function isSameSite(): bool
122123
return true;
123124
}
124125

126+
/**
127+
* Returns basic HTTP authentication credentials.¨
128+
*
129+
* @return array{string, string}|null
130+
*/
131+
public function getBasicCredentials(): ?array
132+
{
133+
if (method_exists($this->request, 'getBasicCredentials')) {
134+
return $this->request->getBasicCredentials();
135+
}
136+
137+
throw new Exception(sprintf(
138+
'getBasicCredentials() method is not available on %s.',
139+
get_class($this->request),
140+
));
141+
}
142+
125143
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?php declare(strict_types = 1);
2+
3+
namespace Functional\src;
4+
5+
use Codeception\Test\Unit;
6+
use Contributte\Codeception\Http\Request;
7+
use Contributte\Codeception\Module\NetteApplicationModule;
8+
use Contributte\Codeception\Module\NetteDIModule;
9+
use Nette\Http\IRequest;
10+
11+
class HttpRequestTest extends Unit
12+
{
13+
14+
/** @var NetteApplicationModule|NetteDIModule */
15+
protected $tester;
16+
17+
public function testHttpRequest(): void
18+
{
19+
$this->tester->amHttpAuthenticated('username', 'password');
20+
21+
$this->tester->amOnPage('/article/page');
22+
23+
$httpRequest = $this->tester->grabService(IRequest::class);
24+
25+
$this->assertInstanceOf(Request::class, $httpRequest);
26+
27+
$this->assertSame(['username', 'password'], $httpRequest->getBasicCredentials());
28+
}
29+
30+
}

0 commit comments

Comments
 (0)