Courses: Refactor course test, fix course code when setting only title

pull/3904/head
Julio Montoya 4 years ago
parent 245a2b37fa
commit f48fe093c8
  1. 2
      public/main/inc/lib/add_course.lib.inc.php
  2. 2
      src/CoreBundle/Entity/Course.php
  3. 38
      src/CoreBundle/Entity/Listener/ResourceListener.php
  4. 41
      tests/ChamiloTestTrait.php
  5. 36
      tests/CoreBundle/Repository/Node/CourseRepositoryTest.php

@ -754,9 +754,9 @@ class AddCourse
$course = new Course();
$course
->setTitle($title)
->setCode($code)
->setCourseLanguage($course_language)
->setTitle($title)
->setDescription(get_lang('Course Description'))
->setVisibility($visibility)
->setShowScore(1)

@ -628,6 +628,8 @@ class Course extends AbstractResource implements ResourceInterface, ResourceWith
{
$this->title = $title;
$this->setCode($title);
return $this;
}

@ -14,7 +14,6 @@ use Chamilo\CoreBundle\Entity\ResourceFile;
use Chamilo\CoreBundle\Entity\ResourceLink;
use Chamilo\CoreBundle\Entity\ResourceNode;
use Chamilo\CoreBundle\Entity\ResourceRight;
use Chamilo\CoreBundle\Entity\ResourceToRootInterface;
use Chamilo\CoreBundle\Entity\ResourceType;
use Chamilo\CoreBundle\Entity\ResourceWithAccessUrlInterface;
use Chamilo\CoreBundle\Entity\Session;
@ -54,6 +53,33 @@ class ResourceListener
$this->accessUrl = null;
}
public function getAccessUrl($em): ?AccessUrl
{
if (null === $this->accessUrl) {
$request = $this->request->getCurrentRequest();
if (null === $request) {
return null;
}
$sessionRequest = $request->getSession();
$id = (int) $sessionRequest->get('access_url_id');
if (0 !== $id) {
/** @var AccessUrl $url */
$url = $em->getRepository(AccessUrl::class)->find($id);
if (null !== $url) {
$this->accessUrl = $url;
return $url;
}
}
return null;
}
return $this->accessUrl;
}
/**
* Only in creation.
*/
@ -65,7 +91,13 @@ class ResourceListener
if ($resource instanceof ResourceWithAccessUrlInterface) {
if (0 === $resource->getUrls()->count()) {
throw new Exception('This resource needs an AccessUrl use $resource->addAccessUrl();');
// The AccessUrl was not added using $resource->addAccessUrl(),
// try getting the URL from the session if possible.
$accessUrl = $this->getAccessUrl($em);
if (null === $accessUrl) {
throw new Exception('This resource needs an AccessUrl use $resource->addAccessUrl();');
}
$resource->addAccessUrl($accessUrl);
}
}
@ -84,7 +116,7 @@ class ResourceListener
$creator = $resource->getResourceNodeCreator();
if (null === $creator) {
/** @var User|null $creator */
/** @var User|null $defaultCreator */
$defaultCreator = $this->security->getUser();
if (null !== $defaultCreator) {
$creator = $defaultCreator;

@ -3,26 +3,16 @@
namespace Chamilo\Tests;
use Chamilo\CoreBundle\Entity\AccessUrl;
use Chamilo\CoreBundle\Entity\Course;
use Chamilo\CoreBundle\Entity\User;
use Chamilo\CoreBundle\Repository\Node\AccessUrlRepository;
use Chamilo\CoreBundle\Repository\Node\CourseRepository;
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 */
@ -37,14 +27,37 @@ trait ChamiloTestTrait
->setStatus(1)
->setPlainPassword($password)
->setEmail($email)
->setCreator($admin)
;
->setCreator($admin);
$repo->updateUser($user);
return $user;
}
/**
* 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 createCourse($title): ?Course
{
$courseRepo = self::getContainer()->get(CourseRepository::class);
$course = (new Course())
->setTitle($title)
->addAccessUrl($this->getAccessUrl())
->setCreator($this->getUser('admin'));
$courseRepo->create($course);
return $course;
}
public function getAccessUrl(string $url = ''): ?AccessUrl
{
if (empty($url)) {

@ -9,6 +9,7 @@ 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\CoreBundle\ToolChain;
use Chamilo\Tests\ChamiloTestTrait;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
@ -40,16 +41,35 @@ class CourseRepositoryTest extends WebTestCase
public function testCreate()
{
$courseRepo = self::getContainer()->get(CourseRepository::class);
$course = (new Course())
->setTitle('Test course')
->setCode('test_course')
->addAccessUrl($this->getAccessUrl())
->setCreator($this->getUser('admin'))
;
$courseRepo->create($course);
$course = $this->createCourse('Test course');
$count = $courseRepo->count([]);
$this->assertEquals(1, $count);
// Check tools.
$this->assertEquals(25, count($course->getTools()));
// Check course code.
$this->assertEquals('TEST-COURSE', $course->getCode());
// The course should connected with a Access URL
$this->assertEquals(1, $course->getUrls()->count());
}
public function testCourseAccess()
{
self::bootKernel();
/** @var CourseRepository $courseRepo */
$courseRepo = self::getContainer()->get(CourseRepository::class);
//$toolChain = self::getContainer()->get(ToolChain::class);
$course = $this->createCourse('Test course');
$student = $this->createUser('student', 'student', 'student@student.com');
$course->addUser($student,0, null, 5);
$courseRepo->update($course);
$this->assertEquals(1, $course->getUsers()->count());
}
}

Loading…
Cancel
Save