Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/olympia/abuse/tests/test_actions.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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):
Expand Down
9 changes: 6 additions & 3 deletions src/olympia/abuse/tests/test_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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(
Expand Down
2 changes: 1 addition & 1 deletion src/olympia/abuse/tests/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
4 changes: 2 additions & 2 deletions src/olympia/access/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
4 changes: 2 additions & 2 deletions src/olympia/activity/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -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(
'<a href="{0}">{1}</a>',
reverse('reviewers.review', args=reverse_args),
Expand Down
26 changes: 24 additions & 2 deletions src/olympia/activity/tests/test_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -280,14 +280,25 @@ 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))
entries = ActivityLog.objects.for_addons(addon)
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()
Expand Down Expand Up @@ -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
)
Expand Down
14 changes: 7 additions & 7 deletions src/olympia/activity/tests/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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):
Expand Down Expand Up @@ -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)

Expand Down
8 changes: 4 additions & 4 deletions src/olympia/addons/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down Expand Up @@ -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(
(
Expand Down
6 changes: 3 additions & 3 deletions src/olympia/addons/management/commands/process_addons.py
Original file line number Diff line number Diff line change
Expand Up @@ -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.'
),
)

Expand Down
7 changes: 4 additions & 3 deletions src/olympia/addons/tests/test_decorators.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)

Expand All @@ -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
Expand All @@ -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
20 changes: 10 additions & 10 deletions src/olympia/addons/tests/test_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down Expand Up @@ -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

Expand All @@ -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

Expand All @@ -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

Expand All @@ -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

Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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) == []
Expand Down Expand Up @@ -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

Expand Down Expand Up @@ -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


Expand Down
Loading
Loading