diff --git a/doajtest/unit/test_task_preservation.py b/doajtest/unit/test_task_preservation.py index d8d62d87e..faf3e15a0 100644 --- a/doajtest/unit/test_task_preservation.py +++ b/doajtest/unit/test_task_preservation.py @@ -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): @@ -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) diff --git a/portality/ui/messages.py b/portality/ui/messages.py index 1e14fba93..e7ba80ef7 100644 --- a/portality/ui/messages.py +++ b/portality/ui/messages.py @@ -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): diff --git a/portality/view/publisher.py b/portality/view/publisher.py index 81388e583..43ef3d7d9 100644 --- a/portality/view/publisher.py +++ b/portality/view/publisher.py @@ -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()