def test_get_group_for_user(self): # get a group assigned to the user group1_id = RandomUserPartitionScheme.get_group_for_user(self.MOCK_COURSE_ID, self.user, self.user_partition) # make sure we get the same group back out every time for __ in range(10): group2_id = RandomUserPartitionScheme.get_group_for_user(self.MOCK_COURSE_ID, self.user, self.user_partition) self.assertEqual(group1_id, group2_id)
def test_empty_partition(self): empty_partition = UserPartition(self.TEST_ID, 'Test Partition', 'for testing purposes', [], scheme=RandomUserPartitionScheme) # get a group assigned to the user with self.assertRaisesRegexp( UserPartitionError, "Cannot assign user to an empty user partition"): RandomUserPartitionScheme.get_group_for_user( self.MOCK_COURSE_ID, self.user, empty_partition)
def test_empty_partition(self): empty_partition = UserPartition( self.TEST_ID, 'Test Partition', 'for testing purposes', [], scheme=RandomUserPartitionScheme ) # get a group assigned to the user with self.assertRaisesRegexp(UserPartitionError, "Cannot assign user to an empty user partition"): RandomUserPartitionScheme.get_group_for_user(self.MOCK_COURSE_ID, self.user, empty_partition)
def test_user_in_deleted_group(self): # get a group assigned to the user - should be group 0 or 1 old_group = RandomUserPartitionScheme.get_group_for_user(self.MOCK_COURSE_ID, self.user, self.user_partition) self.assertIn(old_group.id, [0, 1]) # Change the group definitions! No more group 0 or 1 groups = [Group(3, 'Group 3'), Group(4, 'Group 4')] user_partition = UserPartition(self.TEST_ID, 'Test Partition', 'for testing purposes', groups) # Now, get a new group using the same call - should be 3 or 4 new_group = RandomUserPartitionScheme.get_group_for_user(self.MOCK_COURSE_ID, self.user, user_partition) self.assertIn(new_group.id, [3, 4]) # We should get the same group over multiple calls new_group_2 = RandomUserPartitionScheme.get_group_for_user(self.MOCK_COURSE_ID, self.user, user_partition) self.assertEqual(new_group, new_group_2)
def test_get_group_for_user_with_assign(self): """ Make sure get_group_for_user returns None if no group is already assigned to a user instead of assigning/creating a group automatically """ # We should not get any group because assign is False which will # protect us from automatically creating a group for user group = RandomUserPartitionScheme.get_group_for_user( self.MOCK_COURSE_ID, self.user, self.user_partition, assign=False ) self.assertIsNone(group) # We should get a group automatically assigned to user group = RandomUserPartitionScheme.get_group_for_user(self.MOCK_COURSE_ID, self.user, self.user_partition) self.assertIsNotNone(group)
def test_change_group_name(self): # Changing the name of the group shouldn't affect anything # get a group assigned to the user - should be group 0 or 1 old_group = RandomUserPartitionScheme.get_group_for_user( self.MOCK_COURSE_ID, self.user, self.user_partition) self.assertIn(old_group.id, [0, 1]) # Change the group names groups = [Group(0, 'Group 0'), Group(1, 'Group 1')] user_partition = UserPartition(self.TEST_ID, 'Test Partition', 'for testing purposes', groups, scheme=RandomUserPartitionScheme) # Now, get a new group using the same call new_group = RandomUserPartitionScheme.get_group_for_user( self.MOCK_COURSE_ID, self.user, user_partition) self.assertEqual(old_group.id, new_group.id)
def test_change_group_name(self): # Changing the name of the group shouldn't affect anything # get a group assigned to the user - should be group 0 or 1 old_group = RandomUserPartitionScheme.get_group_for_user(self.MOCK_COURSE_ID, self.user, self.user_partition) self.assertIn(old_group.id, [0, 1]) # Change the group names groups = [Group(0, 'Group 0'), Group(1, 'Group 1')] user_partition = UserPartition( self.TEST_ID, 'Test Partition', 'for testing purposes', groups, scheme=RandomUserPartitionScheme ) # Now, get a new group using the same call new_group = RandomUserPartitionScheme.get_group_for_user(self.MOCK_COURSE_ID, self.user, user_partition) self.assertEqual(old_group.id, new_group.id)
def test_user(self, group_id, expected_blocks): course_tag_api.set_course_tag( self.user, self.course.id, RandomUserPartitionScheme.key_for_partition(self.split_test_user_partition), group_id, ) block_structure1 = get_course_blocks(self.user, self.course.location, self.transformers) self.assertEqual( set(block_structure1.get_block_keys()), set(self.get_block_key_set(self.blocks, *expected_blocks)) )
def test_user(self, group_id, expected_blocks): course_tag_api.set_course_tag( self.user, self.course.id, RandomUserPartitionScheme.key_for_partition( self.split_test_user_partition), group_id, ) block_structure1 = get_course_blocks( self.user, self.course.location, self.transformers, ) assert set(block_structure1.get_block_keys()) == set( self.get_block_key_set(self.blocks, *expected_blocks))
def test_cohort_scheme_partition(self): """ Test that cohort-schemed user partitions are ignored in the grades export. """ # Set up a course with 'cohort' and 'random' user partitions. cohort_scheme_partition = UserPartition( 0, 'Cohort-schemed Group Configuration', 'Group Configuration based on Cohorts', [Group(0, 'Group A'), Group(1, 'Group B')], scheme_id='cohort' ) experiment_group_a = Group(2, u'Expériment Group A') experiment_group_b = Group(3, u'Expériment Group B') experiment_partition = UserPartition( 1, u'Content Expériment Configuration', u'Group Configuration for Content Expériments', [experiment_group_a, experiment_group_b], scheme_id='random' ) course = CourseFactory.create( cohort_config={'cohorted': True}, user_partitions=[cohort_scheme_partition, experiment_partition] ) # Create user_a and user_b which are enrolled in the course # and assigned to experiment_group_a and experiment_group_b, # respectively. user_a = UserFactory.create(username='******') user_b = UserFactory.create(username='******') CourseEnrollment.enroll(user_a, course.id) CourseEnrollment.enroll(user_b, course.id) course_tag_api.set_course_tag( user_a, course.id, RandomUserPartitionScheme.key_for_partition(experiment_partition), experiment_group_a.id ) course_tag_api.set_course_tag( user_b, course.id, RandomUserPartitionScheme.key_for_partition(experiment_partition), experiment_group_b.id ) # Assign user_a to a group in the 'cohort'-schemed user # partition (by way of a cohort) to verify that the user # partition group does not show up in the "Experiment Group" # cell. cohort_a = CohortFactory.create(course_id=course.id, name=u'Cohørt A', users=[user_a]) CourseUserGroupPartitionGroup( course_user_group=cohort_a, partition_id=cohort_scheme_partition.id, group_id=cohort_scheme_partition.groups[0].id ).save() # Verify that we see user_a and user_b in their respective # content experiment groups, and that we do not see any # content groups. experiment_group_message = u'Experiment Group ({content_experiment})' self._verify_cell_data_for_user( user_a.username, course.id, experiment_group_message.format( content_experiment=experiment_partition.name ), experiment_group_a.name ) self._verify_cell_data_for_user( user_b.username, course.id, experiment_group_message.format( content_experiment=experiment_partition.name ), experiment_group_b.name ) # Make sure cohort info is correct. cohort_name_header = 'Cohort Name' self._verify_cell_data_for_user( user_a.username, course.id, cohort_name_header, cohort_a.name ) self._verify_cell_data_for_user( user_b.username, course.id, cohort_name_header, '' )