From 08d36e485d7957770a2ea7bf033741af656334ca Mon Sep 17 00:00:00 2001 From: Holger Frey Date: Thu, 23 Apr 2020 10:19:56 +0200 Subject: [PATCH] finished functional tests with vendors --- tests/functional/conftest.py | 9 ++ tests/functional/test_login.py | 11 ++ tests/functional/test_order.py | 21 ++++ tests/functional/test_order_list.py | 11 -- tests/functional/test_vendors.py | 159 ++++++++++++++++++++++++++++ 5 files changed, 200 insertions(+), 11 deletions(-) create mode 100644 tests/functional/test_vendors.py diff --git a/tests/functional/conftest.py b/tests/functional/conftest.py index 7abb981..e6ae9e7 100644 --- a/tests/functional/conftest.py +++ b/tests/functional/conftest.py @@ -187,6 +187,15 @@ def _example_data(_sqlite_repo): ) order_4.add_to_log(log_entry) + _sqlite_repo.session.add(models.Vendor("vwr", "VWR")) + _sqlite_repo.session.add(models.Vendor("vr", "VWR")) + _sqlite_repo.session.add(models.Vendor("vwr.de", "VWR")) + _sqlite_repo.session.add(models.Vendor("carl roth", "Carl Roth")) + _sqlite_repo.session.add(models.Vendor("roth", "Carl Roth")) + _sqlite_repo.session.add(models.Vendor("cr", "Carl Roth")) + _sqlite_repo.session.add(models.Vendor("merck", "Merck")) + _sqlite_repo.session.add(models.Vendor("merk", "Merck")) + _sqlite_repo.session.flush() diff --git a/tests/functional/test_login.py b/tests/functional/test_login.py index c87bfce..75eaa0f 100644 --- a/tests/functional/test_login.py +++ b/tests/functional/test_login.py @@ -9,6 +9,17 @@ def test_login_ok(testapp): assert "My Orders" in response +def test_login_wrong_username(testapp): + response = testapp.get("/", status=302).follow(status=200) + assert "Please Log In" in response + + form = response.form + form["username"] = "XXAdmin" + form["password"] = "jane" + response = form.submit("Log In") + assert "Credentials are invalid" in response + + def test_login_wrong_password(testapp): response = testapp.get("/", status=302).follow(status=200) assert "Please Log In" in response diff --git a/tests/functional/test_order.py b/tests/functional/test_order.py index 8f380ea..996e191 100644 --- a/tests/functional/test_order.py +++ b/tests/functional/test_order.py @@ -286,6 +286,27 @@ def test_edit_order_cancel(testapp, login_as, contains): ) +def test_edit_order_purchaser_vs_user(testapp, login_as, contains): + response = testapp.get("/", status=302).follow(status=200) + assert "Please Log In" in response + + response = login_as("TestAdmin", "jane").follow(status=200) + assert "My Orders" in response + + response = testapp.get("/orders/4/edit/") + soup = response.html + status = soup.find("select", {"id": "deformField3"}) + assert not status.has_attr("readonly") + + response = login_as("TestUser", "jon").follow(status=200) + assert "My Orders" in response + + response = testapp.get("/orders/4/edit/") + soup = response.html + status = soup.find("input", {"id": "deformField3"}) + assert status.has_attr("readonly") + + def test_delete_order_ok(testapp, login_as, contains): response = testapp.get("/", status=302).follow(status=200) assert "Please Log In" in response diff --git a/tests/functional/test_order_list.py b/tests/functional/test_order_list.py index a6b610f..0efec2e 100644 --- a/tests/functional/test_order_list.py +++ b/tests/functional/test_order_list.py @@ -249,14 +249,3 @@ def test_multi_delete_cancel(testapp, login_as, contains): assert contains( response, Eppis=True, Ethanol=True, NaCl=True, Spritzen=True ) - - -def test_check_vendor_name(testapp, login_as, contains): - response = testapp.get("/", status=302).follow(status=200) - assert "Please Log In" in response - - response = login_as("TestAdmin", "jane").follow(status=200) - assert "My Orders" in response - - response = testapp.post("/orders/vendor", {"vendor": "test"}, xhr=True) - assert '{"name": "test", "found": false}' in response diff --git a/tests/functional/test_vendors.py b/tests/functional/test_vendors.py new file mode 100644 index 0000000..37c0f9d --- /dev/null +++ b/tests/functional/test_vendors.py @@ -0,0 +1,159 @@ +import pytest + + +@pytest.mark.parametrize( + "vendor,returned,found", + [ + ("vwr", "VWR", True), + ("vr", "VWR", True), + ("https://www.vwr.de/foo?q=x", "VWR", True), + ("carl roth", "Carl Roth", True), + ("roth", "Carl Roth", True), + ("cr", "Carl Roth", True), + ("merck", "Merck", True), + ("merk", "Merck", True), + ("Neue Firma", "Neue Firma", False), + ], +) +def test_check_vendor_name(testapp, login_as, vendor, returned, found): + response = testapp.get("/", status=302).follow(status=200) + assert "Please Log In" in response + + response = login_as("TestAdmin", "jane").follow(status=200) + assert "My Orders" in response + + response = testapp.post("/orders/vendor", {"vendor": vendor}, xhr=True) + assert response.json == {"name": returned, "found": found} + + +def test_vendor_list(testapp, login_as): + response = testapp.get("/", status=302).follow(status=200) + assert "Please Log In" in response + + response = login_as("TestAdmin", "jane").follow(status=200) + assert "My Orders" in response + + response = testapp.get("/vendors") + assert "Vendor Autocorrect List" in response + assert "VWR" in response + assert "Carl Roth" in response + assert "Merck" in response + + +def test_vendor_edit_ok(testapp, login_as): + response = testapp.get("/", status=302).follow(status=200) + assert "Please Log In" in response + + response = login_as("TestAdmin", "jane").follow(status=200) + assert "My Orders" in response + + response = testapp.get("/vendors") + assert "Vendor Autocorrect List" in response + assert "VWR" in response + assert "Carl Roth" in response + assert "Merck" in response + + response = testapp.get("/vendors/VWR") + form = response.forms[1] + form["vendor"] = "Merck" + form["terms"] = "\n".join(["vwr", "de.vwr.com"]) + form.submit("change") + + response = testapp.get("/vendors") + assert "Vendor Autocorrect List" in response + assert "The autocorrect for" in response + assert "VWR" not in response + assert "Carl Roth" in response + assert "Merck" in response + + response = testapp.get("/vendors/Merck") + form = response.forms[1] + assert form["vendor"].value == "Merck" + terms = form["terms"].value.strip().split() + assert set(terms) == {"vwr", "de.vwr.com", "merck", "merk"} + + response = testapp.post("/orders/vendor", {"vendor": "vwr"}, xhr=True) + assert response.json == {"name": "Merck", "found": True} + + response = testapp.post("/orders/vendor", {"vendor": "vr"}, xhr=True) + assert response.json == {"name": "vr", "found": False} + + +def test_vendor_edit_cancel(testapp, login_as): + response = testapp.get("/", status=302).follow(status=200) + assert "Please Log In" in response + + response = login_as("TestAdmin", "jane").follow(status=200) + assert "My Orders" in response + + response = testapp.get("/vendors") + assert "Vendor Autocorrect List" in response + assert "VWR" in response + assert "Carl Roth" in response + assert "Merck" in response + + response = testapp.get("/vendors/VWR") + form = response.forms[1] + form["vendor"] = "Merck" + form["terms"] = "\n".join(["vwr", "de.vwr.com"]) + form.submit("cancel") + + response = testapp.get("/vendors") + assert "Vendor Autocorrect List" in response + assert "The autocorrect for" not in response + assert "VWR" in response + assert "Carl Roth" in response + assert "Merck" in response + + response = testapp.get("/vendors/Merck") + form = response.forms[1] + assert form["vendor"].value == "Merck" + terms = form["terms"].value.strip().split() + assert set(terms) == {"merck", "merk"} + + +def test_vendor_edit_form_error(testapp, login_as): + response = testapp.get("/", status=302).follow(status=200) + assert "Please Log In" in response + + response = login_as("TestAdmin", "jane").follow(status=200) + assert "My Orders" in response + + response = testapp.get("/vendors") + assert "Vendor Autocorrect List" in response + assert "VWR" in response + assert "Carl Roth" in response + assert "Merck" in response + + response = testapp.get("/vendors/VWR") + assert "is-invalid" not in response + + form = response.forms[1] + form["vendor"] = "" + form["terms"] = "" + response = form.submit("change") + assert "is-invalid" in response + + response = testapp.get("/vendors") + assert "Vendor Autocorrect List" in response + assert "The autocorrect for" not in response + assert "VWR" in response + assert "Carl Roth" in response + assert "Merck" in response + + +def test_vendor_edit_unknonw_vendor(testapp, login_as): + response = testapp.get("/", status=302).follow(status=200) + assert "Please Log In" in response + + response = login_as("TestAdmin", "jane").follow(status=200) + assert "My Orders" in response + + response = testapp.get("/vendors") + assert "Vendor Autocorrect List" in response + assert "VWR" in response + assert "Carl Roth" in response + assert "Merck" in response + + response = testapp.get("/vendors/unknown").follow() + assert "My Orders" in response