Nastavení hodnoty do HTTP hlaviček a její testování

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
radas
Člen | 224
+
0
-

Ve zdrojovém kódu modelu získávám hodnotu HTTP hlavičky ‚X-USERGUID‘ pomocí

$httpRequest->getHeader('X-USERGUID');

kde $httpRequest je instancí třídy Nette\Http\Request. Jak ale tuto hodnotu přidat do hlaviček v testu? Zatím mám v phpt souboru toto:

$_SERVER = array(
  ...
  'HTTP_X-USERGUID' => 'hodnota'  // zkoušel jsem i jen X-USERGUID
);

$factory = new Nette\Http\RequestFactory();
$httpRequest = $factory->createHttpRequest();

test(function() use ($httpRequest)
{
  var_dump($httpRequest->getHeaders());
});

což mi ale vypíše vždy prázdné pole.

Díky moc za radu.

Majkl578
Moderator | 1364
+
0
-

HTTP_X_USERGUID

radas
Člen | 224
+
0
-

Taky jsem zkoušel, ale stále vrací prázdné pole.

Milo
Nette Core | 1283
+
0
-

V php-cgi existuje apache_request_headers() (alespoň u mě). Viz. HttpRequestFactory

Zkus spustit testy pod php-cli.

Nebo si request vytvoř ručně: new Nette\Http\Request(....). Nebo přes reflexi uprav private $headers. Nebo pokud používáš Tester a PHP 5.4+:

Assert::with($request, function() {
	$this->headers = [...];
});
Milo
Nette Core | 1283
+
0
-

Nejčistější je to ruční vytvoření requestu.

radas
Člen | 224
+
0
-

Díky, toto mi funguje:

$httpRequest = new Nette\Http\Request(new Nette\Http\UrlScript(), NULL, NULL, NULL, NULL, array('x-userguid' => 'hodnota'));

x-userguid MUSÍ být ovšem zapsáno malými písmeny.

Pak funguje

Assert::same('hodnota', $httpRequest->getHeader('X-USERGUID'));
Milo
Nette Core | 1283
+
0
-

@radas Prima. To case-sensitive bude bug. Pošlu fix.

EDIT: Fixed

Editoval Milo (1. 10. 2014 15:12)