Jak nastavit Referer u Requestu

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

Ahoj, mám v presenteru tento kód:

	/** @var Request @inject */
public $requestHttp;

public function actionNahlasit()
{
    if (empty($this->requestHttp->referer)) {
        $this->redirect('Homepage:default');
    }
}

Pokud je referer prázdný mám napsaný tento test a vše proběhne správně:

	public function testRenderNahlasit()
{
    $response = $this->tester->test('nahlasit');
    Assert::type('Nette\Application\Responses\RedirectResponse', $response);
}

Chtěl bych ještě ale otestovat i případ, kdy bude referer nastavený, ale netuším jak to udělat. Testování přihlášeného uživatele jsem udělal pomocí tohoto topicu

Potřebuji tedy nějak namockovat třídu Request. Díval jsem se na mockista, ale nějak jsem ho nepochopil.

Milo
Nette Core | 1283
+
0
-

Jak ten presenter pro účely testování vytváříš?

Třídy nutně mockovat nemusíš. Můžeš si vytvořit vlastní instanci Nette\Http\Request a tu dostat do kontejneru.

Viz. také https://forum.nette.org/…ji-testovani

vymak
Člen | 92
+
0
-

Presenter vytvářím takto:

		$presenterFactory = $container->getByType('Nette\Application\IPresenterFactory');
$presenter = $presenterFactory->createPresenter('Front:Homepage');
$presenter->autoCanonicalize = FALSE;

		$params['action'] = 'default';
$request = new Request('Front:Homepage', 'GET', $params);
$response = $presenter->run($request);
return $response;

Editoval vymak (9. 10. 2014 13:05)

vymak
Člen | 92
+
0
-

Tak už jsem to rozchodil, ale nevím jestli je to úplně nejlepší řešení.

	public function testRenderNahlasitMock()
{
    $httpRequest = new Nette\Http\Request(new Nette\Http\UrlScript, NULL, NULL, NULL, NULL, ['referer' => 'hodnota']);

    $this->getContainer()->removeService('httpRequest');
    $this->getContainer()->addService('httpRequest', $httpRequest);

		// bez tohoto řádku to nefunguje, musím zapsat přímo do proměnné v presenteru
    $this->tester->presenter->requestHttp = $httpRequest;
    $this->tester->testAction('nahlasit');
}