- 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>
101 lines
3.5 KiB
Python
101 lines
3.5 KiB
Python
# tests/integration/workflows/test_integration.py
|
|
"""
|
|
End-to-end workflow integration tests.
|
|
|
|
Tests complete workflows using actual API endpoints:
|
|
- Admin vendor management workflow
|
|
- Admin product listing workflow
|
|
- Marketplace import workflow
|
|
"""
|
|
|
|
import uuid
|
|
|
|
import pytest
|
|
|
|
|
|
@pytest.mark.integration
|
|
@pytest.mark.api
|
|
@pytest.mark.e2e
|
|
class TestIntegrationFlows:
|
|
def test_admin_vendor_workflow(self, client, admin_headers, test_company):
|
|
"""Test admin vendor creation and management workflow"""
|
|
unique_id = str(uuid.uuid4())[:8]
|
|
|
|
# 1. Create a vendor
|
|
vendor_data = {
|
|
"company_id": test_company.id,
|
|
"vendor_code": f"FLOW_{unique_id.upper()}",
|
|
"subdomain": f"flow{unique_id}",
|
|
"name": "Integration Flow Vendor",
|
|
"description": "Test vendor for integration",
|
|
}
|
|
|
|
response = client.post(
|
|
"/api/v1/admin/vendors", headers=admin_headers, json=vendor_data
|
|
)
|
|
assert response.status_code == 200
|
|
vendor = response.json()
|
|
|
|
# 2. Get vendor details
|
|
response = client.get(
|
|
f"/api/v1/admin/vendors/{vendor['vendor_code']}", headers=admin_headers
|
|
)
|
|
assert response.status_code == 200
|
|
vendor_detail = response.json()
|
|
assert vendor_detail["name"] == "Integration Flow Vendor"
|
|
|
|
# 3. List all vendors
|
|
response = client.get("/api/v1/admin/vendors", headers=admin_headers)
|
|
assert response.status_code == 200
|
|
vendors = response.json()
|
|
assert any(v["vendor_code"] == vendor["vendor_code"] for v in vendors)
|
|
|
|
def test_admin_product_listing_workflow(
|
|
self, client, admin_headers, test_marketplace_product
|
|
):
|
|
"""Test admin product listing and search workflow"""
|
|
# 1. List all products
|
|
response = client.get("/api/v1/admin/products", headers=admin_headers)
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert "products" in data or "items" in data or isinstance(data, list)
|
|
|
|
# 2. Get specific product
|
|
response = client.get(
|
|
f"/api/v1/admin/products/{test_marketplace_product.id}",
|
|
headers=admin_headers,
|
|
)
|
|
assert response.status_code == 200
|
|
|
|
# 3. Search for product (if search is supported)
|
|
response = client.get(
|
|
"/api/v1/admin/products?search=test",
|
|
headers=admin_headers,
|
|
)
|
|
assert response.status_code == 200
|
|
|
|
def test_admin_import_jobs_workflow(self, client, admin_headers):
|
|
"""Test admin import job listing workflow"""
|
|
# 1. List all import jobs
|
|
response = client.get(
|
|
"/api/v1/admin/marketplace-import-jobs", headers=admin_headers
|
|
)
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
# Should return jobs list (may be empty)
|
|
assert "jobs" in data or "items" in data or isinstance(data, list)
|
|
|
|
def test_admin_user_management_workflow(self, client, admin_headers, test_admin):
|
|
"""Test admin user management workflow"""
|
|
# 1. List all users
|
|
response = client.get("/api/v1/admin/users", headers=admin_headers)
|
|
assert response.status_code == 200
|
|
|
|
# 2. Get specific user details
|
|
response = client.get(
|
|
f"/api/v1/admin/users/{test_admin.id}", headers=admin_headers
|
|
)
|
|
assert response.status_code == 200
|
|
user_detail = response.json()
|
|
assert user_detail["role"] == "admin"
|