chore: establish project baseline
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
from fastapi.testclient import TestClient
|
||||
from sqlalchemy import create_engine
|
||||
from sqlalchemy.orm import Session
|
||||
from sqlalchemy.pool import StaticPool
|
||||
|
||||
from central.app.context_keys import validate_entry
|
||||
from central.app.main import create_app
|
||||
from central.app.models import Base
|
||||
|
||||
H = {"Authorization": "Bearer test-token"}
|
||||
|
||||
|
||||
def client():
|
||||
engine = create_engine("sqlite://", connect_args={"check_same_thread": False}, poolclass=StaticPool)
|
||||
Base.metadata.create_all(engine)
|
||||
return TestClient(create_app(session_factory=lambda: Session(engine), bootstrap_token="test-token"))
|
||||
|
||||
|
||||
def test_validation_rules():
|
||||
ok, err = validate_entry({"scope": "group", "scope_key": "000019", "key": "product_role", "value": "resale"})
|
||||
assert err is None and ok["value"] == "RESALE" and ok["scope"] == "GROUP"
|
||||
for bad in ({"scope": "GROUP", "key": "product_role", "value": "RESALE"}, # group without key
|
||||
{"scope": "COMPANY", "key": "product_role", "value": "BOSS"}, # not in enum
|
||||
{"scope": "GROUP", "scope_key": "1", "key": "ncm", "value": "22030000"}, # ncm is product scope
|
||||
{"scope": "PRODUCT", "scope_key": "1", "key": "ncm", "value": "2203"}, # not 8 digits
|
||||
{"scope": "COMPANY", "key": "pis_cofins_profile", "value": "{\"x\": 1}"}, # unknown profile key
|
||||
{"scope": "COMPANY", "key": "icms_rate", "value": "abc"}, {"scope": "COMPANY", "key": "nope", "value": "1"}):
|
||||
assert validate_entry(bad)[1]
|
||||
assert validate_entry({"scope": "COMPANY", "key": "pis_cofins_profile", "value": "{\"pis_out_cst\": \"49\"}"})[1] is None
|
||||
|
||||
|
||||
def test_import_is_all_or_nothing_upserting_and_listed():
|
||||
c = client()
|
||||
body = {"company_key": "abc123", "entries": [{"scope": "GROUP", "scope_key": "000019", "key": "product_role", "value": "RESALE", "reason": "revenda"},
|
||||
{"scope": "COMPANY", "key": "entry_scope", "value": "INTRA"}]}
|
||||
assert c.post("/v1/context/import", json=body, headers=H).json() == {"created": 2, "updated": 0}
|
||||
body["entries"][0]["value"] = "OWN_PRODUCTION"
|
||||
assert c.post("/v1/context/import", json=body, headers=H).json() == {"created": 0, "updated": 2}
|
||||
listed = c.get("/v1/context", params={"company_key": "abc123"}, headers=H).json()["entries"]
|
||||
assert {(e["scope"], e["key"], e["value"]) for e in listed} == {("GROUP", "product_role", "OWN_PRODUCTION"), ("COMPANY", "entry_scope", "INTRA")}
|
||||
bad = {"company_key": "abc123", "entries": [{"scope": "COMPANY", "key": "rounding", "value": "A"}, {"scope": "COMPANY", "key": "rounding", "value": "Z"}]}
|
||||
r = c.post("/v1/context/import", json=bad, headers=H)
|
||||
assert r.status_code == 422
|
||||
assert len(c.get("/v1/context", params={"company_key": "abc123"}, headers=H).json()["entries"]) == 2 # nothing partially stored
|
||||
assert c.get("/v1/context", params={"company_key": "other"}, headers=H).json()["entries"] == []
|
||||
Reference in New Issue
Block a user