From 39525d51f8a637b5ef4f218bf51013fb3b5c3bfc Mon Sep 17 00:00:00 2001 From: Holger Frey Date: Wed, 22 Apr 2020 18:58:37 +0200 Subject: [PATCH] added functests orders, happy path only --- ordr3/static/script.js | 28 ++-- ordr3/templates/layout_full.jinja2 | 81 ++++++------ ordr3/templates/orders/batch_delete.jinja2 | 2 +- ordr3/templates/orders/batch_edit.jinja2 | 2 +- ordr3/views/orders.py | 3 +- tests/functional/conftest.py | 35 ++++- tests/functional/test_a_order.py | 141 +++++++++++++++++++++ tests/functional/test_order_list.py | 125 ++++++++++++++++++ 8 files changed, 358 insertions(+), 59 deletions(-) create mode 100644 tests/functional/test_a_order.py create mode 100644 tests/functional/test_order_list.py diff --git a/ordr3/static/script.js b/ordr3/static/script.js index fab61ca..654522a 100644 --- a/ordr3/static/script.js +++ b/ordr3/static/script.js @@ -33,12 +33,12 @@ var load_more = function(target) { } var update_price = function() { - // update total price in order form - var target = $(".item-unit_price .item-amount input"); - var price = target.val().replace(/,/g, "") - var amount = $(".item-quantity input").val() - var total = price * amount - $(".item-total_price .item-amount input").val(total.toFixed(2)) + // update total price in order form + var target = $(".item-unit_price .item-amount input"); + var price = target.val().replace(/,/g, "") + var amount = $(".item-quantity input").val() + var total = price * amount + $(".item-total_price .item-amount input").val(total.toFixed(2)) } $(function() { @@ -63,6 +63,14 @@ $(function() { } }); + $(".o3-reg-username-source").on("keyup", function(event) { + // automatic username creation + var first_name = $(".o3-reg-firstname").val(); + var last_name = $(".o3-reg-lastname").val(); + var user_name = capitalize(first_name) + capitalize(last_name) + $(".o3-reg-username").val(user_name); + }); + $(".o3-details").on("click", function(event){ // handle detail visibility var target = $(event.delegateTarget) @@ -77,14 +85,6 @@ $(function() { } }); - $(".o3-reg-username-source").on("keyup", function(event) { - // automatic username creation - var first_name = $(".o3-reg-firstname").val(); - var last_name = $(".o3-reg-lastname").val(); - var user_name = capitalize(first_name) + capitalize(last_name) - $(".o3-reg-username").val(user_name); - }); - $("#o3-selectall").on("click", function(event) { // select all checkboxes var target = $(event.delegateTarget); diff --git a/ordr3/templates/layout_full.jinja2 b/ordr3/templates/layout_full.jinja2 index 333b04a..82a2a53 100644 --- a/ordr3/templates/layout_full.jinja2 +++ b/ordr3/templates/layout_full.jinja2 @@ -23,50 +23,50 @@
diff --git a/ordr3/templates/orders/batch_delete.jinja2 b/ordr3/templates/orders/batch_delete.jinja2 index 1383f7a..5a6b4f8 100644 --- a/ordr3/templates/orders/batch_delete.jinja2 +++ b/ordr3/templates/orders/batch_delete.jinja2 @@ -46,7 +46,7 @@ {{ order.vendor }} - {{ "%.2f"|format(order.total_price)|replace(".", ",") }} {{ order.currency }} + {{ "%.2f"|format(order.total_price)|replace(".", ",") }} {{ order.currency }} {{ order.created_by }} diff --git a/ordr3/templates/orders/batch_edit.jinja2 b/ordr3/templates/orders/batch_edit.jinja2 index 26b2a3b..a67f259 100644 --- a/ordr3/templates/orders/batch_edit.jinja2 +++ b/ordr3/templates/orders/batch_edit.jinja2 @@ -43,7 +43,7 @@ {{ order.vendor }} - {{ "%.2f"|format(order.total_price)|replace(".", ",") }} {{ order.currency }} + {{ "%.2f"|format(order.total_price)|replace(".", ",") }} {{ order.currency }} {{ order.created_by }} diff --git a/ordr3/views/orders.py b/ordr3/views/orders.py index 3cf9a13..4cb66e4 100644 --- a/ordr3/views/orders.py +++ b/ordr3/views/orders.py @@ -151,7 +151,8 @@ def order_list(context, request): renderer="ordr3:templates/orders/batch_delete.jinja2", ) def batch_delete(context, request): - orders = get_multiple_orders(context, request) + subnmitted_orders = get_multiple_orders(context, request) + orders = [o for o in subnmitted_orders if not o.in_process] if not orders: return HTTPFound(request.resource_url(context)) diff --git a/tests/functional/conftest.py b/tests/functional/conftest.py index 632b4d1..f8e600d 100644 --- a/tests/functional/conftest.py +++ b/tests/functional/conftest.py @@ -147,16 +147,47 @@ def _example_data(_sqlite_repo): 3, "USD", "Toto", - "gefunden bei http://www.example.com/foo", + "auf der Seite http://www.example.com/foo gefunden", ) _sqlite_repo.add_order(order_3) log_entry = models.LogEntry( order_3.id, - models.OrderStatus.COMPLETED, + models.OrderStatus.OPEN, user.username, today - timedelta(days=3), ) order_3.add_to_log(log_entry) + log_entry = models.LogEntry( + order_3.id, + models.OrderStatus.COMPLETED, + admin.username, + today - timedelta(days=2), + ) + order_3.add_to_log(log_entry) + + order_4 = models.OrderItem( + 4, + "Spritzen", + "456", + "Sigma Aldrich", + models.OrderCategory.BIOLAB, + "4 St", + 4.5, + 4, + "EUR", + "", + "", + ) + _sqlite_repo.add_order(order_4) + log_entry = models.LogEntry( + order_4.id, + models.OrderStatus.OPEN, + user.username, + today - timedelta(days=4), + ) + order_4.add_to_log(log_entry) + + _sqlite_repo.session.flush() @pytest.fixture diff --git a/tests/functional/test_a_order.py b/tests/functional/test_a_order.py new file mode 100644 index 0000000..b060095 --- /dev/null +++ b/tests/functional/test_a_order.py @@ -0,0 +1,141 @@ +def test_add_order(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 + assert "Eppis" in response + assert "Ethanol" in response + assert "NaCl" in response + assert "Spritzen" in response + assert "Aceton" not in response + + response = testapp.get("/orders/add/") + form = response.forms[1] + form["cas_description"] = "Aceton" + form["category"] = "SOLVENT" + form["catalog_nr"] = "567" + form["vendor"] = "Carl Roth" + form["package_size"] = "25 l" + form["quantity"] = "5" + form["account"] = "DFG" + form["comment"] = "Ein Kommentar!" + form.fields["amount"][0].value = "5.67" + form.fields["amount"][1].value = "5.67" + form.fields["currency"][0].value = "USD" + form.fields["currency"][1].value = "USD" + form.submit("Place_Order") + + response = testapp.get("/orders/") + assert "My Orders" in response + assert "Eppis" in response + assert "Ethanol" in response + assert "NaCl" in response + assert "Spritzen" in response + assert "Aceton" in response + + response = testapp.get("/orders/5/view/") + assert "Aceton" in response + assert "Solvent" in response + assert "567" in response + assert "Carl Roth" in response + assert "25 l" in response + assert "DFG" in response + assert "Ein Kommentar!" in response + assert "5.67" in response + assert "28.35" in response + + +def test_view_order(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("/orders/3/view/") + assert "Eppis" in response + assert "345" in response + assert "VWR" in response + assert "Biolab" in response + assert "3 St" in response + assert "34.50" in response + assert "3" in response + assert "USD" in response + assert "103.50" in response + assert "Toto" in response + assert "auf der Seite" in response + assert 'href="http://www.example.com/foo"' in response + assert ">http://www.example.com/foo" in response + assert "open" in response + assert "completed" in response + assert "TestAdmin" in response + assert "TestUser" in response + + +def test_edit_order_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("/orders/3/edit/") + form = response.forms[1] + form["cas_description"] = "Aceton" + form["category"] = "SOLVENT" + form["catalog_nr"] = "567" + form["vendor"] = "Carl Roth" + form["package_size"] = "25 l" + form["quantity"] = "5" + form["account"] = "DFG" + form["comment"] = "Ein Kommentar!" + form.fields["amount"][0].value = "5.67" + form.fields["amount"][1].value = "5.67" + form.fields["currency"][0].value = "USD" + form.fields["currency"][1].value = "USD" + form.submit("Save_Changes") + + response = testapp.get("/orders/") + assert "My Orders" in response + assert "Eppis" not in response + assert "Ethanol" in response + assert "NaCl" in response + assert "Spritzen" in response + assert "Aceton" in response + + response = testapp.get("/orders/3/view/") + assert "Aceton" in response + assert "Solvent" in response + assert "567" in response + assert "Carl Roth" in response + assert "25 l" in response + assert "DFG" in response + assert "Ein Kommentar!" in response + assert "5.67" in response + assert "28.35" in response + + +def test_delete_order(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 + assert "Eppis" in response + assert "Ethanol" in response + assert "NaCl" in response + assert "/orders/4/edit" in response + + response = testapp.get("/orders/4/delete") + form = response.forms[1] + form["confirmation"].checked = True + form.submit("delete") + + response = testapp.get("/orders/") + assert "has been deleted" in response + assert "My Orders" in response + assert "Eppis" in response + assert "Ethanol" in response + assert "NaCl" in response + assert "/orders/4/edit" not in response diff --git a/tests/functional/test_order_list.py b/tests/functional/test_order_list.py new file mode 100644 index 0000000..fcfad85 --- /dev/null +++ b/tests/functional/test_order_list.py @@ -0,0 +1,125 @@ +def test_order_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 + assert "Eppis" in response + assert "Ethanol" in response + assert "NaCl" in response + assert "Spritzen" in response + + response = testapp.get("/orders?status=completed", status=200) + assert "Eppis" in response + assert "Ethanol" in response + assert "NaCl" not in response + assert "Spritzen" not in response + + response = testapp.get("/orders?user=TestAdmin", status=200) + assert "Eppis" not in response + assert "Ethanol" in response + assert "NaCl" in response + assert "Spritzen" not in response + + response = testapp.get( + "/orders?user=TestAdmin&status=completed", status=200 + ) + assert "Eppis" not in response + assert "Ethanol" in response + assert "NaCl" not in response + assert "Spritzen" not in response + + response = testapp.get( + "/orders?user=TestAdmin&status=approval", status=200 + ) + assert "Eppis" not in response + assert "Ethanol" not in response + assert "NaCl" in response + assert "Spritzen" not in response + + response = testapp.get("/orders?user=-purchaser-", status=200) + assert "Eppis" in response + assert "Ethanol" in response + assert "NaCl" in response + assert "Spritzen" not in response + + response = testapp.get("/orders?search=vwr", status=200) + assert "Eppis" in response + assert "Ethanol" in response + assert "NaCl" not in response + assert "Spritzen" not in response + + +def test_multi_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 + + form = response.forms[1] + form.action = "/orders/batch-edit/" + select_checkboxes = form.fields["selection"] + select_checkboxes[0].checked = True + select_checkboxes[1].checked = True + + response = form.submit() + assert "Eppis" not in response + assert "Ethanol" in response + assert "NaCl" in response + assert "Spritzen" not in response + + form = response.forms[1] + form["status-1"].value = "HOLD" + form["status-2"].value = "HOLD" + form.submit("change") + + response = testapp.get("/orders?status=completed", status=200) + assert "orders have been updated." in response + assert "Eppis" in response + assert "Ethanol" not in response + assert "NaCl" not in response + assert "Spritzen" not in response + + response = testapp.get("/orders?status=open", status=200) + assert "Eppis" not in response + assert "Ethanol" not in response + assert "NaCl" not in response + assert "Spritzen" in response + + response = testapp.get("/orders?status=hold", status=200) + assert "Eppis" not in response + assert "Ethanol" in response + assert "NaCl" in response + assert "Spritzen" not in response + + +def test_multi_delete_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 + + form = response.forms[1] + form.action = "/orders/batch-delete/" + select_checkboxes = form.fields["selection"] + select_checkboxes[0].checked = True + select_checkboxes[3].checked = True + + response = form.submit() + assert "Eppis" not in response + assert "Ethanol" not in response + assert "NaCl" not in response + assert "Spritzen" in response + + form = response.forms[1] + form["confirmation"].checked = True + form.submit("delete") + + response = testapp.get("/orders", status=200) + assert "orders have been deleted." in response + assert "Eppis" in response + assert "Ethanol" in response + assert "NaCl" in response + assert "Spritzen" not in response