Files
orion/tests/unit/models/database/test_vendor.py
Samir Boulahtit 9920430b9e fix: correct tojson|safe usage in templates and update validator
- Remove |safe from |tojson in HTML attributes (x-data) - quotes must
  become " for browsers to parse correctly
- Update LANG-002 and LANG-003 architecture rules to document correct
  |tojson usage patterns:
  - HTML attributes: |tojson (no |safe)
  - Script blocks: |tojson|safe
- Fix validator to warn when |tojson|safe is used in x-data (breaks
  HTML attribute parsing)
- Improve code quality across services, APIs, and tests

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-13 22:59:51 +01:00

139 lines
4.4 KiB
Python

# tests/unit/models/database/test_vendor.py
"""Unit tests for Vendor database model."""
import pytest
from sqlalchemy.exc import IntegrityError
from models.database.vendor import Vendor
@pytest.mark.unit
@pytest.mark.database
class TestVendorModel:
"""Test Vendor model."""
def test_vendor_creation(self, db, test_company):
"""Test Vendor model creation with company relationship."""
vendor = Vendor(
company_id=test_company.id,
vendor_code="DBTEST",
subdomain="dbtest",
name="Database Test Vendor",
description="Testing vendor model",
contact_email="contact@dbtest.com",
contact_phone="+1234567890",
business_address="123 Test Street",
is_active=True,
is_verified=False,
)
db.add(vendor)
db.commit()
db.refresh(vendor)
assert vendor.id is not None
assert vendor.vendor_code == "DBTEST"
assert vendor.subdomain == "dbtest"
assert vendor.name == "Database Test Vendor"
assert vendor.company_id == test_company.id
assert vendor.contact_email == "contact@dbtest.com"
assert vendor.is_active is True
assert vendor.is_verified is False
assert vendor.created_at is not None
def test_vendor_with_letzshop_urls(self, db, test_company):
"""Test Vendor model with multi-language Letzshop URLs."""
vendor = Vendor(
company_id=test_company.id,
vendor_code="MULTILANG",
subdomain="multilang",
name="Multi-Language Vendor",
letzshop_csv_url_fr="https://example.com/feed_fr.csv",
letzshop_csv_url_en="https://example.com/feed_en.csv",
letzshop_csv_url_de="https://example.com/feed_de.csv",
is_active=True,
)
db.add(vendor)
db.commit()
db.refresh(vendor)
assert vendor.letzshop_csv_url_fr == "https://example.com/feed_fr.csv"
assert vendor.letzshop_csv_url_en == "https://example.com/feed_en.csv"
assert vendor.letzshop_csv_url_de == "https://example.com/feed_de.csv"
def test_vendor_code_uniqueness(self, db, test_company):
"""Test vendor_code unique constraint."""
vendor1 = Vendor(
company_id=test_company.id,
vendor_code="UNIQUE",
subdomain="unique1",
name="Unique Vendor 1",
)
db.add(vendor1)
db.commit()
# Duplicate vendor_code should raise error
with pytest.raises(IntegrityError):
vendor2 = Vendor(
company_id=test_company.id,
vendor_code="UNIQUE",
subdomain="unique2",
name="Unique Vendor 2",
)
db.add(vendor2)
db.commit()
def test_subdomain_uniqueness(self, db, test_company):
"""Test subdomain unique constraint."""
vendor1 = Vendor(
company_id=test_company.id,
vendor_code="VENDOR1",
subdomain="testsubdomain",
name="Vendor 1",
)
db.add(vendor1)
db.commit()
# Duplicate subdomain should raise error
with pytest.raises(IntegrityError):
vendor2 = Vendor(
company_id=test_company.id,
vendor_code="VENDOR2",
subdomain="testsubdomain",
name="Vendor 2",
)
db.add(vendor2)
db.commit()
def test_vendor_default_values(self, db, test_company):
"""Test Vendor model default values."""
vendor = Vendor(
company_id=test_company.id,
vendor_code="DEFAULTS",
subdomain="defaults",
name="Default Vendor",
)
db.add(vendor)
db.commit()
db.refresh(vendor)
assert vendor.is_active is True # Default
assert vendor.is_verified is False # Default
def test_vendor_company_relationship(self, db, test_company):
"""Test Vendor-Company relationship."""
vendor = Vendor(
company_id=test_company.id,
vendor_code="RELTEST",
subdomain="reltest",
name="Relationship Test Vendor",
)
db.add(vendor)
db.commit()
db.refresh(vendor)
assert vendor.company is not None
assert vendor.company.id == test_company.id
assert vendor.company.name == test_company.name