diff --git a/src/Backend/Module.php b/src/Backend/Module.php index 6c99122..acbc97d 100644 --- a/src/Backend/Module.php +++ b/src/Backend/Module.php @@ -47,7 +47,7 @@ public function getFieldsByListModule(DataContainer $dc) return []; } - if (null === ($filterConfig = System::getContainer()->get('huh.filter.registry')->findById($listConfig->filter))) { + if (null === ($filterConfig = System::getContainer()->get('huh.filter.manager')->findById($listConfig->filter))) { return []; } diff --git a/src/Lists/DefaultList.php b/src/Lists/DefaultList.php index cc887aa..35cdbfd 100644 --- a/src/Lists/DefaultList.php +++ b/src/Lists/DefaultList.php @@ -126,7 +126,7 @@ public function parse(string $listTemplate = null, string $itemTemplate = null, // apply filter /** @var FilterQueryBuilder $queryBuilder */ - $queryBuilder = $this->_manager->getFilterRegistry()->getQueryBuilder($filter->id); + $queryBuilder = $this->_manager->getFilterManager()->getQueryBuilder($filter->id); $this->setIsSubmitted($isSubmitted); diff --git a/src/Manager/ListManager.php b/src/Manager/ListManager.php index 27b7f71..1f73fcf 100644 --- a/src/Manager/ListManager.php +++ b/src/Manager/ListManager.php @@ -13,7 +13,7 @@ use Contao\DataContainer; use Contao\System; use HeimrichHannot\FilterBundle\Config\FilterConfig; -use HeimrichHannot\FilterBundle\Registry\FilterRegistry; +use HeimrichHannot\FilterBundle\Manager\FilterManager; use HeimrichHannot\ListBundle\Lists\ListInterface; use HeimrichHannot\ListBundle\Model\ListConfigModel; use HeimrichHannot\ListBundle\Registry\ListConfigElementRegistry; @@ -48,9 +48,9 @@ class ListManager implements ListManagerInterface protected $listConfigElementRegistry; /** - * @var FilterRegistry + * @var FilterManager */ - protected $filterRegistry; + protected $filterManager; /** * @var Request @@ -106,7 +106,7 @@ public function __construct( ContaoFrameworkInterface $framework, ListConfigRegistry $listConfigRegistry, ListConfigElementRegistry $listConfigElementRegistry, - FilterRegistry $filterRegistry, + FilterManager $filterManager, Request $request, ModelUtil $modelUtil, UrlUtil $urlUtil, @@ -115,18 +115,18 @@ public function __construct( FormUtil $formUtil, \Twig_Environment $twig ) { - $this->framework = $framework; - $this->listConfigRegistry = $listConfigRegistry; + $this->framework = $framework; + $this->listConfigRegistry = $listConfigRegistry; $this->listConfigElementRegistry = $listConfigElementRegistry; - $this->filterRegistry = $filterRegistry; - $this->request = $request; - $this->modelUtil = $modelUtil; - $this->urlUtil = $urlUtil; - $this->formUtil = $formUtil; - $this->containerUtil = $containerUtil; - $this->imageUtil = $imageUtil; - $this->twig = $twig; - $this->database = $framework->createInstance(Database::class); + $this->filterManager = $filterManager; + $this->request = $request; + $this->modelUtil = $modelUtil; + $this->urlUtil = $urlUtil; + $this->formUtil = $formUtil; + $this->containerUtil = $containerUtil; + $this->imageUtil = $imageUtil; + $this->twig = $twig; + $this->database = $framework->createInstance(Database::class); } /** @@ -318,7 +318,7 @@ public function getFilterConfig(): FilterConfig { $filterId = $this->getListConfig()->filter; - if (!$filterId || null === ($filterConfig = System::getContainer()->get('huh.filter.registry')->findById($filterId))) { + if (!$filterId || null === ($filterConfig = System::getContainer()->get('huh.filter.manager')->findById($filterId))) { throw new \Exception(sprintf('The module %s has no valid filter. Please set one.', $this->moduleData['id'])); } @@ -342,18 +342,18 @@ public function setRequest(Request $request) } /** - * @return FilterRegistry + * @return FilterManager */ - public function getFilterRegistry(): FilterRegistry + public function getFilterManager(): FilterManager { - return $this->filterRegistry; + return $this->filterManager; } /** - * @param FilterRegistry $filterRegistry + * @param FilterManager $filterManager */ - public function setFilterRegistry(FilterRegistry $filterRegistry) + public function setFilterManager(FilterManager $filterManager) { - $this->filterRegistry = $filterRegistry; + $this->filterManager = $filterManager; } } diff --git a/src/Manager/ListManagerInterface.php b/src/Manager/ListManagerInterface.php index 13eaf4f..213fd13 100644 --- a/src/Manager/ListManagerInterface.php +++ b/src/Manager/ListManagerInterface.php @@ -10,7 +10,7 @@ use Contao\CoreBundle\Framework\ContaoFrameworkInterface; use HeimrichHannot\FilterBundle\Config\FilterConfig; -use HeimrichHannot\FilterBundle\Registry\FilterRegistry; +use HeimrichHannot\FilterBundle\Manager\FilterManager; use HeimrichHannot\ListBundle\Lists\ListInterface; use HeimrichHannot\ListBundle\Model\ListConfigModel; use HeimrichHannot\ListBundle\Registry\ListConfigElementRegistry; @@ -147,12 +147,12 @@ public function getRequest(); public function setRequest(Request $request); /** - * @return FilterRegistry + * @return FilterManager */ - public function getFilterRegistry(): FilterRegistry; + public function getFilterManager(): FilterManager; /** - * @param FilterRegistry $filterRegistry + * @param FilterManager $filterRegistry */ - public function setFilterRegistry(FilterRegistry $filterRegistry); + public function setFilterManager(FilterManager $filterRegistry); } diff --git a/src/Module/ModuleList.php b/src/Module/ModuleList.php index 2afbee9..021440d 100644 --- a/src/Module/ModuleList.php +++ b/src/Module/ModuleList.php @@ -14,6 +14,7 @@ use Contao\ModuleModel; use Contao\System; use HeimrichHannot\FilterBundle\Config\FilterConfig; +use HeimrichHannot\FilterBundle\Manager\FilterManager; use HeimrichHannot\ListBundle\Lists\ListInterface; use HeimrichHannot\ListBundle\Manager\ListManagerInterface; use HeimrichHannot\ListBundle\Model\ListConfigModel; @@ -45,6 +46,11 @@ class ModuleList extends Module */ protected $filterConfig; + /** + * @var FilterManager + */ + protected $filterManager; + /** * @var ListConfigRegistry */ @@ -76,7 +82,7 @@ public function __construct(ModuleModel $objModule, $strColumn = 'main') System::loadLanguageFile('tl_list_config'); $this->listConfigRegistry = System::getContainer()->get('huh.list.list-config-registry'); - $this->filterRegistry = System::getContainer()->get('huh.filter.registry'); + $this->filterManager = System::getContainer()->get('huh.filter.manager'); $this->request = System::getContainer()->get('huh.request'); // retrieve list config diff --git a/src/Registry/ListConfigRegistry.php b/src/Registry/ListConfigRegistry.php index b84612e..b179ad6 100644 --- a/src/Registry/ListConfigRegistry.php +++ b/src/Registry/ListConfigRegistry.php @@ -87,7 +87,7 @@ public function getFilterByPk(int $listConfigPk) return null; } - if (!$listConfig->filter || null === ($filterConfig = System::getContainer()->get('huh.filter.registry')->findById($listConfig->filter))) { + if (!$listConfig->filter || null === ($filterConfig = System::getContainer()->get('huh.filter.manager')->findById($listConfig->filter))) { return null; } diff --git a/src/Resources/config/services.yml b/src/Resources/config/services.yml index 6b7d66d..ea23866 100644 --- a/src/Resources/config/services.yml +++ b/src/Resources/config/services.yml @@ -17,7 +17,7 @@ services: - "@contao.framework" - "@huh.list.list-config-registry" - "@huh.list.list-config-element-registry" - - "@huh.filter.registry" + - "@huh.filter.manager" - "@huh.request" - "@huh.utils.model" - "@huh.utils.url" diff --git a/tests/Fixtures/library/Config.php b/tests/Fixtures/library/Config.php new file mode 100644 index 0000000..686c24e --- /dev/null +++ b/tests/Fixtures/library/Config.php @@ -0,0 +1,52 @@ +getMockBuilder(PageModel::class)->disableOriginalConstructor()->getMock(); + parent::setUp(); + + if (!defined('TL_ROOT')) { + \define('TL_ROOT', $this->getFixturesDir()); + } + + $objPage = $this->getMockBuilder(PageModel::class)->disableOriginalConstructor()->getMock(); $objPage->outputFormat = ''; - $GLOBALS['TL_LANGUAGE'] = 'de'; - $GLOBALS['objPage'] = $objPage; - $GLOBALS['TL_DCA']['tl_list_config']['fields']['abc']['eval']['addAsDataAttribute'] = true; - $GLOBALS['TL_DCA']['tl_list_config']['fields']['fieldWithData']['eval']['addAsDataAttribute'] = true; + $GLOBALS['TL_LANGUAGE'] = 'de'; + $GLOBALS['objPage'] = $objPage; + $GLOBALS['TL_DCA']['tl_list_config']['fields']['abc']['eval']['addAsDataAttribute'] = true; + $GLOBALS['TL_DCA']['tl_list_config']['fields']['fieldWithData']['eval']['addAsDataAttribute'] = true; $GLOBALS['TL_DCA']['tl_list_config']['fields']['fieldWithoutData']['eval']['addAsDataAttribute'] = false; - $router = $this->createRouterMock(); + $router = $this->createRouterMock(); $requestStack = $this->createRequestStackMock(); - $framework = $this->mockContaoFramework($this->createMockAdapater()); + $framework = $this->mockContaoFramework($this->createMockAdapater()); - $config = $this->createMock(Config::class); + $config = $this->createMock(Config::class); $database = $this->createMock(Connection::class); + $finder = new ResourceFinder([ + $this->getFixturesDir() . '/vendor/contao/core-bundle/Resources/contao', + ]); + $container = $this->mockContainer(); $container->set('request_stack', $requestStack); $container->set('router', $router); $container->set('contao.framework', $framework); $container->set('database_connection', $database); + $container->set('huh.request', new \HeimrichHannot\RequestBundle\Component\HttpFoundation\Request($this->mockContaoFramework(), $requestStack, $this->mockScopeMatcher())); $container->set('huh.list.list-config-registry', $this->createListConfigRegistry()); - $container->set('huh.filter.registry', $this->createFilterRegistry()); + $container->set('huh.list.manager.list', new ListManager( + $framework, + $container->get('huh.list.list-config-registry'), + new ListConfigElementRegistry($framework), + new FilterManager($framework, new FilterSession($framework, new Session(new MockArraySessionStorage()))), + $container->get('huh.request'), + new ModelUtil($framework), + new UrlUtil($framework), + new ContainerUtil($framework), + new ImageUtil($framework), + new FormUtil($framework), + new \Twig_Environment($this->getMockBuilder('Twig_LoaderInterface')->getMock()) + ) + ); + + $container->setParameter('huh.list', [ + 'list' => [ + 'managers' => [ + [ + 'name' => 'default', + 'id' => 'huh.list.manager.list', + ] + ] + ] + ]); + $container->set('huh.utils.model', new ModelUtil($framework)); + $container->set('huh.filter.manager', $this->createFilterManager()); $container->set('huh.utils.string', new StringUtil($framework)); + + $container->set('contao.resource_finder', $finder); + $container->setParameter('kernel.debug', true); + $container->setParameter('kernel.default_locale', 'de'); + + $connection = $this->createMock(Connection::class); + $connection + ->method('getDatabasePlatform') + ->willReturn(new MySqlPlatform()); + + $connection + ->expects(!empty($metadata) ? $this->once() : $this->never()) + ->method('getSchemaManager') + ->willReturn(new MySqlSchemaManager($connection)); + + $container->set('database_connection', $connection); + + $kernel = $this->createMock(Kernel::class); + $kernel->method('getContainer')->willReturn($container); + System::setContainer($container); } public function testCanBeInstantiated() { - $moduleModel = $this->mockClassWithProperties(ModuleModel::class, ['id' => 1]); - $moduleModel->method('row')->willReturn(['listConfig' => 12]); - $module = new ModuleList($moduleModel); + $model = $this->mockClassWithProperties(ModuleModel::class, ['id' => 1, 'type' => 'list', 'listConfig' => 12]); + $model->method('row')->willReturn(['id' => 1, 'type' => 'list', 'listConfig' => 12]); + + $module = new ModuleList($model); + $this->assertInstanceOf(ModuleList::class, $module); } @@ -73,11 +148,11 @@ public function skip_testGenerate() TemplateLoader::addFiles(['mod_list' => '../src/Resources/contao/templates']); $moduleModelConfig = [ - 'id' => 1, + 'id' => 1, 'listConfig' => 5, - 'cssID' => [0 => 'phpunit', 1 => 'test'], + 'cssID' => [0 => 'phpunit', 1 => 'test'], ]; - $moduleModel = $this->getMockBuilder(ModuleModel::class)->disableOriginalConstructor()->setMethods(['row'])->getMock(); + $moduleModel = $this->getMockBuilder(ModuleModel::class)->disableOriginalConstructor()->setMethods(['row'])->getMock(); $moduleModel->method('row')->willReturn($moduleModelConfig); foreach ($moduleModelConfig as $key => $value) { $moduleModel->$key = $value; @@ -95,7 +170,7 @@ public function createRouterMock() $count = 0; foreach ($params as $key => $value) { $url .= (0 === $count ? '?' : '&'); - $url .= $key.'='.$value; + $url .= $key . '=' . $value; ++$count; } } @@ -109,7 +184,7 @@ public function createRouterMock() public function createRequestStackMock() { $requestStack = new RequestStack(); - $request = new Request(); + $request = new Request(); $request->attributes->set('_contao_referer_id', 'foobar'); $requestStack->push($request); @@ -119,19 +194,18 @@ public function createRequestStackMock() public function createMockAdapater() { $systemAdapter = $this->mockAdapter(['loadLanguageFile']); -// $modelAdapter = $this->mockAdapter(['__construct']); -// $modelAdapter->method('__construct')->will + $modelAdapter = $this->mockAdapter(['getClassFromTable']); return [ -// Model::class => $modelAdapter -System::class => $systemAdapter, + Model::class => $modelAdapter, + System::class => $systemAdapter, ]; } public function createListConfigRegistry() { $listModelData = [ - 'id' => 5, + 'id' => 5, 'filter' => 3, ]; @@ -141,14 +215,14 @@ public function createListConfigRegistry() $listRegistryModel->filter = 3; $listRegistry = $this->createConfiguredMock(ListConfigRegistry::class, [ - 'findByPk' => $listRegistryModel, + 'findByPk' => $listRegistryModel, 'computeListConfig' => $listRegistryModel, ]); return $listRegistry; } - public function createFilterRegistry() + public function createFilterManager() { $filterConfig = $this->getMockBuilder(FilterConfig::class)->disableOriginalConstructor()->setMethods(['getFilter', 'hasData'])->getMock(); $filterConfig->method('getFilter')->willReturn([ @@ -156,11 +230,32 @@ public function createFilterRegistry() ]); $filterConfig->method('hasData')->willReturn(true); - $filterRegistryConfig = [ + $filterManagerConfig = [ 'findById' => $filterConfig, ]; - $filterRegistry = $this->createConfiguredMock(FilterRegistry::class, $filterRegistryConfig); + $filterManager = $this->createConfiguredMock(FilterManager::class, $filterManagerConfig); - return $filterRegistry; + return $filterManager; + } + + /** + * @return string + */ + protected function getFixturesDir(): string + { + return __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'Fixtures'; + } + + /** + * Mocks a request scope matcher. + * + * @return ScopeMatcher + */ + protected function mockScopeMatcher(): ScopeMatcher + { + return new ScopeMatcher( + new RequestMatcher(null, null, null, null, ['_scope' => 'backend']), + new RequestMatcher(null, null, null, null, ['_scope' => 'frontend']) + ); } }