Adding more tests

1.10.x
Julio Montoya 10 years ago
parent e6f0352ebb
commit c18a77fca9
  1. 22
      features/backend/course/CourseSessionRelationship.feature
  2. 6
      features/backend/course/CourseUserRelationship.feature
  3. 20
      features/backend/user/UserLogin.feature
  4. 35
      src/Chamilo/CoreBundle/Behat/CourseContext.php
  5. 106
      src/Chamilo/CoreBundle/Entity/Manager/SessionManager.php
  6. 175
      src/Chamilo/CoreBundle/Entity/Session.php
  7. 34
      src/Chamilo/CoreBundle/Entity/SessionRelCourseRelUser.php
  8. 25
      src/Chamilo/CoreBundle/Entity/SessionRelUser.php
  9. 19
      src/Chamilo/CoreBundle/Migrations/Data/ORM/LoadGroupData.php
  10. 17
      src/Chamilo/UserBundle/Entity/User.php

@ -6,10 +6,10 @@ Feature: Course Session Relationship
Background:
Given there are following users:
| username | email | plain_password | enabled | groups |
| student | student@example.com | student | yes | students |
| teacher | teacher@example.com | teacher | yes | teachers |
| coach | coach@example.com | coach | yes | teachers |
| username | email | plain_password | enabled | groups |
| student | student@example.com | student | yes | Students |
| coach | coach@example.com | coach | yes | Teachers |
| drh | drh@example.com | drh | yes | Teachers |
Given I have a course "My course"
Given I have a session "My session"
@ -17,16 +17,16 @@ Feature: Course Session Relationship
When I add session "My session" to course "My course"
Then I should find a course "My course" in session "My session"
Scenario: A course in a session contains a user
Scenario: A course in a session contains a student
When I add student "student" to course "My course" in session "My session"
Then I should find a user "student" in course "My course" in session "My session"
Scenario Outline: A course in a session contains a user
Scenario Outline: A course in a session contains a user with status
When I add user with status "<status>" with username "<username>" in course "My course" in session "My session"
Then I should find a user "<username>" in course "My course" in session "My session"
Then I should find a user "<username>" with status "<status>" in course "My course" in session "My session"
Examples:
| username | status |
| student | student |
| teacher | teacher |
| coach | coach |
| username | status |
| student | student |
| drh | drh |
| coach | coach |

@ -6,9 +6,9 @@ Feature: Course user relationship
Background:
Given there are following users:
| username | email | plain_password | enabled | groups |
| student | student@example.com | student | yes | students |
| teacher | teacher@example.com | teacher | yes | teachers |
| username | email | plain_password | enabled | groups |
| student | student@example.com | student | yes | Students |
| teacher | teacher@example.com | teacher | yes | Teachers |
Given I have a course "My course"
Scenario: A course contains a student

@ -6,8 +6,13 @@ Feature: User login
Background:
Given there are following users:
| username | email |plain_password| enabled | groups |
| student_behat | student_behat@example.com |student_behat| yes | students |
| username | email | plain_password | enabled | groups |
| student | student@example.com | student | yes | Students |
| teacher | teacher@example.com | teacher | yes | Teachers |
| admin2 | admin2@example.com | admin2 | yes | Administrators |
| rrhh | rrhh@example.com | rrhh | yes | Human resources manager |
| session_manager | session_manager@example.com | session_manager | yes | Session manager |
| question_manager | question_manager@example.com | question_manager | yes | Question manager |
@javascript
Scenario Outline: Existing user can login
@ -18,6 +23,11 @@ Feature: User login
Then I should see "<message>"
Examples:
| username | password | message |
| student_behat | student_behat | Hello, student_behat |
| pirate | pirate | Bad credentials |
| username | password | message |
| student | student | Hello, student |
| teacher | teacher | Hello, teacher |
| admin2 | admin2 | Hello, admin2 |
| rrhh | rrhh | Hello, rrhh |
| session_manager | session_manager | Hello, session_manager |
| question_manager | question_manager | Hello, question_manager |
| pirate | pirate | Bad credentials |

