2020-02-25 21:19:18 +01:00
< ? php
2020-04-01 20:40:00 +02:00
namespace DanielSiepmann\Tracking\Tests\Unit\Domain\Pageview ;
2020-02-25 21:19:18 +01:00
/*
* Copyright ( C ) 2020 Daniel Siepmann < coding @ daniel - siepmann . de >
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation ; either version 2
* of the License , or ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 51 Franklin Street , Fifth Floor , Boston , MA
* 02110 - 1301 , USA .
*/
use DanielSiepmann\Tracking\Domain\Model\Pageview ;
use DanielSiepmann\Tracking\Domain\Pageview\Factory ;
use PHPUnit\Framework\TestCase ;
2020-04-07 15:04:20 +02:00
use Prophecy\PhpUnit\ProphecyTrait ;
use Prophecy\Prophet ;
2020-02-25 21:19:18 +01:00
use Psr\Http\Message\ServerRequestInterface ;
use TYPO3\CMS\Core\Routing\PageArguments ;
2020-04-01 21:04:32 +02:00
use TYPO3\CMS\Core\Site\Entity\Site ;
2020-02-25 21:19:18 +01:00
use TYPO3\CMS\Core\Site\Entity\SiteLanguage ;
2020-04-01 21:04:32 +02:00
use TYPO3\CMS\Core\Site\SiteFinder ;
2020-02-25 21:19:18 +01:00
/**
* @ covers DanielSiepmann\Tracking\Domain\Pageview\Factory
*/
class FactoryTest extends TestCase
{
2020-04-07 15:04:20 +02:00
use ProphecyTrait ;
2020-02-25 21:19:18 +01:00
/**
* @ test
*/
2020-04-01 21:04:32 +02:00
public function returnsPageviewFromRequest () : void
2020-02-25 21:19:18 +01:00
{
$routing = $this -> prophesize ( PageArguments :: class );
$routing -> getPageId () -> willReturn ( 10 );
$routing -> getPageType () -> willReturn ( 0 );
$language = $this -> prophesize ( SiteLanguage :: class );
$request = $this -> prophesize ( ServerRequestInterface :: class );
$request -> getAttribute ( 'routing' ) -> willReturn ( $routing -> reveal ());
$request -> getAttribute ( 'language' ) -> willReturn ( $language -> reveal ());
$request -> getUri () -> willReturn ( '' );
$request -> getHeader ( 'User-Agent' ) -> willReturn ([]);
$result = Factory :: fromRequest ( $request -> reveal ());
static :: assertInstanceOf ( Pageview :: class , $result );
}
/**
* @ test
*/
2020-04-01 20:40:00 +02:00
public function returnedPageviewContainsUserAgent () : void
2020-02-25 21:19:18 +01:00
{
$routing = $this -> prophesize ( PageArguments :: class );
$routing -> getPageId () -> willReturn ( 10 );
$routing -> getPageType () -> willReturn ( 0 );
$language = $this -> prophesize ( SiteLanguage :: class );
$request = $this -> prophesize ( ServerRequestInterface :: class );
$request -> getAttribute ( 'routing' ) -> willReturn ( $routing -> reveal ());
$request -> getAttribute ( 'language' ) -> willReturn ( $language -> reveal ());
$request -> getUri () -> willReturn ( '' );
$request -> getHeader ( 'User-Agent' ) -> willReturn ([
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0'
]);
$result = Factory :: fromRequest ( $request -> reveal ());
static :: assertSame (
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0' ,
$result -> getUserAgent ()
);
}
/**
* @ test
*/
2020-04-01 20:40:00 +02:00
public function returnedPageviewContainsUri () : void
2020-02-25 21:19:18 +01:00
{
$routing = $this -> prophesize ( PageArguments :: class );
$routing -> getPageId () -> willReturn ( 10 );
$routing -> getPageType () -> willReturn ( 0 );
$language = $this -> prophesize ( SiteLanguage :: class );
$request = $this -> prophesize ( ServerRequestInterface :: class );
$request -> getAttribute ( 'routing' ) -> willReturn ( $routing -> reveal ());
$request -> getAttribute ( 'language' ) -> willReturn ( $language -> reveal ());
$request -> getUri () -> willReturn ( 'https://example.com/path?query=params&some=more#anchor' );
$request -> getHeader ( 'User-Agent' ) -> willReturn ([]);
$result = Factory :: fromRequest ( $request -> reveal ());
static :: assertSame (
'https://example.com/path?query=params&some=more#anchor' ,
$result -> getUrl ()
);
}
/**
* @ test
*/
2020-04-01 20:40:00 +02:00
public function returnedPageviewContainsPageType () : void
2020-02-25 21:19:18 +01:00
{
$routing = $this -> prophesize ( PageArguments :: class );
$routing -> getPageId () -> willReturn ( 10 );
$routing -> getPageType () -> willReturn ( 50 );
$language = $this -> prophesize ( SiteLanguage :: class );
$request = $this -> prophesize ( ServerRequestInterface :: class );
$request -> getAttribute ( 'routing' ) -> willReturn ( $routing -> reveal ());
$request -> getAttribute ( 'language' ) -> willReturn ( $language -> reveal ());
$request -> getUri () -> willReturn ( '' );
$request -> getHeader ( 'User-Agent' ) -> willReturn ([]);
$result = Factory :: fromRequest ( $request -> reveal ());
static :: assertSame (
50 ,
$result -> getPageType ()
);
}
/**
* @ test
*/
2020-04-01 20:40:00 +02:00
public function returnedPageviewContainsDateTime () : void
2020-02-25 21:19:18 +01:00
{
$routing = $this -> prophesize ( PageArguments :: class );
$routing -> getPageId () -> willReturn ( 10 );
$routing -> getPageType () -> willReturn ( 0 );
$language = $this -> prophesize ( SiteLanguage :: class );
$request = $this -> prophesize ( ServerRequestInterface :: class );
$request -> getAttribute ( 'routing' ) -> willReturn ( $routing -> reveal ());
$request -> getAttribute ( 'language' ) -> willReturn ( $language -> reveal ());
$request -> getUri () -> willReturn ( '' );
$request -> getHeader ( 'User-Agent' ) -> willReturn ([]);
$result = Factory :: fromRequest ( $request -> reveal ());
static :: assertInstanceOf ( \DateTimeImmutable :: class , $result -> getCrdate ());
}
/**
* @ test
*/
2020-04-01 20:40:00 +02:00
public function returnedPageviewContainsLanguage () : void
2020-02-25 21:19:18 +01:00
{
$routing = $this -> prophesize ( PageArguments :: class );
$routing -> getPageId () -> willReturn ( 10 );
$routing -> getPageType () -> willReturn ( 0 );
$language = $this -> prophesize ( SiteLanguage :: class );
$request = $this -> prophesize ( ServerRequestInterface :: class );
$request -> getAttribute ( 'routing' ) -> willReturn ( $routing -> reveal ());
$request -> getAttribute ( 'language' ) -> willReturn ( $language -> reveal ());
$request -> getUri () -> willReturn ( '' );
$request -> getHeader ( 'User-Agent' ) -> willReturn ([]);
$result = Factory :: fromRequest ( $request -> reveal ());
static :: assertInstanceOf ( SiteLanguage :: class , $result -> getLanguage ());
}
/**
* @ test
*/
2020-04-01 20:40:00 +02:00
public function returnedPageviewContainsPageId () : void
2020-02-25 21:19:18 +01:00
{
$routing = $this -> prophesize ( PageArguments :: class );
$routing -> getPageId () -> willReturn ( 10 );
$routing -> getPageType () -> willReturn ( 0 );
$language = $this -> prophesize ( SiteLanguage :: class );
$request = $this -> prophesize ( ServerRequestInterface :: class );
$request -> getAttribute ( 'routing' ) -> willReturn ( $routing -> reveal ());
$request -> getAttribute ( 'language' ) -> willReturn ( $language -> reveal ());
$request -> getUri () -> willReturn ( '' );
$request -> getHeader ( 'User-Agent' ) -> willReturn ([]);
$result = Factory :: fromRequest ( $request -> reveal ());
static :: assertSame (
10 ,
$result -> getPageUid ()
);
}
2020-04-01 21:04:32 +02:00
/**
* @ test
*/
public function returnsPageviewFromDbRow () : void
{
$siteLanguage = $this -> prophesize ( SiteLanguage :: class );
$site = $this -> prophesize ( Site :: class );
$site -> getLanguageById ( 0 ) -> willReturn ( $siteLanguage -> reveal ());
$siteFinder = $this -> prophesize ( SiteFinder :: class );
$siteFinder -> getSiteByPageId ( 2 ) -> willReturn ( $site -> reveal ());
$subject = new Factory ( $siteFinder -> reveal ());
$result = $subject -> fromDbRow ([
'uid' => 1 ,
'pid' => 2 ,
'sys_language_uid' => 0 ,
'crdate' => 1533906435 ,
'type' => 0 ,
'url' => 'https://example.com/path' ,
'user_agent' => 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36' ,
]);
static :: assertInstanceOf ( Pageview :: class , $result );
static :: assertSame ( 1 , $result -> getUid ());
static :: assertSame ( 2 , $result -> getPageUid ());
static :: assertSame ( $siteLanguage -> reveal (), $result -> getLanguage ());
static :: assertSame ( '1533906435' , $result -> getCrdate () -> format ( 'U' ));
static :: assertSame ( 0 , $result -> getPageType ());
static :: assertSame ( 'https://example.com/path' , $result -> getUrl ());
static :: assertSame ( 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36' , $result -> getUserAgent ());
}
2020-02-25 21:19:18 +01:00
}