Skip to content

Commit

Permalink
refactored and added tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Konstantin Wagner committed Feb 6, 2018
1 parent 073f2de commit 2dc0a66
Show file tree
Hide file tree
Showing 3 changed files with 146 additions and 1 deletion.
1 change: 0 additions & 1 deletion src/Manager/QuizAnswerSolvingManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@ public function parseAnswerSolving($pid, $quizId, $token)
$answerSolving = $this->findPublishedByPid($pid);

if (null !== $answerSolving) {
$solving = '';
foreach ($answerSolving as $item) {
$solving .= System::getContainer()->get('huh.quiz.model.manager')->parseModel($item, $item->solving, QuizAnswerSolvingModel::getTable(), $item->cssClass, $item->imgSize);
}
Expand Down
3 changes: 3 additions & 0 deletions tests/Manager/QuizAnswerManagerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -42,18 +42,21 @@ public function setUp(): void
$framework = $this->mockContaoFramework($this->createMockAdapter());
$container->set('contao.framework', $framework);

// twig
$loader = new \Twig_Loader_Filesystem(__DIR__.'/../../src/Resources/views/');
$loader->addPath(__DIR__.'/../../src/Resources/views/', 'HeimrichHannotContaoQuiz');
$twig = new \Twig_Environment($loader, ['cache' => $this->getTempDir().'/var/cache/']);
$container->set('twig', $twig);

// model manager
$contentModel = $this->mockClassWithProperties(ContentModel::class, ['id' => 1]);
$contentAdapter = $this->mockAdapter(['findPublishedByPidAndTable', 'countPublishedByPidAndTable']);
$contentAdapter->method('findPublishedByPidAndTable')->willReturn($contentModel);
$contentAdapter->method('countPublishedByPidAndTable')->willReturn(1);
$manager = new ModelManager($this->mockContaoFramework(array_merge($this->createMockAdapter(), [ContentModel::class => $contentAdapter])));
$container->set('huh.quiz.model.manager', $manager);

// request stack
$request = new Request();
$requestStack = new RequestStack();
$requestStack->push($request);
Expand Down
143 changes: 143 additions & 0 deletions tests/Manager/QuizAnswerSolvingManagerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,27 @@

namespace HeimrichHannot\QuizBundle\Test\Manager;

use Contao\Config;
use Contao\ContentModel;
use Contao\ManagerBundle\HttpKernel\ContaoKernel;
use Contao\Model;
use Contao\System;
use Contao\TestCase\ContaoTestCase;
use Firebase\JWT\JWT;
use Haste\Util\Url;
use HeimrichHannot\QuizBundle\Manager\ModelManager;
use HeimrichHannot\QuizBundle\Manager\QuizAnswerManager;
use HeimrichHannot\QuizBundle\Manager\QuizAnswerSolvingManager;
use HeimrichHannot\QuizBundle\Manager\QuizQuestionManager;
use HeimrichHannot\QuizBundle\Manager\TokenManager;
use HeimrichHannot\QuizBundle\Model\QuizAnswerModel;
use HeimrichHannot\QuizBundle\Model\QuizAnswerSolvingModel;
use HeimrichHannot\QuizBundle\Model\QuizQuestionModel;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpFoundation\Session\Storage\MockArraySessionStorage;
use Symfony\Component\Translation\Translator;

class QuizAnswerSolvingManagerTest extends ContaoTestCase
{
Expand All @@ -32,6 +46,58 @@ public function setUp(): void
$container = $this->mockContainer();
$container->set('kernel', $this->createMock(ContaoKernel::class));
$container->set('session', new Session(new MockArraySessionStorage()));

// quiz question manager
$quizQuestionModel = $this->mockClassWithProperties(QuizQuestionModel::class, ['id' => 1]);
$quizQuestionAdapter = $this->mockAdapter(['findOnePublishedByPidNotInQuestions', 'getTable', 'findOneBy']);

$quizQuestionAdapter->method('findOnePublishedByPidNotInQuestions')->willReturn($quizQuestionModel);
$quizQuestionAdapter->method('getTable')->willReturn('tl_quiz_question');
$quizQuestionAdapter->method('findOneBy')->willReturn($quizQuestionModel);

$framework = $this->mockContaoFramework([QuizQuestionModel::class => $quizQuestionAdapter]);
$manager = new QuizQuestionManager($framework);
$container->set('huh.quiz.question.manager', $manager);

// quiz answer manager
$quizAnswerModel = $this->mockClassWithProperties(QuizQuestionModel::class, ['id' => 1, 'pid' => 1, 'isSolution' => true]);
$quizAnswerAdapter = $this->mockAdapter(['findBy']);
$quizAnswerAdapter->method('findBy')->willReturn($quizAnswerModel);

$framework = $this->mockContaoFramework([QuizAnswerModel::class => $quizAnswerAdapter]);
$manager = new QuizAnswerManager($framework);
$container->set('huh.quiz.answer.manager', $manager);

// translator
$translator = new Translator('de');
$container->set('translator', $translator);
$container->setParameter('secret', Config::class);

// request stack
$request = new Request();
$requestStack = new RequestStack();
$requestStack->push($request);
$container->set('request_stack', $requestStack);

// twig
$loader = new \Twig_Loader_Filesystem(__DIR__.'/../../src/Resources/views/');
$loader->addPath(__DIR__.'/../../src/Resources/views/', 'HeimrichHannotContaoQuiz');
$twig = new \Twig_Environment($loader, ['cache' => $this->getTempDir().'/var/cache/']);
$container->set('twig', $twig);

// token manager
$framework = $this->mockContaoFramework($this->createMockAdapter());
$tokenManager = new TokenManager($framework);
$container->set('huh.quiz.token.manager', $tokenManager);

// model manager
$contentModel = $this->mockClassWithProperties(ContentModel::class, ['id' => 1]);
$contentAdapter = $this->mockAdapter(['findPublishedByPidAndTable', 'countPublishedByPidAndTable']);
$contentAdapter->method('findPublishedByPidAndTable')->willReturn($contentModel);
$contentAdapter->method('countPublishedByPidAndTable')->willReturn(1);
$manager = new ModelManager($this->mockContaoFramework(array_merge($this->createMockAdapter(), [ContentModel::class => $contentAdapter])));
$container->set('huh.quiz.model.manager', $manager);

System::setContainer($container);
}

Expand Down Expand Up @@ -103,6 +169,83 @@ public function testFindOneBy()
$this->assertInstanceOf(QuizAnswerSolvingModel::class, $result);
}

