def test_group_remove_course(self):
        """
            Se crea para probar signal pre_removed de grupos con cursos
            Elimino curso del grupo cuando el grupo tiene estudiantes y curso
            1. Valido que se elimine estudiante del curso
            2. Valido que se elimine relacion estudiante clase de las clases
               del curso
        """
        group = CourseGroupStudent(name='Prueba de primer grupo')
        group.save()
        group.students.add(self.student)

        # agrego curso al grupo
        group.courses.add(self.course1)
        group.courses.add(self.course2)

        # Verifico que se agregue estudiante a cursos del grupo
        self.assertTrue(
            self.course1.students.filter(id=self.student.id).exists(),
            'No se agrego estudiante a curso 1')

        self.assertTrue(
            self.course2.students.filter(id=self.student.id).exists(),
            'No se agrego estudiante a curso 2')

        # verifico CourseStudentClass
        exists_class1 = CourseStudentClass.objects.filter(
            course=self.course1, student=self.student)

        exists_class2 = CourseStudentClass.objects.filter(
            course=self.course2, student=self.student)

        self.assertTrue(exists_class1,
                        'No existe primera clase para el estudiante')

        self.assertTrue(exists_class2,
                        'No existe primera clase para el estudiante')

        # Elimino cursos del grupo
        group.courses.remove(self.course1)
        group.courses.remove(self.course2)

        # Verifico que se agregue estudiante a cursos del grupo
        self.assertFalse(
            self.course1.students.filter(id=self.student.id).exists(),
            'No se elimino estudiante a curso 1')

        self.assertFalse(
            self.course2.students.filter(id=self.student.id).exists(),
            'No se elimino estudiante a curso 2')

        # valido que no existe el simulacro
        exists_simulacrum_student = CourseSimSimulacrumStudent.objects.filter(
            course=self.course1, student=self.student,
            sim_simulacrum=self.simulacrum
        ).exists()

        self.assertFalse(exists_simulacrum_student,
                         'No se elimino relacion estudiantes sim simulacro')
    def test_group_add_course(self):
        """
            Se crea para probar signal post_add de grupos con cursos
            Agrega un curso al grupo cuando el grupo ya tiene estudiantes
            1.Valido que se agregue estudiante al curso nuevo
            3.Valido que se cree relacion estudiante clase con las clases del
              curso nuevo.
        """
        group = CourseGroupStudent(name='Prueba de primer grupo')
        group.save()
        group.students.add(self.student)

        # agrego curso al grupo
        group.courses.add(self.course1)
        group.courses.add(self.course2)

        # Verifico que se agregue estudiante a cursos del grupo
        self.assertTrue(
            self.course1.students.filter(id=self.student.id).exists(),
            'No se agrego estudiante a curso 1')

        self.assertTrue(
            self.course2.students.filter(id=self.student.id).exists(),
            'No se agrego estudiante a curso 2')

        # verifico CourseStudentClass
        exists_class1 = CourseStudentClass.objects.filter(
            course=self.course1, student=self.student)

        exists_class2 = CourseStudentClass.objects.filter(
            course=self.course2, student=self.student)

        self.assertTrue(exists_class1,
                        'No existe primera clase para el estudiante')

        self.assertTrue(exists_class2,
                        'No existe primera clase para el estudiante')

        # valido que se cree el simulacro que tenga e curso 1
        exists_ty_simulacrum = (
            CourseSimSimulacrumStudent.objects.get_for_student_course_simulacrum(
                self.student, self.course1, self.simulacrum))

        self.assertTrue(exists_ty_simulacrum,
                        'No existe simulacro para el estudiante')
    def test_group_add_student(self):
        """
            Se crea para probar signal post_add de grupos con estudantes
            Agrega estudiantes a un grupo que ya tiene cursos, y le crea al
            estudiante las clases que tiene el curso
            1. Valida que el estudiante se agrega al curso
            2. Valida que se cree relacion estudiante clase
            3. Valida que se cree la relacion simulacrum tutorya
        """
        group = CourseGroupStudent(name='Prueba de primer grupo')
        group.save()
        group.courses.add(self.course1)
        group.courses.add(self.course2)
        group.students.add(self.student)

        # Verifico que se agregue estudiante a cursos del grupo
        self.assertTrue(
            self.course1.students.filter(id=self.student.id).exists(),
            'No se agrego estudiante a curso 1')

        self.assertTrue(
            self.course2.students.filter(id=self.student.id).exists(),
            'No se agrego estudiante a curso 2')

        # verifico CourseStudentClass
        exists_class1 = CourseStudentClass.objects.filter(
            course=self.course1, student=self.student)

        self.assertTrue(exists_class1,
                        'No existe primera clase para el estudiante')

        exists_ty_simulacrum = (
            CourseSimSimulacrumStudent.objects.get_for_student_course_simulacrum(
                self.student, self.course1, self.simulacrum))

        self.assertTrue(exists_ty_simulacrum,
                        'No existe simulacro para el estudiante')