<?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));
}
}