Skip to content

Commit

Permalink
added tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Konstantin Wagner committed Jan 31, 2018
1 parent b540121 commit 1809170
Show file tree
Hide file tree
Showing 9 changed files with 647 additions and 29 deletions.
3 changes: 2 additions & 1 deletion src/Entity/QuizSession.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
namespace HeimrichHannot\QuizBundle\Entity;

use Contao\CoreBundle\Framework\ContaoFrameworkInterface;
use Contao\System;
use Symfony\Component\HttpFoundation\Session\SessionInterface;

class QuizSession
Expand All @@ -30,7 +31,7 @@ class QuizSession
*/
public function __construct()
{
$this->session = \System::getContainer()->get('session');
$this->session = System::getContainer()->get('session');
}

/**
Expand Down
37 changes: 28 additions & 9 deletions src/Manager/ModelManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,31 @@

namespace HeimrichHannot\QuizBundle\Manager;

use Contao\ContentModel;
use Contao\CoreBundle\Framework\ContaoFrameworkInterface;
use Contao\FilesModel;
use Contao\Model;
use Contao\Module;
use Contao\StringUtil;
use Contao\System;

class ModelManager
{
/**
* @var ContaoFrameworkInterface
*/
protected $framework;

/**
* Constructor.
*
* @param ContaoFrameworkInterface $framework
*/
public function __construct(ContaoFrameworkInterface $framework)
{
$this->framework = $framework;
}