public function testParseAnswerSolving()
{
$token = JWT::encode(['session' => System::getContainer()->get('session')->getId()], System::getContainer()->getParameter('secret'));
$manager = new QuizAnswerSolvingManager($this->mockContaoFramework($this->createMockAdapter()));
$template = $manager->parseAnswerSolving('1', '1', $token);

$html = '<div class="quiz-answer-solving">
huh.quiz.answer.solving.correct<div class="css">
<div class="text">
correct
</div>
</div>
<a href="https://www.anwaltauskunft.dav.hhdev/app_dev.php/rechtsquiz/arbeitsrecht/8?answer=1">huh.quiz.answer.solving.next</a>
</div>';
$this->assertSame($html, $template);

$container = System::getContainer();
// quiz answer manager
$quizAnswerAdapter = $this->mockAdapter(['findBy']);
$quizAnswerAdapter->method('findBy')->willReturn(null);

$framework = $this->mockContaoFramework([QuizAnswerModel::class => $quizAnswerAdapter]);
$manager = new QuizAnswerManager($framework);
$container->set('huh.quiz.answer.manager', $manager);

$token = JWT::encode(['session' => System::getContainer()->get('session')->getId()], System::getContainer()->getParameter('secret'));
$manager = new QuizAnswerSolvingManager($this->mockContaoFramework($this->createMockAdapter()));
$template = $manager->parseAnswerSolving('1', '1', $token);

$this->assertSame('huh.quiz.answer.error', $template);
}

public function testGetNexQuestionUrl()
{
$manager = new QuizAnswerSolvingManager($this->mockContaoFramework($this->createMockAdapter()));
$templateData = $manager->getNextQuestionUrl('eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzZXNzaW9uIjoic2pja3IwZGxvNGJqZm1wZmRpb2hubGZwcWkiLCIxMSI6IjIyIn0.8O6LzSHEk3A-TQ3PRsBuW4TkQasFpzDeM08YO2FKEpE', '1');

$this->assertCount(2, $templateData);
$this->assertArrayHasKey('linkText', $templateData);
$this->assertArrayHasKey('href', $templateData);

$quizQuestionAdapter = $this->mockAdapter(['findOnePublishedByPidNotInQuestions', 'getTable', 'findOneBy']);
$quizQuestionAdapter->method('findOnePublishedByPidNotInQuestions')->willReturn(null);
$quizQuestionAdapter->method('getTable')->willReturn('tl_quiz_question');
$quizQuestionAdapter->method('findOneBy')->willReturn(null);

$container = System::getContainer();
$framework = $this->mockContaoFramework([QuizQuestionModel::class => $quizQuestionAdapter]);
$manager = new QuizQuestionManager($framework);
$container->set('huh.quiz.question.manager', $manager);

$token = JWT::encode(['session' => System::getContainer()->get('session')->getId()], System::getContainer()->getParameter('secret'));
$manager = new QuizAnswerSolvingManager($this->mockContaoFramework($this->createMockAdapter()));
$templateData = $manager->getNextQuestionUrl($token, '1');

$this->assertCount(2, $templateData);
$this->assertArrayHasKey('linkText', $templateData);
$this->assertArrayHasKey('href', $templateData);
}

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

$urlAdapter = $this->mockAdapter(['addQueryString', 'removeQueryString']);
$urlAdapter->method('addQueryString')->willReturn('https://www.anwaltauskunft.dav.hhdev/app_dev.php/rechtsquiz/arbeitsrecht/8?answer=1');
$urlAdapter->method('removeQueryString')->willReturn('https://www.anwaltauskunft.dav.hhdev/app_dev.php/rechtsquiz/arbeitsrecht/8');

$quizAnswerSolvingModel = $this->mockClassWithProperties(QuizAnswerSolvingModel::class, ['id' => 1, 'solving' => 'correct', 'cssClass' => 'css', 'imgSize' => '']);
$quizAnswerSolvingAdapter = $this->mockAdapter(['getTable', 'findBy']);
$quizAnswerSolvingAdapter->method('getTable')->willReturn('tl_quiz_answer_solving');
$quizAnswerSolvingAdapter->method('findBy')->willReturn([$quizAnswerSolvingModel]);

return [Model::class => $modelAdapter, Url::class => $urlAdapter, QuizAnswerSolvingModel::class => $quizAnswerSolvingAdapter];
}

/**
* @return string
*/
Expand Down

0 comments on commit 2dc0a66

Please sign in to comment.