From 76fbc05868c048d252e43ea3516bb09862bd318e Mon Sep 17 00:00:00 2001 From: Julio Date: Thu, 9 Sep 2021 11:07:21 +0200 Subject: [PATCH] Tests: Add phpunit tests --- .../Controller/CourseHomeController.php | 11 +- .../Controller/CourseHomeControllerTest.php | 110 +++++++++++++++++- 2 files changed, 109 insertions(+), 12 deletions(-) diff --git a/src/CoreBundle/Controller/CourseHomeController.php b/src/CoreBundle/Controller/CourseHomeController.php index c7aee84278..957e0035a7 100644 --- a/src/CoreBundle/Controller/CourseHomeController.php +++ b/src/CoreBundle/Controller/CourseHomeController.php @@ -33,12 +33,9 @@ use Symfony\Component\Validator\Exception\ValidatorException; use UnserializeApi; /** - * Class CourseHomeController. - * * @author Julio Montoya - * - * @Route("/course") */ +#[Route('/course')] class CourseHomeController extends ToolBaseController { /** @@ -68,7 +65,7 @@ class CourseHomeController extends ToolBaseController $courseId = $course->getId(); $sessionId = $this->getSessionId(); - if ($user && INVITEE === $user->getStatus()) { + if ($user && $user->hasRole('ROLE_INVITEE')) { $isInASession = $sessionId > 0; $isSubscribed = CourseManager::is_user_subscribed_in_course( $userId, @@ -294,8 +291,10 @@ class CourseHomeController extends ToolBaseController * * @Entity("course", expr="repository.find(cid)") */ - public function updateSettingsAction(Request $request, Course $course, string $namespace, SettingsCourseManager $manager, SettingsFormFactory $formFactory): Response + public function updateSettings(Request $request, Course $course, string $namespace, SettingsCourseManager $manager, SettingsFormFactory $formFactory): Response { + $this->denyAccessUnlessGranted(CourseVoter::VIEW, $course); + $schemaAlias = $manager->convertNameSpaceToService($namespace); $settings = $manager->load($namespace); diff --git a/tests/CoreBundle/Controller/CourseHomeControllerTest.php b/tests/CoreBundle/Controller/CourseHomeControllerTest.php index 63fa282ab0..8176f49474 100644 --- a/tests/CoreBundle/Controller/CourseHomeControllerTest.php +++ b/tests/CoreBundle/Controller/CourseHomeControllerTest.php @@ -6,35 +6,103 @@ declare(strict_types=1); namespace Chamilo\Tests\CoreBundle\Controller; -use Chamilo\Tests\AbstractApiTest; +use Chamilo\CoreBundle\Entity\Course; use Chamilo\Tests\ChamiloTestTrait; +use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; +use Symfony\Component\HttpFoundation\Response; -class CourseHomeControllerTest extends AbstractApiTest +class CourseHomeControllerTest extends WebTestCase { use ChamiloTestTrait; public function testIndexJsonAction(): void { + $client = static::createClient(); $course = $this->createCourse('course 1'); - $this->getClientWithGuiCredentials('admin', 'admin')->request( + + $admin = $this->getUser('admin'); + $client->loginUser($admin); + + // Test as admin. + $client->request( 'GET', '/course/'.$course->getId().'/home.json' ); - $this->assertResponseIsSuccessful(); - $this->assertJsonContains( + /*$this->assertJsonContains( [ 'course' => [ 'code' => $course->getCode(), ], ] + );*/ + + // Test as registered user (course is open). + $test = $this->createUser('test'); + $client->loginUser($test); + + $client->request( + 'GET', + '/course/'.$course->getId().'/home.json' + ); + $this->assertResponseIsSuccessful(); + + // Course is REGISTERED. + $course = $this->getCourse($course->getId()); + + $em = $this->getEntityManager(); + $course->setVisibility(Course::REGISTERED); + $em->persist($course); + $em->flush(); + + $client->request( + 'GET', + '/course/'.$course->getId().'/home.json' ); + $this->assertResponseStatusCodeSame(403); + } + + public function testIndexJsonInviteeAction(): void + { + $client = static::createClient(); + $course = $this->createCourse('course 1'); + $test = $this->createUser('test'); + $test->addRole('ROLE_INVITEE'); + + $em = $this->getEntityManager(); + $em->persist($test); + $em->flush(); + + $test = $this->getUser('test'); + $course = $this->getCourse($course->getId()); + + $course->addStudent($test); + $em->persist($course); + $em->flush(); + + $client->loginUser($test); + $client->request( + 'GET', + '/course/'.$course->getId().'/home.json' + ); + $this->assertResponseIsSuccessful(); + /*$this->assertJsonContains( + [ + 'course' => [ + 'code' => $course->getCode(), + ], + ] + );*/ } public function testRedirectTool(): void { + $client = static::createClient(); $course = $this->createCourse('new'); - $this->getClientWithGuiCredentials('admin', 'admin')->request( + $admin = $this->getUser('admin'); + + $client->loginUser($admin); + $client->request( 'GET', '/course/'.$course->getId().'/tool/document' ); @@ -45,4 +113,34 @@ class CourseHomeControllerTest extends AbstractApiTest '/resources/document/'.$course->getResourceNode()->getId().'/?cid='.$course->getId().'&sid=0&gid=0' ); } + + public function testUpdateSettings(): void + { + $client = static::createClient(); + + $course = $this->createCourse('new'); + $admin = $this->getUser('admin'); + + $client->request( + 'GET', + '/course/'.$course->getId().'/settings/announcement' + ); + $this->assertSame(Response::HTTP_FOUND, $client->getResponse()->getStatusCode()); + + $client->loginUser($admin); + $client->request( + 'GET', + '/course/'.$course->getId().'/settings/announcement' + ); + $this->assertResponseIsSuccessful(); + + $this->assertStringContainsString( + 'Allow user edit announcement', + $client->getResponse()->getContent() + ); + + $client->submitForm('Save settings', [ + 'form[enabled]' => '0', + ]); + } }