示例#1
0
    def test_for_featured_explorations(self):
        """Note that both EXP_ID_1 and EXP_ID_2 are public. However, only
        EXP_ID_2 is featured, so the call to get_featured_explorations() should
        only return [EXP_ID_2].
        """
        activity_services.update_featured_activity_references([
            activity_domain.ActivityReference(
                feconf.ACTIVITY_TYPE_EXPLORATION, self.EXP_ID_2)
        ])

        featured_activity_summaries = (
            summary_services.get_featured_activity_summary_dicts([
                feconf.DEFAULT_LANGUAGE_CODE]))
        self.assertEqual(len(featured_activity_summaries), 1)
        self.assertDictContainsSubset({
            'status': 'public',
            'thumbnail_bg_color': '#a33f40',
            'community_owned': False,
            'tags': [],
            'thumbnail_icon_url': self.get_static_asset_url(
                '/images/subjects/Lightbulb.svg'),
            'language_code': feconf.DEFAULT_LANGUAGE_CODE,
            'id': self.EXP_ID_2,
            'category': 'A category',
            'ratings': feconf.get_empty_ratings(),
            'title': 'A title',
            'num_views': 0,
            'objective': 'An objective'
        }, featured_activity_summaries[0])
示例#2
0
    def test_unpublished_activity_is_removed_from_featured_list(self) -> None:
        rights_manager.publish_exploration(self.owner, self.EXP_ID_0) # type: ignore[no-untyped-call]
        rights_manager.publish_exploration(self.owner, self.EXP_ID_1) # type: ignore[no-untyped-call]
        rights_manager.publish_collection(self.owner, self.COL_ID_2) # type: ignore[no-untyped-call]
        activity_services.update_featured_activity_references([
            self._create_exploration_reference(self.EXP_ID_0),
            self._create_collection_reference(self.COL_ID_2)])

        self._compare_lists(
            activity_services.get_featured_activity_references(), [
                self._create_exploration_reference(self.EXP_ID_0),
                self._create_collection_reference(self.COL_ID_2)])

        # Unpublishing an unfeatured activity does not affect the featured
        # list.
        rights_manager.unpublish_exploration(self.moderator, self.EXP_ID_1) # type: ignore[no-untyped-call]
        self._compare_lists(
            activity_services.get_featured_activity_references(), [
                self._create_exploration_reference(self.EXP_ID_0),
                self._create_collection_reference(self.COL_ID_2)])

        # Unpublishing a featured activity removes it from the featured list.
        rights_manager.unpublish_collection(self.moderator, self.COL_ID_2) # type: ignore[no-untyped-call]
        self._compare_lists(
            activity_services.get_featured_activity_references(), [
                self._create_exploration_reference(self.EXP_ID_0)])

        rights_manager.unpublish_exploration(self.moderator, self.EXP_ID_0) # type: ignore[no-untyped-call]
        self._compare_lists(
            activity_services.get_featured_activity_references(), [])
示例#3
0
    def test_deleted_activity_is_removed_from_featured_list(self):
        rights_manager.publish_exploration(self.owner_id, self.EXP_ID_0)
        rights_manager.publish_exploration(self.owner_id, self.EXP_ID_1)
        rights_manager.publish_collection(self.owner_id, self.COL_ID_2)
        activity_services.update_featured_activity_references([
            self._create_exploration_reference(self.EXP_ID_0),
            self._create_collection_reference(self.COL_ID_2)])

        self._compare_lists(
            activity_services.get_featured_activity_references(), [
                self._create_exploration_reference(self.EXP_ID_0),
                self._create_collection_reference(self.COL_ID_2)])

        # Deleting an unfeatured activity does not affect the featured list.
        exp_services.delete_exploration(self.owner_id, self.EXP_ID_1)
        self._compare_lists(
            activity_services.get_featured_activity_references(), [
                self._create_exploration_reference(self.EXP_ID_0),
                self._create_collection_reference(self.COL_ID_2)])

        # Deleting a featured activity removes it from the featured list.
        collection_services.delete_collection(self.owner_id, self.COL_ID_2)
        self._compare_lists(
            activity_services.get_featured_activity_references(), [
                self._create_exploration_reference(self.EXP_ID_0)])
        exp_services.delete_exploration(self.owner_id, self.EXP_ID_0)
        self._compare_lists(
            activity_services.get_featured_activity_references(), [])
    def test_for_featured_explorations(self):
        """Note that both EXP_ID_1 and EXP_ID_2 are public. However, only
        EXP_ID_2 is featured, so the call to get_featured_explorations() should
        only return [EXP_ID_2].
        """
        activity_services.update_featured_activity_references([
            activity_domain.ActivityReference(
                constants.ACTIVITY_TYPE_EXPLORATION, self.EXP_ID_2)
        ])

        featured_activity_summaries = (
            summary_services.get_featured_activity_summary_dicts([
                constants.DEFAULT_LANGUAGE_CODE]))
        self.assertEqual(len(featured_activity_summaries), 1)
        self.assertDictContainsSubset({
            'status': 'public',
            'thumbnail_bg_color': '#a33f40',
            'community_owned': False,
            'tags': [],
            'thumbnail_icon_url': '/subjects/Lightbulb.svg',
            'language_code': constants.DEFAULT_LANGUAGE_CODE,
            'id': self.EXP_ID_2,
            'category': 'A category',
            'ratings': feconf.get_empty_ratings(),
            'title': 'A title',
            'num_views': 0,
            'objective': 'An objective'
        }, featured_activity_summaries[0])
