diff --git a/page_manager.module b/page_manager.module index 7fd5c95..e5a8883 100644 --- a/page_manager.module +++ b/page_manager.module @@ -26,7 +26,7 @@ function page_manager_form_page_manager_display_variant_form_alter(array &$form, } /** - * @todo. + * Saves the third party settings for a page display variant. * * @see page_manager_form_page_manager_display_variant_form_alter() */ diff --git a/src/EventSubscriber/DisableBlocksDisplayVariantSubscriber.php b/src/EventSubscriber/DisableBlocksDisplayVariantSubscriber.php index 9471a2d..8536cd1 100644 --- a/src/EventSubscriber/DisableBlocksDisplayVariantSubscriber.php +++ b/src/EventSubscriber/DisableBlocksDisplayVariantSubscriber.php @@ -12,7 +12,7 @@ use Symfony\Component\EventDispatcher\EventSubscriberInterface; /** - * @todo. + * Disables page-level blocks for variants that select that option. */ class DisableBlocksDisplayVariantSubscriber implements EventSubscriberInterface { diff --git a/tests/src/Unit/DisableBlocksDisplayVariantSubscriberTest.php b/tests/src/Unit/DisableBlocksDisplayVariantSubscriberTest.php new file mode 100644 index 0000000..4ef9a7b --- /dev/null +++ b/tests/src/Unit/DisableBlocksDisplayVariantSubscriberTest.php @@ -0,0 +1,115 @@ +getMock('\Drupal\page_manager\PageInterface'); + $page->expects($this->never()) + ->method('getExecutable'); + $route_match = new RouteMatch('the_route_name', new Route('/the/path/has/no/page_manager_page'), ['page_manager_page' => $page]); + $event = new PageDisplayVariantSelectionEvent('not_overridden', $route_match); + $subscriber = new DisableBlocksDisplayVariantSubscriber(); + $subscriber->onSelectPageDisplayVariant($event); + $this->assertSame('not_overridden', $event->getPluginId()); + } + + /** + * @covers ::onSelectPageDisplayVariant + */ + public function testNoSelectedVariant() { + $executable = $this->getMock('\Drupal\page_manager\PageExecutableInterface'); + $page = $this->getMock('\Drupal\page_manager\PageInterface'); + $page->expects($this->once()) + ->method('getExecutable') + ->willReturn($executable); + $page->expects($this->never()) + ->method('getThirdPartySetting'); + $executable->expects($this->once()) + ->method('selectDisplayVariant') + ->willReturn(NULL); + $route_match = new RouteMatch('the_route_name', new Route('/the/path/has/a/{page_manager_page}'), ['page_manager_page' => $page]); + $event = new PageDisplayVariantSelectionEvent('not_overridden', $route_match); + + (new DisableBlocksDisplayVariantSubscriber())->onSelectPageDisplayVariant($event); + $this->assertSame('not_overridden', $event->getPluginId()); + } + + /** + * @covers ::onSelectPageDisplayVariant + * + * @dataProvider providerNoBlocksSettings + */ + public function testNoBlocksSettings($settings, $expected) { + $executable = $this->getMock('\Drupal\page_manager\PageExecutableInterface'); + $page = $this->getMock('\Drupal\page_manager\PageInterface'); + $page->expects($this->once()) + ->method('getExecutable') + ->willReturn($executable); + $page->expects($this->once()) + ->method('getThirdPartySetting') + ->with('page_manager', 'the_plugin_id') + ->willReturn($settings); + + $variant = $this->getMock('\Drupal\Core\Display\VariantInterface'); + $variant->expects($this->once()) + ->method('getPluginId') + ->willReturn('the_plugin_id'); + $executable->expects($this->once()) + ->method('selectDisplayVariant') + ->willReturn($variant); + + $route_match = new RouteMatch('the_route_name', new Route('/the/path/has/a/{page_manager_page}'), ['page_manager_page' => $page]); + $event = new PageDisplayVariantSelectionEvent('not_overridden', $route_match); + + (new DisableBlocksDisplayVariantSubscriber())->onSelectPageDisplayVariant($event); + $this->assertSame($expected, $event->getPluginId()); + } + + public function providerNoBlocksSettings() { + $data = []; + $data[] = [ + NULL, + 'not_overridden', + ]; + $data[] = [ + [], + 'not_overridden', + ]; + $data[] = [ + ['no_blocks' => NULL], + 'not_overridden', + ]; + $data[] = [ + ['no_blocks' => FALSE], + 'not_overridden', + ]; + $data[] = [ + ['no_blocks' => TRUE], + 'simple_page', + ]; + return $data; + } + +}