diff --git a/src/olympia/abuse/tests/test_actions.py b/src/olympia/abuse/tests/test_actions.py index 65c4437705bc..a5d28255a5cb 100644 --- a/src/olympia/abuse/tests/test_actions.py +++ b/src/olympia/abuse/tests/test_actions.py @@ -1574,7 +1574,7 @@ def test_execute_action_unlisted(self): assert len(mail.outbox) == 3 self._test_reporter_takedown_email(subject) - def test_execute_action_both_channels(self): + def test_execute_action_listed_unlisted(self): # Only make one of the two versions targeted unlisted. self.version.update(channel=amo.CHANNEL_UNLISTED) subject = self._test_reject_version(content_review=False) @@ -3188,7 +3188,7 @@ def test_execute_action_no_files_awaiting_review(self): def test_execute_action_unlisted(self): # testing the case of: unlisted versions; human review - self.make_addon_unlisted(self.addon) + self.change_channel_for_addon(self.addon, amo.CHANNEL_UNLISTED) assert self.addon.status == amo.STATUS_NULL ActivityLog.objects.all().delete() for version in (self.version, self.old_version): diff --git a/src/olympia/abuse/tests/test_models.py b/src/olympia/abuse/tests/test_models.py index 82995b567e8e..574d29d6183b 100644 --- a/src/olympia/abuse/tests/test_models.py +++ b/src/olympia/abuse/tests/test_models.py @@ -526,10 +526,13 @@ def test_is_individually_actionable(self): ) assert report.is_individually_actionable is True - self.make_addon_unlisted(addon) + self.change_channel_for_addon(addon, amo.CHANNEL_UNLISTED) assert report.is_individually_actionable is False - self.make_addon_listed(addon) + self.change_channel_for_addon(addon, amo.CHANNEL_ENTERPRISE) + assert report.is_individually_actionable is False + + self.change_channel_for_addon(addon, amo.CHANNEL_LISTED) Version.objects.get(version=report.addon_version).delete() assert report.is_individually_actionable is True @@ -4352,7 +4355,7 @@ def test_requeue_held_action_existing_job(self): def test_requeue_held_action_existing_job_unlisted(self): addon = addon_factory() - self.make_addon_unlisted(addon) + self.change_channel_for_addon(addon, amo.CHANNEL_UNLISTED) user = user_factory() job = CinderJob.objects.create(target_addon=addon) decision = ContentDecision.objects.create( diff --git a/src/olympia/abuse/tests/test_views.py b/src/olympia/abuse/tests/test_views.py index fa8b7a1b62fa..9cc66653e753 100644 --- a/src/olympia/abuse/tests/test_views.py +++ b/src/olympia/abuse/tests/test_views.py @@ -571,7 +571,7 @@ def test_reportable_reason_does_call_if_version_listed(self, task_mock): def test_reportable_reason_does_not_call_if_version_unlisted(self, task_mock): addon = addon_factory(guid='@badman') version = addon.current_version - self.make_addon_unlisted(addon) + self.change_channel_for_addon(addon, amo.CHANNEL_UNLISTED) self._setup_reportable_reason( 'hateful_violent_deceptive', addon=addon, diff --git a/src/olympia/access/tests.py b/src/olympia/access/tests.py index bccd3b13ad02..76a2999e1be6 100644 --- a/src/olympia/access/tests.py +++ b/src/olympia/access/tests.py @@ -267,8 +267,8 @@ def test_perm_reviewertools_view(self): assert not is_reviewer(self.user, self.addon, allow_content_reviewers=False) def test_perm_reviewertools_unlisted_view(self): - self.make_addon_unlisted(self.addon) - self.make_addon_unlisted(self.statictheme) + self.change_channel_for_addon(self.addon, amo.CHANNEL_UNLISTED) + self.change_channel_for_addon(self.statictheme, amo.CHANNEL_UNLISTED) self.grant_permission(self.user, amo.permissions.REVIEWER_TOOLS_UNLISTED_VIEW) assert is_user_any_kind_of_reviewer(self.user, allow_viewers=True) assert not is_user_any_kind_of_reviewer(self.user) diff --git a/src/olympia/activity/models.py b/src/olympia/activity/models.py index 72013908919c..3d0f7322ad4f 100644 --- a/src/olympia/activity/models.py +++ b/src/olympia/activity/models.py @@ -868,8 +868,8 @@ def get_absolute_url(obj): amo.LOG.REJECT_LISTING_CONTENT.id, ): reverse_args.insert(0, 'content') - elif channel and channel == amo.CHANNEL_UNLISTED: - reverse_args.insert(0, 'unlisted') + elif channel in (amo.CHANNEL_UNLISTED, amo.CHANNEL_ENTERPRISE): + reverse_args.insert(0, amo.CHANNEL_CHOICES_API[channel]) addon = format_html( '{1}', reverse('reviewers.review', args=reverse_args), diff --git a/src/olympia/activity/tests/test_models.py b/src/olympia/activity/tests/test_models.py index 5d0e48ca8a26..7c87f7478350 100644 --- a/src/olympia/activity/tests/test_models.py +++ b/src/olympia/activity/tests/test_models.py @@ -280,7 +280,7 @@ def test_addon_log_unlisted_addon(self): addon = Addon.objects.get() # Get the url before the addon is changed to unlisted. url_path = addon.get_url_path() - self.make_addon_unlisted(addon) + self.change_channel_for_addon(addon, amo.CHANNEL_UNLISTED) # Delete the status change log entry from making versions unlisted. ActivityLog.objects.for_addons(addon).delete() ActivityLog.objects.create(amo.LOG.CREATE_ADDON, (Addon, addon.id)) @@ -288,6 +288,17 @@ def test_addon_log_unlisted_addon(self): assert len(entries) == 1 assert url_path not in str(entries[0]) + def test_addon_log_enterprise_addon(self): + addon = Addon.objects.get() + url_path = addon.get_url_path() + self.change_channel_for_addon(addon, amo.CHANNEL_ENTERPRISE) + # Delete the status change log entry from making versions enterprise. + ActivityLog.objects.for_addons(addon).delete() + ActivityLog.objects.create(amo.LOG.CREATE_ADDON, (Addon, addon.id)) + entries = ActivityLog.objects.for_addons(addon) + assert len(entries) == 1 + assert url_path not in str(entries[0]) + def test_fancy_rendering(self): """HTML for Rating, and Collection.""" user = UserProfile.objects.create() @@ -559,7 +570,18 @@ def test_version_log_unlisted_addon(self): version = Version.objects.all()[0] # Get the url before the addon is changed to unlisted. url_path = version.get_url_path() - self.make_addon_unlisted(version.addon) + self.change_channel_for_addon(version.addon, amo.CHANNEL_UNLISTED) + ActivityLog.objects.create( + amo.LOG.REJECT_VERSION, version.addon, version, user=self.request.user + ) + entries = ActivityLog.objects.for_versions(version) + assert len(entries) == 1 + assert url_path not in str(entries[0]) + + def test_version_log_enterprise_addon(self): + version = Version.objects.all()[0] + url_path = version.get_url_path() + self.change_channel_for_addon(version.addon, amo.CHANNEL_ENTERPRISE) ActivityLog.objects.create( amo.LOG.REJECT_VERSION, version.addon, version, user=self.request.user ) diff --git a/src/olympia/activity/tests/test_views.py b/src/olympia/activity/tests/test_views.py index 46a8e487c4d7..0e04fd3fc6e3 100644 --- a/src/olympia/activity/tests/test_views.py +++ b/src/olympia/activity/tests/test_views.py @@ -97,25 +97,25 @@ def test_get_not_public_developer(self): assert response.status_code == 200 def test_get_not_listed_simple_reviewer(self): - self.make_addon_unlisted(self.addon) + self.change_channel_for_addon(self.addon, amo.CHANNEL_UNLISTED) self._login_reviewer() response = self.client.get(self.url) assert response.status_code == 403 def test_get_not_listed_specific_reviewer(self): - self.make_addon_unlisted(self.addon) + self.change_channel_for_addon(self.addon, amo.CHANNEL_UNLISTED) self._login_reviewer(permission=amo.permissions.ADDONS_REVIEW_UNLISTED) response = self.client.get(self.url) assert response.status_code == 200 def test_get_not_listed_unlisted_viewer(self): - self.make_addon_unlisted(self.addon) + self.change_channel_for_addon(self.addon, amo.CHANNEL_UNLISTED) self._login_reviewer(permission=amo.permissions.REVIEWER_TOOLS_UNLISTED_VIEW) response = self.client.get(self.url) assert response.status_code == 200 def test_get_not_listed_author(self): - self.make_addon_unlisted(self.addon) + self.change_channel_for_addon(self.addon, amo.CHANNEL_UNLISTED) self._login_developer() response = self.client.get(self.url) assert response.status_code == 200 @@ -511,7 +511,7 @@ def test_developer_reply_listed(self): ) def test_developer_reply_unlisted(self): - self.make_addon_unlisted(self.addon) + self.change_channel_for_addon(self.addon, amo.CHANNEL_UNLISTED) self._test_developer_reply() self.assertCloseToNow( self.version.due_date, @@ -558,7 +558,7 @@ def test_reviewer_reply_listed(self): self._test_reviewer_reply(amo.permissions.ADDONS_REVIEW) def test_reviewer_reply_unlisted(self): - self.make_addon_unlisted(self.addon) + self.change_channel_for_addon(self.addon, amo.CHANNEL_UNLISTED) self._test_reviewer_reply(amo.permissions.ADDONS_REVIEW_UNLISTED) def test_reply_to_deleted_addon_is_404(self): @@ -618,7 +618,7 @@ def test_reviewer_can_reply_to_disabled_version_listed(self): self._test_reviewer_reply(amo.permissions.ADDONS_REVIEW) def test_reviewer_can_reply_to_disabled_version_unlisted(self): - self.make_addon_unlisted(self.addon) + self.change_channel_for_addon(self.addon, amo.CHANNEL_UNLISTED) self.version.file.update(status=amo.STATUS_DISABLED) self._test_reviewer_reply(amo.permissions.ADDONS_REVIEW_UNLISTED) diff --git a/src/olympia/addons/admin.py b/src/olympia/addons/admin.py index c074f9dfd135..d7a8af211c4d 100644 --- a/src/olympia/addons/admin.py +++ b/src/olympia/addons/admin.py @@ -377,8 +377,8 @@ class Media: ) def get_queryset_annotations(self): - # Add annotation for _unlisted_versions_exists/_listed_versions_exists - # to avoid repeating those queries for each add-on in the list. + # Add annotation for _{channel}_versions_exists to avoid repeating + # those queries for each add-on in the list. sub_qs = Version.unfiltered.filter(addon=OuterRef('pk')).values_list('id') annotations = { '_unlisted_versions_exists': Exists( @@ -448,8 +448,8 @@ def total_ratings_link(self, obj): def reviewer_links(self, obj): links = [] - # _has_listed_versions_exists and _has_unlisted_versions_exists are - # provided by annotations made in get_queryset() + # _has_{channel}_versions_exists is provided by annotations + # made in get_queryset() if obj._listed_versions_exists: links.append( ( diff --git a/src/olympia/addons/management/commands/process_addons.py b/src/olympia/addons/management/commands/process_addons.py index b9a90d36dfa5..e911f42dda07 100644 --- a/src/olympia/addons/management/commands/process_addons.py +++ b/src/olympia/addons/management/commands/process_addons.py @@ -171,10 +171,10 @@ def add_arguments(self, parser): action='store', dest='channel', type=str, - choices=('listed', 'unlisted'), + choices=amo.CHANNEL_CHOICES_API.values(), help=( - 'Only select add-ons who have either listed or unlisted ' - 'versions. Add-ons that have both will be returned too.' + 'Only select add-ons who have versions in a specific channel.' + 'Add-ons that have multiple will be returned too.' ), ) diff --git a/src/olympia/addons/tests/test_decorators.py b/src/olympia/addons/tests/test_decorators.py index 30aa7df541af..4f3cc8f4504c 100644 --- a/src/olympia/addons/tests/test_decorators.py +++ b/src/olympia/addons/tests/test_decorators.py @@ -3,6 +3,7 @@ from django import http +from olympia import amo from olympia.addons import decorators as dec from olympia.addons.models import Addon from olympia.amo.tests import TestCase, addon_factory @@ -152,7 +153,7 @@ def setUp(self): ) def test_unlisted_addon(self): """Return a 404 for non authorized access.""" - self.make_addon_unlisted(self.addon) + self.change_channel_for_addon(self.addon, amo.CHANNEL_UNLISTED) with self.assertRaises(http.Http404): self.view(self.request, self.addon.slug) @@ -164,7 +165,7 @@ def test_unlisted_addon(self): ) def test_unlisted_addon_owner(self): """Addon owners have access.""" - self.make_addon_unlisted(self.addon) + self.change_channel_for_addon(self.addon, amo.CHANNEL_UNLISTED) assert self.view(self.request, self.addon.slug) == mock.sentinel.OK request, addon = self.func.call_args[0] assert addon == self.addon @@ -177,7 +178,7 @@ def test_unlisted_addon_owner(self): ) def test_unlisted_addon_unlisted_admin(self): """Unlisted addon reviewers have access.""" - self.make_addon_unlisted(self.addon) + self.change_channel_for_addon(self.addon, amo.CHANNEL_UNLISTED) assert self.view(self.request, self.addon.slug) == mock.sentinel.OK request, addon = self.func.call_args[0] assert addon == self.addon diff --git a/src/olympia/addons/tests/test_models.py b/src/olympia/addons/tests/test_models.py index 6d45d401ad49..4ea4968bf97a 100644 --- a/src/olympia/addons/tests/test_models.py +++ b/src/olympia/addons/tests/test_models.py @@ -260,12 +260,12 @@ def test_managers_not_disabled_by_mozilla(self): assert self.addon not in Addon.unfiltered.not_disabled_by_mozilla() def test_managers_unlisted(self): - self.make_addon_unlisted(self.addon) + self.change_channel_for_addon(self.addon, amo.CHANNEL_UNLISTED) assert self.addon in Addon.objects.all() assert self.addon in Addon.unfiltered.all() def test_managers_unlisted_deleted(self): - self.make_addon_unlisted(self.addon) + self.change_channel_for_addon(self.addon, amo.CHANNEL_UNLISTED) self.addon.update(status=amo.STATUS_DELETED) assert self.addon not in Addon.objects.all() assert self.addon in Addon.unfiltered.all() @@ -296,7 +296,7 @@ def test_filter_for_many_to_many(self): # Addon shouldn't be listed in collection.addons if it's deleted. # Unlisted. - self.make_addon_unlisted(self.addon) + self.change_channel_for_addon(self.addon, amo.CHANNEL_UNLISTED) collection = Collection.objects.get(pk=collection.pk) assert collection.addons.get() == self.addon @@ -306,7 +306,7 @@ def test_filter_for_many_to_many(self): assert collection.addons.count() == 0 # Only deleted. - self.make_addon_listed(self.addon) + self.change_channel_for_addon(self.addon, amo.CHANNEL_LISTED) collection = Collection.objects.get(pk=collection.pk) assert collection.addons.count() == 0 @@ -318,7 +318,7 @@ def test_no_filter_for_relations(self): # Deleted or unlisted, version.addon should still work. # Unlisted. - self.make_addon_unlisted(self.addon) + self.change_channel_for_addon(self.addon, amo.CHANNEL_UNLISTED) version = Version.objects.get(pk=version.pk) # Reload from db. assert version.addon == self.addon @@ -328,7 +328,7 @@ def test_no_filter_for_relations(self): assert version.addon == self.addon # Only deleted. - self.make_addon_listed(self.addon) + self.change_channel_for_addon(self.addon, amo.CHANNEL_LISTED) version = Version.objects.get(pk=version.pk) # Reload from db. assert version.addon == self.addon @@ -1481,7 +1481,7 @@ def test_listed_has_complete_metadata_no_license(self): def test_unlisted_has_complete_metadata(self): addon = Addon.objects.get(id=3615) - self.make_addon_unlisted(addon) + self.change_channel_for_addon(addon, amo.CHANNEL_UNLISTED) assert addon.has_complete_metadata() # Confirm complete already. # Clear everything @@ -2161,7 +2161,7 @@ def get_rvs(channel): assert get_rvs(amo.CHANNEL_LISTED) == [] assert get_rvs(amo.CHANNEL_UNLISTED) == [] - self.make_addon_unlisted(addon) + self.change_channel_for_addon(addon, amo.CHANNEL_UNLISTED) File.objects.filter(version__addon=addon).update(status=amo.STATUS_APPROVED) assert addon.reload().current_version is None assert get_rvs(amo.CHANNEL_LISTED) == [] @@ -2367,7 +2367,7 @@ def test_dont_run_narc_first_author(self, run_narc_on_version_mock): def test_dont_run_narc_no_listed_version(self, run_narc_on_version_mock): self.create_switch('enable-narc', active=True) addon = addon_factory(users=[user_factory()]) - self.make_addon_unlisted(addon) + self.change_channel_for_addon(addon, amo.CHANNEL_UNLISTED) addon.addonuser_set.create(user=user_factory()) assert run_narc_on_version_mock.delay.call_count == 0 @@ -3129,7 +3129,7 @@ def test_find_latest_non_rejected_listed_version_no_deleted(self): assert self.addon.find_latest_non_rejected_listed_version() is None def test_find_latest_non_rejected_listed_version_no_listed(self): - self.make_addon_unlisted(self.addon) + self.change_channel_for_addon(self.addon, amo.CHANNEL_UNLISTED) assert self.addon.find_latest_non_rejected_listed_version() is None diff --git a/src/olympia/addons/tests/test_views.py b/src/olympia/addons/tests/test_views.py index 825391e207cd..c57e508bd3cf 100644 --- a/src/olympia/addons/tests/test_views.py +++ b/src/olympia/addons/tests/test_views.py @@ -319,7 +319,7 @@ def test_disabled_by_admin_no_rights(self): assert data['is_disabled_by_mozilla'] is True def test_get_not_listed(self): - self.make_addon_unlisted(self.addon) + self.change_channel_for_addon(self.addon, amo.CHANNEL_UNLISTED) response = self.client.get(self.url) assert response.status_code == 401 data = json.loads(force_str(response.content)) @@ -341,7 +341,7 @@ def test_get_not_listed(self): def test_get_not_listed_no_rights(self): user = UserProfile.objects.create(username='simpleuser') - self.make_addon_unlisted(self.addon) + self.change_channel_for_addon(self.addon, amo.CHANNEL_UNLISTED) self.client.login_api(user) response = self.client.get(self.url) assert response.status_code == 403 @@ -365,7 +365,7 @@ def test_get_not_listed_no_rights(self): def test_get_unlisted_addons_api_view(self): user = UserProfile.objects.create(username='user') self.grant_permission(user, amo.permissions.ADDONS_API_VIEW) - self.make_addon_unlisted(self.addon) + self.change_channel_for_addon(self.addon, amo.CHANNEL_UNLISTED) self.client.login_api(user) response = self.client.get(self.url) assert response.status_code == 403 @@ -378,7 +378,7 @@ def test_get_unlisted_addons_api_view_unlisted(self): user = UserProfile.objects.create(username='user') self.grant_permission(user, amo.permissions.ADDONS_API_VIEW) self.grant_permission(user, amo.permissions.ADDONS_API_VIEW_UNLISTED) - self.make_addon_unlisted(self.addon) + self.change_channel_for_addon(self.addon, amo.CHANNEL_UNLISTED) self.client.login_api(user) response = self.client.get(self.url) assert response.status_code == 200 @@ -386,7 +386,7 @@ def test_get_unlisted_addons_api_view_unlisted(self): def test_get_not_listed_author(self): user = UserProfile.objects.create(username='author') AddonUser.objects.create(user=user, addon=self.addon) - self.make_addon_unlisted(self.addon) + self.change_channel_for_addon(self.addon, amo.CHANNEL_UNLISTED) self.client.login_api(user) response = self.client.get(self.url) assert response.status_code == 200 @@ -2550,7 +2550,7 @@ def _test_metadata_content_review(self): @patch('olympia.addons.serializers.fetch_translations_from_instance') def test_metadata_content_review_unlisted(self, fetch_mock): - self.make_addon_unlisted(self.addon) + self.change_channel_for_addon(self.addon, amo.CHANNEL_UNLISTED) AddonApprovalsCounter.approve_content_for_addon(addon=self.addon) old_content_review = AddonApprovalsCounter.objects.get( addon=self.addon @@ -2648,7 +2648,7 @@ def test_dont_trigger_narc_on_metadata_change_if_no_listed_versions( self, run_narc_on_version_mock ): self.create_switch('enable-narc', active=True) - self.make_addon_unlisted(self.addon) + self.change_channel_for_addon(self.addon, amo.CHANNEL_UNLISTED) self._test_metadata_content_review() assert run_narc_on_version_mock.delay.call_count == 0 @@ -5008,7 +5008,7 @@ def test_cannot_rollback_from_unapproved_version(self): ] } - self.make_addon_unlisted(self.addon) + self.change_channel_for_addon(self.addon, amo.CHANNEL_UNLISTED) response = self.client.post(self.url, data={'new_version_string': '0.0.0.994'}) assert response.status_code == 400 assert response.data == { @@ -5067,7 +5067,7 @@ def test_clean_new_version_string_for_listed_greater_than_existing(self): } # There are no restrictions on greater/less than for unlisted though. - self.make_addon_unlisted(self.addon) + self.change_channel_for_addon(self.addon, amo.CHANNEL_UNLISTED) with patch( 'olympia.addons.views.duplicate_addon_version_for_rollback.delay' ) as mock_rollback_task: diff --git a/src/olympia/amo/tests/__init__.py b/src/olympia/amo/tests/__init__.py index 14039afe424c..8d8e641bc137 100644 --- a/src/olympia/amo/tests/__init__.py +++ b/src/olympia/amo/tests/__init__.py @@ -592,12 +592,6 @@ def enable_messages_and_session(self, request): request.session.save() return request - def make_addon_unlisted(self, addon): - self.change_channel_for_addon(addon, amo.CHANNEL_UNLISTED) - - def make_addon_listed(self, addon): - self.change_channel_for_addon(addon, amo.CHANNEL_LISTED) - def change_channel_for_addon(self, addon, channel): for version in addon.versions(manager='unfiltered_for_relations').all(): version.update(channel=channel) diff --git a/src/olympia/devhub/tasks.py b/src/olympia/devhub/tasks.py index 4f950faaaf78..8733e4383102 100644 --- a/src/olympia/devhub/tasks.py +++ b/src/olympia/devhub/tasks.py @@ -540,6 +540,7 @@ def track_validation_stats(results): statsd.incr(f'devhub.linter.results.all.{result_kind}') listed_tag = 'listed' if results['metadata']['listed'] else 'unlisted' + # TODO; 'listed' booleans may need to become just the channel # Track listed/unlisted success/fail. statsd.incr(f'devhub.linter.results.{listed_tag}.{result_kind}') diff --git a/src/olympia/devhub/templates/devhub/addons/submit/wizard.html b/src/olympia/devhub/templates/devhub/addons/submit/wizard.html index 084db1c70fab..b08da3fecaae 100644 --- a/src/olympia/devhub/templates/devhub/addons/submit/wizard.html +++ b/src/olympia/devhub/templates/devhub/addons/submit/wizard.html @@ -4,7 +4,7 @@ {{ dev_page_title(_('Theme generate'), addon) }} {% endblock %} -{% set channel_param = 'listed' if channel == amo.CHANNEL_LISTED else 'unlisted' %} +{% set channel_param = amo.CHANNEL_CHOICES_API[channel] %} {% block primary %}