@ -218,7 +218,7 @@ class CourseContext extends DefaultContext implements Context, SnippetAcceptingC
$course = $this->getCourseManager()->findOneByTitle($courseTitle);
$session = $this->getSessionManager()->findOneByName($sessionTitle);
$session->addUserInCourse($user, $course);
$this->getSessionManager()->addStudentInCourse($user, $course, $session);
}
/**
@ -230,7 +230,7 @@ class CourseContext extends DefaultContext implements Context, SnippetAcceptingC
$course = $this->getCourseManager()->findOneByTitle($courseTitle);
$session = $this->getSessionManager()->findOneByName($sessionTitle);
return $session->hasUserInCourse($user, $course);
return $session->hasUserInCourse($user, $course, $session::STUDENT);
}
/**
@ -238,14 +238,43 @@ class CourseContext extends DefaultContext implements Context, SnippetAcceptingC
*/
public function iAddUserWithStatusWithUsernameInCourseInSession($status, $username, $courseTitle, $sessionTitle)
{
$user = $this->getUserManager()->findUserByUsername($username);
$course = $this->getCourseManager()->findOneByTitle($courseTitle);
$session = $this->getSessionManager()->findOneByName($sessionTitle);
switch ($status) {
case 'student':
$this->getSessionManager()->addStudentInCourse($user, $course, $session);
break;
case 'teacher':
case 'drh':
$this->getSessionManager()->addDrh($user, $session);
break;
case 'coach':
$this->getSessionManager()->addCoachInCourse($user, $course, $session);
break;
}
}
/**
* @Then I should find a user :arg1 with status :arg2 in course :arg3 in session :arg4
*/
public function iShouldFindAUserInCourseInSessionWithStatus($username, $status, $courseTitle, $sessionTitle)
{
$user = $this->getUserManager()->findUserByUsername($username);
$course = $this->getCourseManager()->findOneByTitle($courseTitle);
$session = $this->getSessionManager()->findOneByName($sessionTitle);
switch ($status) {
case 'student':
$this->getSessionManager()->hasStudentInCourse($user, $course, $session);
break;
case 'drh':
$this->getSessionManager()->hasDrh($user, $session);
break;
case 'coach':
$this->getSessionManager()->hasCoachInCourse($user, $course, $session);
break;
}
}
}

@ -5,6 +5,7 @@ namespace Chamilo\CoreBundle\Entity\Manager;
use Chamilo\CoreBundle\Entity\Repository\CourseRepository;
use Chamilo\CoreBundle\Entity\Session;
use Chamilo\CoreBundle\Entity\SessionRelUser;
use Sonata\CoreBundle\Model\BaseEntityManager;
use Chamilo\CoreBundle\Entity\Course;
use Chamilo\UserBundle\Entity\User;
@ -35,4 +36,109 @@ class SessionManager extends BaseEntityManager
return $this->getRepository()->findOneByName($name);
}
/**
* @param User $user
* @param Session $session
*/
public function addDrh(User $user, Session $session)
{
$session->addUserInSession(Session::COACH, $user);
}
/**
* @param User $user
* @param Session $session
* @return bool
*/
public function hasDrh(User $user, Session $session)
{
$subscription = new SessionRelUser();
$subscription->setUser($user);
$subscription->setSession($session);
$subscription->setRelationType(Session::DRH);
return $session->hasUser($subscription);
}
/**
* @param User $user
* @param Course $course
* @param Session $session
*/
public function addStudentInCourse(User $user, Course $course, Session $session)
{
$this->addUserInCourse(Session::STUDENT, $user, $course, $session);
}
/**
* @param User $user
* @param Course $course
* @param Session $session
* @return bool
*/
public function hasStudentInCourse(User $user, Course $course, Session $session)
{
return $session->hasUserInCourse($user, $course, Session::STUDENT);
}
/**
* @param User $user
* @param Course $course
* @param Session $session
*/
public function addCoachInCourse(User $user, Course $course, Session $session)
{
$this->addUserInCourse(Session::COACH, $user, $course, $session);
}
/**
* @param User $user
* @param Course $course
* @param Session $session
* @return bool
*/
public function hasCoachInCourse(User $user, Course $course, Session $session)
{
return $session->hasUserInCourse($user, $course, Session::COACH);
}
/**
* @param $status
* @param User $user
* @param Course $course
* @param Session $session
*/
private function addUserInCourse($status, User $user, Course $course, Session $session)
{
if ($session->isActive() &&
$user->getIsActive() &&
$course->isActive()
) {
if ($session->hasCourse($course)) {
switch ($status) {
case Session::DRH:
if ($user->hasRole('ROLE_RRHH')) {
$session->addUserInSession(Session::DRH, $user);
}
break;
case Session::STUDENT:
$session->addUserInSession(Session::STUDENT, $user);
$session->addUserInCourse(Session::STUDENT, $user, $course);
break;
case Session::COACH:
if ($user->hasRole('ROLE_TEACHER')) {
$session->addUserInCourse(
Session::COACH,
$user,
$course
);
}
break;
}
}
}
}
}

