Skip to content
Merged
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
7 changes: 5 additions & 2 deletions src/olympia/abuse/cinder.py
Original file line number Diff line number Diff line change
Expand Up @@ -511,7 +511,7 @@ def get_versions(self):
return qs

def flag_for_human_review(
self, *, versions, appeal=False, forwarded=False, second_level=False
self, *, versions, appeal=False, forwarded=False, second_level=False, notes=None
):
"""Flag an appropriate version for needs human review so it appears in reviewers
manual revew queue.
Expand Down Expand Up @@ -593,7 +593,10 @@ def flag_for_human_review(
activity.log_create(
amo.LOG.NEEDS_HUMAN_REVIEW_CINDER,
*versions,
details={'comments': nhr.get_reason_display()},
details={
'comments': nhr.get_reason_display(),
**({'reason': notes} if notes else {}),
},
user=core.get_user() or get_task_user(),
)

Expand Down
19 changes: 5 additions & 14 deletions src/olympia/abuse/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -1386,36 +1386,27 @@ def execute_action(self, *, release_hold=False):
def requeue_held_action(self, *, user, notes):
# requeuing only works for addons
assert self.addon is not None
if self.cinder_job:
if self.cinder_job and not self.cinder_job.resolvable_in_reviewer_tools:
# if the decision is part of a job, claim it for the reviewer tools
job = self.cinder_job
job.update(resolvable_in_reviewer_tools=True)
else:
# otherwise we create a fake job, so it shows up in the reviewer tools
job = CinderJob.objects.create(
target_addon=self.addon,
resolvable_in_reviewer_tools=True,
job_id=None,
)
# and link the current decision to that job, so the override works
self.update(cinder_job=job)
self.cinder_job.update(resolvable_in_reviewer_tools=True)
ContentDecision.objects.create(
addon=self.addon,
action=DECISION_ACTIONS.AMO_REQUEUE,
reviewer_user=user,
override_of=self,
action_date=datetime.now(),
private_notes=notes,
cinder_job=job,
cinder_job=self.cinder_job,
)

entity_helper = CinderJob.get_entity_helper(
self.target, resolved_in_reviewer_tools=True
)
entity_helper.flag_for_human_review(
versions=self.target_versions.all(),
appeal=job.is_appeal,
appeal=self.cinder_job.is_appeal if self.cinder_job else False,
second_level=True,
notes=notes,
)

def send_notifications(self, *, notify_owners=True):
Expand Down
12 changes: 6 additions & 6 deletions src/olympia/abuse/tests/test_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -3855,9 +3855,11 @@ def _check_requeue_decision(self, requeue, job, decision, user):
assert requeue.private_notes == 'go!'
assert requeue.reviewer_user == user
assert requeue.cinder_job == job
assert NeedsHumanReview.objects.filter(
nhr = NeedsHumanReview.objects.get(
reason=NeedsHumanReview.REASONS.SECOND_LEVEL_REQUEUE
).exists()
)
log = ActivityLog.objects.get(action=amo.LOG.NEEDS_HUMAN_REVIEW_CINDER.id)
assert log.details == {'comments': nhr.get_reason_display(), 'reason': 'go!'}

def test_requeue_held_action_no_job(self):
addon = addon_factory()
Expand All @@ -3871,10 +3873,8 @@ def test_requeue_held_action_no_job(self):

decision.requeue_held_action(user=user, notes='go!')

new_job = decision.reload().cinder_job
assert new_job.resolvable_in_reviewer_tools is True
assert new_job.target_addon == addon
self._check_requeue_decision(new_job.final_decision, new_job, decision, user)
assert decision.reload().cinder_job is None
self._check_requeue_decision(decision.overridden_by, None, decision, user)

def test_requeue_held_action_existing_job(self):
addon = addon_factory()
Expand Down
7 changes: 2 additions & 5 deletions src/olympia/reviewers/tests/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -7751,11 +7751,8 @@ def test_cancel_addon_no_job(self):

assert response.status_code == 302
assert addon.reload().status == amo.STATUS_APPROVED
new_job = self.decision.reload().cinder_job
assert new_job.resolvable_in_reviewer_tools
new_decision = new_job.final_decision
assert self.decision.overridden_by == new_decision
assert new_decision.action == DECISION_ACTIONS.AMO_REQUEUE
assert self.decision.reload().cinder_job is None
assert self.decision.overridden_by.action == DECISION_ACTIONS.AMO_REQUEUE
assert self.decision.reload().action_date is None
assert NeedsHumanReview.objects.filter(
reason=NeedsHumanReview.REASONS.SECOND_LEVEL_REQUEUE,
Expand Down
Loading