示例#5
0
    def test_updating_with_duplicate_refs_raises_exception(self):
        rights_manager.publish_exploration(self.owner_id, self.EXP_ID_0)
        rights_manager.publish_collection(self.owner_id, self.COL_ID_2)
        self._compare_lists(
            activity_services.get_featured_activity_references(), [])

        with self.assertRaisesRegexp(Exception, 'should not have duplicates'):
            activity_services.update_featured_activity_references([
                self._create_exploration_reference(self.EXP_ID_0),
                self._create_exploration_reference(self.EXP_ID_0)])
示例#6
0
    def test_updating_with_duplicate_refs_raises_exception(self) -> None:
        rights_manager.publish_exploration(self.owner, self.EXP_ID_0) # type: ignore[no-untyped-call]
        rights_manager.publish_collection(self.owner, self.COL_ID_2) # type: ignore[no-untyped-call]
        self._compare_lists(
            activity_services.get_featured_activity_references(), [])

        with self.assertRaisesRegex(Exception, 'should not have duplicates'): # type: ignore[no-untyped-call]
            activity_services.update_featured_activity_references([
                self._create_exploration_reference(self.EXP_ID_0),
                self._create_exploration_reference(self.EXP_ID_0)])
示例#7
0
    def test_update_featured_refs_clears_existing_featured_activities(self):
        rights_manager.publish_exploration(self.owner_id, self.EXP_ID_0)
        activity_services.update_featured_activity_references([
            self._create_exploration_reference(self.EXP_ID_0)])
        self._compare_lists(
            activity_services.get_featured_activity_references(), [
                self._create_exploration_reference(self.EXP_ID_0)])

        activity_services.update_featured_activity_references([])
        self._compare_lists(
            activity_services.get_featured_activity_references(), [])
    def test_language_code_filter(self):
        """Note that both EXP_ID_1 is in Spanish and EXP_ID_2 is in English."""
        activity_services.update_featured_activity_references([
            activity_domain.ActivityReference(
                constants.ACTIVITY_TYPE_EXPLORATION, self.EXP_ID_1),
            activity_domain.ActivityReference(
                constants.ACTIVITY_TYPE_EXPLORATION, self.EXP_ID_2)
        ])

        featured_activity_summaries = (
            summary_services.get_featured_activity_summary_dicts(
                [constants.DEFAULT_LANGUAGE_CODE]))
        self.assertEqual(len(featured_activity_summaries), 1)
        self.assertDictContainsSubset(
            {
                'language_code': constants.DEFAULT_LANGUAGE_CODE,
                'id': self.EXP_ID_2,
            }, featured_activity_summaries[0])

        featured_activity_summaries = (
            summary_services.get_featured_activity_summary_dicts(
                [self.LANGUAGE_CODE_ES]))
        self.assertEqual(len(featured_activity_summaries), 1)
        self.assertDictContainsSubset(
            {
                'language_code': self.LANGUAGE_CODE_ES,
                'id': self.EXP_ID_1,
            }, featured_activity_summaries[0])

        featured_activity_summaries = (
            summary_services.get_featured_activity_summary_dicts(
                [constants.DEFAULT_LANGUAGE_CODE, self.LANGUAGE_CODE_ES]))
        self.assertEqual(len(featured_activity_summaries), 2)
        self.assertDictContainsSubset(
            {
                'language_code': self.LANGUAGE_CODE_ES,
                'id': self.EXP_ID_1,
            }, featured_activity_summaries[0])
        self.assertDictContainsSubset(
            {
                'language_code': constants.DEFAULT_LANGUAGE_CODE,
                'id': self.EXP_ID_2,
            }, featured_activity_summaries[1])

        featured_activity_summaries = (
            summary_services.get_featured_activity_summary_dicts(
                ['nonexistent_language_code']))
        self.assertEqual(len(featured_activity_summaries), 0)

        featured_activity_summaries = (
            summary_services.get_featured_activity_summary_dicts([]))
        self.assertEqual(len(featured_activity_summaries), 0)