@ -30,6 +30,10 @@ class Session
const INVISIBLE = 3;
const AVAILABLE = 4;
const STUDENT = 0;
const DRH = 1;
const COACH = 2;
/**
* @var integer
*
@ -241,7 +245,47 @@ class Session
public function addUser(SessionRelUser $user)
{
$user->setSession($this);
$this->users[] = $user;
if (!$this->hasUser($user)) {
$this->users[] = $user;
}
}
/**
* @param int $status
* @param User $user
*/
public function addUserInSession($status, User $user)
{
$sessionRelUser = new SessionRelUser();
$sessionRelUser->setSession($this);
$sessionRelUser->setUser($user);
$sessionRelUser->setRelationType($status);
$this->addUser($sessionRelUser);
}
/**
* @param SessionRelUser $subscription
* @return bool
*/
public function hasUser(SessionRelUser $subscription)
{
if ($this->getUsers()->count()) {
$criteria = Criteria::create()->where(
Criteria::expr()->eq("user", $subscription->getUser())
)->andWhere(
Criteria::expr()->eq("session", $subscription->getSession())
)->andWhere(
Criteria::expr()->eq("relationType", $subscription->getRelationType())
);
$relation = $this->getUsers()->matching($criteria);
return $relation->count() > 0;
}
return false;
}
/**
@ -273,6 +317,26 @@ class Session
$this->courses[] = $course;
}
/**
* @param Course $course
*
* @return bool
*/
public function hasCourse(Course $course)
{
if ($this->getCourses()->count()) {
$criteria = Criteria::create()->where(
Criteria::expr()->eq("course", $course)
);
$relation = $this->getCourses()->matching($criteria);
return $relation->count() > 0;
}
return false;
}
/**
* Remove $course
*
@ -290,24 +354,15 @@ class Session
/**
* @param User $user
* @param Course $course
* @param int $status
*
* @return bool
*/
public function addUserInCourse(User $user, Course $course)
public function hasUserInCourse(User $user, Course $course, $status = null)
{
if ($this->hasCourse($course)) {
// Adding session/user relationship
$sessionRelUser = new SessionRelUser();
$sessionRelUser->setSession($this);
$sessionRelUser->setUser($user);
$relation = $this->getUserInCourse($user, $course, $status);
$this->addUser($sessionRelUser);
// Adding session/course/user relationship
$userRelCourseRelSession = new SessionRelCourseRelUser();
$userRelCourseRelSession->setCourse($course);
$userRelCourseRelSession->setUser($user);
$userRelCourseRelSession->setSession($this);
$this->addUserCourseSubscription($userRelCourseRelSession);
}
return $relation->count() > 0;
}
/**
@ -316,44 +371,30 @@ class Session
*
* @return bool
*/
public function hasUserInCourse(User $user, Course $course)
public function hasStudentInCourseWithStatus(User $user, Course $course)
{
$relation = $this->getUserInCourse($user, $course);
return $relation->count() > 0;
return $this->hasUserInCourse($user, $course, self::STUDENT);
}
/**
* @param User $user
* @param Course $course
* @param string $status teacher|student|coach
*
* @return bool
*/
public function hasUserInCourseWithStatus(User $user, Course $course, $status)
public function hasCoachInCourseWithStatus(User $user, Course $course)
{
$usersInCourse = $this->getUserInCourse($user, $course);
if ($usersInCourse->count() > 0) {
/** @var SessionRelCourseRelUser $userInCourse */
foreach ($usersInCourse as $userInCourse) {
/*if ($userInCourse->getStatus() == ) {
}*/
}
}
return false;
return $this->hasUserInCourse($user, $course, self::COACH);
}
/**
* @param User $user
* @param Course $course
* @param string $status
*
* @return \Doctrine\Common\Collections\Collection|static
*/
public function getUserInCourse(User $user, Course $course)
public function getUserInCourse(User $user, Course $course, $status = null)
{
$criteria = Criteria::create()->where(
Criteria::expr()->eq("course", $course)
@ -361,26 +402,13 @@ class Session
Criteria::expr()->eq("user", $user)
);
return $this->getUserCourseSubscriptions()->matching($criteria);
}
/**
* @param Course $course
*
* @return bool
*/
public function hasCourse(Course $course)
{
if ($this->getCourses()->count()) {
$criteria = Criteria::create()->where(
Criteria::expr()->eq("course", $course)
if (!is_null($status)) {
$criteria->andWhere(
Criteria::expr()->eq("status", $status)
);
$relation = $this->getCourses()->matching($criteria);
error_log($relation->count());
return $relation->count() > 0;
}
return false;
return $this->getUserCourseSubscriptions()->matching($criteria);
}
/**
@ -784,6 +812,45 @@ class Session
public function addUserCourseSubscription(SessionRelCourseRelUser $subscription)
{
$subscription->setSession($this);
$this->userCourseSubscriptions[] = $subscription;
if (!$this->hasUserCourseSubscription($subscription)) {
$this->userCourseSubscriptions[] = $subscription;
}
}
/**
* @param int $status
* @param User $user
* @param Course $course
*/
public function addUserInCourse($status, User $user, Course $course)
{
$userRelCourseRelSession = new SessionRelCourseRelUser();
$userRelCourseRelSession->setCourse($course);
$userRelCourseRelSession->setUser($user);
$userRelCourseRelSession->setSession($this);
$userRelCourseRelSession->setStatus($status);
$this->addUserCourseSubscription($userRelCourseRelSession);
}
/**
* @param SessionRelCourseRelUser $subscription
* @return bool
*/
public function hasUserCourseSubscription(SessionRelCourseRelUser $subscription)
{
if ($this->getUserCourseSubscriptions()->count()) {
$criteria = Criteria::create()->where(
Criteria::expr()->eq("user", $subscription->getUser())
)->andWhere(
Criteria::expr()->eq("course", $subscription->getCourse())
)->andWhere(
Criteria::expr()->eq("session", $subscription->getSession())
);
$relation = $this->getUserCourseSubscriptions()->matching($criteria);
return $relation->count() > 0;
}
return false;
}
}

@ -11,16 +11,18 @@ use Doctrine\ORM\Mapping as ORM;
*
* @ORM\Table(
* name="session_rel_course_rel_user",
* indexes={@ORM\Index(
* name="idx_session_rel_course_rel_user_id_user", columns={"id_user"}
* ),
* @ORM\Index(name="idx_session_rel_course_rel_user_course_id", columns={"c_id"})})
* indexes={
* @ORM\Index(name="idx_session_rel_course_rel_user_id_user", columns={"id_user"}),
* @ORM\Index(name="idx_session_rel_course_rel_user_course_id", columns={"c_id"})
* }
* )
* @ORM\Entity
*/
class SessionRelCourseRelUser
{
public $statusList = array(
0 => 'student',
2 => 'course_coach'
);
/**
@ -67,6 +69,21 @@ class SessionRelCourseRelUser
*/
protected $session;
/**
* @var Course
* @ORM\ManyToOne(targetEntity="Chamilo\CoreBundle\Entity\Course", inversedBy="sessionUserSubscriptions", cascade={"persist"})
* @ORM\JoinColumn(name="c_id", referencedColumnName="id")
*/
protected $course;
/**
* Constructor
*/
public function __construct()
{
$this->visibility = 1;
}
/**
* @return mixed
*/
@ -115,13 +132,6 @@ class SessionRelCourseRelUser
$this->course = $course;
}
/**
* @var Course
* @ORM\ManyToOne(targetEntity="Chamilo\CoreBundle\Entity\Course", inversedBy="sessionUserSubscriptions", cascade={"persist"})
* @ORM\JoinColumn(name="c_id", referencedColumnName="id")
*/
protected $course;
/**
* Get id
*

@ -9,13 +9,19 @@ use Doctrine\ORM\Mapping as ORM;
/**
* SessionRelUser
*
* @ORM\Table(name="session_rel_user", indexes={@ORM\Index(name="idx_session_rel_user_id_user_moved", columns={"id_user", "moved_to"})})
* @ORM\Table(
* name="session_rel_user",
* indexes={
* @ORM\Index(name="idx_session_rel_user_id_user_moved", columns={"id_user", "moved_to"})
* }
* )
* @ORM\Entity
*/
class SessionRelUser
{
public $relationTypeList = array(
0 => 'student'
0 => 'student',
1 => 'drh'
);
/**
@ -130,6 +136,21 @@ class SessionRelUser
return $this;
}
/**
* Set relationTypeByName
*
* @param string $relationType
* @return SessionRelUser
*/
public function setRelationTypeByName($relationType)
{
if (isset($this->relationTypeList[$relationType])) {
$this->setRelationType($this->relationTypeList[$relationType]);
}
return $this;
}
/**
* Get relationType
*

@ -55,22 +55,35 @@ class LoadGroupData extends AbstractFixture implements
$groupManager = $this->getGroupManager();
// Creating groups
$group = $groupManager->createGroup('admins');
$group = $groupManager->createGroup('Administrators');
$group->addRole('ROLE_ADMIN');
$manager->persist($group);
$groupManager->updateGroup($group);
$this->setReference('group_admin', $group);
$group = $groupManager->createGroup('students');
$group = $groupManager->createGroup('Students');
$group->addRole('ROLE_STUDENT');
$groupManager->updateGroup($group);
$this->setReference('group_student', $group);
$group = $groupManager->createGroup('teachers');
$group = $groupManager->createGroup('Teachers');
$group->addRole('ROLE_TEACHER');
$groupManager->updateGroup($group);
$this->setReference('group_teacher', $group);
$group = $groupManager->createGroup('Human resources manager');
$group->addRole('ROLE_RRHH');
$groupManager->updateGroup($group);
$this->setReference('group_drh', $group);
$group = $groupManager->createGroup('Session manager');
$group->addRole('ROLE_SESSION_MANAGER');
$groupManager->updateGroup($group);
$group = $groupManager->createGroup('Question manager');
$group->addRole('ROLE_QUESTION_MANAGER');
$groupManager->updateGroup($group);
$manager->flush();
}

@ -568,6 +568,14 @@ class User extends BaseUser implements ParticipantInterface, ThemeUser
return $this->active == 1;
}
/**
* @return bool
*/
public function isActive()
{
return $this->getIsActive();
}
/**
* @inheritDoc
*/
@ -1382,13 +1390,18 @@ class User extends BaseUser implements ParticipantInterface, ThemeUser
return $this->imageName;
}
// Model
/**
* @return string
*/
public function getSlug()
{
return $this->getUsername();
}
/**
* @param $slug
* @return User
*/
public function setSlug($slug)
{
return $this->setUsername($slug);

Loading…
Cancel
Save