{{ _('Theme generator') }}

diff --git a/src/olympia/devhub/templates/devhub/new-landing/components/my-addons.html b/src/olympia/devhub/templates/devhub/new-landing/components/my-addons.html index a4c7ba21bfc5..6ab546e6a897 100644 --- a/src/olympia/devhub/templates/devhub/new-landing/components/my-addons.html +++ b/src/olympia/devhub/templates/devhub/new-landing/components/my-addons.html @@ -42,7 +42,7 @@

{{ _('My Add-ons') }}

{% if addon.has_listed_versions() %} {% if addon.current_version %}
- {% if addon.has_unlisted_versions() %} + {% if addon.has_multiple_channels() %} AMO @@ -56,12 +56,12 @@

{{ _('My Add-ons') }}

{% endif %} {% endif %} - + {% set latest_unlisted_version=addon.find_latest_version(channel=amo.CHANNEL_UNLISTED) %} {% if latest_unlisted_version %}
- {% if addon.has_listed_versions() %} + {% if addon.has_multiple_channels() %} Self @@ -72,6 +72,23 @@

{{ _('My Add-ons') }}

{% endif %} + + {% set latest_enterprise_version=addon.find_latest_version(channel=amo.CHANNEL_ENTERPRISE) %} + + {% if latest_enterprise_version and waffle.switch('enterprise-channel') %} +
+ {% if addon.has_multiple_channels() %} + Enterprise + {% endif %} + + + {{ latest_enterprise_version.version }} + +
+ {% endif %} + diff --git a/src/olympia/devhub/tests/test_feeds.py b/src/olympia/devhub/tests/test_feeds.py index e531931119dd..355c50c87d4c 100644 --- a/src/olympia/devhub/tests/test_feeds.py +++ b/src/olympia/devhub/tests/test_feeds.py @@ -212,7 +212,7 @@ def test_rss_single(self): def test_rss_unlisted_addon(self): """Unlisted addon logs appear in the rss feed.""" - self.make_addon_unlisted(self.addon) + self.change_channel_for_addon(self.addon, amo.CHANNEL_UNLISTED) self.log_creates(5) # This will give us a new RssKey @@ -238,7 +238,7 @@ def test_xss_addon(self): def test_xss_unlisted_addon(self): self.addon.name = "" self.addon.save() - self.make_addon_unlisted(self.addon) + self.change_channel_for_addon(self.addon, amo.CHANNEL_UNLISTED) self.log_creates(1) doc = self.get_pq() assert len(doc('.item')) == 2 @@ -253,7 +253,7 @@ def test_xss_collections(self): assert '<script>' in str(doc), 'XSS FTL' def test_xss_collections_unlisted_addon(self): - self.make_addon_unlisted(self.addon) + self.change_channel_for_addon(self.addon, amo.CHANNEL_UNLISTED) self.log_collection(1, "") doc = self.get_pq() assert len(doc('.item')) == 2 @@ -268,7 +268,7 @@ def test_xss_tags(self): assert '<script' in str(doc('.item')), 'XSS FTL' def test_xss_tags_unlisted_addon(self): - self.make_addon_unlisted(self.addon) + self.change_channel_for_addon(self.addon, amo.CHANNEL_UNLISTED) self.log_tag(1, "