Skip to main content
Drupal code

Main navigation

  • Home
  • Snippets
User account menu
  • Log in

Breadcrumb

  1. Home

Kernel test example for TwigExtension function

By admin , 18 October, 2025

Tags

  • tests
  • twig
<?php

declare(strict_types=1);

namespace Drupal\Tests\MYMODULE\Kernel;

use Drupal\Core\Render\Markup;
use Drupal\Core\Session\UserSession;
use Drupal\flag\Entity\Flagging;
use Drupal\MYMODULE\TwigExtension\FriendsViewsLinkTwigExtension;
use Drupal\KernelTests\KernelTestBase;
use Drupal\user\Entity\User;

/**
* Tests the FriendsViewsLinkTwigExtension.
*/
class FriendsViewsLinkTwigExtensionTest extends KernelTestBase {

 /**
  * {@inheritdoc}
  */
 protected static $modules = [
   'system',
   'user',
   'field',
   'text',
   'taxonomy',
   'views',
   'flag',
   'privatemsg',
   'MYMODULE',
 ];
 
 /**
  * The current user.
  *
  * @var \Drupal\Core\Session\AccountInterface|\PHPUnit\Framework\MockObject\MockObject
  */
 protected $currentUser;
 
 /**
  * The flag service.
  *
  * @var \Drupal\flag\FlagServiceInterface|\PHPUnit\Framework\MockObject\MockObject
  */
 protected $flagService;
 
 /**
  * The entity type manager.
  *
  * @var \Drupal\Core\Entity\EntityTypeManagerInterface|\PHPUnit\Framework\MockObject\MockObject
  */
 protected $entityTypeManager;
 
 /**
  * The renderer.
  *
  * @var \Drupal\Core\Render\RendererInterface|\PHPUnit\Framework\MockObject\MockObject
  */
 protected $renderer;
 
 /**
  * {@inheritdoc}
  */
 protected function setUp(): void {
   parent::setUp();
   $this->flagService = $this->container->get('flag');
   $this->entityTypeManager = $this->container->get('entity_type.manager');
   $this->renderer = $this->container->get('renderer');
   $this->container->get('current_user')->setAccount(new UserSession(['uid' => 1]));
   $this->installEntitySchema('user');
   $this->installEntitySchema('flagging');
   $this->installSchema('flag', ['flag_counts']);
   $this->installConfig(['MYMODULE']);
 }
 
 /**
  * Tests the renderFriendLink function.
  */
 public function testRenderFriendLink(): void {
   $extension = new FriendsViewsLinkTwigExtension(
     $this->container->get('current_user'),
     $this->flagService,
     $this->entityTypeManager,
     $this->renderer
   );
   // Test case where the UID is different from the current user's ID.
   $uid = Markup::create(2);
   $flagging_id = Markup::create(3);
   $expected = '<a href="/friends/add/2">Add to friends</a>';
   $this->assertEquals($expected, $extension->renderFriendLink($uid, $flagging_id)->__toString());
   // Test case where the UID is the same as the current user's ID.
   $uid = Markup::create(1);
   $flagging_id = Markup::create(3);
   $expected = 'Error. Broken link';
   $this->assertEquals($expected, $extension->renderFriendLink($uid, $flagging_id));
   // Test request removing link.
   $uid = Markup::create(1);
   $flagging_id = Markup::create(3);
   $flaggable_user = User::create([
     'uid' => 2,
     'name' => 'foobar',
     'mail' => 'foobar@example.com',
   ]);
   $flaggable_user->save();
   $flagging = Flagging::create([
     'id' => (int) $flagging_id->__toString(),
     'flag_id' => 'friendship_request',
     'entity_type' => 'user',
     'entity_id' => $flaggable_user->id(),
     'uid' => (int) $uid->__toString(),
     'global' => 0,
     'created' => \Drupal::time()->getCurrentTime(),
   ]);
   $flagging->save();
   $flag = $this->flagService->getFlagById('friendship_request');
   $link = $flag->getLinkTypePlugin()->getAsFlagLink($flag, $flaggable_user, 'full');
   $link['#title']['#markup'] = t('Remove request');
   $expected = $this->renderer->renderInIsolation($link);
   $this->assertEquals($expected, $extension->renderFriendLink($uid, $flagging_id));
 }
 
}

Tags Cloud

dependency injection(21) form(19) views(15) drush(14) twig(13) field(11) preprocess(10) render(7) node(7) translate(7) tabs(7) comment(6) controller(6) file(6) entity(5) config(5) phpstorm(5) entityTypeManager(5) routes(5) database(4) jquery(4) service(4) roles(4) commerce(3) image(3) date(3) phpunit(3) php(3) entityQuery(3) cache(3) slick(3) block(3) custom entity(3) javascript(3) user(3) taxonomy(3) guzzle(3) redirect(3) url(3) git(2) request(2) phpstan(2) event(2) template(2) module(2) schema(2) migration(2) libraries(2) access(2) drupal.org(2) tests(2) ajax(2) photoswipe(2) permissions(2) logger(2) vscode(2) suggestions(2) states(2) title(2) fieldset(2) mysql(2) docksal(1) docker(1) revision(1) filter(1) attribute(1) service provider(1) csv(1) PHPDoc(1) table(1) eslint(1) array(1) deprecation(1) theme(1) errors(1) wsod(1) settings.php(1) watchdog(1) pager(1) widget(1) file.usage(1) queue(1) exif(1) imagemagick(1) media(1) uuid(1) renderer(1) exposed form(1) page manager(1) transliteration(1) random(1) development(1) mail(1) webform(1) register(1) textarea(1) label(1) input(1) batch(1) import(1) messenger(1)
RSS feed
Powered by Drupal