github_cards-8.x-1.x-dev/tests/src/Kernel/Entity/GitHubCardEntityTest.php

tests/src/Kernel/Entity/GitHubCardEntityTest.php
<?php

namespace Drupal\Tests\github_cards\Kernel\Entity;

use Drupal\github_cards\Entity\GitHubCardEntity;
use Drupal\github_cards\Entity\GitHubCardEntityInterface;
use Drupal\github_cards\Service\GitHubCardsInfoService;
use Drupal\KernelTests\Core\Entity\EntityKernelTestBase;
use Drupal\user\UserInterface;

/**
 * Class GitHubCardEntityTest.
 *
 * @package Drupal\Tests\github_cards\Kernel\Entity
 *
 * @group github_cards
 *
 * @coversDefaultClass \Drupal\github_cards\Entity\GitHubCardEntity
 */
class GitHubCardEntityTest extends EntityKernelTestBase {

  /**
   * Modules to enable.
   *
   * @var array
   */
  public static $modules = ['options', 'github_cards'];

  /**
   * Validate we can set and get the entity name.
   *
   * @covers ::getName
   * @covers ::setName
   */
  public function testName() {
    $card = $this->getCardEntity();
    $this->assertInstanceOf(GitHubCardEntityInterface::class, $card->setName('lorem ipsum'));
    $this->assertEquals('lorem ipsum', $card->getName());
  }

  /**
   * Get a simple GitHubCard entity.
   *
   * @param string $resourceUrl
   *   A default resource to use. Defaults to https://example.com.
   * @param bool $save
   *   TRUE to save the entity before returning. Defaults to FALSE.
   *
   * @return \Drupal\Core\Entity\EntityInterface|\Drupal\github_cards\Entity\GitHubCardEntity
   *   The simple entity.
   *
   * @throws \Drupal\Core\Entity\EntityStorageException
   *
   * @SuppressWarnings(PHPMD.StaticAccess)
   */
  protected function getCardEntity(string $resourceUrl = NULL, bool $save = FALSE):GitHubCardEntityInterface {
    $user = $this->createUser();

    $this->container->get('current_user')->setAccount($user);

    $card = GitHubCardEntity::create([
      'title' => $this->randomString(),
      'resource' => $resourceUrl ?? 'https://example.com',
    ]);

    if ($save) {
      $card->save();
    }

    return $card;
  }

  /**
   * Validate we can set and get the created time.
   *
   * @covers ::getCreatedTime
   * @covers ::setCreatedTime
   */
  public function testCreatedTime() {
    $card = $this->getCardEntity();

    $this->assertInstanceOf(GitHubCardEntityInterface::class, $card->setCreatedTime(1234567890));
    $this->assertEquals(1234567890, $card->getCreatedTime());
  }

  /**
   * Validate we can set and get the owner ID.
   *
   * @covers ::getOwnerId
   * @covers ::setOwnerId
   */
  public function testOwnerId() {
    $card = $this->getCardEntity();
    $user = $this->container->get('current_user');

    $this->assertEquals($user->id(), $card->getOwnerId());

    $second_user = $this->createUser();
    $this->assertInstanceOf(GitHubCardEntityInterface::class, $card->setOwnerId($second_user->id()));
    $this->assertEquals($second_user->id(), $card->getOwnerId());
  }

  /**
   * Validate we can set and get the owner object.
   *
   * @covers ::getOwner
   * @covers ::setOwner
   */
  public function testOwner() {
    $card = $this->getCardEntity();
    $user = $this->container->get('current_user');

    $this->assertInstanceOf(UserInterface::class, $card->getOwner());
    $this->assertEquals($user->getAccountName(), $card->getOwner()
      ->getAccountName());

    $second_user = $this->createUser();
    $this->assertInstanceOf(GitHubCardEntityInterface::class, $card->setOwner($second_user));
    $this->assertInstanceOf(UserInterface::class, $card->getOwner());
    $this->assertEquals($second_user->id(), $card->getOwnerId());
    $this->assertEquals($second_user->getAccountName(), $card->getOwner()
      ->getAccountName());
  }

  /**
   * Validate we can set and get the resource.
   *
   * @covers ::getResource
   * @covers ::setResource
   */
  public function testResource() {

    $card = $this->getCardEntity();

    $resources = [
      '' => 'invalid',
      'https://example.com' => 'invalid',
      'https://example.com/user-name/repo-name' => 'repository',
      'https://example.com/user-name' => 'user',
    ];

    foreach ($resources as $resource => $expected_type) {
      $this->assertInstanceOf(GitHubCardEntityInterface::class, $card->setResource($resource));
      $this->assertEquals($expected_type, $card->getResourceType(), $resource);
      $this->assertEquals($resource, $card->getResource());
    }
  }

