Refactor test setup to utilize ephemeral tenant IDs
- Introduced a new fixture, `test_tenant`, to allocate ephemeral tenant and company IDs for tests, reducing conflicts with real data. - Updated various test functions to use the new `test_tenant` fixture, ensuring consistent tenant ID usage across tests. - Enhanced the `ensure_tenant_company` function to accept dynamic tenant and company IDs, improving flexibility in test scenarios. - Adjusted database interaction in tests to utilize the ephemeral IDs, streamlining the setup process and enhancing isolation.
This commit is contained in:
@@ -7,11 +7,11 @@ from api.v1.modules.a76.invoices.exports.process import main_process as export_m
|
||||
from api.v1.modules.a76.invoices.imports.process import main_process as import_main
|
||||
from core.exceptions import ValidationException
|
||||
from tests.fixtures.builders import (
|
||||
EphemeralOrgIds,
|
||||
create_business_catalogs,
|
||||
create_export_invoice_with_line,
|
||||
create_import_invoice_with_line,
|
||||
ensure_reference_data,
|
||||
ensure_tenant_company,
|
||||
)
|
||||
|
||||
|
||||
@@ -44,27 +44,30 @@ def _patch_export_pipeline(monkeypatch, export_line):
|
||||
monkeypatch.setattr(export_main, "review_qty_series", lambda *args, **kwargs: None)
|
||||
|
||||
|
||||
def _prepare_inventory(client, db_session, monkeypatch):
|
||||
def _prepare_inventory(client, db_session, monkeypatch, test_tenant: EphemeralOrgIds):
|
||||
tid, cid = test_tenant.tenant_id, test_tenant.company_id
|
||||
ensure_reference_data(db_session)
|
||||
ensure_tenant_company(db_session, tenant_id=1, company_id=1)
|
||||
catalogs = create_business_catalogs(db_session, tenant_id=1, company_id=1)
|
||||
catalogs = create_business_catalogs(db_session, tenant_id=tid, company_id=cid)
|
||||
import_invoice, import_line = create_import_invoice_with_line(
|
||||
db_session, 1, 1, catalogs, invoice_type="TEM", invoice_number="IMP-EXP-01", qty=Decimal("10")
|
||||
db_session, tid, cid, catalogs, invoice_type="TEM", invoice_number="IMP-EXP-01", qty=Decimal("10")
|
||||
)
|
||||
_patch_import_pipeline(monkeypatch, import_line)
|
||||
resp = client.post(f"/api/v1/a76/invoices/{import_invoice.id}/process?company_id=1")
|
||||
resp = client.post(f"/api/v1/a76/invoices/{import_invoice.id}/process?company_id={cid}")
|
||||
assert resp.status_code == 200
|
||||
return catalogs, import_invoice, import_line
|
||||
|
||||
|
||||
def test_process_export_endpoint_consumes_existing_balances(client, db_session, monkeypatch):
|
||||
catalogs, import_invoice, import_line = _prepare_inventory(client, db_session, monkeypatch)
|
||||
def test_process_export_endpoint_consumes_existing_balances(client, db_session, monkeypatch, test_tenant):
|
||||
catalogs, import_invoice, import_line = _prepare_inventory(
|
||||
client, db_session, monkeypatch, test_tenant
|
||||
)
|
||||
tid, cid = test_tenant.tenant_id, test_tenant.company_id
|
||||
export_invoice, export_line = create_export_invoice_with_line(
|
||||
db_session, 1, 1, catalogs, import_invoice, import_line, qty=Decimal("3")
|
||||
db_session, tid, cid, catalogs, import_invoice, import_line, qty=Decimal("3")
|
||||
)
|
||||
_patch_export_pipeline(monkeypatch, export_line)
|
||||
|
||||
resp = client.post(f"/api/v1/a76/invoices/{export_invoice.id}/process?company_id=1")
|
||||
resp = client.post(f"/api/v1/a76/invoices/{export_invoice.id}/process?company_id={cid}")
|
||||
assert resp.status_code == 200
|
||||
|
||||
consumptions = (
|
||||
@@ -78,15 +81,18 @@ def test_process_export_endpoint_consumes_existing_balances(client, db_session,
|
||||
assert consumptions
|
||||
|
||||
|
||||
def test_process_export_prevents_negative_balance(client, db_session, monkeypatch):
|
||||
catalogs, import_invoice, import_line = _prepare_inventory(client, db_session, monkeypatch)
|
||||
def test_process_export_prevents_negative_balance(client, db_session, monkeypatch, test_tenant):
|
||||
catalogs, import_invoice, import_line = _prepare_inventory(
|
||||
client, db_session, monkeypatch, test_tenant
|
||||
)
|
||||
tid, cid = test_tenant.tenant_id, test_tenant.company_id
|
||||
export_invoice, export_line = create_export_invoice_with_line(
|
||||
db_session, 1, 1, catalogs, import_invoice, import_line, qty=Decimal("99")
|
||||
db_session, tid, cid, catalogs, import_invoice, import_line, qty=Decimal("99")
|
||||
)
|
||||
_patch_export_pipeline(monkeypatch, export_line)
|
||||
|
||||
with pytest.raises(ValidationException):
|
||||
client.post(f"/api/v1/a76/invoices/{export_invoice.id}/process?company_id=1")
|
||||
client.post(f"/api/v1/a76/invoices/{export_invoice.id}/process?company_id={cid}")
|
||||
|
||||
# Debe no crear consumos al existir insuficiencia de saldo.
|
||||
consumptions = (
|
||||
@@ -100,19 +106,19 @@ def test_process_export_prevents_negative_balance(client, db_session, monkeypatc
|
||||
assert consumptions == []
|
||||
|
||||
|
||||
def test_process_endpoint_prevents_double_processing_import(client, db_session, monkeypatch):
|
||||
def test_process_endpoint_prevents_double_processing_import(client, db_session, monkeypatch, test_tenant):
|
||||
tid, cid = test_tenant.tenant_id, test_tenant.company_id
|
||||
ensure_reference_data(db_session)
|
||||
ensure_tenant_company(db_session, tenant_id=1, company_id=1)
|
||||
catalogs = create_business_catalogs(db_session, tenant_id=1, company_id=1)
|
||||
catalogs = create_business_catalogs(db_session, tenant_id=tid, company_id=cid)
|
||||
invoice, line = create_import_invoice_with_line(
|
||||
db_session, 1, 1, catalogs, invoice_type="TEM", invoice_number="IMP-DOUBLE-01", qty=Decimal("5")
|
||||
db_session, tid, cid, catalogs, invoice_type="TEM", invoice_number="IMP-DOUBLE-01", qty=Decimal("5")
|
||||
)
|
||||
_patch_import_pipeline_without_prevalidators(monkeypatch)
|
||||
|
||||
first = client.post(f"/api/v1/a76/invoices/{invoice.id}/process?company_id=1")
|
||||
first = client.post(f"/api/v1/a76/invoices/{invoice.id}/process?company_id={cid}")
|
||||
assert first.status_code == 200
|
||||
with pytest.raises(ValidationException):
|
||||
client.post(f"/api/v1/a76/invoices/{invoice.id}/process?company_id=1")
|
||||
client.post(f"/api/v1/a76/invoices/{invoice.id}/process?company_id={cid}")
|
||||
|
||||
# No debe duplicar entradas para la misma factura/línea procesada.
|
||||
entries = (
|
||||
|
||||
Reference in New Issue
Block a user