from tests.api_client import NZ_15, make_client_product, make_load_in


def test_transfer_moves_stock(admin_api):
    cid, pid = make_client_product(admin_api)
    zid = admin_api.post("/api/clients", json={"name": "Zed"}).json()["id"]
    make_load_in(admin_api, cid, pid, 10)
    src = admin_api.get("/api/load-outs/sources", params={"client_id": cid}).json()[0]["id"]
    r = admin_api.post("/api/transfers", json={"from_client_id": cid, "to_client_id": zid, "code": "TR-1",
                                               "date": NZ_15, "lines": [{"source_item_id": src, "quantity": 4}]})
    assert r.status_code == 200, r.text
    tr = r.json()
    assert (tr["client_name"], tr["to_client_name"]) == ("Acme", "Zed")
    zed = admin_api.get(f"/api/clients/{zid}").json()["stock"]
    assert [(s["product_title"], s["quantity"]) for s in zed] == [("Kiwi", 4)]
    assert admin_api.get("/api/transfers", params={"to_client_id": zid}).json()["total"] == 1
    assert admin_api.post("/api/transfers/delete", json={"ids": [tr["id"]]}).status_code == 204
    assert admin_api.get(f"/api/clients/{zid}").json()["stock"] == []
