예제 #1
0
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"]')
예제 #2
0
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
예제 #3
0
def test_productorder_quantity():
    choice = ProductOrder(wanted=3)
    assert choice.wanted == 3
    assert choice.quantity == 3
    choice = ProductOrder(wanted=3, adjustment=2)
    assert choice.quantity == 5
    choice = ProductOrder(wanted=3, adjustment=-1)
    assert choice.quantity == 2
예제 #4
0
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
예제 #5
0
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
예제 #6
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),
    ]
예제 #7
0
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
예제 #8
0
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"
예제 #9
0
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"]')
예제 #10
0
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
예제 #11
0
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
예제 #12
0
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