aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--qc_app/parse.py9
-rw-r--r--tests/qc_app/test_parse.py51
2 files changed, 56 insertions, 4 deletions
diff --git a/qc_app/parse.py b/qc_app/parse.py
index e72a163..fa3c8cd 100644
--- a/qc_app/parse.py
+++ b/qc_app/parse.py
@@ -30,10 +30,11 @@ def parse():
flash("Invalid filetype provided", "alert-error")
errors = True
- filepath = os.path.join(app.config["UPLOAD_FOLDER"], filename)
- if not os.path.exists(filepath):
- flash("Selected file does not exist (any longer)", "alert-danger")
- errors = True
+ if filename:
+ filepath = os.path.join(app.config["UPLOAD_FOLDER"], filename)
+ if not os.path.exists(filepath):
+ flash("Selected file does not exist (any longer)", "alert-error")
+ errors = True
if errors:
return redirect(url_for("entry.upload_file"))
diff --git a/tests/qc_app/test_parse.py b/tests/qc_app/test_parse.py
index 0a62df4..b7bf938 100644
--- a/tests/qc_app/test_parse.py
+++ b/tests/qc_app/test_parse.py
@@ -1,6 +1,8 @@
"""Test the 'parse' module in the web-ui"""
import redis
+import pytest
+
from qc_app.jobs import job
from tests.conftest import uploadable_file_object
@@ -40,3 +42,52 @@ def test_parse_with_existing_uploaded_file(client, redis_server, monkeypatch):
"python3", "-m", "scripts.worker", filetype,
f"{client.application.config['UPLOAD_FOLDER']}/{filename}", redis_server,
module_uuid4()])
+
+@pytest.mark.parametrize(
+ "filename,uri,error_msgs",
+ (("non_existent.file",
+ "/parse/parse?filename=non_existent.file&filename=average",
+ [(b'<span class="alert alert-error">Selected file does not exist '
+ b'(any longer)</span>')]),
+ ("non_existent.file",
+ "/parse/parse?filename=non_existent.file&filename=standard-error",
+ [(b'<span class="alert alert-error">Selected file does not exist '
+ b'(any longer)</span>')]),
+ ("non_existent.file",
+ "/parse/parse?filename=non_existent.file&filename=percival",
+ [(b'<span class="alert alert-error">Selected file does not exist '
+ b'(any longer)</span>'),
+ b'<span class="alert alert-error">Invalid filetype provided</span>']),
+ ("no_data_errors.tsv",
+ "/parse/parse?filename=no_data_errors.tsv&filename=percival",
+ [b'<span class="alert alert-error">Invalid filetype provided</span>']),
+ ("no_data_errors.tsv",
+ "/parse/parse?filename=no_data_errors.tsv",
+ [b'<span class="alert alert-error">No filetype provided</span>']),
+ (None, "/parse/parse",
+ [b'<span class="alert alert-error">No file provided</span>',
+ b'<span class="alert alert-error">No filetype provided</span>'])))
+def test_parse_with_non_uploaded_file(client, filename, uri, error_msgs):
+ """
+ GIVEN: 1. A flask application testing client
+ 2. A valid filetype
+ 3. A filename to a file that has not been uploaded yet
+ WHEN: The parsing triggered
+ THEN: Ensure that the appropriate errors are displayed
+ """
+ ## Conditionally upload files
+ if filename and filename != "non_existent.file":
+ client.post(
+ "/", data={
+ "filetype": "average",
+ "qc_text_file": uploadable_file_object(filename)})
+ # Trigger
+ resp = client.get(uri,follow_redirects=True)
+ ## Check that there was exactly one redirect
+ assert len(resp.history) == 1 and resp.history[0].status_code == 302
+ ## Check that redirect is to home page and is successful
+ assert resp.request.path == "/"
+ assert resp.status_code == 200
+ ## Check that error(s) are displayed
+ for error_msg in error_msgs:
+ assert error_msg in resp.data