refactor(consent-sdk,dsms-gateway): split ConsentManager, types, and main.py
- consent-sdk/src/types/index.ts: extracted 438 LOC into core.ts, config.ts, vendor.ts, api.ts, events.ts, storage.ts, translations.ts; index.ts is now a 21-LOC barrel re-exporter - consent-sdk/src/core/ConsentManager.ts: extracted normalizeConsentInput, isConsentExpired, needsConsent, ALL_CATEGORIES, MINIMAL_CATEGORIES into consent-manager-helpers.ts; reduced from 467 to 345 LOC - dsms-gateway/main.py: extracted models → models.py, config → config.py, IPFS helpers + verify_token → dependencies.py, route handlers → routers/documents.py and routers/node.py; main.py is now a 41-LOC app factory; test mock paths updated accordingly (27/27 tests pass) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -56,7 +56,7 @@ class TestHealthCheck:
|
||||
|
||||
def test_health_check_ipfs_connected(self):
|
||||
"""Test: Health Check wenn IPFS verbunden ist"""
|
||||
with patch("main.httpx.AsyncClient") as mock_client:
|
||||
with patch("routers.node.httpx.AsyncClient") as mock_client:
|
||||
mock_instance = AsyncMock()
|
||||
mock_instance.post.return_value = MagicMock(status_code=200)
|
||||
mock_client.return_value.__aenter__.return_value = mock_instance
|
||||
@@ -71,7 +71,7 @@ class TestHealthCheck:
|
||||
|
||||
def test_health_check_ipfs_disconnected(self):
|
||||
"""Test: Health Check wenn IPFS nicht erreichbar"""
|
||||
with patch("main.httpx.AsyncClient") as mock_client:
|
||||
with patch("routers.node.httpx.AsyncClient") as mock_client:
|
||||
mock_instance = AsyncMock()
|
||||
mock_instance.post.side_effect = Exception("Connection failed")
|
||||
mock_client.return_value.__aenter__.return_value = mock_instance
|
||||
@@ -104,7 +104,7 @@ class TestAuthorization:
|
||||
|
||||
def test_documents_endpoint_with_valid_token_format(self, valid_auth_header):
|
||||
"""Test: Gültiges Token-Format wird akzeptiert"""
|
||||
with patch("main.ipfs_pin_ls", new_callable=AsyncMock) as mock_pin_ls:
|
||||
with patch("routers.documents.ipfs_pin_ls", new_callable=AsyncMock) as mock_pin_ls:
|
||||
mock_pin_ls.return_value = []
|
||||
|
||||
response = client.get(
|
||||
@@ -122,7 +122,7 @@ class TestDocumentStorage:
|
||||
|
||||
def test_store_document_success(self, valid_auth_header, mock_ipfs_response):
|
||||
"""Test: Dokument erfolgreich speichern"""
|
||||
with patch("main.ipfs_add", new_callable=AsyncMock) as mock_add:
|
||||
with patch("routers.documents.ipfs_add", new_callable=AsyncMock) as mock_add:
|
||||
mock_add.return_value = mock_ipfs_response
|
||||
|
||||
test_content = b"Test document content"
|
||||
@@ -148,7 +148,7 @@ class TestDocumentStorage:
|
||||
|
||||
def test_store_document_calculates_checksum(self, valid_auth_header, mock_ipfs_response):
|
||||
"""Test: Checksum wird korrekt berechnet"""
|
||||
with patch("main.ipfs_add", new_callable=AsyncMock) as mock_add:
|
||||
with patch("routers.documents.ipfs_add", new_callable=AsyncMock) as mock_add:
|
||||
mock_add.return_value = mock_ipfs_response
|
||||
|
||||
test_content = b"Test content for checksum"
|
||||
@@ -191,7 +191,7 @@ class TestDocumentRetrieval:
|
||||
"filename": "test.txt"
|
||||
}
|
||||
|
||||
with patch("main.ipfs_cat", new_callable=AsyncMock) as mock_cat:
|
||||
with patch("routers.documents.ipfs_cat", new_callable=AsyncMock) as mock_cat:
|
||||
mock_cat.return_value = json.dumps(package).encode()
|
||||
|
||||
response = client.get(
|
||||
@@ -204,7 +204,7 @@ class TestDocumentRetrieval:
|
||||
|
||||
def test_get_document_not_found(self, valid_auth_header):
|
||||
"""Test: Nicht existierendes Dokument gibt 404 zurück"""
|
||||
with patch("main.ipfs_cat", new_callable=AsyncMock) as mock_cat:
|
||||
with patch("routers.documents.ipfs_cat", new_callable=AsyncMock) as mock_cat:
|
||||
from fastapi import HTTPException
|
||||
mock_cat.side_effect = HTTPException(status_code=404, detail="Not found")
|
||||
|
||||
@@ -228,7 +228,7 @@ class TestDocumentRetrieval:
|
||||
"filename": "test.txt"
|
||||
}
|
||||
|
||||
with patch("main.ipfs_cat", new_callable=AsyncMock) as mock_cat:
|
||||
with patch("routers.documents.ipfs_cat", new_callable=AsyncMock) as mock_cat:
|
||||
mock_cat.return_value = json.dumps(package).encode()
|
||||
|
||||
response = client.get(
|
||||
@@ -249,7 +249,7 @@ class TestDocumentList:
|
||||
|
||||
def test_list_documents_empty(self, valid_auth_header):
|
||||
"""Test: Leere Dokumentenliste"""
|
||||
with patch("main.ipfs_pin_ls", new_callable=AsyncMock) as mock_pin_ls:
|
||||
with patch("routers.documents.ipfs_pin_ls", new_callable=AsyncMock) as mock_pin_ls:
|
||||
mock_pin_ls.return_value = []
|
||||
|
||||
response = client.get(
|
||||
@@ -270,10 +270,10 @@ class TestDocumentList:
|
||||
"filename": "test.txt"
|
||||
}
|
||||
|
||||
with patch("main.ipfs_pin_ls", new_callable=AsyncMock) as mock_pin_ls:
|
||||
with patch("routers.documents.ipfs_pin_ls", new_callable=AsyncMock) as mock_pin_ls:
|
||||
mock_pin_ls.return_value = ["QmCid1", "QmCid2"]
|
||||
|
||||
with patch("main.ipfs_cat", new_callable=AsyncMock) as mock_cat:
|
||||
with patch("routers.documents.ipfs_cat", new_callable=AsyncMock) as mock_cat:
|
||||
mock_cat.return_value = json.dumps(package).encode()
|
||||
|
||||
response = client.get(
|
||||
@@ -293,7 +293,7 @@ class TestDocumentDeletion:
|
||||
|
||||
def test_unpin_document_success(self, valid_auth_header):
|
||||
"""Test: Dokument erfolgreich unpinnen"""
|
||||
with patch("main.httpx.AsyncClient") as mock_client:
|
||||
with patch("routers.documents.httpx.AsyncClient") as mock_client:
|
||||
mock_instance = AsyncMock()
|
||||
mock_instance.post.return_value = MagicMock(status_code=200)
|
||||
mock_client.return_value.__aenter__.return_value = mock_instance
|
||||
@@ -310,7 +310,7 @@ class TestDocumentDeletion:
|
||||
|
||||
def test_unpin_document_not_found(self, valid_auth_header):
|
||||
"""Test: Nicht existierendes Dokument unpinnen"""
|
||||
with patch("main.httpx.AsyncClient") as mock_client:
|
||||
with patch("routers.documents.httpx.AsyncClient") as mock_client:
|
||||
mock_instance = AsyncMock()
|
||||
mock_instance.post.return_value = MagicMock(status_code=404)
|
||||
mock_client.return_value.__aenter__.return_value = mock_instance
|
||||
@@ -330,7 +330,7 @@ class TestLegalDocumentArchive:
|
||||
|
||||
def test_archive_legal_document_success(self, valid_auth_header, mock_ipfs_response):
|
||||
"""Test: Legal Document erfolgreich archivieren"""
|
||||
with patch("main.ipfs_add", new_callable=AsyncMock) as mock_add:
|
||||
with patch("routers.documents.ipfs_add", new_callable=AsyncMock) as mock_add:
|
||||
mock_add.return_value = mock_ipfs_response
|
||||
|
||||
response = client.post(
|
||||
@@ -357,7 +357,7 @@ class TestLegalDocumentArchive:
|
||||
content = "<h1>Test Content</h1>"
|
||||
expected_checksum = hashlib.sha256(content.encode('utf-8')).hexdigest()
|
||||
|
||||
with patch("main.ipfs_add", new_callable=AsyncMock) as mock_add:
|
||||
with patch("routers.documents.ipfs_add", new_callable=AsyncMock) as mock_add:
|
||||
mock_add.return_value = mock_ipfs_response
|
||||
|
||||
response = client.post(
|
||||
@@ -393,7 +393,7 @@ class TestDocumentVerification:
|
||||
"content": content
|
||||
}
|
||||
|
||||
with patch("main.ipfs_cat", new_callable=AsyncMock) as mock_cat:
|
||||
with patch("routers.node.ipfs_cat", new_callable=AsyncMock) as mock_cat:
|
||||
mock_cat.return_value = json.dumps(package).encode()
|
||||
|
||||
response = client.get("/api/v1/verify/QmTestCid123")
|
||||
@@ -415,7 +415,7 @@ class TestDocumentVerification:
|
||||
"content": "Actual content"
|
||||
}
|
||||
|
||||
with patch("main.ipfs_cat", new_callable=AsyncMock) as mock_cat:
|
||||
with patch("routers.node.ipfs_cat", new_callable=AsyncMock) as mock_cat:
|
||||
mock_cat.return_value = json.dumps(package).encode()
|
||||
|
||||
response = client.get("/api/v1/verify/QmTestCid123")
|
||||
@@ -427,7 +427,7 @@ class TestDocumentVerification:
|
||||
|
||||
def test_verify_document_not_found(self):
|
||||
"""Test: Nicht existierendes Dokument verifizieren"""
|
||||
with patch("main.ipfs_cat", new_callable=AsyncMock) as mock_cat:
|
||||
with patch("routers.node.ipfs_cat", new_callable=AsyncMock) as mock_cat:
|
||||
mock_cat.side_effect = Exception("Not found")
|
||||
|
||||
response = client.get("/api/v1/verify/QmNonExistent")
|
||||
@@ -444,7 +444,7 @@ class TestDocumentVerification:
|
||||
"content": "test"
|
||||
}
|
||||
|
||||
with patch("main.ipfs_cat", new_callable=AsyncMock) as mock_cat:
|
||||
with patch("routers.node.ipfs_cat", new_callable=AsyncMock) as mock_cat:
|
||||
mock_cat.return_value = json.dumps(package).encode()
|
||||
|
||||
# Kein Authorization Header!
|
||||
@@ -472,7 +472,7 @@ class TestNodeInfo:
|
||||
"NumObjects": 42
|
||||
}
|
||||
|
||||
with patch("main.httpx.AsyncClient") as mock_client:
|
||||
with patch("routers.node.httpx.AsyncClient") as mock_client:
|
||||
mock_instance = AsyncMock()
|
||||
|
||||
async def mock_post(url, **kwargs):
|
||||
@@ -497,7 +497,7 @@ class TestNodeInfo:
|
||||
|
||||
def test_get_node_info_public_access(self):
|
||||
"""Test: Node-Info ist öffentlich zugänglich"""
|
||||
with patch("main.httpx.AsyncClient") as mock_client:
|
||||
with patch("routers.node.httpx.AsyncClient") as mock_client:
|
||||
mock_instance = AsyncMock()
|
||||
mock_instance.post.return_value = MagicMock(
|
||||
status_code=200,
|
||||
|
||||
Reference in New Issue
Block a user