def test_order_has_adjustments(): order = Order() assert not order.has_adjustments order.products["123"] = ProductOrder(wanted=2) assert not order.has_adjustments order.products["123"] = ProductOrder(wanted=2, adjustment=1) assert order.has_adjustments
async def test_get_place_order_with_adjustment_status(client, delivery, yaourt, fromage): resp = await client.get(f"/distribution/{delivery.id}/commander") doc = pq(resp.body) assert not doc('[name="wanted:lait"]').attr("readonly") assert not doc('[name="adjustment:lait"]') delivery.order_before = datetime.now() - timedelta(days=1) delivery.products[0].packing = 6 delivery.products.append(yaourt) delivery.products.append(fromage) delivery.orders["fractal-brocolis"] = Order( products={ "lait": ProductOrder(wanted=1), "yaourt": ProductOrder(wanted=4) } ) delivery.persist() assert delivery.status == delivery.ADJUSTMENT resp = await client.get(f"/distribution/{delivery.id}/commander") doc = pq(resp.body) assert doc('[name="wanted:lait"]').attr("readonly") assert doc('[name="adjustment:lait"]') assert not doc('[name="adjustment:lait"]').attr("readonly") assert doc('[name="adjustment:lait"]').attr("min") == "-1" assert doc('[name="wanted:yaourt"]').attr("readonly") assert doc('[name="adjustment:yaourt"]') # Already adjusted. assert doc('[name="adjustment:yaourt"]').attr("readonly") assert doc('[name="adjustment:fromage"]') # Needs no adjustment. assert doc('[name="adjustment:fromage"]').attr("readonly") assert doc('input[type="submit"]')
async def test_place_empty_order_should_delete_previous(client, delivery): delivery.orders["fractal-brocolis"] = Order( products={"lait": ProductOrder(wanted=1)} ) delivery.persist() resp = await client.post(f"/distribution/{delivery.id}/commander", body={}) assert resp.status == 302 delivery = Delivery.load(delivery.id) assert not delivery.orders
def test_order_total(delivery): delivery.products = [Product(name="Lait", ref="123", price=1.5)] order = Order() assert order.total(delivery.products, delivery) == 0 order.products["123"] = ProductOrder(wanted=2) assert order.total(delivery.products, delivery) == 3 order.products["unknown"] = ProductOrder(wanted=2) assert order.total(delivery.products, delivery) == 3
async def test_post_adjust_product(client, delivery): delivery.order_before = datetime.now() - timedelta(days=1) delivery.products[0].packing = 6 delivery.orders["fractal-brocolis"] = Order(products={"lait": ProductOrder(wanted=2)}) delivery.persist() assert delivery.status == delivery.ADJUSTMENT body = {"fractal-brocolis": "1"} resp = await client.post(f"/distribution/{delivery.id}/ajuster/lait", body=body) assert resp.status == 302 delivery = Delivery.load(id=delivery.id) assert delivery.orders["fractal-brocolis"].products["lait"].wanted == 2 assert delivery.orders["fractal-brocolis"].products["lait"].adjustment == 1
async def test_get_adjust_product(client, delivery): delivery.order_before = datetime.now() - timedelta(days=1) delivery.products[0].packing = 6 delivery.orders["fractal-brocolis"] = Order( products={"lait": ProductOrder(wanted=2, adjustment=1)} ) delivery.persist() assert delivery.status == delivery.ADJUSTMENT resp = await client.get(f"/distribution/{delivery.id}/ajuster/lait") doc = pq(resp.body) assert doc('[name="fractal-brocolis"]') assert doc('[name="fractal-brocolis"]').attr("value") == "1"
async def test_get_place_order_if_not_adjustable(client, delivery, monkeypatch): monkeypatch.setattr("copanier.config.STAFF", ["*****@*****.**"]) delivery.order_before = datetime.now() - timedelta(days=1) delivery.orders["fractal-brocolis"] = Order( products={"lait": ProductOrder(wanted=1)} ) delivery.persist() assert delivery.status == delivery.CLOSED resp = await client.get(f"/distribution/{delivery.id}/commander") doc = pq(resp.body) assert doc('[name="wanted:lait"]').attr("readonly") assert not doc('[name="adjustment:lait"]') assert not doc('input[type="submit"]')
async def test_only_staff_can_adjust_product(client, delivery, monkeypatch): delivery.order_before = datetime.now() - timedelta(days=1) delivery.products[0].packing = 6 delivery.orders["fractal-brocolis"] = Order(products={"lait": ProductOrder(wanted=2)}) delivery.persist() monkeypatch.setattr("copanier.config.STAFF", ["*****@*****.**"]) resp = await client.get(f"/distribution/{delivery.id}/ajuster/lait") assert resp.status == 302 body = {"fractal-brocolis": "1"} resp = await client.post(f"/distribution/{delivery.id}/ajuster/lait", body=body) assert resp.status == 302 delivery = Delivery.load(id=delivery.id) assert delivery.orders["fractal-brocolis"].products["lait"].wanted == 2 assert delivery.orders["fractal-brocolis"].products["lait"].adjustment == 0
def test_summary_report(delivery, yaourt, fromage): delivery.products[0].packing = 6 delivery.products.append(yaourt) delivery.products.append(fromage) delivery.orders["fractals-brocoli"] = Order( products={ "lait": ProductOrder(wanted=1), "yaourt": ProductOrder(wanted=4) }) delivery.persist() wb = load_workbook(filename=BytesIO(reports.summary(delivery))) assert list(wb.active.values) == [ ("ref", "produit", "prix unitaire", "quantité commandée", "unité", "total"), ("lait", "Lait", 1.5, 1, None, 1.5), ("yaourt", "Yaourt", 3.5, 4, "pot 125ml", 14), (None, None, None, None, "Total", 15.5), ]
def test_can_add_product_to_order(): order = Order() assert len(order.products) == 0 order.products["123"] = ProductOrder(wanted=2) assert order.products["123"].wanted == 2
def test_can_create_order_with_products(): order = Order(products={"123": ProductOrder(wanted=2)}) assert len(order.products) == 1 assert order.products["123"].wanted == 2