Skip to content

Commit

Permalink
Merge pull request #2374 from DOAJ/feature/3860_preservation_error_500
Browse files Browse the repository at this point in the history
Handle file error in preservation upload
  • Loading branch information
Steven-Eardley committed Apr 16, 2024
2 parents 44b620c + 4cce270 commit 4653559
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 4 deletions.
16 changes: 15 additions & 1 deletion doajtest/unit/test_task_preservation.py
Expand Up @@ -3,13 +3,15 @@
import requests
from io import BytesIO
from unittest.mock import patch
from doajtest.helpers import DoajTestCase
from doajtest.helpers import DoajTestCase, login
from doajtest.mocks.preservation import PreservationMock
from portality.tasks import preservation
from portality.core import app
from portality.lib import dates
from werkzeug.datastructures import FileStorage
from portality.models.article import Article
from portality.models import Account
from portality.ui.messages import Messages


def mock_pull_by_key(key, value):
Expand Down Expand Up @@ -232,3 +234,15 @@ def test_get_article_info(self):
assert issn == "2051-5960"
assert article_id == "00003741594643f4996e2555a01e03c7"
assert metadata_json["bibjson"]["identifier"][0]["id"] == "10.1186/s40478-018-0619-9"

def test_empty_file(self):
admin_account = Account.make_account(email="admin@test.com", username="admin", name="Admin", roles=["admin"])
admin_account.set_password('password123')
admin_account.save()

with self.app_test.test_client() as t_client:
login(t_client, "admin", "password123")
response = t_client.post('/publisher/preservation', data={})
with t_client.session_transaction() as session:
flash_messages = session.get('_flashes')
assert any(msg[1] == Messages.PRESERVATION_NO_FILE for msg in flash_messages)
2 changes: 2 additions & 0 deletions portality/ui/messages.py
Expand Up @@ -137,6 +137,8 @@ class Messages(object):
JOURNAL_CSV_VALIDATE__CANNOT_MAKE_UR = "We couldn't create an update for this journal because: {reason}"
JOURNAL_CSV_VALIDATE__INVALID_DATA = "We couldn't understand the information in '{question}'"

PRESERVATION_NO_FILE = "No file provided for upload"

@classmethod
def flash(cls, tup):
if isinstance(tup, tuple):
Expand Down
10 changes: 7 additions & 3 deletions portality/view/publisher.py
Expand Up @@ -263,25 +263,29 @@ def preservation():
if request.method == "POST":

f = request.files.get("file")
app.logger.info(f"Preservation file {f.filename}")

resp = make_response(redirect(url_for("publisher.preservation")))

# create model object to store status details
preservation_model = models.PreservationState()
preservation_model.set_id()
preservation_model.initiated(current_user.id, f.filename)


previous.insert(0, preservation_model)

app.logger.debug(f"Preservation model created with id {preservation_model.id}")

if f is None or f.filename == "":
error_str = "No file provided to upload"
error_str = Messages.PRESERVATION_NO_FILE
flash(error_str, "error")
preservation_model.initiated(current_user.id, "none")
preservation_model.failed(error_str)
preservation_model.save()
return resp

app.logger.info(f"Preservation file {f.filename}")

preservation_model.initiated(current_user.id, f.filename)
preservation_model.validated()
preservation_model.save()

Expand Down

0 comments on commit 4653559

Please sign in to comment.