示例#9
0
    def test_update_featured_refs_correctly_promotes_activities(self):
        rights_manager.publish_exploration(self.owner_id, self.EXP_ID_0)
        rights_manager.publish_collection(self.owner_id, self.COL_ID_2)
        self._compare_lists(
            activity_services.get_featured_activity_references(), [])

        activity_services.update_featured_activity_references([
            self._create_exploration_reference(self.EXP_ID_0),
            self._create_collection_reference(self.COL_ID_2)])
        self._compare_lists(
            activity_services.get_featured_activity_references(), [
                self._create_exploration_reference(self.EXP_ID_0),
                self._create_collection_reference(self.COL_ID_2)])
示例#10
0
    def test_update_featured_refs_correctly_promotes_activities(self) -> None:
        rights_manager.publish_exploration(self.owner, self.EXP_ID_0) # type: ignore[no-untyped-call]
        rights_manager.publish_collection(self.owner, self.COL_ID_2) # type: ignore[no-untyped-call]
        self._compare_lists(
            activity_services.get_featured_activity_references(), [])

        activity_services.update_featured_activity_references([
            self._create_exploration_reference(self.EXP_ID_0),
            self._create_collection_reference(self.COL_ID_2)])
        self._compare_lists(
            activity_services.get_featured_activity_references(), [
                self._create_exploration_reference(self.EXP_ID_0),
                self._create_collection_reference(self.COL_ID_2)])
示例#11
0
    def test_update_featured_refs_clears_existing_featured_activities(
            self) -> None:
        rights_manager.publish_exploration(
            self.owner, self.EXP_ID_0)  # type: ignore[no-untyped-call]
        activity_services.update_featured_activity_references(
            [self._create_exploration_reference(self.EXP_ID_0)])
        self._compare_lists(
            activity_services.get_featured_activity_references(),
            [self._create_exploration_reference(self.EXP_ID_0)])

        activity_services.update_featured_activity_references([])
        self._compare_lists(
            activity_services.get_featured_activity_references(), [])
示例#12
0
    def test_library_index_handler_updates_featured_activity_summary_dict(
            self):
        """Test the handler for featured explorations."""
        response_dict = self.get_json(feconf.LIBRARY_INDEX_DATA_URL)
        self.assertDictContainsSubset(
            {
                'activity_summary_dicts_by_category': [],
                'preferred_language_codes': ['en'],
            }, response_dict)

        # Load a demo.
        exp_services.load_demo('0')
        exploration_ref = activity_domain.ActivityReference(
            constants.ACTIVITY_TYPE_EXPLORATION, '0')
        activity_services.update_featured_activity_references(
            [exploration_ref])

        response_dict = self.get_json(feconf.LIBRARY_INDEX_DATA_URL)

        self.assertEqual(
            len(response_dict['activity_summary_dicts_by_category']), 1)
        self.assertDictContainsSubset({
            'preferred_language_codes': ['en'],
        }, response_dict)
        activity_summary_dicts_by_category = (
            response_dict['activity_summary_dicts_by_category'][0])

        self.assertDictContainsSubset(
            {
                'categories': [],
                'header_i18n_id':
                (feconf.LIBRARY_CATEGORY_FEATURED_ACTIVITIES),
                'has_full_results_page': False,
                'full_results_url': None,
            }, activity_summary_dicts_by_category)

        activity_summary_dicts = (
            activity_summary_dicts_by_category['activity_summary_dicts'])

        self.assertEqual(len(activity_summary_dicts), 1)
        self.assertDictContainsSubset(
            {
                'id': '0',
                'category': 'Welcome',
                'title': 'Welcome to Oppia!',
                'language_code': 'en',
                'objective': 'become familiar with Oppia\'s capabilities',
                'status': rights_domain.ACTIVITY_STATUS_PUBLIC,
            }, activity_summary_dicts[0])
