mirror of
https://github.com/FriendsOfTYPO3/tea.git
synced 2024-11-08 17:36:13 +01:00
eeda862e77
The `Product` namespace segment in the domain model namespace `TTN\Tea\Domain\Model` currently serves no purpose and only adds confusion. So let's simplify the extension structure accordingly. (I intended to use this to demonstrate DDD contexts, but never built enough models in the Tea extension for this to actually make sense.) Fixes #1008
108 lines
3 KiB
PHP
108 lines
3 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace TTN\Tea\Tests\Unit\Controller;
|
|
|
|
use PHPUnit\Framework\MockObject\MockObject;
|
|
use TTN\Tea\Controller\TeaController;
|
|
use TTN\Tea\Domain\Model\Tea;
|
|
use TTN\Tea\Domain\Repository\TeaRepository;
|
|
use TYPO3\CMS\Core\Http\HtmlResponse;
|
|
use TYPO3\CMS\Core\Information\Typo3Version;
|
|
use TYPO3\CMS\Extbase\Mvc\Controller\ActionController;
|
|
use TYPO3\CMS\Extbase\Persistence\QueryResultInterface;
|
|
use TYPO3\CMS\Fluid\View\TemplateView;
|
|
use TYPO3\TestingFramework\Core\AccessibleObjectInterface;
|
|
use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
|
|
|
|
/**
|
|
* @covers \TTN\Tea\Controller\TeaController
|
|
*/
|
|
final class TeaControllerTest extends UnitTestCase
|
|
{
|
|
/**
|
|
* @var TeaController&MockObject&AccessibleObjectInterface
|
|
*/
|
|
private TeaController $subject;
|
|
|
|
/**
|
|
* @var TemplateView&MockObject
|
|
*/
|
|
private TemplateView $viewMock;
|
|
|
|
/**
|
|
* @var TeaRepository&MockObject
|
|
*/
|
|
private TeaRepository $teaRepositoryMock;
|
|
|
|
protected function setUp(): void
|
|
{
|
|
parent::setUp();
|
|
|
|
$this->teaRepositoryMock = $this->createMock(TeaRepository::class);
|
|
// We need to create an accessible mock in order to be able to set the protected `view`.
|
|
$methodsToMock = ['htmlResponse', 'redirect', 'redirectToUri'];
|
|
if ((new Typo3Version())->getMajorVersion() < 12) {
|
|
$methodsToMock[] = 'forward';
|
|
}
|
|
$this->subject = $this->getAccessibleMock(TeaController::class, $methodsToMock, [$this->teaRepositoryMock]);
|
|
|
|
$this->viewMock = $this->createMock(TemplateView::class);
|
|
$this->subject->_set('view', $this->viewMock);
|
|
|
|
$responseStub = $this->createStub(HtmlResponse::class);
|
|
$this->subject->method('htmlResponse')->willReturn($responseStub);
|
|
}
|
|
|
|
/**
|
|
* @test
|
|
*/
|
|
public function isActionController(): void
|
|
{
|
|
self::assertInstanceOf(ActionController::class, $this->subject);
|
|
}
|
|
|
|
/**
|
|
* @test
|
|
*/
|
|
public function indexActionAssignsAllTeaAsTeasToView(): void
|
|
{
|
|
$teas = $this->createStub(QueryResultInterface::class);
|
|
$this->teaRepositoryMock->method('findAll')->willReturn($teas);
|
|
$this->viewMock->expects(self::once())->method('assign')->with('teas', $teas);
|
|
|
|
$this->subject->indexAction();
|
|
}
|
|
|
|
/**
|
|
* @test
|
|
*/
|
|
public function indexActionReturnsHtmlResponse(): void
|
|
{
|
|
$result = $this->subject->indexAction();
|
|
|
|
self::assertInstanceOf(HtmlResponse::class, $result);
|
|
}
|
|
|
|
/**
|
|
* @test
|
|
*/
|
|
public function showActionAssignsPassedTeaAsTeaToView(): void
|
|
{
|
|
$tea = new Tea();
|
|
$this->viewMock->expects(self::once())->method('assign')->with('tea', $tea);
|
|
|
|
$this->subject->showAction($tea);
|
|
}
|
|
|
|
/**
|
|
* @test
|
|
*/
|
|
public function showActionAssignsReturnsHtmlResponse(): void
|
|
{
|
|
$result = $this->subject->showAction(new Tea());
|
|
|
|
self::assertInstanceOf(HtmlResponse::class, $result);
|
|
}
|
|
}
|