fix(dev_tools): resolve architecture validator warnings
Some checks failed
CI / ruff (push) Successful in 10s
CI / validate (push) Has been cancelled
CI / dependency-scanning (push) Has been cancelled
CI / docs (push) Has been cancelled
CI / deploy (push) Has been cancelled
CI / pytest (push) Has been cancelled

- Replace console.error with centralized transLog logger (JS-001)
- Add try/catch to saveEdit in translation editor (JS-006)
- Replace inline SVG with $icon() helper in platform-debug (FE-002)
- Add noqa comments for intentional broad exception and unscoped query (EXC-003, SVC-005)
- Add unit tests for sql_query_service validation (MOD-024)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-11 23:15:10 +01:00
parent b3224ba13d
commit 44acf5e442
4 changed files with 64 additions and 8 deletions

View File

@@ -0,0 +1,55 @@
"""Unit tests for sql_query_service."""
import pytest
from app.modules.dev_tools.services.sql_query_service import (
QueryValidationError,
validate_query,
)
@pytest.mark.unit
@pytest.mark.dev
class TestValidateQuery:
"""Tests for the validate_query function."""
def test_select_allowed(self):
validate_query("SELECT * FROM users")
def test_empty_query_rejected(self):
with pytest.raises(QueryValidationError, match="empty"):
validate_query("")
def test_insert_rejected(self):
with pytest.raises(QueryValidationError, match="INSERT"):
validate_query("INSERT INTO users (email) VALUES ('a@b.com')")
def test_update_rejected(self):
with pytest.raises(QueryValidationError, match="UPDATE"):
validate_query("UPDATE users SET email = 'x' WHERE id = 1")
def test_delete_rejected(self):
with pytest.raises(QueryValidationError, match="DELETE"):
validate_query("DELETE FROM users WHERE id = 1")
def test_drop_rejected(self):
with pytest.raises(QueryValidationError, match="DROP"):
validate_query("DROP TABLE users")
def test_alter_rejected(self):
with pytest.raises(QueryValidationError, match="ALTER"):
validate_query("ALTER TABLE users ADD COLUMN foo TEXT")
def test_truncate_rejected(self):
with pytest.raises(QueryValidationError, match="TRUNCATE"):
validate_query("TRUNCATE users")
def test_comment_hiding_rejected(self):
"""Forbidden keywords hidden inside comments are stripped first."""
validate_query("SELECT 1 -- DROP TABLE users")
def test_block_comment_hiding_rejected(self):
validate_query("SELECT /* DELETE FROM users */ 1")
def test_select_with_where(self):
validate_query("SELECT id, email FROM users WHERE is_active = true")