def setUp(self): self.course = CourseFactory.create() self.cohort_1 = CohortFactory(course_id=self.course.id, name='Cohort 1') self.cohort_2 = CohortFactory(course_id=self.course.id, name='Cohort 2') self.student_1 = self.create_student(username=u'student_1\xec', email='*****@*****.**') self.student_2 = self.create_student(username='******', email='*****@*****.**') self.csv_header_row = ['Cohort Name', 'Exists', 'Students Added', 'Students Not Found']
def setUp(self): # pylint: disable=arguments-differ super().setUp() self.course = CourseOverviewFactory() self.user = UserFactory.create(username="******", first_name="Student", last_name="Person", email="*****@*****.**", is_active=True) self.first_cohort = CohortFactory(course_id=self.course.id, name="FirstCohort") self.second_cohort = CohortFactory(course_id=self.course.id, name="SecondCohort")
def add_seq_with_content_groups(self, groups=None): """ Adds sequential and two content groups to first course in courses list. """ config_course_cohorts(self.courses[0], is_cohorted=True) if groups is None: groups = self.groups self.user_partition = UserPartition(id=0, name='Partition 1', description='This is partition 1', groups=groups, scheme=CohortPartitionScheme) self.user_partition.scheme.name = "cohort" ItemFactory.create( parent_location=self.chapter.location, category='sequential', display_name="Lesson 1", publish_item=True, metadata={u"user_partitions": [self.user_partition.to_json()]}) self.first_cohort, self.second_cohort = [ CohortFactory(course_id=self.courses[0].id) for _ in range(2) ] self.courses[0].user_partitions = [self.user_partition] self.courses[0].save() modulestore().update_item(self.courses[0], self.user.id)
def test_unicode_cohort_data_in_grading(self): """ Test that cohorts can contain unicode characters. """ cohort_groups = [u'ÞrÖfessÖr X', u'MàgnëtÖ'] course = CourseFactory.create(cohort_config={'cohorted': True}) # Create users and manually assign cohorts user1 = UserFactory.create(username='******') user2 = UserFactory.create(username='******') CourseEnrollment.enroll(user1, course.id) CourseEnrollment.enroll(user2, course.id) cohort1 = CohortFactory(course_id=course.id, name=u'ÞrÖfessÖr X') cohort2 = CohortFactory(course_id=course.id, name=u'MàgnëtÖ') cohort1.users.add(user1) cohort2.users.add(user2) self._verify_cohort_data(course.id, cohort_groups)
def test_unicode_cohort_data_in_grading(self): """ Test that cohorts can contain unicode characters. """ course = CourseFactory.create(cohort_config={'cohorted': True}) # Create users and manually assign cohorts user1 = UserFactory.create(username='******') user2 = UserFactory.create(username='******') CourseEnrollment.enroll(user1, course.id) CourseEnrollment.enroll(user2, course.id) professor_x = u'ÞrÖfessÖr X' magneto = u'MàgnëtÖ' cohort1 = CohortFactory(course_id=course.id, name=professor_x) cohort2 = CohortFactory(course_id=course.id, name=magneto) cohort1.users.add(user1) cohort2.users.add(user2) self._verify_cell_data_for_user(user1.username, course.id, 'Cohort Name', professor_x) self._verify_cell_data_for_user(user2.username, course.id, 'Cohort Name', magneto)
def test_filter_cohort_id_does_not_exist(self): with patch('lms.djangoapps.grades.course_grade_factory.CourseGradeFactory.read') as mock_grade: mock_grade.return_value = self.mock_course_grade(self.student, passed=True, letter_grade='A', percent=0.85) empty_cohort = CohortFactory(course_id=self.course.id, name="TestCohort", users=[]) with override_waffle_flag(self.waffle_flag, active=True): self.login_staff() resp = self.client.get( self.get_url(course_key=self.course.id) + '?cohort_id={}'.format(empty_cohort.id) ) self._assert_empty_response(resp)
def setup_cohorts(self, course): """ Sets up a cohort for each previously created user partition. """ config_course_cohorts(course, is_cohorted=True) self.partition_cohorts = [] for user_partition in self.user_partitions: partition_cohorts = [] for group in self.groups: cohort = CohortFactory(course_id=course.id) partition_cohorts.append(cohort) link_cohort_to_partition_group( cohort, user_partition.id, group.id, ) self.partition_cohorts.append(partition_cohorts)
def test_with_cohorted_content(self, content_creator_method_name, api_version): self.login_and_enroll() self._setup_course_partitions(scheme_id='cohort', is_cohorted=True) cohorts = [] for group_id in [0, 1]: getattr(self, content_creator_method_name)(group_id) cohorts.append( CohortFactory(course_id=self.course.id, name=u"Cohort " + unicode(group_id))) link = CourseUserGroupPartitionGroup( course_user_group=cohorts[group_id], partition_id=self.partition_id, group_id=group_id, ) link.save() for cohort_index in range(len(cohorts)): # add user to this cohort add_user_to_cohort(cohorts[cohort_index], self.user.username) # should only see video for this cohort video_outline = self.api_response(api_version=api_version).data self.assertEqual(len(video_outline), 1) self.assertEquals(u"video for group " + unicode(cohort_index), video_outline[0]["summary"]["name"]) # remove user from this cohort remove_user_from_cohort(cohorts[cohort_index], self.user.username) # un-cohorted user should see no videos video_outline = self.api_response(api_version=api_version).data self.assertEqual(len(video_outline), 0) # staff user sees all videos self.user.is_staff = True self.user.save() video_outline = self.api_response(api_version=api_version).data self.assertEqual(len(video_outline), 2)
def test_filter_cohort_id_and_enrollment_mode(self): with patch('lms.djangoapps.grades.course_grade_factory.CourseGradeFactory.read') as mock_grade: mock_grade.return_value = self.mock_course_grade(self.student, passed=True, letter_grade='A', percent=0.85) cohort = CohortFactory(course_id=self.course.id, name="TestCohort", users=[self.student]) with override_waffle_flag(self.waffle_flag, active=True): self.login_staff() # both of our test users are in the audit track, so this is functionally equivalent # to just `?cohort_id=cohort.id`. query = '?cohort_id={}&enrollment_mode={}'.format(cohort.id, CourseMode.AUDIT) resp = self.client.get( self.get_url(course_key=self.course.id) + query ) expected_results = [ OrderedDict([ ('course_id', text_type(self.course.id)), ('email', self.student.email), ('user_id', self.student.id), ('username', self.student.username), ('full_name', self.student.get_full_name()), ('passed', True), ('percent', 0.85), ('letter_grade', 'A'), ('progress_page_url', reverse( 'student_progress', kwargs=dict(course_id=text_type(self.course.id), student_id=self.student.id) )), ('section_breakdown', self.expected_subsection_grades(letter_grade='A')), ]), ] self.assertEqual(status.HTTP_200_OK, resp.status_code) actual_data = dict(resp.data) self.assertIsNone(actual_data['next']) self.assertIsNone(actual_data['previous']) self.assertEqual(expected_results, actual_data['results'])
def setUp(self): super(ContentGroupTestCase, self).setUp() self.course = CourseFactory.create( org='org', number='number', run='run', # This test needs to use a course that has already started -- # discussion topics only show up if the course has already started, # and the default start date for courses is Jan 1, 2030. start=datetime(2012, 2, 3, tzinfo=UTC), user_partitions=[ UserPartition( 0, 'Content Group Configuration', '', [Group(1, 'Alpha'), Group(2, 'Beta')], scheme_id='cohort') ], grading_policy={ "GRADER": [{ "type": "Homework", "min_count": 1, "drop_count": 0, "short_label": "HW", "weight": 1.0 }] }, cohort_config={'cohorted': True}, discussion_topics={}) self.staff_user = UserFactory.create(is_staff=True) self.alpha_user = UserFactory.create() self.beta_user = UserFactory.create() self.non_cohorted_user = UserFactory.create() for user in [ self.staff_user, self.alpha_user, self.beta_user, self.non_cohorted_user ]: CourseEnrollmentFactory.create(user=user, course_id=self.course.id) alpha_cohort = CohortFactory(course_id=self.course.id, name='Cohort Alpha', users=[self.alpha_user]) beta_cohort = CohortFactory(course_id=self.course.id, name='Cohort Beta', users=[self.beta_user]) CourseUserGroupPartitionGroup.objects.create( course_user_group=alpha_cohort, partition_id=self.course.user_partitions[0].id, group_id=self.course.user_partitions[0].groups[0].id) CourseUserGroupPartitionGroup.objects.create( course_user_group=beta_cohort, partition_id=self.course.user_partitions[0].id, group_id=self.course.user_partitions[0].groups[1].id) self.alpha_module = ItemFactory.create( parent_location=self.course.location, category='discussion', discussion_id='alpha_group_discussion', discussion_target='Visible to Alpha', group_access={ self.course.user_partitions[0].id: [self.course.user_partitions[0].groups[0].id] }) self.beta_module = ItemFactory.create( parent_location=self.course.location, category='discussion', discussion_id='beta_group_discussion', discussion_target='Visible to Beta', group_access={ self.course.user_partitions[0].id: [self.course.user_partitions[0].groups[1].id] }) self.global_module = ItemFactory.create( parent_location=self.course.location, category='discussion', discussion_id='global_group_discussion', discussion_target='Visible to Everyone') self.course = self.store.get_item(self.course.location)