Skip to content

Commit

Permalink
fix error when ingesting cancelled event with assignments (superdesk#…
Browse files Browse the repository at this point in the history
…2093)

it was checking session data which failed during ingest

STTNHUB-361
  • Loading branch information
petrjasek committed Oct 2, 2024
1 parent 8341653 commit 0e7cee0
Show file tree
Hide file tree
Showing 7 changed files with 60 additions and 21 deletions.
2 changes: 1 addition & 1 deletion server/planning/assignments/assignments.py
Original file line number Diff line number Diff line change
Expand Up @@ -1143,7 +1143,7 @@ def on_delete(self, doc):
"""
Validate that we have a lock on the Assignment and it's associated Planning item
"""
if doc.get("_to_delete") is True:
if doc.get("_to_delete") is True or not request:
# Already marked for delete - no validation needed (could be the background job)
return

Expand Down
2 changes: 1 addition & 1 deletion server/planning/commands/populate_planning_types_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
import os
import json

from superdesk.tests import TestCase
from planning.tests import TestCase
from superdesk import get_resource_service
from apps.prepopulate.app_populate import AppPopulateCommand

Expand Down
35 changes: 18 additions & 17 deletions server/planning/planning/planning.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
import logging
from datetime import datetime

from flask import json, current_app as app
from flask import json, current_app as app, request
from eve.methods.common import resolve_document_etag

import superdesk
Expand Down Expand Up @@ -1260,23 +1260,24 @@ def delete_assignments_for_coverages(self, coverages, notify=True):
if original_assigment:
assignment_service.system_update(ObjectId(assign_id), {"_to_delete": True}, original_assigment)

session_id = get_auth().get("_id")
user_id = get_user().get(config.ID_FIELD)
if len(deleted_assignments) > 0:
push_notification(
"assignments:delete",
items=deleted_assignments,
session=session_id,
user=user_id,
)
if request:
session_id = get_auth().get("_id")
user_id = get_user().get(config.ID_FIELD)
if len(deleted_assignments) > 0:
push_notification(
"assignments:delete",
items=deleted_assignments,
session=session_id,
user=user_id,
)

if len(failed_assignments) > 0 and notify:
push_notification(
"assignments:delete:fail",
items=failed_assignments,
session=session_id,
user=user_id,
)
if len(failed_assignments) > 0 and notify:
push_notification(
"assignments:delete:fail",
items=failed_assignments,
session=session_id,
user=user_id,
)

def get_expired_items(self, expiry_datetime, spiked_planning_only=False):
"""Get the expired items
Expand Down
2 changes: 2 additions & 0 deletions server/planning/tests/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@


class TestCase(_TestCase):
test_context = None # avoid using test_request_context

def setUp(self):
config = {"INSTALLED_APPS": ["planning"]}
update_config(config)
Expand Down
36 changes: 36 additions & 0 deletions server/planning/tests/ingest_cancelled_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
from flask import request
from planning.tests import TestCase
from planning.common import update_post_item


class IngestCancelledTestCase(TestCase):
def test_ingest_cancelled_event(self):
assert not request, request

assignments = [
{"planning_item": "p1", "coverage_item": "c1"},
]

self.app.data.insert("assignments", assignments)
planning = {
"_id": "p1",
"name": "planning item",
"type": "planning",
"coverages": [
{
"coverage_id": "c1",
"planning": {},
"assigned_to": {
"assignment_id": assignments[0]["_id"],
},
},
],
}

self.app.data.insert("planning", [planning])

with self.app.app_context():
update_post_item({"pubstatus": "cancelled"}, planning)

cursor, count = self.app.data.find("assignments", req=None, lookup={})
assert count == 0
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
from unittest import mock
import hmac

from superdesk.tests import TestCase
from planning.tests import TestCase
from superdesk.publish import TransmitterFileEntry
from superdesk.publish.transmitters.ftp import FTPPublishService
from superdesk.publish.transmitters.http_push import HTTPPushService
Expand Down
2 changes: 1 addition & 1 deletion server/planning/tests/output_formatters/json_event_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import tempfile

from unittest import mock
from superdesk.tests import TestCase
from planning.tests import TestCase
from planning.output_formatters.json_event import JsonEventFormatter
from planning.events import init_app
from eve.methods.common import store_media_files
Expand Down

0 comments on commit 0e7cee0

Please sign in to comment.