Refactor phpunit tests in order to use the ChamiloTestTrait.php

pull/3904/head
Julio Montoya 4 years ago
parent 80b197c25d
commit 290a0af9f1
  1. 3
      phpunit.xml.dist
  2. 2
      tests/AbstractApiTest.php
  3. 74
      tests/ChamiloTestTrait.php
  4. 11
      tests/CoreBundle/Repository/Node/AccessUrlRepositoryTest.php
  5. 23
      tests/CoreBundle/Repository/Node/CourseRepositoryTest.php
  6. 27
      tests/CourseBundle/Repository/CDocumentRepositoryTest.php

@ -11,10 +11,11 @@
<ini name="error_reporting" value="-1" />
<server name="APP_ENV" value="test" force="true" />
<server name="SHELL_VERBOSITY" value="-1" />
<env name="SYMFONY_DEPRECATIONS_HELPER" value="weak" />
</php>
<testsuites>
<testsuite name="Project Test Suite">
<testsuite name="Chamilo Test Suite">
<directory>tests</directory>
</testsuite>
</testsuites>

@ -52,7 +52,7 @@ abstract class AbstractApiTest extends ApiTestCase
/**
* Use credentials with token.
*/
protected function getToken($body = []): string
protected function getUserToken($body = []): string
{
if ($this->token) {
return $this->token;

@ -0,0 +1,74 @@
<?php
namespace Chamilo\Tests;
use Chamilo\CoreBundle\Entity\AccessUrl;
use Chamilo\CoreBundle\Entity\User;
use Chamilo\CoreBundle\Repository\Node\AccessUrlRepository;
use Chamilo\CoreBundle\Repository\Node\UserRepository;
use Symfony\Component\Validator\ConstraintViolationList;
use Symfony\Component\Validator\Validator\ValidatorInterface;
trait ChamiloTestTrait
{
/**
* Finds a user registered in the test DB, added by the DataFixtures classes.
*/
public function getUser(string $username): ?User
{
/** @var UserRepository $repo */
$repo = static::getContainer()->get(UserRepository::class);
// retrieve user
return $repo->findByUsername($username);
}
public function createUser(string $username, string $password, string $email): ?User
{
/** @var UserRepository $repo */
$repo = static::getContainer()->get(UserRepository::class);
$admin = $this->getUser('admin');
$user = $repo->createUser()
->setLastname($username)
->setFirstname($username)
->setUsername($username)
->setStatus(1)
->setPlainPassword($password)
->setEmail($email)
->setCreator($admin)
;
$repo->updateUser($user);
return $user;
}
public function getAccessUrl(string $url = ''): ?AccessUrl
{
if (empty($url)) {
$url = AccessUrl::DEFAULT_ACCESS_URL;
}
/** @var AccessUrlRepository $repo */
$repo = static::getContainer()->get(AccessUrlRepository::class);
return $repo->findOneBy(['url' => $url]);
}
public function assertHasNoEntityViolations($entity)
{
/** @var ValidatorInterface $validator */
$validator = static::$kernel->getContainer()->get('validator');
/** @var ConstraintViolationList $errors */
$errors = $validator->validate($entity);
$message = [];
foreach ($errors as $error) {
$message[] = $error->getPropertyPath().': '.$error->getMessage();
}
$this->assertEquals(0, $errors->count(), implode(', ', $message));
}
}

@ -7,10 +7,13 @@ namespace Chamilo\Tests\CoreBundle\Repository\Node;
use Chamilo\CoreBundle\Entity\AccessUrl;
use Chamilo\CoreBundle\Repository\Node\AccessUrlRepository;
use Chamilo\CoreBundle\Repository\Node\UserRepository;
use Chamilo\Tests\ChamiloTestTrait;
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
class AccessUrlRepositoryTest extends KernelTestCase
{
use ChamiloTestTrait;
public function testCount()
{
self::bootKernel();
@ -23,11 +26,9 @@ class AccessUrlRepositoryTest extends KernelTestCase
public function testAdminInAccessUrl()
{
self::bootKernel();
$urlRepo = self::getContainer()->get(AccessUrlRepository::class);
/** @var AccessUrl $accessUrl */
$accessUrl = $urlRepo->findOneBy(['url' => AccessUrl::DEFAULT_ACCESS_URL]);
$userRepository = self::getContainer()->get(UserRepository::class);
$admin = $userRepository->findByUsername('admin');
$accessUrl = $this->getAccessUrl();
$admin = $this->getUser('admin');
$hasUser = $accessUrl->hasUser($admin);
$this->assertEquals(true, $hasUser);

@ -9,32 +9,29 @@ use Chamilo\CoreBundle\Entity\Course;
use Chamilo\CoreBundle\Repository\Node\AccessUrlRepository;
use Chamilo\CoreBundle\Repository\Node\CourseRepository;
use Chamilo\CoreBundle\Repository\Node\UserRepository;
use Chamilo\Tests\ChamiloTestTrait;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
use Symfony\Component\Security\Core\Exception\UserNotFoundException;
class CourseRepositoryTest extends WebTestCase
{
use ChamiloTestTrait;
/**
* Create a course with no creator.
*/
public function testCreateNoCreator()
{
self::bootKernel();
$urlRepo = self::getContainer()->get(AccessUrlRepository::class);
$courseRepo = self::getContainer()->get(CourseRepository::class);
$accessUrl = $urlRepo->findOneBy(['url' => AccessUrl::DEFAULT_ACCESS_URL]);
$this->expectException(UserNotFoundException::class);
$course = (new Course())
->setTitle('test_course')
->addAccessUrl($accessUrl)
->addAccessUrl($this->getAccessUrl())
;
$courseRepo->create($course);
$count = $courseRepo->count([]);
$this->assertEquals(1, $count);
}
/**
@ -42,21 +39,13 @@ class CourseRepositoryTest extends WebTestCase
*/
public function testCreate()
{
/** @var UserRepository $userRepository */
$userRepository = self::getContainer()->get(UserRepository::class);
$admin = $userRepository->findByUsername('admin');
$urlRepo = self::getContainer()->get(AccessUrlRepository::class);
$courseRepo = self::getContainer()->get(CourseRepository::class);
$accessUrl = $urlRepo->findOneBy(['url' => AccessUrl::DEFAULT_ACCESS_URL]);
$course = (new Course())
->setTitle('Test course')
->setCode('test_course')
->addAccessUrl($accessUrl)
->setCreator($admin)
->addAccessUrl($this->getAccessUrl())
->setCreator($this->getUser('admin'))
;
$courseRepo->create($course);

@ -11,19 +11,15 @@ use Chamilo\CoreBundle\Repository\Node\CourseRepository;
use Chamilo\CoreBundle\Repository\Node\UserRepository;
use Chamilo\CourseBundle\Entity\CDocument;
use Chamilo\Tests\AbstractApiTest;
use Chamilo\Tests\ChamiloTestTrait;
class CDocumentRepositoryTest extends AbstractApiTest
{
/*public function testLoginAsUserWithToken()
{
$this->createClientWithCredentials($token)->request('GET', '/account/edit');
$this->assertResponseStatusCodeSame('200');
}*/
use ChamiloTestTrait;
public function testGetDocuments()
{
$token = $this->getToken([]);
$token = $this->getUserToken([]);
$response = $this->createClientWithCredentials($token)->request('GET', '/api/documents');
$this->assertResponseIsSuccessful();
@ -48,16 +44,13 @@ class CDocumentRepositoryTest extends AbstractApiTest
public function testCreateFolder(): void
{
$userRepository = self::getContainer()->get(UserRepository::class);
$urlRepo = self::getContainer()->get(AccessUrlRepository::class);
$courseRepo = self::getContainer()->get(CourseRepository::class);
// Get admin.
$admin = $userRepository->findByUsername('admin');
$admin = $this->getUser('admin');
// Get access url.
$accessUrl = $urlRepo->findOneBy(['url' => AccessUrl::DEFAULT_ACCESS_URL]);
$accessUrl = $this->getAccessUrl();
// Create course. @todo move in a function?
$course = (new Course())
->setTitle('Test course')
->setCode('test_course')
@ -72,8 +65,8 @@ class CDocumentRepositoryTest extends AbstractApiTest
'visibility' => 2,
];
$token = $this->getToken([]);
$response = $this->createClientWithCredentials($token)->request(
$token = $this->getUserToken([]);
$this->createClientWithCredentials($token)->request(
'POST',
'/api/documents',
[
@ -86,8 +79,12 @@ class CDocumentRepositoryTest extends AbstractApiTest
);
$this->assertResponseIsSuccessful();
$this->assertResponseStatusCodeSame(201);
$this->assertResponseHeaderSame('content-type', 'application/ld+json; charset=utf-8');
$this->assertJsonContains([
'@context' => '/api/contexts/Documents',
'@type' => 'Documents',
'title' => 'folder1',
]);
}
}

Loading…
Cancel
Save