From 290a0af9f12bf873fe393c2d2cb58b5b0357f7af Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Mon, 7 Jun 2021 14:24:55 +0200 Subject: [PATCH] Refactor phpunit tests in order to use the ChamiloTestTrait.php --- phpunit.xml.dist | 3 +- tests/AbstractApiTest.php | 2 +- tests/ChamiloTestTrait.php | 74 +++++++++++++++++++ .../Node/AccessUrlRepositoryTest.php | 11 +-- .../Repository/Node/CourseRepositoryTest.php | 23 ++---- .../Repository/CDocumentRepositoryTest.php | 27 +++---- 6 files changed, 101 insertions(+), 39 deletions(-) create mode 100644 tests/ChamiloTestTrait.php diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 8e4e50d585..2fd6d835a4 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -11,10 +11,11 @@ + - + tests diff --git a/tests/AbstractApiTest.php b/tests/AbstractApiTest.php index 18e3aacf06..b884bbb86d 100644 --- a/tests/AbstractApiTest.php +++ b/tests/AbstractApiTest.php @@ -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; diff --git a/tests/ChamiloTestTrait.php b/tests/ChamiloTestTrait.php new file mode 100644 index 0000000000..f9381e5957 --- /dev/null +++ b/tests/ChamiloTestTrait.php @@ -0,0 +1,74 @@ +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)); + } +} diff --git a/tests/CoreBundle/Repository/Node/AccessUrlRepositoryTest.php b/tests/CoreBundle/Repository/Node/AccessUrlRepositoryTest.php index 376623b478..6454a80c88 100644 --- a/tests/CoreBundle/Repository/Node/AccessUrlRepositoryTest.php +++ b/tests/CoreBundle/Repository/Node/AccessUrlRepositoryTest.php @@ -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); diff --git a/tests/CoreBundle/Repository/Node/CourseRepositoryTest.php b/tests/CoreBundle/Repository/Node/CourseRepositoryTest.php index d595db3748..32867cf75d 100644 --- a/tests/CoreBundle/Repository/Node/CourseRepositoryTest.php +++ b/tests/CoreBundle/Repository/Node/CourseRepositoryTest.php @@ -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); diff --git a/tests/CourseBundle/Repository/CDocumentRepositoryTest.php b/tests/CourseBundle/Repository/CDocumentRepositoryTest.php index 35408041d3..4629d3944e 100644 --- a/tests/CourseBundle/Repository/CDocumentRepositoryTest.php +++ b/tests/CourseBundle/Repository/CDocumentRepositoryTest.php @@ -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', + ]); } }