You are here

public function PanelsEverywhereRouteSubscriberTest::testSubscriberRemovesVariantRouteAndSetsPanelsEverywherePageIdForOriginalRouteInCollection in Panels Everywhere 8.4

Test onAlterRoutes.

Specifically that the page-manager variant route-override is and the panels_everywhere_page_id is set on the original route.

File

tests/src/Unit/Routing/PanelsEverywhereRouteSubscriberTest.php, line 195

Class

PanelsEverywhereRouteSubscriberTest
@coversDefaultClass \Drupal\panels_everywhere\Routing\PanelsEverywhereRouteSubscriber @group panels_everywhere

Namespace

Drupal\Tests\panels_everywhere\Unit\Routing

Code

public function testSubscriberRemovesVariantRouteAndSetsPanelsEverywherePageIdForOriginalRouteInCollection() {
  $page_id = 'some_page_id';
  $variant_id = 'some_variant_id';
  $route_name_variant = "page_manager.page_view_{$page_id}_{$variant_id}";
  $route_name_original = 'original.route_name';
  $variantPlugin = $this
    ->prophesize(PanelsEverywhereDisplayVariant::class);
  $variantPlugin
    ->isRouteOverrideEnabled()
    ->willReturn(FALSE);
  $pageVariant = $this
    ->prophesize(PageVariantInterface::class);
  $pageVariant
    ->id()
    ->willReturn($variant_id);
  $pageVariant
    ->getVariantPluginId()
    ->willReturn('panels_everywhere_variant');
  $pageVariant
    ->getVariantPlugin()
    ->willReturn($variantPlugin
    ->reveal());
  $pageEntity = $this
    ->prophesize(PageInterface::class);
  $pageEntity
    ->id()
    ->willReturn($page_id);
  $pageEntity
    ->status()
    ->willReturn(TRUE);
  $pageEntity
    ->getVariants()
    ->willReturn([
    $variant_id => $pageVariant
      ->reveal(),
  ]);
  $pageStorage = $this
    ->prophesize(EntityStorageInterface::class);
  $pageStorage
    ->loadMultiple()
    ->willReturn([
    $pageEntity
      ->reveal(),
  ]);
  $entityTypeManager = $this
    ->prophesize(EntityTypeManagerInterface::class);
  $entityTypeManager
    ->getStorage('page')
    ->willReturn($pageStorage
    ->reveal());
  $cacheTagsInvalidator = $this
    ->prophesize(CacheTagsInvalidatorInterface::class);
  $routeOriginal = new Route('/some-path');
  $routeVariant = new Route('/some-path');
  $routeVariant
    ->setDefault('overridden_route_name', $route_name_original);
  $routeCollection = new RouteCollection();
  $routeCollection
    ->add($route_name_original, $routeOriginal);
  $routeCollection
    ->add($route_name_variant, $routeVariant);
  $event = new RouteBuildEvent($routeCollection);

  // When.
  $subscriber = new PanelsEverywhereRouteSubscriber($entityTypeManager
    ->reveal(), $cacheTagsInvalidator
    ->reveal());
  $subscriber
    ->onAlterRoutes($event);

  // Then.
  self::assertNull($routeCollection
    ->get($route_name_variant));
  self::assertEquals($page_id, $routeOriginal
    ->getDefault('page_id'));
}