  /**
   * Validate we can determine if a resource is a repository.
   *
   * @covers ::isRepositoryResource
   */
  public function testIsRepositoryResource() {
    $card = $this->getCardEntity('https://example.com/user-name/repo-name', FALSE);
    $this->assertTrue($card->isRepositoryResource());

    $card = $this->getCardEntity('https://example.com/user-name', FALSE);
    $this->assertFalse($card->isRepositoryResource());
  }

  /**
   * Validate we can determine if a resource is a user.
   *
   * @covers ::isUserResource
   */
  public function testIsUserResource() {
    $card = $this->getCardEntity('https://example.com/user-name/repo-name');
    $this->assertFalse($card->isUserResource());

    $card = $this->getCardEntity('https://example.com/user-name');
    $this->assertTrue($card->isUserResource());
  }

  /**
   * Validate we can get the username from a resource.
   *
   * @covers ::getResourceUser
   * @covers ::getGitHubCardsInfoService
   */
  public function testGetResourceUser() {
    $card = $this->getCardEntity('https://example.com/user-name/repo-name');
    $this->assertEquals('user-name', $card->getResourceUser());
  }

  /**
   * Validate we can get the repository from a resource.
   *
   * @covers ::getResourceRepository
   * @covers ::getGitHubCardsInfoService
   */
  public function testGetResourceRepository() {
    $card = $this->getCardEntity('https://example.com/user-name/repo-name');
    $this->assertEquals('repo-name', $card->getResourceRepository());
    $card = $this->getCardEntity('https://example.com/user-name');
    $this->assertFalse($card->getResourceRepository());
  }

  /**
   * Validate we can get resource data.
   *
   * @covers ::fetchResourceData
   * @covers ::getGitHubCardsInfoService
   */
  public function testFetchResourceData() {
    $card = $this->getCardEntity();
    $this->assertFalse($card->fetchResourceData());

    $card->setResource('https://example.com/user-name');
    $this->assertEquals('user-name', $card->fetchResourceData()['login']);
    $this->assertEquals('Username', $card->fetchResourceData()['name']);

    $card->setResource('https://example.com/user-name/repo-name');
    $this->assertEquals('user-name', $card->fetchResourceData()['login']);
    $this->assertEquals('repo-name', $card->fetchResourceData()['name']);
  }

  /**
   * Validate we can get and set the resource type.
   *
   * @covers ::getResourceType
   * @covers ::setResourceType
   */
  public function testResourceType() {
    $card = $this->getCardEntity();
    $card->setResourceType('repository');
    $this->assertEquals('repository', $card->getResourceType());
    $card->setResourceType('user');
    $this->assertEquals('user', $card->getResourceType());
    $card->setResourceType('invalid');
    $this->assertEquals('invalid', $card->getResourceType());
    $card->setResourceType($this->randomString());
    $this->assertEquals('invalid', $card->getResourceType());
  }

  /**
   * Validate preSave functionality.
   *
   * @covers ::preSave
   * @covers ::setResourceTypeFromResource
   */
  public function testPreSave() {
    // preSave() should set the correct value even if something else was set.
    $card = $this->getCardEntity('https://example.com/user-name');
    $card->setResourceType('repository');
    $this->assertEquals('repository', $card->getResourceType(), $card->getResource());
    $card->save();
    $this->assertEquals('user', $card->getResourceType(), $card->getResource());

    $card = $this->getCardEntity('https://example.com/user-name');
    $this->assertEquals('user', $card->getResourceType(), $card->getResource());
    $card->save();
    $this->assertEquals('user', $card->getResourceType(), $card->getResource());

    $card = $this->getCardEntity('https://example.com');
    $this->assertEquals('invalid', $card->getResourceType(), $card->getResource());
    $card->save();
    $this->assertEquals('invalid', $card->getResourceType(), $card->getResource());
  }

  /**
   * {@inheritdoc}
   */
  protected function setUp() {
    parent::setUp();

    $this->installEntitySchema('github_card');
    $this->installConfig(['options', 'github_cards']);

    $mock_info = $this->getMockBuilder(GitHubCardsInfoService::class)
      ->disableOriginalConstructor()
      ->setMethods(['getInfoByUrl'])
      ->getMock();
    $mock_info->method('getInfoByUrl')->willReturnMap([
      ['https://example.com', FALSE],
      ['https://example.com/user-name', [
        'name' => 'Username',
        'login' => 'user-name',
      ],
      ],
      ['https://example.com/user-name/repo-name', [
        'name' => 'repo-name',
        'login' => 'user-name',
      ],
      ],
    ]);

    $this->container->set('github_cards.github_info', $mock_info);
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc