style: apply black and isort formatting across entire codebase
- Standardize quote style (single to double quotes) - Reorder and group imports alphabetically - Fix line breaks and indentation for consistency - Apply PEP 8 formatting standards Also updated Makefile to exclude both venv and .venv from code quality checks. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -10,8 +10,9 @@ These tests verify that:
|
||||
5. Vendor context middleware works correctly with API authentication
|
||||
"""
|
||||
|
||||
import pytest
|
||||
from datetime import datetime, timedelta, timezone
|
||||
|
||||
import pytest
|
||||
from jose import jwt
|
||||
|
||||
|
||||
@@ -26,7 +27,9 @@ class TestVendorAPIAuthentication:
|
||||
# Authentication Tests - /api/v1/vendor/auth/me
|
||||
# ========================================================================
|
||||
|
||||
def test_vendor_auth_me_success(self, client, vendor_user_headers, test_vendor_user):
|
||||
def test_vendor_auth_me_success(
|
||||
self, client, vendor_user_headers, test_vendor_user
|
||||
):
|
||||
"""Test /auth/me endpoint with valid vendor user token"""
|
||||
response = client.get("/api/v1/vendor/auth/me", headers=vendor_user_headers)
|
||||
|
||||
@@ -50,7 +53,7 @@ class TestVendorAPIAuthentication:
|
||||
"""Test /auth/me endpoint with invalid token format"""
|
||||
response = client.get(
|
||||
"/api/v1/vendor/auth/me",
|
||||
headers={"Authorization": "Bearer invalid_token_here"}
|
||||
headers={"Authorization": "Bearer invalid_token_here"},
|
||||
)
|
||||
|
||||
assert response.status_code == 401
|
||||
@@ -66,7 +69,9 @@ class TestVendorAPIAuthentication:
|
||||
assert data["error_code"] == "FORBIDDEN"
|
||||
assert "Admin users cannot access vendor API" in data["message"]
|
||||
|
||||
def test_vendor_auth_me_with_regular_user_token(self, client, auth_headers, test_user):
|
||||
def test_vendor_auth_me_with_regular_user_token(
|
||||
self, client, auth_headers, test_user
|
||||
):
|
||||
"""Test /auth/me endpoint rejects regular users"""
|
||||
response = client.get("/api/v1/vendor/auth/me", headers=auth_headers)
|
||||
|
||||
@@ -88,14 +93,12 @@ class TestVendorAPIAuthentication:
|
||||
}
|
||||
|
||||
expired_token = jwt.encode(
|
||||
expired_payload,
|
||||
auth_manager.secret_key,
|
||||
algorithm=auth_manager.algorithm
|
||||
expired_payload, auth_manager.secret_key, algorithm=auth_manager.algorithm
|
||||
)
|
||||
|
||||
response = client.get(
|
||||
"/api/v1/vendor/auth/me",
|
||||
headers={"Authorization": f"Bearer {expired_token}"}
|
||||
headers={"Authorization": f"Bearer {expired_token}"},
|
||||
)
|
||||
|
||||
assert response.status_code == 401
|
||||
@@ -111,8 +114,7 @@ class TestVendorAPIAuthentication:
|
||||
):
|
||||
"""Test dashboard stats with valid vendor authentication"""
|
||||
response = client.get(
|
||||
"/api/v1/vendor/dashboard/stats",
|
||||
headers=vendor_user_headers
|
||||
"/api/v1/vendor/dashboard/stats", headers=vendor_user_headers
|
||||
)
|
||||
|
||||
assert response.status_code == 200
|
||||
@@ -131,10 +133,7 @@ class TestVendorAPIAuthentication:
|
||||
|
||||
def test_vendor_dashboard_stats_with_admin(self, client, admin_headers):
|
||||
"""Test dashboard stats rejects admin users"""
|
||||
response = client.get(
|
||||
"/api/v1/vendor/dashboard/stats",
|
||||
headers=admin_headers
|
||||
)
|
||||
response = client.get("/api/v1/vendor/dashboard/stats", headers=admin_headers)
|
||||
|
||||
assert response.status_code == 403
|
||||
data = response.json()
|
||||
@@ -145,10 +144,7 @@ class TestVendorAPIAuthentication:
|
||||
# Login to get session cookie
|
||||
login_response = client.post(
|
||||
"/api/v1/vendor/auth/login",
|
||||
json={
|
||||
"username": test_vendor_user.username,
|
||||
"password": "vendorpass123"
|
||||
}
|
||||
json={"username": test_vendor_user.username, "password": "vendorpass123"},
|
||||
)
|
||||
assert login_response.status_code == 200
|
||||
|
||||
@@ -169,10 +165,7 @@ class TestVendorAPIAuthentication:
|
||||
# Get a valid session by logging in
|
||||
login_response = client.post(
|
||||
"/api/v1/vendor/auth/login",
|
||||
json={
|
||||
"username": test_vendor_user.username,
|
||||
"password": "vendorpass123"
|
||||
}
|
||||
json={"username": test_vendor_user.username, "password": "vendorpass123"},
|
||||
)
|
||||
assert login_response.status_code == 200
|
||||
|
||||
@@ -191,8 +184,9 @@ class TestVendorAPIAuthentication:
|
||||
response = client.get(endpoint)
|
||||
|
||||
# All should fail with 401 (header required)
|
||||
assert response.status_code == 401, \
|
||||
f"Endpoint {endpoint} should reject cookie-only auth"
|
||||
assert (
|
||||
response.status_code == 401
|
||||
), f"Endpoint {endpoint} should reject cookie-only auth"
|
||||
|
||||
# ========================================================================
|
||||
# Role-Based Access Control Tests
|
||||
@@ -211,13 +205,15 @@ class TestVendorAPIAuthentication:
|
||||
for endpoint in endpoints:
|
||||
# Test with regular user token
|
||||
response = client.get(endpoint, headers=auth_headers)
|
||||
assert response.status_code == 403, \
|
||||
f"Endpoint {endpoint} should reject regular users"
|
||||
assert (
|
||||
response.status_code == 403
|
||||
), f"Endpoint {endpoint} should reject regular users"
|
||||
|
||||
# Test with admin token
|
||||
response = client.get(endpoint, headers=admin_headers)
|
||||
assert response.status_code == 403, \
|
||||
f"Endpoint {endpoint} should reject admin users"
|
||||
assert (
|
||||
response.status_code == 403
|
||||
), f"Endpoint {endpoint} should reject admin users"
|
||||
|
||||
def test_vendor_api_accepts_only_vendor_role(
|
||||
self, client, vendor_user_headers, test_vendor_user
|
||||
@@ -229,8 +225,10 @@ class TestVendorAPIAuthentication:
|
||||
|
||||
for endpoint in endpoints:
|
||||
response = client.get(endpoint, headers=vendor_user_headers)
|
||||
assert response.status_code in [200, 404], \
|
||||
f"Endpoint {endpoint} should accept vendor users (got {response.status_code})"
|
||||
assert response.status_code in [
|
||||
200,
|
||||
404,
|
||||
], f"Endpoint {endpoint} should accept vendor users (got {response.status_code})"
|
||||
|
||||
# ========================================================================
|
||||
# Token Validation Tests
|
||||
@@ -248,8 +246,9 @@ class TestVendorAPIAuthentication:
|
||||
|
||||
for headers in malformed_headers:
|
||||
response = client.get("/api/v1/vendor/auth/me", headers=headers)
|
||||
assert response.status_code == 401, \
|
||||
f"Should reject malformed header: {headers}"
|
||||
assert (
|
||||
response.status_code == 401
|
||||
), f"Should reject malformed header: {headers}"
|
||||
|
||||
def test_token_with_missing_claims(self, client, auth_manager):
|
||||
"""Test token missing required claims"""
|
||||
@@ -261,14 +260,12 @@ class TestVendorAPIAuthentication:
|
||||
}
|
||||
|
||||
invalid_token = jwt.encode(
|
||||
invalid_payload,
|
||||
auth_manager.secret_key,
|
||||
algorithm=auth_manager.algorithm
|
||||
invalid_payload, auth_manager.secret_key, algorithm=auth_manager.algorithm
|
||||
)
|
||||
|
||||
response = client.get(
|
||||
"/api/v1/vendor/auth/me",
|
||||
headers={"Authorization": f"Bearer {invalid_token}"}
|
||||
headers={"Authorization": f"Bearer {invalid_token}"},
|
||||
)
|
||||
|
||||
assert response.status_code == 401
|
||||
@@ -298,9 +295,7 @@ class TestVendorAPIAuthentication:
|
||||
db.add(test_vendor_user)
|
||||
db.commit()
|
||||
|
||||
def test_concurrent_requests_with_same_token(
|
||||
self, client, vendor_user_headers
|
||||
):
|
||||
def test_concurrent_requests_with_same_token(self, client, vendor_user_headers):
|
||||
"""Test that the same token can be used for multiple concurrent requests"""
|
||||
# Make multiple requests with the same token
|
||||
responses = []
|
||||
@@ -314,10 +309,7 @@ class TestVendorAPIAuthentication:
|
||||
|
||||
def test_vendor_api_with_empty_authorization_header(self, client):
|
||||
"""Test vendor API with empty Authorization header value"""
|
||||
response = client.get(
|
||||
"/api/v1/vendor/auth/me",
|
||||
headers={"Authorization": ""}
|
||||
)
|
||||
response = client.get("/api/v1/vendor/auth/me", headers={"Authorization": ""})
|
||||
|
||||
assert response.status_code == 401
|
||||
|
||||
@@ -328,17 +320,12 @@ class TestVendorAPIAuthentication:
|
||||
class TestVendorAPIConsistency:
|
||||
"""Test that all vendor API endpoints use consistent authentication"""
|
||||
|
||||
def test_all_vendor_endpoints_require_header_auth(
|
||||
self, client, test_vendor_user
|
||||
):
|
||||
def test_all_vendor_endpoints_require_header_auth(self, client, test_vendor_user):
|
||||
"""Verify all vendor API endpoints require Authorization header"""
|
||||
# Login to establish session
|
||||
client.post(
|
||||
"/api/v1/vendor/auth/login",
|
||||
json={
|
||||
"username": test_vendor_user.username,
|
||||
"password": "vendorpass123"
|
||||
}
|
||||
json={"username": test_vendor_user.username, "password": "vendorpass123"},
|
||||
)
|
||||
|
||||
# All vendor API endpoints (excluding public endpoints like /info)
|
||||
@@ -361,8 +348,9 @@ class TestVendorAPIConsistency:
|
||||
response = client.post(endpoint, json={})
|
||||
|
||||
# All should reject cookie-only auth with 401
|
||||
assert response.status_code == 401, \
|
||||
f"Endpoint {endpoint} should require Authorization header (got {response.status_code})"
|
||||
assert (
|
||||
response.status_code == 401
|
||||
), f"Endpoint {endpoint} should require Authorization header (got {response.status_code})"
|
||||
|
||||
def test_vendor_endpoints_accept_vendor_token(
|
||||
self, client, vendor_user_headers, test_vendor_with_vendor_user
|
||||
@@ -380,5 +368,7 @@ class TestVendorAPIConsistency:
|
||||
response = client.get(endpoint, headers=vendor_user_headers)
|
||||
|
||||
# Should not be authentication/authorization errors
|
||||
assert response.status_code not in [401, 403], \
|
||||
f"Endpoint {endpoint} should accept vendor token (got {response.status_code}: {response.text})"
|
||||
assert response.status_code not in [
|
||||
401,
|
||||
403,
|
||||
], f"Endpoint {endpoint} should accept vendor token (got {response.status_code}: {response.text})"
|
||||
|
||||
Reference in New Issue
Block a user