diff options
-rw-r--r-- | qc_app/parse.py | 9 | ||||
-rw-r--r-- | tests/qc_app/test_parse.py | 51 |
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 |