示例#13
0
    def post(self):
        """Handles POST requests."""
        featured_activity_references = self.normalized_payload.get(
            'featured_activity_reference_dicts')

        try:
            summary_services.require_activities_to_be_public(
                featured_activity_references)
        except Exception as e:
            raise self.InvalidInputException(e)

        activity_services.update_featured_activity_references(
            featured_activity_references)

        self.render_json({})
示例#14
0
    def test_language_code_filter(self):
        """Note that both EXP_ID_1 is in Spanish and EXP_ID_2 is in English."""
        activity_services.update_featured_activity_references([
            activity_domain.ActivityReference(
                feconf.ACTIVITY_TYPE_EXPLORATION, self.EXP_ID_1),
            activity_domain.ActivityReference(
                feconf.ACTIVITY_TYPE_EXPLORATION, self.EXP_ID_2)
        ])

        featured_activity_summaries = (
            summary_services.get_featured_activity_summary_dicts([
                feconf.DEFAULT_LANGUAGE_CODE]))
        self.assertEqual(len(featured_activity_summaries), 1)
        self.assertDictContainsSubset({
            'language_code': feconf.DEFAULT_LANGUAGE_CODE,
            'id': self.EXP_ID_2,
        }, featured_activity_summaries[0])

        featured_activity_summaries = (
            summary_services.get_featured_activity_summary_dicts([
                self.LANGUAGE_CODE_ES]))
        self.assertEqual(len(featured_activity_summaries), 1)
        self.assertDictContainsSubset({
            'language_code': self.LANGUAGE_CODE_ES,
            'id': self.EXP_ID_1,
        }, featured_activity_summaries[0])

        featured_activity_summaries = (
            summary_services.get_featured_activity_summary_dicts([
                feconf.DEFAULT_LANGUAGE_CODE, self.LANGUAGE_CODE_ES]))
        self.assertEqual(len(featured_activity_summaries), 2)
        self.assertDictContainsSubset({
            'language_code': self.LANGUAGE_CODE_ES,
            'id': self.EXP_ID_1,
        }, featured_activity_summaries[0])
        self.assertDictContainsSubset({
            'language_code': feconf.DEFAULT_LANGUAGE_CODE,
            'id': self.EXP_ID_2,
        }, featured_activity_summaries[1])

        featured_activity_summaries = (
            summary_services.get_featured_activity_summary_dicts([
                'nonexistent_language_code']))
        self.assertEqual(len(featured_activity_summaries), 0)

        featured_activity_summaries = (
            summary_services.get_featured_activity_summary_dicts([]))
        self.assertEqual(len(featured_activity_summaries), 0)
示例#15
0
    def test_deleted_activity_is_removed_from_featured_list_multiple(self):
        rights_manager.publish_exploration(self.owner, self.EXP_ID_0)
        rights_manager.publish_exploration(self.owner, self.EXP_ID_1)
        exploration_references = [
            self._create_exploration_reference(self.EXP_ID_0),
            self._create_exploration_reference(self.EXP_ID_1)]
        activity_services.update_featured_activity_references(
            exploration_references)

        self._compare_lists(
            activity_services.get_featured_activity_references(),
            exploration_references)

        exp_services.delete_explorations(
            self.owner_id, [self.EXP_ID_0, self.EXP_ID_1])
        self._compare_lists(
            activity_services.get_featured_activity_references(), [])
示例#16
0
    def post(self):
        """Handles POST requests."""
        featured_activity_reference_dicts = self.payload.get(
            'featured_activity_reference_dicts')
        featured_activity_references = [
            activity_domain.ActivityReference(
                reference_dict['type'], reference_dict['id'])
            for reference_dict in featured_activity_reference_dicts]

        try:
            summary_services.require_activities_to_be_public(
                featured_activity_references)
        except Exception as e:
            raise self.InvalidInputException(e)

        activity_services.update_featured_activity_references(
            featured_activity_references)

        self.render_json({})
示例#17
0
    def post(self):
        """Handles POST requests."""
        featured_activity_reference_dicts = self.payload.get(
            'featured_activity_reference_dicts')
        featured_activity_references = [
            activity_domain.ActivityReference(
                reference_dict['type'], reference_dict['id'])
            for reference_dict in featured_activity_reference_dicts]

        try:
            summary_services.require_activities_to_be_public(
                featured_activity_references)
        except Exception as e:
            raise self.InvalidInputException(e)

        activity_services.update_featured_activity_references(
            featured_activity_references)

        self.render_json({})