Získání cookies – testování presenteru

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

Ahoj,
potřeboval bych vytvořit test na kontrolu načítání cookies v presenteru.
Cookies načítám v basePresenter a co se týče manuální kontroly, tak se cookies přidají, a vše funguje jak má.

Teď bych potřeboval vytvořit automatický test.

<?php

public function setUp()
   {

       /** @var Nette\Application\IPresenterFactory $presenterFactory */
       $presenterFactory = $this->container->getByType('Nette\Application\IPresenterFactory');
       $this->presenter = $presenterFactory->createPresenter('Front:Product');
}

public function testLoadPresenter()
    {
        $request = new Nette\Application\Request('Front:Product','POST',array('action'=>'default'));
        $response = $this->presenter->run($request);
        var_dump($response->getCookies());
/*tohle nefunguje, protoze response neni typu Nette\HTTP\Response ale Nette\Application\Responses\TextResponse*/
        throw new \Exception('FU');

    }
?>

Potřeboval bych poradit jakoukoli možnost, jak do requestu nacpat GET metodu, ktera tam pošle nějaké parametry, ty se v presenteru uloží do cookies, a následně je v response vytáhnout.
Předem děkuji.

Milo
Nette Core | 1283
+
0
-

Http\Response si cookies nikam neukládá ale rovnou volá setcookie(). Můžeš si vylistovat hlavičky headers_list() a najít v nich, jestli byla cookie nastavena.

Fooly
Člen | 26
+
0
-

Děkuji, problém ale právě je, že nevím jak za pomocí Application\Request získat Http\Response,
také nevím, jak do presenteru poslat metodu GET tak, aby obsahovala data na základě kterých se ukládají cookies.
Url na web mám www/product?utm_source=„neco“&utm_campaign=„neco2“
tohle bych potreboval otestovat, jestli se uloží do cookies.
Jestli někdo tušíte jak to udělat, ocenil bych i ukázky kódu, díky.

Filip Procházka
Moderator | 4668
+
0
-

Podobný problém jsme řešili nedávno, zmiňuji to i v přednášce o tom jak testujeme naše /api. Stačí ti HttpResponseMock (když teď na něj koukám, tak ta práce s těmi cookies by šla napsat o dost lépe) a před vytvořením instance presenteru ho podstrčit do containeru

$httpResponse = new HttpResponseMock();

$this->container->removeService('httpResponse');
$this->container->addService('httpResponse', $httpResponse);

To jednak řeší problém s tím, že se ti nebudou posílat hlavičky v konzoli a nenarazíš na oblíbenou chybu „headers have been already sent“ a druhak to jde o něco snadněji assertovat. Kompletní ukázku jak by to celé mohlo fungovat najdeš tady, měj ale na paměti, že Kdyby/TesterExtras rozhodně není hotová knihovna a raději se nespoléhej na to, že zůstane v téhle podobě a těch pár řádků si zkopíruj do projektu.