/**
* gets the content element by the given model and table.
*
Expand All @@ -25,17 +44,17 @@ class ModelManager
public function getContentElementByModel(Model $objModel, string $table)
{
$id = $objModel->id;

/** @var ContentModel $adapter */
$adapter = $this->framework->getAdapter(ContentModel::class);
$strText = '';
$objElement = \ContentModel::findPublishedByPidAndTable($id, $table);
if (null !== $objElement) {
while ($objElement->next()) {
$strText .= Module::getContentElement($objElement->current());
$objElements = $adapter->findPublishedByPidAndTable($id, $table);
if (null !== $objElements) {
foreach ($objElements as $objElement) {
$strText .= $this->framework->getAdapter(Module::class)->getContentElement($objElement);
}
}

$objModel->hasContentElement = $adapter->countPublishedByPidAndTable($objModel->id, $table) > 0;
$objModel->contentElement = $strText;
$objModel->hasContentElement = \ContentModel::countPublishedByPidAndTable($objModel->id, $table) > 0;

return $objModel;
}
Expand All @@ -51,15 +70,15 @@ public function addImage($objArticle, array &$templateData, $imgSize)
{
// Add an image
if ($objArticle->addImage && '' !== $objArticle->singleSRC) {
$imageModel = \FilesModel::findByUuid($objArticle->singleSRC);
$imageModel = $this->framework->getAdapter(FilesModel::class)->findByUuid($objArticle->singleSRC);

if (null !== $imageModel && is_file(TL_ROOT.'/'.$imageModel->path)) {
// Do not override the field now that we have a model registry (see #6303)
$imageArray = $objArticle->row();

// Override the default image size
if ('' !== $imgSize) {
$size = \StringUtil::deserialize($imgSize);
$size = $this->framework->getAdapter(StringUtil::class)->deserialize($imgSize);

if ($size[0] > 0 || $size[1] > 0 || is_numeric($size[2])) {
$imageArray['size'] = $imgSize;
Expand Down
118 changes: 118 additions & 0 deletions tests/Manager/ModelManagerTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
<?php

/*
* Copyright (c) 2018 Heimrich & Hannot GmbH
*
* @license LGPL-3.0-or-later
*/

namespace HeimrichHannot\QuizBundle\Test\Choice;

use Contao\Config;
use Contao\ContentModel;
use Contao\ManagerBundle\HttpKernel\ContaoKernel;
use Contao\Model;
use Contao\System;
use Contao\TestCase\ContaoTestCase;
use Doctrine\DBAL\Connection;
use HeimrichHannot\QuizBundle\Manager\ModelManager;
use HeimrichHannot\QuizBundle\Model\QuizAnswerModel;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\Routing\RouterInterface;

class ModelManagerTest extends ContaoTestCase
{
/**
* {@inheritdoc}
*/
public function setUp(): void
{
parent::setUp();

if (!defined('TL_ROOT')) {
\define('TL_ROOT', $this->getFixturesDir());
}

$router = $this->createRouterMock();
$requestStack = $this->createRequestStackMock();
$framework = $this->mockContaoFramework($this->createMockAdapter());

$database = $this->createMock(Connection::class);
$container = $this->mockContainer();
$container->set('kernel', $this->createMock(ContaoKernel::class));
$container->setParameter('secret', Config::class);
$container->set('request_stack', $requestStack);
$container->set('router', $router);
$container->set('session', new Session());
$container->set('contao.framework', $framework);
$container->set('database_connection', $database);
System::setContainer($container);
}

public function testContentElementByModel()
{
$contentModel = $this->mockClassWithProperties(ContentModel::class, ['id' => 1]);

$contentAdapter = $this->mockAdapter(['findPublishedByPidAndTable', 'countPublishedByPidAndTable']);
$contentAdapter->method('findPublishedByPidAndTable')->willReturn($contentModel);
$contentAdapter->method('countPublishedByPidAndTable')->willReturn(1);

$framework = $this->mockContaoFramework([ContentModel::class => $contentAdapter]);

$manager = new ModelManager($framework);

$mockModel = $this->mockClassWithProperties(QuizAnswerModel::class, ['id' => 1, 'hasContentElement' => null, 'contentElement' => '']);

$mockModel = $manager->getContentElementByModel($mockModel, 'tl_test');

$this->assertInstanceOf(QuizAnswerModel::class, $mockModel);
$this->assertSame('', $mockModel->contentElement);
$this->assertNull($mockModel->hasContentElement);
}

public function createRouterMock()
{
$router = $this->createMock(RouterInterface::class);
$router->method('generate')->with('contao_backend', $this->anything())->will($this->returnCallback(function ($route, $params = []) {
$url = '/contao';
if (!empty($params)) {
$count = 0;
foreach ($params as $key => $value) {
$url .= (0 === $count ? '?' : '&');
$url .= $key.'='.$value;
++$count;
}
}

return $url;
}));

return $router;
}

public function createRequestStackMock()
{
$requestStack = new RequestStack();
$request = new \Symfony\Component\HttpFoundation\Request();
$request->attributes->set('_contao_referer_id', 'foobar');
$requestStack->push($request);

return $requestStack;
}

public function createMockAdapter()
{
$modelAdapter = $this->mockAdapter(['__construct']);

return [Model::class => $modelAdapter];
}

/**
* @return string
*/
protected function getFixturesDir(): string
{
return __DIR__.DIRECTORY_SEPARATOR.'Fixtures';
}
}
110 changes: 110 additions & 0 deletions tests/Manager/QuizAnswerManagerTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
<?php

/*
* Copyright (c) 2018 Heimrich & Hannot GmbH
*
* @license LGPL-3.0-or-later
*/

namespace HeimrichHannot\QuizBundle\Test\Manager;

use Contao\ManagerBundle\HttpKernel\ContaoKernel;
use Contao\System;
use Contao\TestCase\ContaoTestCase;
use HeimrichHannot\QuizBundle\Manager\QuizAnswerManager;
use HeimrichHannot\QuizBundle\Model\QuizAnswerModel;

class QuizAnswerManagerTest extends ContaoTestCase
{
/**
* {@inheritdoc}
*/
public function setUp(): void
{
parent::setUp();

if (!defined('TL_ROOT')) {
\define('TL_ROOT', $this->getFixturesDir());
}

$container = $this->mockContainer();
$container->set('kernel', $this->createMock(ContaoKernel::class));
System::setContainer($container);
}

public function testFindOnePublishedByPid()
{
$quizAnswerModel = $this->mockClassWithProperties(QuizAnswerModel::class, ['id' => 1]);

$quizAnswerAdapter = $this->mockAdapter(['findOnePublishedByPid', 'getTable', 'findOneBy']);
$quizAnswerAdapter->method('findOnePublishedByPid')->willReturn($quizAnswerModel);
$quizAnswerAdapter->method('getTable')->willReturn('tl_quiz_answer');
$quizAnswerAdapter->method('findOneBy')->willReturn($quizAnswerModel);

$framework = $this->mockContaoFramework([QuizAnswerModel::class => $quizAnswerAdapter]);

$manager = new QuizAnswerManager($framework);

$result = $manager->findOnePublishedByPid(1);

$this->assertInstanceOf(QuizAnswerModel::class, $result);
}

public function testFindPublishedByPid()
{
$quizAnswerModel = $this->mockClassWithProperties(QuizAnswerModel::class, ['id' => 1]);

$quizAnswerAdapter = $this->mockAdapter(['findPublishedByPid', 'getTable', 'findBy']);
$quizAnswerAdapter->method('findPublishedByPid')->willReturn($quizAnswerModel);
$quizAnswerAdapter->method('getTable')->willReturn('tl_quiz_answer');
$quizAnswerAdapter->method('findBy')->willReturn($quizAnswerModel);

$framework = $this->mockContaoFramework([QuizAnswerModel::class => $quizAnswerAdapter]);

$manager = new QuizAnswerManager($framework);

$result = $manager->findPublishedByPid(1);

$this->assertInstanceOf(QuizAnswerModel::class, $result);
}

public function testFindBy()
{
$quizAnswerModel = $this->mockClassWithProperties(QuizAnswerModel::class, ['id' => 1]);

$quizAnswerAdapter = $this->mockAdapter(['findBy']);
$quizAnswerAdapter->method('findBy')->willReturn($quizAnswerModel);

$framework = $this->mockContaoFramework([QuizAnswerModel::class => $quizAnswerAdapter]);

$manager = new QuizAnswerManager($framework);

$result = $manager->findBy('id', 1);

$this->assertInstanceOf(QuizAnswerModel::class, $result);
}

public function testFindOneBy()
{
$quizAnswerModel = $this->mockClassWithProperties(QuizAnswerModel::class, ['id' => 1]);

$quizAnswerAdapter = $this->mockAdapter(['findOneBy']);
$quizAnswerAdapter->method('findOneBy')->willReturn($quizAnswerModel);

$framework = $this->mockContaoFramework([QuizAnswerModel::class => $quizAnswerAdapter]);

$manager = new QuizAnswerManager($framework);

$result = $manager->findOneBy('id', 1);

$this->assertInstanceOf(QuizAnswerModel::class, $result);
}

/**
* @return string
*/
protected function getFixturesDir(): string
{
return __DIR__.DIRECTORY_SEPARATOR.'Fixtures';
}
}
Loading

0 comments on commit 1809170

Please sign in to comment.