def test_group_configuration_not_used(self): """ Test that right data structure will be created if group configuration is not used. """ self._add_user_partitions() actual = GroupConfiguration.add_usage_info(self.course, self.store) expected = [{ 'id': 0, 'name': 'Name 0', 'description': 'Description 0', 'version': 1, 'groups': [ { 'id': 0, 'name': 'Group A', 'version': 1 }, { 'id': 1, 'name': 'Group B', 'version': 1 }, { 'id': 2, 'name': 'Group C', 'version': 1 }, ], 'usage': [], }] self.assertEqual(actual, expected)
def test_can_get_usage_info_when_special_characters_are_used(self): """ Test if group configurations json updated successfully when special characters are being used in content experiment """ self._add_user_partitions(count=1) vertical, __ = self._create_content_experiment(cid=0, name_suffix='0', special_characters=u"JOSÉ ANDRÉS") actual = GroupConfiguration.get_split_test_partitions_with_usage(self.course, self.store) expected = [{ 'id': 0, 'name': 'Name 0', 'scheme': 'random', 'description': 'Description 0', 'version': UserPartition.VERSION, 'groups': [ {'id': 0, 'name': 'Group A', 'version': 1}, {'id': 1, 'name': 'Group B', 'version': 1}, {'id': 2, 'name': 'Group C', 'version': 1}, ], 'usage': [{ 'url': '/container/{}'.format(vertical.location), 'label': u"Test Unit 0 / Test Content Experiment 0JOSÉ ANDRÉS", 'validation': None, }], }] self.assertEqual(actual, expected)
def test_can_use_one_configuration_in_multiple_experiments(self): """ Test if multiple experiments are present in usage info when they use same group configuration. """ self._add_user_partitions() self._create_content_experiment(cid=0, name_suffix='0') self._create_content_experiment(cid=0, name_suffix='1') actual = GroupConfiguration.add_usage_info(self.course, self.store) expected = [{ u'id': 0, u'name': u'Name 0', u'description': u'Description 0', u'version': 1, u'groups': [ {u'id': 0, u'name': u'Group A', u'version': 1}, {u'id': 1, u'name': u'Group B', u'version': 1}, {u'id': 2, u'name': u'Group C', u'version': 1}, ], u'usage': [{ 'url': '/unit/i4x://MITx/999/vertical/Test_Unit_0', 'label': 'Test Unit 0 / Test Content Experiment 0', }, { 'url': '/unit/i4x://MITx/999/vertical/Test_Unit_1', 'label': 'Test Unit 1 / Test Content Experiment 1', }], }] self.assertEqual(actual, expected)
def test_can_use_one_configuration_in_multiple_experiments(self): """ Test if multiple experiments are present in usage info when they use same group configuration. """ self._add_user_partitions() vertical, __ = self._create_content_experiment(cid=0, name_suffix='0') vertical1, __ = self._create_content_experiment(cid=0, name_suffix='1') actual = GroupConfiguration.add_usage_info(self.course, self.store) expected = [{ 'id': 0, 'name': 'Name 0', 'description': 'Description 0', 'version': 1, 'groups': [ {'id': 0, 'name': 'Group A', 'version': 1}, {'id': 1, 'name': 'Group B', 'version': 1}, {'id': 2, 'name': 'Group C', 'version': 1}, ], 'usage': [{ 'url': '/container/{}'.format(vertical.location), 'label': 'Test Unit 0 / Test Content Experiment 0', 'validation': None, }, { 'url': '/container/{}'.format(vertical1.location), 'label': 'Test Unit 1 / Test Content Experiment 1', 'validation': None, }], }] self.assertEqual(actual, expected)
def test_content_group_not_used(self): """ Test that right data structure will be created if content group is not used. """ self._add_user_partitions(scheme_id='cohort') actual = GroupConfiguration.get_or_create_content_group(self.store, self.course) expected = self._get_expected_content_group(usage_for_group=[]) self.assertEqual(actual, expected)
def test_update_usage_info_no_message(self, mocked_validation_messages): """ Tests if validation message is not present when updating usage info. """ self._add_user_partitions() self._create_content_experiment(cid=0, name_suffix='0') mocked_validation_messages.return_value = [] group_configuration = GroupConfiguration.update_usage_info(self.store, self.course, self.course.user_partitions[0]) self.assertEqual(group_configuration['usage'][0]['validation'], None)
def test_update_usage_info_no_message(self, mocked_validation_messages): """ Tests if validation message is not present when updating usage info. """ self._add_user_partitions() self._create_content_experiment(cid=0, name_suffix='0') mocked_validation_messages.return_value = [] group_configuration = GroupConfiguration.update_usage_info( self.store, self.course, self.course.user_partitions[0]) self.assertEqual(group_configuration['usage'][0]['validation'], None)
def test_can_handle_without_parent(self): """ Test if it possible to handle case when split_test has no parent. """ self._add_user_partitions() # Create split test without parent. ItemFactory.create(category='split_test', user_partition_id=0, display_name='Test Content Experiment') self.save_course() actual = GroupConfiguration.get_usage_info(self.course, self.store) self.assertEqual(actual, {0: []})
def verify_validation_add_usage_info(self, expected_result, mocked_message, mocked_validation_messages): """ Helper method for testing validation information present after add_usage_info. """ self._add_user_partitions() split_test = self._create_content_experiment(cid=0, name_suffix='0')[1] validation = StudioValidation(split_test.location) validation.add(mocked_message) mocked_validation_messages.return_value = validation group_configuration = GroupConfiguration.add_usage_info(self.course, self.store)[0] self.assertEqual(expected_result.to_json(), group_configuration['usage'][0]['validation'])
def test_can_handle_without_parent(self): """ Test if it possible to handle case when split_test has no parent. """ self._add_user_partitions() # Create split test without parent. ItemFactory.create( category='split_test', user_partition_id=0, display_name='Test Content Experiment' ) self.save_course() actual = GroupConfiguration.get_usage_info(self.course, self.store) self.assertEqual(actual, {0: []})
def test_can_get_correct_usage_info_for_content_groups(self): """ Test if content group json updated successfully with usage information. """ self._add_user_partitions(count=1, scheme_id='cohort') vertical, __ = self._create_problem_with_content_group(cid=0, group_id=1, name_suffix='0') actual = GroupConfiguration.get_or_create_content_group(self.store, self.course) expected = self._get_expected_content_group(usage_for_group=[ { 'url': '/container/{}'.format(vertical.location), 'label': 'Test Unit 0 / Test Problem 0' } ]) self.assertEqual(actual, expected)
def test_can_handle_without_parent(self): """ Test if it possible to handle case when split_test has no parent. """ self._add_user_partitions() # Create split test without parent. with modulestore().branch_setting(ModuleStoreEnum.Branch.published_only): orphan = modulestore().create_item( ModuleStoreEnum.UserID.test, self.course.id, 'split_test', ) orphan.user_partition_id = 0 orphan.display_name = 'Test Content Experiment' modulestore().update_item(orphan, ModuleStoreEnum.UserID.test) self.save_course() actual = GroupConfiguration.get_usage_info(self.course, self.store) self.assertEqual(actual, {0: []})
def test_warning_message_present(self, mocked_validation_messages): """ Tests if validation message is present. """ self._add_user_partitions() split_test = self._create_content_experiment(cid=0, name_suffix='0')[1] mocked_validation_messages.return_value = [ ValidationMessage(split_test, u"Validation message", ValidationMessageType.warning) ] group_configuration = GroupConfiguration.add_usage_info( self.course, self.store)[0] self.assertEqual( group_configuration['usage'][0]['validation'], { 'message': u'This content experiment has issues that affect content visibility.', 'type': 'warning' })
def test_group_configuration_not_used(self): """ Test that right data structure will be created if group configuration is not used. """ self._add_user_partitions() actual = GroupConfiguration.add_usage_info(self.course, self.store) expected = [{ 'id': 0, 'name': 'Name 0', 'description': 'Description 0', 'version': 1, 'groups': [ {'id': 0, 'name': 'Group A', 'version': 1}, {'id': 1, 'name': 'Group B', 'version': 1}, {'id': 2, 'name': 'Group C', 'version': 1}, ], 'usage': [], }] self.assertEqual(actual, expected)
def test_can_get_correct_usage_info(self): """ Test if group configurations json updated successfully with usage information. """ self._add_user_partitions(count=2) vertical, __ = self._create_content_experiment(cid=0, name_suffix='0') self._create_content_experiment(name_suffix='1') actual = GroupConfiguration.get_split_test_partitions_with_usage(self.course, self.store) expected = [{ 'id': 0, 'name': 'Name 0', 'scheme': 'random', 'description': 'Description 0', 'version': UserPartition.VERSION, 'groups': [ {'id': 0, 'name': 'Group A', 'version': 1}, {'id': 1, 'name': 'Group B', 'version': 1}, {'id': 2, 'name': 'Group C', 'version': 1}, ], 'usage': [{ 'url': '/container/{}'.format(vertical.location), 'label': 'Test Unit 0 / Test Content Experiment 0', 'validation': None, }], }, { 'id': 1, 'name': 'Name 1', 'scheme': 'random', 'description': 'Description 1', 'version': UserPartition.VERSION, 'groups': [ {'id': 0, 'name': 'Group A', 'version': 1}, {'id': 1, 'name': 'Group B', 'version': 1}, {'id': 2, 'name': 'Group C', 'version': 1}, ], 'usage': [], }] self.assertEqual(actual, expected)
def test_can_get_correct_usage_info(self): """ Test if group configurations json updated successfully with usage information. """ self._add_user_partitions(count=2) vertical, __ = self._create_content_experiment(cid=0, name_suffix='0') self._create_content_experiment(name_suffix='1') actual = GroupConfiguration.add_usage_info(self.course, self.store) expected = [{ 'id': 0, 'name': 'Name 0', 'description': 'Description 0', 'version': 1, 'groups': [ {'id': 0, 'name': 'Group A', 'version': 1}, {'id': 1, 'name': 'Group B', 'version': 1}, {'id': 2, 'name': 'Group C', 'version': 1}, ], 'usage': [{ 'url': '/container/{}'.format(vertical.location), 'label': 'Test Unit 0 / Test Content Experiment 0', 'validation': None, }], }, { 'id': 1, 'name': 'Name 1', 'description': 'Description 1', 'version': 1, 'groups': [ {'id': 0, 'name': 'Group A', 'version': 1}, {'id': 1, 'name': 'Group B', 'version': 1}, {'id': 2, 'name': 'Group C', 'version': 1}, ], 'usage': [], }] self.assertEqual(actual, expected)
def test_can_get_correct_usage_info(self): """ Test if group configurations json updated successfully with usage information. """ self._add_user_partitions(count=2) self._create_content_experiment(cid=0, name_suffix='0') self._create_content_experiment(name_suffix='1') actual = GroupConfiguration.add_usage_info(self.course, self.store) expected = [{ 'id': 0, 'name': 'Name 0', 'description': 'Description 0', 'version': 1, 'groups': [ {'id': 0, 'name': 'Group A', 'version': 1}, {'id': 1, 'name': 'Group B', 'version': 1}, {'id': 2, 'name': 'Group C', 'version': 1}, ], 'usage': [{ 'url': '/container/i4x://MITx/999/vertical/Test_Unit_0', 'label': 'Test Unit 0 / Test Content Experiment 0', 'validation': None, }], }, { 'id': 1, 'name': 'Name 1', 'description': 'Description 1', 'version': 1, 'groups': [ {'id': 0, 'name': 'Group A', 'version': 1}, {'id': 1, 'name': 'Group B', 'version': 1}, {'id': 2, 'name': 'Group C', 'version': 1}, ], 'usage': [], }] self.assertEqual(actual, expected)
def test_warning_message_present(self, mocked_validation_messages): """ Tests if validation message is present. """ self._add_user_partitions() split_test = self._create_content_experiment(cid=0, name_suffix='0')[1] mocked_validation_messages.return_value = [ ValidationMessage( split_test, u"Validation message", ValidationMessageType.warning ) ] group_configuration = GroupConfiguration.add_usage_info(self.course, self.store)[0] self.assertEqual( group_configuration['usage'][0]['validation'], { 'message': u'This content experiment has issues that affect content visibility.', 'type': 'warning' } )
def test_can_get_correct_usage_info(self): """ Test if group configurations json updated successfully with usage information. """ self._add_user_partitions(count=2) self._create_content_experiment(cid=0, name_suffix='0') self._create_content_experiment(name_suffix='1') actual = GroupConfiguration.add_usage_info(self.course, self.store) expected = [{ u'id': 0, u'name': u'Name 0', u'description': u'Description 0', u'version': 1, u'groups': [ {u'id': 0, u'name': u'Group A', u'version': 1}, {u'id': 1, u'name': u'Group B', u'version': 1}, {u'id': 2, u'name': u'Group C', u'version': 1}, ], u'usage': [{ 'url': '/unit/i4x://MITx/999/vertical/Test_Unit_0', 'label': 'Test Unit 0 / Test Content Experiment 0', }], }, { u'id': 1, u'name': u'Name 1', u'description': u'Description 1', u'version': 1, u'groups': [ {u'id': 0, u'name': u'Group A', u'version': 1}, {u'id': 1, u'name': u'Group B', u'version': 1}, {u'id': 2, u'name': u'Group C', u'version': 1}, ], u'usage': [], }] self.assertEqual(actual, expected)
def test_can_use_one_content_group_in_multiple_problems(self): """ Test if multiple problems are present in usage info when they use same content group. """ self._add_user_partitions(scheme_id='cohort') vertical, __ = self._create_problem_with_content_group(cid=0, group_id=1, name_suffix='0') vertical1, __ = self._create_problem_with_content_group(cid=0, group_id=1, name_suffix='1') actual = GroupConfiguration.get_or_create_content_group(self.store, self.course) expected = self._get_expected_content_group(usage_for_group=[ { 'url': '/container/{}'.format(vertical.location), 'label': 'Test Unit 0 / Test Problem 0' }, { 'url': '/container/{}'.format(vertical1.location), 'label': 'Test Unit 1 / Test Problem 1' } ]) self.assertEqual(actual, expected)