import pytest @pytest.mark.functional def test_view_order(testapp, login_as): response = testapp.get("/", status=302).follow() assert "Please Log In" in response response = login_as("TestAdmin", "jane").follow() 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 @pytest.mark.functional def test_add_order_ok(testapp, login_as, contains): response = testapp.get("/", status=302).follow() assert "Please Log In" in response response = login_as("TestAdmin", "jane").follow() assert "My Orders" in response assert contains( response, Eppis=True, Ethanol=True, NaCl=True, Spritzen=True, Aceton=False, ) 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["funds"] = "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 contains( response, Eppis=True, Ethanol=True, NaCl=True, Spritzen=True, Aceton=True, ) 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 @pytest.mark.functional def test_add_order_validation_error(testapp, login_as, contains): response = testapp.get("/", status=302).follow() assert "Please Log In" in response response = login_as("TestAdmin", "jane").follow() assert "My Orders" in response assert contains( response, Eppis=True, Ethanol=True, NaCl=True, Spritzen=True, Aceton=False, ) response = testapp.get("/orders/add/") form = response.forms[1] response = form.submit("Place_Order") assert "There was a problem with your submission" in response response = testapp.get("/orders/") assert contains( response, Eppis=True, Ethanol=True, NaCl=True, Spritzen=True, Aceton=False, ) @pytest.mark.functional def test_add_order_cancel(testapp, login_as, contains): response = testapp.get("/", status=302).follow() assert "Please Log In" in response response = login_as("TestAdmin", "jane").follow() assert "My Orders" in response assert contains( response, Eppis=True, Ethanol=True, NaCl=True, Spritzen=True, Aceton=False, ) 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["funds"] = "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("cancel") response = testapp.get("/orders/") assert "My Orders" in response assert contains( response, Eppis=True, Ethanol=True, NaCl=True, Spritzen=True, Aceton=False, ) @pytest.mark.functional def test_edit_order_ok(testapp, login_as, contains, parse_latest_mail): response = testapp.get("/", status=302).follow() assert "Please Log In" in response response = login_as("TestAdmin", "jane").follow() assert "My Orders" in response assert contains( response, Eppis=True, Ethanol=True, NaCl=True, Spritzen=True, Aceton=False, ) response = testapp.get("/orders/3/edit/") form = response.forms[1] form["cas_description"] = "Aceton" form["status"].value = "HOLD" form["category"].value = "SOLVENT" form["catalog_nr"] = "567" form["vendor"] = "Carl Roth" form["package_size"] = "25 l" form["quantity"] = "5" form["funds"] = "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 contains( response, Eppis=False, Ethanol=True, NaCl=True, Spritzen=True, Aceton=True, ) response = testapp.get("/orders/3/view/") assert "Aceton" in response assert "hold" 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 parsed = parse_latest_mail() assert "The status of one or more of your orders" in parsed.body assert "Aceton" in parsed.body assert "- new status: Hold" in parsed.body @pytest.mark.functional def test_edit_order_form_error(testapp, login_as, contains): response = testapp.get("/", status=302).follow() assert "Please Log In" in response response = login_as("TestAdmin", "jane").follow() assert "My Orders" in response response = testapp.get("/orders/3/edit/") form = response.forms[1] form["cas_description"] = "" form["category"] = "SOLVENT" form["catalog_nr"] = "567" form["vendor"] = "Carl Roth" form["package_size"] = "25 l" form["quantity"] = "5" form["funds"] = "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" response = form.submit("Save_Changes") assert "There was a problem with your submission" in response response = testapp.get("/orders/") assert "My Orders" in response assert contains( response, Eppis=True, Ethanol=True, NaCl=True, Spritzen=True, Aceton=False, ) @pytest.mark.functional def test_edit_order_cancel(testapp, login_as, contains): response = testapp.get("/", status=302).follow() assert "Please Log In" in response response = login_as("TestAdmin", "jane").follow() 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["funds"] = "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("cancel") response = testapp.get("/orders/") assert "My Orders" in response assert contains( response, Eppis=True, Ethanol=True, NaCl=True, Spritzen=True, Aceton=False, ) @pytest.mark.functional def test_edit_order_purchaser_vs_user(testapp, login_as, contains): # noqa: ARG001 response = testapp.get("/", status=302).follow() assert "Please Log In" in response response = login_as("TestAdmin", "jane").follow() 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() 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") @pytest.mark.functional def test_delete_order_ok(testapp, login_as, contains): response = testapp.get("/", status=302).follow() assert "Please Log In" in response response = login_as("TestAdmin", "jane").follow() assert "My Orders" in response assert contains(response, Eppis=True, Ethanol=True, NaCl=True) # don't check for "Spritzen", the term will apear in the flash message # check for edit link 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 contains(response, Eppis=True, Ethanol=True, NaCl=True) # don't check for "Spritzen", the term will apear in the flash message # check for edit link assert "/orders/4/edit" not in response @pytest.mark.functional def test_delete_order_cancel(testapp, login_as, contains): response = testapp.get("/", status=302).follow() assert "Please Log In" in response response = login_as("TestAdmin", "jane").follow() assert "My Orders" in response assert contains(response, Eppis=True, Ethanol=True, NaCl=True) # don't check for "Spritzen", the term will apear in the flash message # check for edit link assert "/orders/4/edit" in response response = testapp.get("/orders/4/delete") form = response.forms[1] form["confirmation"].checked = True form.submit("cancel") response = testapp.get("/orders/") assert "has been deleted" not in response assert "My Orders" in response assert contains(response, Eppis=True, Ethanol=True, NaCl=True) # don't check for "Spritzen", the term will apear in the flash message # check for edit link assert "/orders/4/edit" in response @pytest.mark.functional def test_delete_order_no_confirm(testapp, login_as, contains): response = testapp.get("/", status=302).follow() assert "Please Log In" in response response = login_as("TestAdmin", "jane").follow() assert "My Orders" in response assert contains(response, Eppis=True, Ethanol=True, NaCl=True) # don't check for "Spritzen", the term will apear in the flash message # check for edit link assert "/orders/4/edit" in response response = testapp.get("/orders/4/delete") form = response.forms[1] form["confirmation"].checked = False form.submit("delete") response = testapp.get("/orders/") assert "has been deleted" not in response assert "My Orders" in response assert contains(response, Eppis=True, Ethanol=True, NaCl=True) # don't check for "Spritzen", the term will apear in the flash message # check for edit link assert "/orders/4/edit" in response @pytest.mark.functional def test_reorder_ok(testapp, login_as, contains): response = testapp.get("/", status=302).follow() assert "Please Log In" in response response = login_as("TestAdmin", "jane").follow() assert "My Orders" in response assert "1138,50" not in response assert "/orders/5/edit" not in response response = testapp.get("/orders/3/reorder/") form = response.forms[1] form["quantity"] = "33" form.submit("Place_Order") response = testapp.get("/orders/") assert "has been placed." in response assert "1138,50" in response assert "/orders/5/edit" in response response = testapp.get("/orders?status=open", status=200) assert contains( response, Eppis=True, Ethanol=False, NaCl=False, Spritzen=True ) response = testapp.get("/orders?status=completed", status=200) assert contains( response, Eppis=True, Ethanol=True, NaCl=False, Spritzen=False ) @pytest.mark.functional def test_reorder_cancel(testapp, login_as, contains): response = testapp.get("/", status=302).follow() assert "Please Log In" in response response = login_as("TestAdmin", "jane").follow() assert "My Orders" in response assert "1138,50" not in response assert "/orders/5/edit" not in response response = testapp.get("/orders/3/reorder/") form = response.forms[1] form["quantity"] = "33" form.submit("cancel") response = testapp.get("/orders/") assert "has been placed." not in response assert "1138,50" not in response assert "/orders/5/edit" not in response response = testapp.get("/orders?status=open", status=200) assert contains( response, Eppis=False, Ethanol=False, NaCl=False, Spritzen=True ) @pytest.mark.functional def test_reorder_form_error(testapp, login_as, contains): response = testapp.get("/", status=302).follow() assert "Please Log In" in response response = login_as("TestAdmin", "jane").follow() assert "My Orders" in response assert "1138,50" not in response assert "/orders/5/edit" not in response response = testapp.get("/orders/3/reorder/") form = response.forms[1] form["quantity"] = "" response = form.submit("Place_Order") assert "There was a problem with your submission" in response response = testapp.get("/orders?status=open", status=200) assert contains( response, Eppis=False, Ethanol=False, NaCl=False, Spritzen=True )